@flatbiz/antd 4.0.12 → 4.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/hooks/use-theme.ts","@flatbiz/antd/src/config-provider-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/types/index.ts","@flatbiz/antd/src/_utils/time.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { ConfigProvider } from 'antd';\nimport { ConfigProviderProps } from 'antd/es/config-provider';\nimport enUS from 'antd/locale/en_US';\nimport zhCN from 'antd/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/zh-cn';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport weekYear from 'dayjs/plugin/weekYear';\nimport { useEffectCustom } from '../hooks';\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekYear);\ndayjs.extend(dayjsUtc);\n\nexport type ConfigProviderWrapperProps = Omit<ConfigProviderProps, 'locale'> & {\n locale?: 'en' | 'zh-cn';\n};\n\nexport const ConfigProviderWrapper = (props: ConfigProviderWrapperProps) => {\n const { locale, ...otherProps } = props;\n\n useEffectCustom(() => {\n dayjs.locale((props.locale as unknown as string) || 'zh-cn');\n }, []);\n return (\n <ConfigProvider\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...otherProps}\n locale={locale === 'en' ? enUS : zhCN}\n >\n {props.children}\n </ConfigProvider>\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setOpen(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setOpen(false);\n setLoading(false);\n });\n return;\n }\n setOpen(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <ButtonWrapper\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setOpen(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={open}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setOpen(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n\n return cloneState(filterList).map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n >\n <DefaultButton\n {...otherProps}\n onClick={undefined}\n type={type}\n danger\n style={style}\n color={color}\n >\n {text}\n </DefaultButton>\n </Popconfirm>\n );\n }\n return (\n <DefaultButton\n {...otherProps}\n type={type}\n style={style}\n key={index}\n onClick={onClick}\n color={color}\n >\n {text}\n </DefaultButton>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n <ButtonWrapper {...props}>{props.children}</ButtonWrapper>\n </ConfigProviderWrapper>\n );\n }\n return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\nimport './style.less';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","export type FormItemNamePath = string | number | Array<string | number>;\n\nexport enum DayjsDateTypeEnum {\n YMDHms = 'YYYY-MM-DD HH:mm:ss',\n YMDHm = 'YYYY-MM-DD HH:mm',\n YMDH = 'YYYY-MM-DD HH',\n YMD = 'YYYY-MM-DD',\n}\n\nexport enum DayjsTimeTypeEnum {\n Hms = 'HH:mm:ss',\n Hm = 'HH:mm',\n H = 'HH',\n ms = 'mm:ss',\n m = 'mm',\n s = 'ss',\n}\n","import { Dayjs } from 'dayjs';\nimport { DayjsDateTypeEnum } from '../types';\n\nconst range = (start: number, end: number) => {\n const result: number[] = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\nexport const getDisabledHour = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledHourList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeHour = 0;\n let maxTimeHour = 23;\n\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n minTimeHour = options.minDateTime.get('hour');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n maxTimeHour = options.maxDateTime.get('hour');\n }\n let selectableMinute = range(minTimeHour, maxTimeHour);\n if (options.disabledHourList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledHourList?.includes(item));\n }\n return range(0, 23).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledMinute = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledMinuteList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeMinute = 0;\n let maxTimeMinute = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n minTimeMinute = options.minDateTime.get('minute');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n maxTimeMinute = options.maxDateTime.get('minute');\n }\n let selectableMinute = range(minTimeMinute, maxTimeMinute);\n if (options.disabledMinuteList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledMinuteList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledSecond = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledSecondList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeSecond = 0;\n let maxTimeSecond = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n minTimeSecond = options.minDateTime.get('second');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n maxTimeSecond = options.maxDateTime.get('second');\n }\n let selectableMinute = range(minTimeSecond, maxTimeSecond);\n if (options.disabledSecondList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledSecondList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:DayjsDateTypeEnum\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n\n format?: DayjsDateTypeEnum;\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型 DayjsDateTypeEnum.YMDHms;其他格式化类型自定义format\n * 4. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 5. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current: dayjs.Dayjs) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || datePickerValue || dayjs(new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate' | 'format'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:DayjsDateTypeEnum\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsDateTypeEnum;\n};\n\ntype RangeValue = [Dayjs | null, Dayjs | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss;其他格式化类型自定义format\n * 4. 可设置disabledDateConfig,来控制日期项的disbaled状态\n * 5. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 6. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { maxDays, minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime === true) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || dayjs(date1 || new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker.RangePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val as RangeValue)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { FormItemNamePath } from '../types';\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading' | 'hidden'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'hidden'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {okHidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {cancelHidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal, theme } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n const { token } = theme.useToken();\n const colorPrimary = token.colorPrimary;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': colorPrimary } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.open = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, setInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, seInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n seInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n | 'mode'\n> & {\n /** 不支持 tags 模式,tags模式请使用antd Select 组件 */\n mode?: 'multiple';\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = useMemo(() => serviceConfig?.params || {}, [serviceConfig?.params]);\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n tableRowIndex: props.tableRowIndex,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties } from 'react';\nimport './style.less';\nimport { varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n // templates: [\n // editorTemplates.block,\n // editorTemplates.primary_p,\n // editorTemplates.secondary_p,\n // editorTemplates.warning_p,\n // editorTemplates.danger_p,\n // editorTemplates.success_p,\n // editorTemplates.p,\n // ],\n // template_replace_values: {\n // varStyle: varStyleString,\n // },\n // template_preview_replace_values: {\n // varStyle: varStyleString,\n // },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport { useThemeToken } from '../../hooks';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n const theme = useThemeToken();\n\n const style = { '--form-item-group-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={{ ...style, ...props.style }}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeModal() {\n return (state) => {\n state.open = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { Result } from 'antd';\n\nexport type Page404Props = {\n message?: string;\n};\n\nexport const Page404 = (props: Page404Props) => {\n return <Result status=\"404\" title=\"404\" subTitle={props.message} />;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const theme = useThemeToken();\n const style = extend({ '--simple-layout-colorPrimary': theme.colorPrimary }, props.style, {\n padding: props.padding,\n width: props.width,\n });\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagWrapperValue = string | number | boolean;\nexport type TagWrapperDataItem = { label: string; value: TagWrapperValue; color?: string };\nexport type TagWrapperColorItem = { label: string; value: TagWrapperValue };\n\nexport type TagWrapperProps = {\n dataList: TagWrapperDataItem[];\n /**\n * 颜色配置数据,value为code、label为色值,例如:{ 1:'red', 2: 'blue'}\n */\n colorMap?: Record<string, string>;\n value?: TagWrapperValue;\n // 是否强制匹配,默认值false\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['dataList'],\n colorMap?: TagWrapperProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagWrapper dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容 */\n extra: ReactElement;\n onClick?: (e) => void;\n // 是否显示数据\n showData?: boolean;\n // 显示最大长度,多余省略\n showMaxNumber?: number;\n extraPosition?: 'before' | 'after';\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n if (options.extra && showData) {\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n if (options.extra) {\n return options.extra;\n }\n return <span onClick={options.onClick}>{value}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示数据,默认值:true\n * 3. onClick 点击事件,showData != false 有效\n * 4. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * 1. minTime、maxTime设置为 DayjsTimeTypeEnum,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, format, ...otherProps } = props;\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const customFormat = format || DayjsTimeTypeEnum.Hms;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n onChange?.(timeString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value) {\n return dayjs(value, customFormat);\n }\n return undefined;\n }, [customFormat, props.value]);\n\n const getDisabledTime: TimePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n const showNow = useMemo(() => {\n const now = dayjs();\n return (\n now.isSameOrAfter(dayjs(minTime || '00:00:00', customFormat)) &&\n now.isSameOrBefore(dayjs(maxTime || '23:59:59', customFormat))\n );\n }, [customFormat, maxTime, minTime]);\n\n return (\n <TimePicker\n showNow={showNow}\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={customFormat}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minTime、maxTime设置格式,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n// export declare type EventValue<DateType> = DateType | null;\n// export declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss,其他格式化类型自定义format\n * 4. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, ...otherProps } = props;\n\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const format = useMemo(() => {\n return props.format || DayjsTimeTypeEnum.Hms;\n }, [props.format]);\n\n const onChangeTime = hooks.useCallbackRef((date, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n onChange?.([timeStart, timeEnd]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value && value.length > 0) {\n return [\n value[0] ? dayjs(value[0], format) : value[0],\n value[1] ? dayjs(value[1], format) : value[1],\n ] as [Dayjs, Dayjs];\n }\n return undefined;\n }, [props.value, format]);\n\n const getDisabledTime: TimeRangePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n return (\n <TimePicker.RangePicker\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <TimeRangePickerWrapper {...timeRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","hidden","jsx","Button","_extends","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","useThemeToken","theme","useToken","token","dayjs","extend","customParseFormat","advancedFormat","weekday","localeData","weekOfYear","weekYear","dayjsUtc","ConfigProviderWrapper","locale","otherProps","_excluded","ConfigProvider","componentSize","space","size","enUS","zhCN","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","open","setOpen","_useState2","onConfirmtTriggerClick","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","text","color","permission","needConfirm","confirmMessage","type","style","popconfirmProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperate","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","cloneState","map","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","components","defaultProps","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","concat","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","popupClassName","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","cloneElement","DayjsDateTypeEnum","DayjsTimeTypeEnum","range","start","end","i","getDisabledHour","_options$minDateTime","_options$maxDateTime","minTimeHour","maxTimeHour","minDateTime","format","YMD","get","maxDateTime","selectableMinute","disabledHourList","_options$disabledHour","getDisabledMinute","_options$minDateTime2","_options$maxDateTime2","minTimeMinute","maxTimeMinute","YMDH","disabledMinuteList","_options$disabledMinu","getDisabledSecond","_options$minDateTime3","_options$maxDateTime3","minTimeSecond","maxTimeSecond","YMDHm","disabledSecondList","_options$disabledSeco","DatePickerWrapper","_ref","disabledDateConfig","minDate","maxDate","minDateTimeDayInst","maxDateTimeDayInst","customFormat","showTime","YMDHms","onChangeDate","date","dateString","getDisabledDate","currentDate","flatbizDate","in","gte","datePickerValue","dateNormalize","getDisabledTime","Date","disabledHours","disabledMinutes","disabledSeconds","DatePicker","disabledDate","disabledTime","width","DateRangePickerWrapper","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref2","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","cancelButtonProps","content","configProviderProps","okHidden","cancelHidden","footer","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","operateGroup","footerNew","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","inputValueRef","isFirstUseValueRef","inputKey","setInputKey","nativeEvent","onCompositionEnd","defaultValue","InputSearchWrapper","defaultSearchInputKey","setDefaultSearchInputKey","Search","InputTextAreaWrapper","seInputKey","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","EditorWrapper","_","editor","getContent","respValue","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","modalModels","createModalWrapperModel","PageFixedFooter","Page404","Result","subTitle","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","onPreChange","$If_1","this","isCancel","checked","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","setDataSource","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","desc","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagWrapper","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","isSameOrBefore","isSameOrAfter","TimePickerWrapper","disabledTimeConfig","minTime","maxTime","Hms","onChangeTime","time","timeString","timePickerValue","hour","minute","showNow","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","list","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","log","expandedKeys","getTreeExpandedKeys","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","treeSelectValue","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/01-styles/index.ts","@flatbiz/antd/src/permission/index.tsx","@flatbiz/antd/src/button-wrapper/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-previous.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/hooks/use-theme.ts","@flatbiz/antd/src/config-provider-wrapper/index.tsx","@flatbiz/antd/src/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.tsx","@flatbiz/antd/src/css-node-hover/index.tsx","@flatbiz/antd/src/types/index.ts","@flatbiz/antd/src/_utils/time.tsx","@flatbiz/antd/src/date-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper/index.tsx","@flatbiz/antd/src/date-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/dialog/utils.ts","@flatbiz/antd/src/dialog/modal.tsx","@flatbiz/antd/src/dialog/confirm.tsx","@flatbiz/antd/src/dialog/alert.tsx","@flatbiz/antd/src/dialog/drawer.tsx","@flatbiz/antd/src/dialog/loading.tsx","@flatbiz/antd/src/drawer-wrapper/drawer.model.ts","@flatbiz/antd/src/drawer-wrapper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wrapper/drawer-wrapper.tsx","@flatbiz/antd/src/drawer-wrapper/index.ts","@flatbiz/antd/src/editable-table/utils.ts","@flatbiz/antd/src/editable-table/form-item/checkbox-group.tsx","@flatbiz/antd/src/editable-table/form-item/date-picker-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/date-range-picker-wrapper.tsx","@flatbiz/antd/src/input-wrapper/input.tsx","@flatbiz/antd/src/input-wrapper/search.tsx","@flatbiz/antd/src/input-wrapper/textarea.tsx","@flatbiz/antd/src/editable-table/form-item/input.tsx","@flatbiz/antd/src/editable-table/form-item/input-number.tsx","@flatbiz/antd/src/editable-table/form-item/radio-group.tsx","@flatbiz/antd/src/selector-wrapper/model.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/selector-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/text.tsx","@flatbiz/antd/src/editable-table/form-item/textarea.tsx","@flatbiz/antd/src/upload-wrapper/index.tsx","@flatbiz/antd/src/editable-table/form-item/upload-wrapper.tsx","@flatbiz/antd/src/editable-table/form-item/index.tsx","@flatbiz/antd/src/editable-table/form-list-item/form-list.tsx","@flatbiz/antd/src/editable-table/form-list-item/index.tsx","@flatbiz/antd/src/editable-table/index.tsx","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/flex-layout/index.tsx","@flatbiz/antd/src/form-grid/form-col.tsx","@flatbiz/antd/src/form-grid/form-operate-col.tsx","@flatbiz/antd/src/hooks/use-responsive-point.ts","@flatbiz/antd/src/form-grid/utils.ts","@flatbiz/antd/src/form-grid/form-row.tsx","@flatbiz/antd/src/form-item-group/card/index.tsx","@flatbiz/antd/src/form-item-group/horizontal-union/index.tsx","@flatbiz/antd/src/form-item-group/index.tsx","@flatbiz/antd/src/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wrapper/modal.model.ts","@flatbiz/antd/src/modal-wrapper/modal-operation.tsx","@flatbiz/antd/src/modal-wrapper/modal-wrapper.tsx","@flatbiz/antd/src/modal-wrapper/index.ts","@flatbiz/antd/src/page-fixed-footer/index.tsx","@flatbiz/antd/src/page404/index.tsx","@flatbiz/antd/src/pre-defined-classname/form/index.tsx","@flatbiz/antd/src/pre-defined-classname/index.ts","@flatbiz/antd/src/radio-group-wrapper/index.tsx","@flatbiz/antd/src/relation/compts/relation.tsx","@flatbiz/antd/src/relation/compts/relation-group-list.tsx","@flatbiz/antd/src/relation/compts/relation-item.tsx","@flatbiz/antd/src/relation/utils.ts","@flatbiz/antd/src/relation/relation-tree.tsx","@flatbiz/antd/src/rule-describe/index.tsx","@flatbiz/antd/src/selector-wrapper-simple/index.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/switch-wrapper/index.tsx","@flatbiz/antd/src/tag-wrapper/index.tsx","@flatbiz/antd/src/table/cell-render.tsx","@flatbiz/antd/src/table/title-render.tsx","@flatbiz/antd/src/tabs-wrapper/index.tsx","@flatbiz/antd/src/time-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper/index.tsx","@flatbiz/antd/src/time-range-picker-wrapper-form-item/index.tsx","@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/index.tsx","@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/index.tsx"],"sourcesContent":["import { noop } from '@flatbiz/utils';\nimport './base.less';\n\nexport const styles = noop;\n","import { isArray } from '@dimjs/lang';\nimport { getGlobalData } from '@flatbiz/utils';\nimport { Fragment, ReactNode } from 'react';\n\nexport const getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nexport const hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nexport interface PermissionProps {\n name?: string;\n children?: ReactNode | ReactNode[];\n}\nexport const Permission = (props: PermissionProps) => {\n const permissionList = getPermissionList();\n if (!props.name || permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { useState } from 'react';\nimport { hasPermission } from '../permission';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const [loading, setLoading] = useState(false);\n\n const debounceDuration = isUndefinedOrNull(props.debounceDuration) ? 500 : props.debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDuration);\n\n if (!hasPermission(props.name)) {\n return null;\n }\n\n if (props.hidden) {\n return null;\n }\n\n return (\n <Button {...props} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n );\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { ConfigProvider } from 'antd';\nimport { ConfigProviderProps } from 'antd/es/config-provider';\nimport enUS from 'antd/locale/en_US';\nimport zhCN from 'antd/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en';\nimport 'dayjs/locale/zh-cn';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport weekday from 'dayjs/plugin/weekday';\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\nimport weekYear from 'dayjs/plugin/weekYear';\nimport { useEffectCustom } from '../hooks';\ndayjs.extend(customParseFormat);\ndayjs.extend(advancedFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\ndayjs.extend(weekOfYear);\ndayjs.extend(weekYear);\ndayjs.extend(dayjsUtc);\n\nexport type ConfigProviderWrapperProps = Omit<ConfigProviderProps, 'locale'> & {\n locale?: 'en' | 'zh-cn';\n};\n\nexport const ConfigProviderWrapper = (props: ConfigProviderWrapperProps) => {\n const { locale, ...otherProps } = props;\n\n useEffectCustom(() => {\n dayjs.locale((props.locale as unknown as string) || 'zh-cn');\n }, []);\n return (\n <ConfigProvider\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...otherProps}\n locale={locale === 'en' ? enUS : zhCN}\n >\n {props.children}\n </ConfigProvider>\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface DropdownMenuItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n}\n\nexport interface DropdownMenuWrapperProps extends Omit<DropdownProps, 'menu'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setOpen(true);\n });\n\n const onConfirm = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n result.finally(() => {\n setOpen(false);\n setLoading(false);\n });\n return;\n }\n setOpen(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n return item.onClick?.(event);\n });\n\n menuList.forEach((item, index) => {\n if (!item) return;\n const {\n text,\n color,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n type,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return;\n if (permission && !hasPermission(permission)) return;\n const newStyle = color ? { color, ...style } : style;\n const buttonType = type || 'link';\n const nromal = {\n key: index,\n label: (\n <ButtonWrapper\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </ButtonWrapper>\n ),\n };\n const confirm = {\n key: index,\n label: (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n onCancel={(event) => {\n event?.stopPropagation();\n setOpen(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n open={open}\n okButtonProps={{\n loading,\n }}\n >\n <Button\n size=\"small\"\n {...otherProps}\n onClick={onConfirmtTriggerClick}\n type={buttonType}\n danger\n style={newStyle}\n >\n {text}\n </Button>\n </Popconfirm>\n ),\n };\n if (needConfirm && !otherProps.disabled) {\n menuItems.push(confirm);\n } else {\n menuItems.push(nromal);\n }\n });\n\n return (\n <Dropdown\n trigger={dropdownOtherProps?.trigger || ['hover']}\n arrow={{ pointAtCenter: true }}\n {...dropdownOtherProps}\n overlayStyle={{ zIndex: 9, ...dropdownOtherProps.overlayStyle }}\n menu={{ items: menuItems }}\n onOpenChange={(_open) => {\n if (!_open) {\n setOpen(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPlainObject, isPromise, isString, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { hasPermission } from '../permission';\nimport './style.less';\n\nexport interface ButtonOperateItem extends ButtonProps {\n text: string | ReactElement;\n color?: string;\n onClick: (event: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n permission?: string;\n needConfirm?: boolean;\n confirmMessage?: string;\n hidden?: boolean;\n popconfirmProps?: Pick<PopconfirmProps, 'placement' | 'okText' | 'cancelText' | 'trigger'>;\n isFold?: boolean;\n}\n\nexport interface ButtonOperateProps {\n /**\n * 如果数组中使用ReactElement类型\n * 1. 一般为antd Button组件,如果组件存在属性hidden=true,则会隐藏\n * 2. 可配置 v-permission 权限值,例如 v-permission=\"add\"\n * 3. 任何confirm、disabled等状态在外部控制\n * 3. 不支持fold效果\n */\n operateList: Array<ButtonOperateItem | null | ReactElement>;\n wrap?: boolean;\n size?: SpaceProps['size'];\n foldIcon?: ReactElement;\n className?: string;\n split?: boolean;\n}\n\nexport const ButtonOperate: FC<ButtonOperateProps> = (props) => {\n console.log('props', props);\n const [loading, setLoading] = useState(false);\n\n const onConfirm = hooks.useCallbackRef((item: ButtonOperateItem, event) => {\n const result = item.onClick?.(event);\n if (result && isPromise(result)) {\n setLoading(true);\n return result.finally(() => {\n setLoading(false);\n });\n }\n return;\n });\n\n const operateList = props.operateList.filter((item) => {\n if (!item) return false;\n if (isValidElement(item)) {\n if (item.props?.['hidden'] === true) return false;\n const permission = item.props?.['v-permission'];\n if (isString(permission)) {\n return hasPermission(permission);\n }\n return true;\n }\n if (isPlainObject(item)) {\n if (!hasPermission(item.permission)) {\n return false;\n }\n return !item.hidden;\n }\n return false;\n }) as Array<ButtonOperateItem | ReactElement>;\n\n const viewList = useMemo(() => {\n return operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n return !item.isFold;\n }) as ButtonOperateItem[];\n }, [operateList]);\n\n const foldList = useMemo(() => {\n const filterList = operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n return item.isFold;\n }) as ButtonOperateItem[];\n const result = [] as ButtonOperateItem[];\n filterList.forEach((item) => {\n const target = { ...item };\n // 多余字段渲染到react dom上,出现警告\n delete target.isFold;\n result.push(target);\n });\n return result;\n }, [operateList]);\n\n const size = !props.split ? toArray<number>(props.size)[0] || 10 : 0;\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={props.split ? <Divider type=\"vertical\" /> : null}\n size={size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const { text, color, onClick, needConfirm, confirmMessage, style, popconfirmProps, ...otherProps } =\n item;\n const type = item.type || 'link';\n if (needConfirm && !otherProps.disabled) {\n return (\n <Popconfirm\n okText=\"确定\"\n cancelText=\"取消\"\n trigger={['click']}\n placement=\"topRight\"\n arrowPointAtCenter={true}\n destroyTooltipOnHide={true}\n {...popconfirmProps}\n title={confirmMessage}\n onConfirm={onConfirm.bind(null, item)}\n key={index}\n okButtonProps={{\n loading,\n }}\n onOpenChange={(_open) => {\n if (!_open) {\n setLoading(false);\n }\n }}\n >\n <DefaultButton\n {...otherProps}\n onClick={undefined}\n type={type}\n danger\n style={style}\n color={color}\n >\n {text}\n </DefaultButton>\n </Popconfirm>\n );\n }\n return (\n <DefaultButton\n {...otherProps}\n type={type}\n style={style}\n key={index}\n onClick={onClick}\n color={color}\n >\n {text}\n </DefaultButton>\n );\n })}\n {foldList.length > 0 ? (\n <DropdownMenuWrapper menuList={foldList}>\n <Button type=\"link\" className=\"fold-more-button\">\n {props.foldIcon ? props.foldIcon : <MoreOutlined />}\n </Button>\n </DropdownMenuWrapper>\n ) : null}\n </Space>\n </div>\n );\n};\n\nconst DefaultButton = (props) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n <ButtonWrapper {...props}>{props.children}</ButtonWrapper>\n </ConfigProviderWrapper>\n );\n }\n return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;\n};\n\nButtonOperate.defaultProps = {\n size: 0,\n split: true,\n};\n","import { extend } from '@dimjs/utils';\nimport { valueIsEqual } from '@flatbiz/utils';\nimport { Empty, Spin } from 'antd';\nimport { ReactElement, useMemo } from 'react';\nimport './style.less';\n\nexport type RequestStatus =\n | 'request-init'\n | 'request-progress'\n | 'request-success'\n | 'request-error'\n | 'no-dependencies-params';\nexport type RequestStatusRenderProps = {\n status?: RequestStatus;\n errorButton?: ReactElement;\n messageConfig?: Partial<Record<RequestStatus, string>>;\n loading?: boolean;\n};\nexport const RequestStatusRender = (props: RequestStatusRenderProps) => {\n const messageConfig = extend(\n {\n 'request-success': '暂无数据',\n 'request-progress': '数据查询中',\n 'request-error': '数据查询异常',\n 'request-init': '暂无数据',\n 'no-dependencies-params': '未获取到依赖查询条件',\n },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, [\n 'request-success',\n 'request-progress',\n 'request-error',\n 'no-dependencies-params',\n ])\n ) {\n return messageConfig[props.status];\n }\n return messageConfig['request-init'];\n }, [messageConfig, props.status]);\n return (\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={description} className={'v-request-status'}>\n <Spin spinning={props.loading || false}></Spin>\n {props.status === 'request-error' && props.errorButton}\n </Empty>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\nimport './style.less';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<any>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<any[]>([]);\n\n const newServiceConfig = serviceConfig || {};\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData) as any[];\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: any[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await newServiceConfig.onRequest?.({\n ...newServiceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, Fragment, ReactElement, ReactNode } from 'react';\nimport { CommonPropsWithChildren } from '../_utils/native-props';\nimport './style.less';\n\nexport type CssHoverProps = {\n children: ReactElement;\n} & Pick<\n CommonPropsWithChildren<{\n '--v-css-hover-bgcolor': CSSProperties['backgroundColor'];\n '--v-css-hover-opacity': CSSProperties['opacity'];\n }>,\n 'style' | 'children'\n>;\n/**\n * css hover 效果\n * ```\n * 1. 当children为数组时,会为children添加父级(会产生新节点)\n * 2. 当children为单个元素时,会在children元素上添加className、style(不会产生新节点)\n * ```\n * @param props\n * @returns\n */\nexport const CssNodeHover = (props: CssHoverProps) => {\n const children = toArray<ReactNode>(props.children);\n if (children.length > 1) {\n return (\n <div className=\"v-css-hover\" style={props.style}>\n {children}\n </div>\n );\n }\n\n return (\n <Fragment>\n {cloneElement(props.children, {\n className: classNames('v-css-hover', props.children.props.className),\n style: { ...props.style, ...props.children.props.style },\n })}\n </Fragment>\n );\n};\n","export type FormItemNamePath = string | number | Array<string | number>;\n\nexport enum DayjsDateTypeEnum {\n YMDHms = 'YYYY-MM-DD HH:mm:ss',\n YMDHm = 'YYYY-MM-DD HH:mm',\n YMDH = 'YYYY-MM-DD HH',\n YMD = 'YYYY-MM-DD',\n}\n\nexport enum DayjsTimeTypeEnum {\n Hms = 'HH:mm:ss',\n Hm = 'HH:mm',\n H = 'HH',\n ms = 'mm:ss',\n m = 'mm',\n s = 'ss',\n}\n","import { Dayjs } from 'dayjs';\nimport { DayjsDateTypeEnum } from '../types';\n\nconst range = (start: number, end: number) => {\n const result: number[] = [];\n for (let i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\nexport const getDisabledHour = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledHourList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeHour = 0;\n let maxTimeHour = 23;\n\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n minTimeHour = options.minDateTime.get('hour');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMD) === current.format(DayjsDateTypeEnum.YMD)) {\n maxTimeHour = options.maxDateTime.get('hour');\n }\n let selectableMinute = range(minTimeHour, maxTimeHour);\n if (options.disabledHourList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledHourList?.includes(item));\n }\n return range(0, 23).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledMinute = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledMinuteList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeMinute = 0;\n let maxTimeMinute = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n minTimeMinute = options.minDateTime.get('minute');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDH) === current.format(DayjsDateTypeEnum.YMDH)) {\n maxTimeMinute = options.maxDateTime.get('minute');\n }\n let selectableMinute = range(minTimeMinute, maxTimeMinute);\n if (options.disabledMinuteList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledMinuteList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n\nexport const getDisabledSecond = (\n current?: Dayjs,\n options?: {\n minDateTime?: Dayjs;\n maxDateTime?: Dayjs;\n disabledSecondList?: number[];\n },\n) => {\n if (!options || !current) return [];\n let minTimeSecond = 0;\n let maxTimeSecond = 59;\n if (options.minDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n minTimeSecond = options.minDateTime.get('second');\n }\n if (options.maxDateTime?.format(DayjsDateTypeEnum.YMDHm) === current.format(DayjsDateTypeEnum.YMDHm)) {\n maxTimeSecond = options.maxDateTime.get('second');\n }\n let selectableMinute = range(minTimeSecond, maxTimeSecond);\n if (options.disabledSecondList) {\n selectableMinute = selectableMinute.filter((item) => !options.disabledSecondList?.includes(item));\n }\n return range(0, 59).filter((item) => !selectableMinute.includes(item));\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport type { PickerDateProps } from 'antd/es/date-picker/generatePicker';\nimport dayjs from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<dayjs.Dayjs>, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:DayjsDateTypeEnum\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n\n format?: DayjsDateTypeEnum;\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型 DayjsDateTypeEnum.YMDHms;其他格式化类型自定义format\n * 4. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 5. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((date, dateString: string) => {\n if (date) {\n onChange?.(dateString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current: dayjs.Dayjs) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return dayjs(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || datePickerValue || dayjs(new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={datePickerValue}\n onChange={onChangeDate}\n />\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { RangePickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport type { Dayjs } from 'dayjs';\nimport dayjs from 'dayjs';\nimport { useMemo, useState } from 'react';\nimport { DayjsDateTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<Dayjs>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate' | 'format'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:DayjsDateTypeEnum\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsDateTypeEnum;\n};\n\ntype RangeValue = [Dayjs | null, Dayjs | null] | null;\n\n/**\n * DatePicker.RangePicker包装组件\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss;其他格式化类型自定义format\n * 4. 可设置disabledDateConfig,来控制日期项的disbaled状态\n * 5. 设置 disabledDate 后,disabledDateConfig配置将失效\n * 6. 设置 disabledTime 后,内置的disabledTime逻辑将失效\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format, ...otherProps } = props;\n const { maxDays, minDate, maxDate, disabledHourList, disabledMinuteList, disabledSecondList } =\n props.disabledDateConfig || {};\n const minDateTimeDayInst = minDate ? dayjs(minDate) : undefined;\n const maxDateTimeDayInst = maxDate ? dayjs(maxDate) : undefined;\n\n const [dates, setDates] = useState<RangeValue>(null);\n const [hackValue, setHackValue] = useState<RangeValue>(null);\n\n const [date1, date2] = value || [];\n const rangePickerValue = useMemo(() => {\n if (date1 && date2) {\n const newDate1 = flatbizDate.dateNormalize(date1);\n const newDate2 = flatbizDate.dateNormalize(date2);\n return [dayjs(newDate1), dayjs(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Dayjs, Dayjs];\n\n const customFormat = useMemo(() => {\n if (format) return format as string;\n if (props.showTime === true) return DayjsDateTypeEnum.YMDHms;\n return DayjsDateTypeEnum.YMD;\n }, [props.showTime, format]);\n\n const onChangeDate = hooks.useCallbackRef((dates, dateStrings) => {\n if (dates && dates[0] && dates[1]) {\n onChange?.(dateStrings);\n } else {\n onChange?.(undefined);\n }\n });\n\n const getDisabledDate = hooks.useCallbackRef((current) => {\n const currentDate = current.format(DayjsDateTypeEnum.YMD);\n if (!props.disabledDateConfig) {\n return false;\n }\n if (minDateTimeDayInst && maxDateTimeDayInst) {\n if (\n !flatbizDate.in(\n currentDate,\n minDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD),\n )\n ) {\n return true;\n }\n } else if (minDateTimeDayInst) {\n if (!flatbizDate.gte(currentDate, minDateTimeDayInst.format(DayjsDateTypeEnum.YMD))) {\n return true;\n }\n } else if (maxDateTimeDayInst) {\n if (!flatbizDate.gte(maxDateTimeDayInst.format(DayjsDateTypeEnum.YMD), currentDate)) {\n return true;\n }\n }\n\n if (!maxDays || (!dates?.[0] && !dates?.[1])) {\n return false;\n }\n\n const tooLate = dates?.[0] && current.diff(dates[0], 'days') > maxDays - 1;\n const tooEarly = dates?.[1] && dates[1].diff(current, 'days') > maxDays - 1;\n return !!tooEarly || !!tooLate;\n });\n\n const onOpenChange = (open: boolean) => {\n if (maxDays && maxDays > 0) {\n if (open) {\n setHackValue([null, null]);\n setDates([null, null]);\n } else {\n setHackValue(null);\n }\n }\n };\n\n const getDisabledTime = hooks.useCallbackRef((current) => {\n const options = {\n minDateTime: minDateTimeDayInst,\n maxDateTime: maxDateTimeDayInst,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n current = current || dayjs(date1 || new Date());\n return {\n disabledHours: () => {\n return getDisabledHour(current, options);\n },\n disabledMinutes: () => {\n return getDisabledMinute(current, options);\n },\n disabledSeconds: () => {\n return getDisabledSecond(current, options);\n },\n };\n });\n\n return (\n <DatePicker.RangePicker\n disabledDate={getDisabledDate}\n disabledTime={getDisabledTime}\n {...otherProps}\n format={customFormat}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val as RangeValue)}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { DateRangePickerWrapper, DateRangePickerWrapperProps } from '../date-range-picker-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { FormItemNamePath } from '../types';\n\nexport type DateRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 DateRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n dateRangePickerWrapperProps?: Omit<DateRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_date_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const DateRangePickerWrapperFormItem = (props: DateRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, dateRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_date_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_date_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <DateRangePickerWrapper {...dateRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","export const bodyAppendDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${Date.now()}`;\n div.setAttribute('id', id);\n document.body.append(div);\n return {\n divElement: div,\n elementId: id,\n };\n};\n\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n","import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps'\n> & {\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonProps, 'hidden' | 'children' | 'onClick'>;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const operateGroup = [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ];\n\n const footerNew = footer || operateGroup;\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n {...otherProps}\n className={classNames('v-dialog-modal', className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n footer={footerNew}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogModal.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogModal.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { dialogModal, DialogModalProps } from './modal';\nimport './style.less';\n\nexport const dialogConfirm = {\n open: (props: DialogModalProps) => {\n const className = classNames('v-dialog-confirm', props.className);\n return dialogModal.open({\n width: 350,\n okText: '确定',\n cancelText: '关闭',\n maskClosable: true,\n ...props,\n className,\n });\n },\n};\n","import { dialogConfirm } from './confirm';\nimport { DialogModalProps } from './modal';\nimport './style.less';\n\nexport type DialogAlertProps = Omit<\n DialogModalProps,\n 'onOk' | 'cancelHidden' | 'cancelButtonProps' | 'onCancel' | 'onClick'\n> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n};\n\nexport const dialogAlert = {\n open: (props: DialogAlertProps) => {\n return dialogConfirm.open({\n okText: '确定',\n cancelHidden: true,\n maskClosable: false,\n ...props,\n onOk: props.onClick,\n } as DialogModalProps);\n },\n};\n","import { isPromise, isString } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ButtonProps, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ReactElement, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'footer'\n> & {\n okText?: string | ReactElement;\n cancelText?: string | ReactElement;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading' | 'hidden'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'hidden'>;\n operatePosition?: 'header' | 'footer';\n operateRender?: (form: FormInstance) => ReactElement;\n okHidden?: boolean;\n cancelHidden?: boolean;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogDrawerProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n content,\n configProviderProps,\n okText,\n cancelText,\n okButtonExtraProps,\n cancelButtonExtraProps,\n operatePosition = 'footer',\n operateRender,\n width = 600,\n okHidden,\n cancelHidden,\n ...otherProps\n } = props;\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n {okHidden ? null : (\n <ButtonWrapper {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </ButtonWrapper>\n )}\n {cancelHidden ? null : (\n <ButtonWrapper type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle}>\n {okText || '提交'}\n </ButtonWrapper>\n )}\n </Space>\n );\n\n const operateRenderHandle = () => {\n if (operateRender) {\n return operateRender(form);\n }\n if (!okHidden || !cancelHidden) {\n return operateGroup;\n }\n return null;\n };\n\n return (\n <ConfigProviderWrapper {...configProviderProps}>\n <Drawer\n maskClosable={true}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n extra={operatePosition === 'header' ? operateRenderHandle() : null}\n footer={operatePosition === 'footer' ? operateRenderHandle() : null}\n {...otherProps}\n open={open}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProviderWrapper>\n );\n};\n\n/**\n * 函数式调用弹框;初始化后,内容无法更新\n *```\n * 1. 基础使用方式\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: <div>我是内容</div>,\n * });\n * ```\n * ```\n * ***************************\n * 2. 结合内置form使用,可在onOK、onCancel获取form对象\n * dialogDrawer.open({\n * title: '我是弹框',\n * content: (form, operate) => {\n * return (\n * <Form form={form}>\n * <Form.Item name=\"useName\">\n * <Input placeholder=\"请输入\" />\n * </Form.Item>\n * </Form>\n * );\n * },\n * onOK: (form) => {\n * console.log('content form数据', form.getFieldsValue());\n * return Promise.resolve();\n * },\n * });\n * 注意:\n * 1. 设置operateRender后,需要自定义操作按钮,onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_drawer_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogDrawer.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_drawer_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Modal, theme } from 'antd';\nimport { CSSProperties, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { useEffectCustom } from '../hooks';\nimport './loading.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogLoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogLoadingProps) => {\n const elementId = props.elementId;\n const { token } = theme.useToken();\n const colorPrimary = token.colorPrimary;\n\n const [open, setOpen] = useState(true);\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n });\n\n return (\n <Modal\n maskClosable={false}\n centered={true}\n destroyOnClose\n className={classNames('v-dialog-loading', props.className)}\n open={open}\n afterClose={onAfterClose}\n getContainer={props.divElement}\n footer={null}\n // width={120}\n closable={false}\n style={{ '--v-loading-color': colorPrimary } as CSSProperties}\n >\n <div className={classNames('v-dialog-loading-content')}>\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">{props.message || '处理中'}</div>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport const dialogLoading = {\n open: (props?: DialogLoadingProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n window['__dialog_loading_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_loading_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, any>;\n operateType: 'create' | 'update' | 'view' | null;\n pageLoading?: boolean;\n}\n\nexport interface DrawerActionsParamType {\n openDrawerForm: Pick<DrawerStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeDrawer: void;\n setDrawerItemData: Record<string, any>;\n}\n\n/**\n * @shared\n * 提供公共的drawer处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个drawer实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const DrawerModel: ModelType<DrawerStateType, DrawerActionsParamType> = {\n actions: {\n openDrawerForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.open = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const DrawerOperation = (props: DrawerOperationProps) => {\n return (\n <div className=\"fixed-bottom-block\">\n <Space size=\"middle\">\n <Button {...props.cancelButtonProps} className=\"cancel-btn\" onClick={props.onCancel}>\n {props.cancelText || '取消'}\n </Button>\n {props.hideOkBtn != true && (\n <Button\n type=\"primary\"\n icon={<SaveOutlined />}\n {...props.okButtonProps}\n className=\"ok-btn\"\n onClick={props.onOk}\n loading={props.loading}\n >\n {props.okText || '提交'}\n </Button>\n )}\n </Space>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Drawer, DrawerProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { DrawerOperation, DrawerOperationProps } from './drawer-operation';\nimport './style.less';\n\ntype DrawerWrapperStaticMethods = {\n Content: typeof DrawerWrapperContent;\n Footer: typeof DrawerWrapperFooter;\n};\n\nexport type DrawerWrapperProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n} & Omit<DrawerProps, 'footer'>;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst DrawerWrapperContent = (props: { operationProps?: DrawerOperationProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"drawer-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <DrawerWrapperFooter>\n <DrawerOperation {...props.operationProps} />\n </DrawerWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst DrawerWrapperFooter = (props) => {\n return <div className=\"drawer-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Drawer /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Drawer /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Drawer 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const DrawerWrapper: FC<DrawerWrapperProps> & DrawerWrapperStaticMethods = (props) => {\n const { pageLoading, className, width = 600, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('DrawerWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Drawer\n className={classNames('drawer-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={null}\n >\n {pageLoading && <PageLoader />}\n {children}\n </Drawer>\n );\n};\n\nDrawerWrapper.Content = DrawerWrapperContent;\nDrawerWrapper.Footer = DrawerWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { DrawerActionsParamType, DrawerModel, DrawerStateType } from './drawer.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst drawerModels: Record<string, API<ModelType<DrawerStateType, DrawerActionsParamType, any>>> = {};\n\n/**\n * drawer弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [drawerState, drawerActions] = createDrawerWrapperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWrapperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wrapper';\n","import { FieldSingleConfig } from './type';\n\nexport const getEditable = (editable: FieldSingleConfig['editable'], tableRowIndex: number) => {\n return typeof editable === 'boolean' ? editable : editable?.({ tableRowIndex });\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Checkbox, Form, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableCheckboxGroupConfig, EditableFormItemProps } from '../type';\n\ntype CheckboxGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst CheckboxGroupFormItemContent = (props: CheckboxGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableCheckboxGroupConfig).editableComptProps;\n const viewLabelList = useMemo(() => {\n if (editable) return [];\n const value = isArray(props.value) ? props.value : ([] as any[]);\n const options = (editableComptProps.options || []) as LabelValueItem[];\n if (!isArray(options) || options.length === 0) {\n return value.map((item) => ({ label: item, value: item }));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = options.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: item, value: item });\n });\n return returnList;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((value) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value);\n });\n\n if (editable) {\n return <Checkbox.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-checkbox-group-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n );\n};\n\nexport const CheckboxGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-checkbox-group-form-item', formItemProps?.className)}\n >\n <CheckboxGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { DatePickerWrapper } from '../../date-picker-wrapper';\nimport { EditableDatePickerWrapperConfig, EditableFormItemProps } from '../type';\n\nexport const DatePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-picker-wraper-form-item', formItemProps?.className)}\n >\n <DatePickerWrapper\n allowClear\n {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps}\n />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Form } from 'antd';\nimport { useMemo } from 'react';\nimport { DateRangePickerWrapper } from '../../date-range-picker-wrapper';\nimport { EditableDateRangePickerWrapperConfig, EditableFormItemProps } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableDateRangePickerWrapperConfig).editableComptProps;\n\n const onChange = hooks.useCallbackRef((data) => {\n props.onChange?.(data);\n editableComptProps?.onChange?.(data);\n });\n\n const viewLabel = useMemo(() => {\n const value = isArray(props.value) ? props.value : ([] as any[]);\n if (editable) return undefined;\n return value.join('~');\n }, [editable, props.value]);\n\n if (editable) {\n return (\n <DateRangePickerWrapper allowClear {...editableComptProps} value={props.value} onChange={onChange} />\n );\n }\n return <span className=\"editable-date-range-picker-view\">{render ? render(props.value) : viewLabel}</span>;\n};\n\nexport const DateRangePickerWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-date-range-picker-wraper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input, InputProps } from 'antd';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputWrapperProps = Omit<InputProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputWrapper = (props: InputWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, setInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Input } from 'antd';\nimport { SearchProps } from 'antd/lib/input';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputSearchWrapperProps = Omit<SearchProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputSearchWrapper = (props: InputSearchWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [defaultSearchInputKey, setDefaultSearchInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n setDefaultSearchInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Input } from 'antd';\nimport { TextAreaProps } from 'antd/lib/input';\n\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\n\nexport type InputTextAreaWrapperProps = Omit<TextAreaProps, 'defaultValue'>;\n\n/**\n * ```\n * 1. 在输入框内输入拼音的时候,在拼音尚未输入完成时,字母会触发Input的onChange事件;导致以上效果的原因是input事件没办法知道我们在使用中文输入法\n * 2. 此处封装可以解决此问题,在输入拼音未完成时不会触达onChange,选择拼音结果触发onChange\n *\n * 3. 设置value时,内部可将受控操作转为非受控操作(具体实现逻辑,自行查看源码)\n * 4. 适用场景:需要通过onChange事件处理业务逻辑,例如:在onChange中调用接口数据\n * 5. defaultValue不可使用\n *\n * ```\n */\nexport const InputTextAreaWrapper = (props: InputTextAreaWrapperProps) => {\n const { value, ...otherProps } = props;\n const inputValueRef = useRef<string>();\n const isFirstUseValueRef = useRef(true);\n const [inputKey, seInputKey] = useState(0);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value === inputValueRef.current && !isUndefinedOrNull(value)) return;\n seInputKey(Date.now());\n }, [value]);\n\n const onChange = hooks.useCallbackRef((event) => {\n if (event.nativeEvent['inputType'] === 'insertCompositionText') {\n return;\n }\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={inputKey}\n onCompositionEnd={onCompositionEnd}\n onChange={onChange}\n defaultValue={value}\n />\n );\n};\n","import { Form } from 'antd';\nimport { InputWrapper } from '../../input-wrapper';\nimport { EditableFormItemProps, EditableInputConfig } from '../type';\n\nexport const InputFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputWrapper allowClear {...(editableConfig as EditableInputConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form, InputNumber } from 'antd';\nimport { EditableFormItemProps, EditableInputNumberConfig } from '../type';\n\nexport const InputNumberFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-input-number-form-item', formItemProps?.className)}\n >\n <InputNumber {...(editableConfig as EditableInputNumberConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { LabelValueItem } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Radio, Tag } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, EditableRadioGroupConfig } from '../type';\n\ntype RadioGroupFormItemContent = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number;\n onChange?: (value: string | number) => void;\n};\n\nconst RadioGroupFormItemContent = (props: RadioGroupFormItemContent) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableRadioGroupConfig).editableComptProps;\n\n const viewLabel = useMemo(() => {\n if (editable) return [];\n const value = props.value;\n const options = (editableComptProps.options || []) as LabelValueItem<string | number>[];\n if (!isArray(options) || options.length === 0) {\n return value;\n }\n const target = options.find((item) => item.value === value);\n return target?.label || value;\n }, [editable, editableComptProps.options, props.value]);\n\n const onChange = hooks.useCallbackRef((e) => {\n props.onChange?.(e.target.value as string | number);\n editableComptProps.onChange?.(e);\n });\n\n if (editable) {\n return <Radio.Group {...editableComptProps} value={props.value} onChange={onChange} />;\n }\n return (\n <span className=\"editable-radio-group-view\">\n {render ? render(props.value) : viewLabel ? <Tag color=\"#1890ff\">{viewLabel}</Tag> : null}\n </span>\n );\n};\n\nexport const RadioGroupFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-radio-group-form-item', formItemProps?.className)}\n >\n <RadioGroupFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n requestStatus: RequestStatus;\n requestRespCacheData: {\n request?: string;\n response: TPlainObject[];\n }[];\n setSelectorListCount: number;\n};\n\ntype ModelActionParams = {\n resetSelectorList: {\n selectorList: TPlainObject[];\n requestStatus?: RequestStatus;\n };\n changeRequestStatus: RequestStatus;\n onRequestRespHandle: {\n requestStringify?: string;\n respData: TPlainObject[];\n };\n onSearchRequestRespHandle: TPlainObject[];\n};\n\nconst defaultState: ModelState = {\n requestStatus: 'request-init',\n requestRespCacheData: [],\n setSelectorListCount: 0,\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n resetSelectorList: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n response: params.selectorList,\n },\n ];\n if (state.requestStatus) {\n state.requestStatus = state.requestStatus;\n }\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n onRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData.push({\n request: params.requestStringify,\n response: params.respData,\n });\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n /** operateType = search 模式 */\n onSearchRequestRespHandle: (params) => {\n return (state) => {\n state.requestRespCacheData = [\n {\n request: 'search',\n response: params,\n },\n ];\n state.requestStatus = 'request-success';\n state.setSelectorListCount = state.setSelectorListCount + 1;\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst selectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const selectorWrapperModel = (key: string) => {\n if (!selectorWrapperModels[key]) {\n selectorWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return selectorWrapperModels[key];\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n\n// export const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n// const list = getVauleList(data, labelInValueFieldNames);\n// const map = {};\n// list.forEach((item) => {\n// map[item] = true;\n// });\n// return map;\n// };\n\n// /**\n// * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n// * 将数组转成对象,深度比较时不用考虑顺序问题\n// * @param value1\n// * @param value2\n// * @returns\n// */\n// export const selectorWrapperValueDeepEqual = (\n// value1: any,\n// value2: any,\n// labelInValueFieldNames: LabelValueItem<string | number>,\n// ) => {\n// if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n// const object1 = array2map(value1, labelInValueFieldNames);\n// const object2 = array2map(value2, labelInValueFieldNames);\n// const diff = dequal(object1, object2);\n// return diff;\n// };\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport {\n arrayFind,\n isUndefinedOrNull,\n LabelValueItem,\n TAny,\n toArray,\n TPlainObject,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select, SelectProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { useEffectCustom, usePrevious } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { json } from '@dimjs/utils';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList } from './utils';\n\ntype SelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype SelectorServiceConfig = {\n params?: TPlainObject;\n /** 与 params 配合使用 */\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n | 'loading'\n | 'mode'\n> & {\n /** 不支持 tags 模式,tags模式请使用antd Select 组件 */\n mode?: 'multiple';\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发,第一次不调用\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /** electorList发生变更时触发,每次都会调用 */\n onSelectorListAllChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 输入操作类型,默认值:filter\n * ```\n * 1. search:根据输入项去服务端查询,如设置selectorList配置失效\n * 2. filter:初始化已查询数据,根据输入内容筛选\n * ```\n */\n operateType?: 'search' | 'filter';\n // 搜索调接口传递关键字字段名称,默认值:keyword\n searchFieldName?: string;\n /**\n * search模式下,回填value查询接口字段名称,默认值:searchId\n * ```\n * search模式下,外部传递 value 数据用于回填Select,会在查询接口中默认添加searchId字段(searchId的值为回填的value,类型有:string | number | Array<string | number>)\n * ```\n */\n searchIdFieldName?: string;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n\n onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;\n showIcon?: boolean;\n icon?: (data: TPlainObject) => ReactElement;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: SelectorWrapperValue;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const serviceRequestParams = useMemo(() => serviceConfig?.params || {}, [serviceConfig?.params]);\n const hasServiceRequestParams = useMemo(() => {\n return serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n }, [serviceRequestParams]);\n\n const [loading, setLoading] = useState(false);\n // 将params排序后转成字符串\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n\n const prevServiceRequestParamsStringify = usePrevious(serviceRequestParamsStringify);\n\n const isSearch = operateType === 'search';\n\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n\n const requestPreKey = `__selector_wraapper_request_progress_${modelKey}`;\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = useMemo(() => {\n return { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames } as LabelValueItem<string>;\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple']);\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, labelInValueFieldNamesMerge.value);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, labelInValueFieldNamesMerge, value]);\n\n const stateSelectorList = useMemo(() => {\n if (isSearch) {\n return arrayFind(state.requestRespCacheData, 'search', 'request')?.response;\n }\n return state.requestRespCacheData.find((item) => item.request === serviceRequestParamsStringify)\n ?.response;\n }, [isSearch, serviceRequestParamsStringify, state.requestRespCacheData]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig?.onRequestResultAdapter\n ? serviceConfig?.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList || [];\n };\n\n const startDataSourceRequest = async (inputValue?: string, searchId?: string | number) => {\n try {\n setLoading(true);\n const params = serviceRequestParams || {};\n void actions.changeRequestStatus('request-progress');\n if ((!isUndefinedOrNull(inputValue) || !isUndefinedOrNull(searchId)) && isSearch) {\n const keyword = searchFieldName || 'keyword';\n params[keyword] = inputValue;\n params[searchIdFieldName || 'searchId'] = searchId;\n }\n const respData = await serviceConfig?.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n\n if (isSearch) {\n void actions.onSearchRequestRespHandle(respAdapterData);\n } else {\n void actions.onRequestRespHandle({\n respData: respAdapterData,\n requestStringify: serviceRequestParamsStringify,\n });\n }\n setLoading(false);\n } catch (error) {\n console.error(error);\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n const serviceRequest = {\n hasProcessRequest: () => {\n const process = window[requestPreKey];\n if (serviceRequestParamsStringify) {\n if (isArray(process) && process.includes(serviceRequestParamsStringify)) return true;\n } else {\n return !!process;\n }\n return false;\n },\n setProcessRequestStatus: () => {\n if (serviceRequestParamsStringify) {\n const cacheList = (window[requestPreKey] || []) as string;\n if (!cacheList.includes(serviceRequestParamsStringify)) {\n window[requestPreKey] = cacheList.concat(serviceRequestParamsStringify);\n }\n } else {\n window[requestPreKey] = [];\n }\n },\n };\n\n const prevRequestHandle = () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n\n // 判断相同的 params 是否已经在请求数据中,避免重复请求\n if (serviceRequest.hasProcessRequest()) {\n return;\n }\n serviceRequest.setProcessRequestStatus();\n // 去调用接口\n void startDataSourceRequest();\n };\n\n useEffectCustom(() => {\n if (hasOuterSelectorList || isSearch) return;\n if (hasServiceRequestParams) {\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys;\n if (requiredParamsKeys && requiredParamsKeys.length > 0) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return serviceRequestParams[key] === '' || isUndefinedOrNull(serviceRequestParams[key]);\n });\n if (isEmpty) {\n if (stateSelectorList && stateSelectorList.length > 0) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n window[requestPreKey] = undefined;\n void actions.resetSelectorList({\n selectorList: [],\n requestStatus: 'no-dependencies-params',\n });\n } else {\n void actions.changeRequestStatus('no-dependencies-params');\n }\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n props.onChange?.(undefined);\n }\n return;\n }\n }\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n if (stateSelectorList === undefined) {\n prevRequestHandle();\n }\n }, [serviceRequestParams]);\n\n hooks.useUpdateEffect(() => {\n if (state.setSelectorListCount > 1) {\n // 第一次不调用\n onSelectorListChange?.(stateSelectorList);\n }\n onSelectorListAllChange?.(stateSelectorList);\n }, [state.setSelectorListCount]);\n\n useEffectCustom(() => {\n if (hasOuterSelectorList) {\n void actions.resetSelectorList({\n selectorList: outerSelectorList || [],\n });\n }\n }, [outerSelectorList]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n const onSearch = hooks.useDebounceCallback((value: string) => {\n if (value) {\n void startDataSourceRequest(value);\n } else {\n void actions.resetSelectorList({\n selectorList: [],\n });\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n\n if (labelInValue) {\n const { label, value } = labelInValueFieldNamesMerge;\n const labelInValueList = selectedList.map((item) => {\n return {\n [label]: item[optionsItemLabelField],\n [value]: item[optionsItemValueField],\n };\n }) as unknown as SelectorWrapperValue;\n if (isMultiple) {\n props.onChange?.(labelInValueList, selectedList);\n } else {\n props.onChange?.(labelInValueList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n if (state.requestStatus === 'request-error' || state.requestStatus === 'request-progress') {\n return [];\n }\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList || []);\n }, [allOptionConfig, state.requestStatus, stateSelectorList]);\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': isSearch ? '请输入搜索条件' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n onSearch={isSearch ? onSearch : undefined}\n filterOption={isSearch ? false : filterOption}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n >\n {(selectorAllList || []).map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? <span className=\"v-selector-item-icon\">{props.icon?.(item)}</span> : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { arrayField2LabelValue, LabelValueItem, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, Tag } from 'antd';\nimport { Fragment, useEffect, useState } from 'react';\nimport { SelectorWrapper } from '../../selector-wrapper';\nimport { EditableFormItemProps, EditableSelectWrapperConfig } from '../type';\n\ntype FormItemContentProps = Omit<EditableFormItemProps, 'formItemProps'> & {\n value?: string | number | Array<string | number>;\n onChange?: (value: any) => void;\n};\n\nconst FormItemContent = (props: FormItemContentProps) => {\n const { editableConfig, editable, render } = props.fieldConfig;\n const editableComptProps = (editableConfig as EditableSelectWrapperConfig).editableComptProps;\n const [selectorList, setSelectorList] = useState<LabelValueItem[]>([]);\n const [viewLabelList, setviewLabelList] = useState<LabelValueItem[]>([]);\n // editableComptProps.onChange\n\n useEffect(() => {\n if (!editable) {\n const value = isArray(props.value) ? props.value : props.value === undefined ? [] : [props.value];\n if (selectorList.length === 0) {\n setviewLabelList(value.map((item) => ({ label: item as string, value: item })));\n }\n const returnList = [] as LabelValueItem[];\n value.forEach((item) => {\n const target = selectorList.find((temp) => temp.value === item);\n returnList.push(target ? target : { label: String(item), value: item });\n });\n setviewLabelList(returnList);\n }\n }, [editable, editableComptProps.fieldNames, props.value, selectorList]);\n\n const onSelectorListChange = hooks.useCallbackRef((dataList: TPlainObject[]) => {\n setSelectorList(arrayField2LabelValue(dataList || [], editableComptProps.fieldNames));\n });\n\n const onChange = hooks.useCallbackRef((value, selectList) => {\n props.onChange?.(value);\n editableComptProps.onChange?.(value, selectList);\n });\n\n if (editable) {\n return (\n <SelectorWrapper\n {...editableComptProps}\n value={props.value}\n onChange={onChange}\n onSelectorListChange={onSelectorListChange}\n />\n );\n }\n return (\n <Fragment>\n <div style={{ display: 'none' }}>\n <SelectorWrapper {...editableComptProps} onSelectorListChange={onSelectorListChange} />\n </div>\n <span className=\"editable-selector-view\">\n {render\n ? render(props.value)\n : viewLabelList.map((tag, index) => (\n <Tag key={index} color=\"#1890ff\">\n {tag.label}\n </Tag>\n ))}\n </span>\n </Fragment>\n );\n};\n\nexport const SelectorWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-selector-wrapper-form-item', formItemProps?.className)}\n >\n <FormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { isBoolean, isNumber, isString } from '@dimjs/lang';\nimport { Form, Typography } from 'antd';\nimport { useMemo } from 'react';\nimport { EditableFormItemProps, FieldSingleConfig } from '../type';\n\nconst FormItemTextContent = (props: {\n value?: string | number;\n name: EditableFormItemProps['name'];\n fieldConfig?: FieldSingleConfig;\n}) => {\n const value = useMemo(() => {\n if (props.fieldConfig?.render) return undefined;\n const isBaseData =\n isString(props.value) || isNumber(props.value) || isBoolean(props.value) || !props.value;\n if (!isBaseData) {\n console.warn(`Form.List name:【${props.name}】数据【${JSON.stringify(props.value)}】不能渲染在页面中`);\n }\n return isBaseData ? props.value : undefined;\n }, [props.fieldConfig?.render, props.name, props.value]);\n const viewText = props.fieldConfig?.render?.(props.value) || value;\n return (\n <Typography.Paragraph\n className=\"editable-text-view\"\n ellipsis={isString(viewText) ? { tooltip: viewText } : true}\n >\n {viewText}\n </Typography.Paragraph>\n );\n};\n\nexport const TextFormItem = (props: { name: Array<number | string>; fieldConfig?: FieldSingleConfig }) => {\n return (\n <Form.Item noStyle name={props.name}>\n <FormItemTextContent name={props.name} fieldConfig={props.fieldConfig} />\n </Form.Item>\n );\n};\n","import { Form } from 'antd';\nimport { InputTextAreaWrapper } from '../../input-wrapper/textarea';\nimport { EditableFormItemProps, EditableTextareaConfig } from '../type';\n\nexport const TextAreaFormItem = (props: EditableFormItemProps) => {\n const { formItemProps, editableConfig } = props.fieldConfig;\n return (\n <Form.Item {...formItemProps} name={props.name}>\n <InputTextAreaWrapper {...(editableConfig as EditableTextareaConfig).editableComptProps} />\n </Form.Item>\n );\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid?: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n useEffectCustom(() => {\n setUploadList(\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n };\n }),\n );\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = (\n props.onRequestResultAdapter ? props.onRequestResultAdapter(respData.data) : respData.data\n ) as TPlainObject;\n result[fieldNames.uid] = result[fieldNames.uid] || info.file.uid;\n result[fieldNames.name] = result[fieldNames.name] || info.file.name;\n if (props.maxCount === 1) {\n onChange?.([result]);\n } else {\n onChange?.((value || []).concat(result));\n }\n } else {\n if (onUploadError) {\n onUploadError(respData.message as string);\n } else {\n void message.error((respData.message as string) || '上传操作失败...');\n }\n fileList[fileList.length - 1] = {\n ...fileList[fileList.length - 1],\n status: 'error',\n };\n }\n props.onUploadChange?.(info);\n // 此处不执行 setUploadList([...fileList]);\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { UploadWrapper } from '../../upload-wrapper';\nimport { EditableFileUploadConfig, EditableFormItemProps } from '../type';\n\nconst UploadWrapperFormItemContent = (\n props: EditableFormItemProps & { value?: any; onChange?: (value?: any) => void },\n) => {\n const { editableConfig, render, editable } = props.fieldConfig;\n const { children, ...otherProps } = (editableConfig as EditableFileUploadConfig).editableComptProps;\n if (editable) {\n return (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} onChange={props.onChange}>\n {children}\n </UploadWrapper>\n );\n }\n return (\n <div className=\"upload-wrapper-selector-view\">\n {render ? (\n render(props.value)\n ) : (\n <UploadWrapper listType=\"text\" {...otherProps} value={props.value} disabled={true} />\n )}\n </div>\n );\n};\n\nexport const UploadWrapperFormItem = (props: EditableFormItemProps) => {\n const { formItemProps } = props.fieldConfig;\n return (\n <Form.Item\n {...formItemProps}\n name={props.name}\n className={classNames('editable-upload-wrapper-form-item', formItemProps?.className)}\n >\n <UploadWrapperFormItemContent {...props} />\n </Form.Item>\n );\n};\n","import { extend } from '@dimjs/utils';\nimport { FieldSingleConfig } from '../type';\nimport { getEditable } from '../utils';\nimport { CheckboxGroupFormItem } from './checkbox-group';\nimport { DatePickerWrapperFormItem } from './date-picker-wrapper';\nimport { DateRangePickerWrapperFormItem } from './date-range-picker-wrapper';\nimport { InputFormItem } from './input';\nimport { InputNumberFormItem } from './input-number';\nimport { RadioGroupFormItem } from './radio-group';\nimport { SelectorWrapperFormItem } from './selector-wrapper';\nimport { TextFormItem } from './text';\nimport { TextAreaFormItem } from './textarea';\nimport { UploadWrapperFormItem } from './upload-wrapper';\n\nexport type FormItemAdapterProps = {\n name: Array<number | string>;\n completeName: Array<number | string>;\n fieldConfig: FieldSingleConfig;\n tableRowIndex: number;\n};\n\nexport const FormItemAdapter = (props: FormItemAdapterProps) => {\n const { editableConfig, editable } = props.fieldConfig;\n const newEditable = getEditable(editable, props.tableRowIndex);\n const fieldConfig = extend({}, props.fieldConfig, { editable: newEditable });\n\n const commomProps = {\n name: props.name,\n fieldConfig,\n };\n\n if (editableConfig?.type === 'input' && newEditable) {\n return <InputFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'inputNumber' && newEditable) {\n return <InputNumberFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'textArea' && newEditable) {\n return <TextAreaFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'datePickerWrapper' && newEditable) {\n return <DatePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'dateRangePickerWrapper') {\n return <DateRangePickerWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'selectorWrapper') {\n return <SelectorWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'checkboxGroup') {\n return <CheckboxGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'radioGroup') {\n return <RadioGroupFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'uploadWrapper') {\n return <UploadWrapperFormItem {...commomProps} />;\n } else if (editableConfig?.type === 'custom') {\n return editableConfig.editableComptProps({\n name: props.name,\n editable: newEditable,\n completeName: props.completeName,\n tableRowIndex: props.tableRowIndex,\n });\n }\n\n return <TextFormItem {...commomProps} />;\n};\n","import { DeleteOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { Button, Form, Space } from 'antd';\nimport { FormItemAdapter } from '../form-item';\nimport { FormListConfig } from '../type';\nimport { getEditable } from '../utils';\n\nexport type FormListProps = {\n name: Array<number | string>;\n formListConfig: FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n};\n\nexport const FormList = (props: FormListProps) => {\n const from = Form.useFormInstance();\n const {\n onFormListBeforeRender,\n editableConfigList,\n onFormListAfterRender,\n onFormListItemBeforeRender,\n onFormListItemAfterRender,\n deleteOperateRender,\n } = props.formListConfig;\n return (\n <Form.List name={props.name}>\n {(fields, { add, remove }) => (\n <>\n {onFormListBeforeRender\n ? onFormListBeforeRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n {fields.map((fieldChild, index) => {\n const hasEditable = editableConfigList.find((item) =>\n getEditable(item.editable, props.tableRowIndex),\n );\n const className = classNames(\n 'editable-inner-formlist-item',\n `editable-inner-formlist-item-${props.name[1]}`,\n { 'editable-inner-formlist-item_preview': !hasEditable },\n );\n return (\n <div key={index} className={className}>\n {onFormListItemBeforeRender?.({\n add,\n remove: () => {\n remove(index);\n },\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n <Space>\n {editableConfigList.map((fieldItem, index) => {\n return (\n <FormItemAdapter\n name={[fieldChild.name, fieldItem.fieldName]}\n fieldConfig={fieldItem}\n key={index}\n tableRowIndex={props.tableRowIndex}\n completeName={[...props.completeName, fieldChild.name]}\n />\n );\n })}\n {hasEditable ? (\n <DeleteFormListItem\n deleteOperateRender={deleteOperateRender}\n remove={() => {\n remove(index);\n }}\n index={index}\n />\n ) : undefined}\n </Space>\n {onFormListItemAfterRender?.({\n add,\n formListItemIndex: index,\n tableRowIndex: props.tableRowIndex,\n remove: () => {\n remove(index);\n },\n get value() {\n return from.getFieldValue([...props.completeName, fieldChild.name]);\n },\n })}\n </div>\n );\n })}\n {onFormListAfterRender\n ? onFormListAfterRender({\n tableRowIndex: props.tableRowIndex,\n add,\n get value() {\n return from.getFieldValue(props.completeName);\n },\n })\n : null}\n </>\n )}\n </Form.List>\n );\n};\n\nconst DeleteFormListItem = (props: {\n deleteOperateRender: FormListConfig['deleteOperateRender'];\n remove: () => void;\n index: number;\n}) => {\n return (\n <Form.Item>\n {props.deleteOperateRender ? (\n props.deleteOperateRender({ remove: props.remove, formListItemIndex: props.index })\n ) : (\n <Button type=\"link\" danger icon={<DeleteOutlined />} onClick={props.remove}>\n 删除\n </Button>\n )}\n </Form.Item>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { Form, Input } from 'antd';\nimport { Fragment } from 'react';\nimport { FormItemAdapter } from '../form-item';\nimport { TextFormItem } from '../form-item/text';\nimport { FieldSingleConfig, FormListConfig } from '../type';\nimport { FormList } from './form-list';\n\nexport type FormListItemProps = {\n name: Array<number | string>;\n fieldConfig?: FieldSingleConfig | FormListConfig;\n tableRowIndex: number;\n completeName: (string | number)[];\n hiddenField?: { dataIndex: string };\n};\n\nexport const FormListItem = (props: FormListItemProps) => {\n if (props.fieldConfig) {\n if (isArray(props.fieldConfig['editableConfigList'])) {\n const formListConfig = props.fieldConfig as FormListConfig;\n return (\n <FormList\n name={props.name}\n completeName={props.completeName}\n formListConfig={formListConfig}\n tableRowIndex={props.tableRowIndex}\n />\n );\n } else {\n return (\n <Fragment>\n <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\n {props.hiddenField ? (\n <Form.Item hidden={true} name={props.hiddenField.dataIndex}>\n <Input />\n </Form.Item>\n ) : null}\n </Fragment>\n );\n }\n }\n return <TextFormItem name={props.name} />;\n};\n","import { PlusOutlined } from '@ant-design/icons';\nimport { Button, Form, Table, TableProps } from 'antd';\nimport { FormListOperation, FormListProps } from 'antd/lib/form/FormList';\nimport { ColumnsType } from 'antd/lib/table';\nimport { Fragment, ReactElement, useMemo } from 'react';\nimport { FormListItem } from './form-list-item';\nimport './style.less';\nimport { EditableTableName, EditableTableRecordType, FieldSingleConfig, FormListConfig } from './type';\n\n// export type EditableTableDataSourceItem = FormListFieldData & { operation: FormListOperation };\ntype fieldConfigFunctionParams = {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n};\n/**\n * antd 默认render功能此处不能使用\n */\nexport type EditableTableColumn = Omit<ColumnsType['0'], 'render'> & {\n dataIndex?: string;\n fieldConfig?:\n | FieldSingleConfig\n | FormListConfig\n | ((data: fieldConfigFunctionParams) => FieldSingleConfig | FormListConfig);\n /** 隐藏域字段 */\n hiddenField?: {\n dataIndex: string;\n };\n /**\n * 渲染中间件,如果renderMiddleware返回值为ReactElement格式,则会终止后续逻辑,fieldConfig配置将失效\n * ```\n * 1. tableRowIndex: 当前row的索引值\n * 2. name: 当前table单元格的form.item的name值\n * 3. operation Form.List的操作函数\n * ```\n */\n renderMiddleware?: (item: {\n tableRowIndex: number;\n name: EditableTableName;\n tableRowName: EditableTableName;\n operation: FormListOperation;\n }) => ReactElement | null;\n};\n\nexport type EditableTableProps = {\n name: string;\n /**\n * ```\n * antd table属性\n * 1. 新增cellVerticalAlign,单元格竖直方向对齐方式,设置table column onCell属性后失效\n * ```\n */\n tableProps?: Omit<TableProps<EditableTableRecordType>, 'dataSource' | 'columns' | 'rowKey'> & {\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n columns: EditableTableColumn[];\n onTableBeforeRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /**\n * 设置后,将覆盖底部`新增`按钮\n */\n onTableAfterRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n rules?: FormListProps['rules'];\n};\n\nexport const EditableTable = (props: EditableTableProps) => {\n const columns = useMemo(() => {\n if (!props.columns) return [];\n return props.columns.map((columnItem) => {\n const { fieldConfig, renderMiddleware, ...otherColumnItem } = columnItem;\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...otherColumnItem,\n render: (_value, record) => {\n const tableRowName = [props.name, record.name];\n const completeName = columnItem.dataIndex ? [...tableRowName, columnItem.dataIndex] : tableRowName;\n const customRender = renderMiddleware?.({\n name: completeName,\n tableRowIndex: record.name,\n operation: record.operation,\n tableRowName,\n });\n if (customRender) {\n return customRender;\n }\n\n const fieldConfigActual =\n typeof fieldConfig === 'function'\n ? fieldConfig({\n name: completeName,\n tableRowIndex: record.name,\n tableRowName,\n })\n : fieldConfig;\n return (\n <FormListItem\n name={columnItem.dataIndex ? [record.name, columnItem.dataIndex] : [record.name]}\n completeName={completeName}\n fieldConfig={fieldConfigActual}\n tableRowIndex={record.name}\n hiddenField={columnItem.hiddenField}\n />\n );\n },\n };\n }) as ColumnsType<EditableTableRecordType>;\n }, [props.columns, props.name, props.tableProps?.cellVerticalAlign]);\n\n return (\n <div className=\"editable-table\">\n <Form.List name={props.name} rules={props.rules}>\n {(fields, formListOperation) => {\n return (\n <Fragment>\n {props.onTableBeforeRender ? props.onTableBeforeRender(formListOperation, fields.length) : null}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n rowKey=\"key\"\n {...props.tableProps}\n dataSource={fields.map((item) => ({ ...item, operation: formListOperation }))}\n columns={columns}\n />\n {props.onTableAfterRender ? (\n props.onTableAfterRender(formListOperation, fields.length)\n ) : (\n <Button\n type=\"dashed\"\n onClick={() => formListOperation.add()}\n block\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n >\n 新增\n </Button>\n )}\n </Fragment>\n );\n }}\n </Form.List>\n </div>\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties } from 'react';\nimport './style.less';\nimport { varStyles } from './types';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorInitParams?: TPlainObject;\n editorProps?: TPlainObject;\n varStyle?: Record<varStyles, CSSProperties['color']>;\n height?: number | string;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const onChange = hooks.useCallbackRef((_, editor) => {\n const content = editor.getContent();\n const respValue = content ? content : undefined;\n props.onChange?.(respValue);\n });\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n return (\n <div className=\"v-editor-wrapper\">\n <Editor\n value={props.value}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n init={{\n height: props.height || 300,\n menubar: true,\n language: 'zh_CN',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n 'advlist lists image charmap preview visualblocks code hr print media table paste help template',\n toolbar: [\n 'undo redo template',\n 'formatselect bold italic backcolor bullist numlist',\n 'outdent indent alignleft aligncenter alignright alignjustify',\n 'textmark untextmark code preview',\n 'link image help',\n ].join('|'),\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n autoresize_bottom_margin: 50,\n // templates: [\n // editorTemplates.block,\n // editorTemplates.primary_p,\n // editorTemplates.secondary_p,\n // editorTemplates.warning_p,\n // editorTemplates.danger_p,\n // editorTemplates.success_p,\n // editorTemplates.p,\n // ],\n // template_replace_values: {\n // varStyle: varStyleString,\n // },\n // template_preview_replace_values: {\n // varStyle: varStyleString,\n // },\n ...props.editorInitParams,\n }}\n {...props.editorProps}\n onEditorChange={onChange}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n","import { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { isValidElement, ReactElement, useState } from 'react';\n\nexport type FileImportProps = {\n onImportFinish: (data?: any) => void;\n buttonName?: string | ReactElement;\n children?: React.ReactNode | ((data: { loading: boolean }) => React.ReactNode);\n} & Omit<\n UploadProps,\n | 'fileList'\n | 'showUploadList'\n | 'itemRender'\n | 'listType'\n | 'multiple'\n | 'previewFile'\n | 'progress'\n | 'onChange'\n | 'onDownload'\n | 'onRemove'\n | 'onPreview'\n | 'directory'\n | 'customRequest'\n | 'defaultFileList'\n | 'iconRender'\n>;\n\n/**\n * 文件导入\n * ```\n * 默认值:\n * name: 'file',\n * accept: '.xlsx,.xls',\n * ```\n */\nexport const FileImport = (props: FileImportProps) => {\n const { onImportFinish, buttonName, ...otherProps } = props;\n\n const [loading, setLoading] = useState(false);\n\n const onChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'uploading') {\n setLoading(true);\n } else if (info.file.status === 'done') {\n setLoading(false);\n const respData = info.file.response;\n if (respData.code === '0000') {\n onImportFinish(respData.data);\n } else {\n void message.error((respData.message as string) || '文件导入异常...');\n }\n }\n });\n\n return (\n <Upload showUploadList={false} maxCount={1} {...otherProps} onChange={onChange}>\n {typeof props.children === 'function' ? (\n props.children?.({ loading })\n ) : isValidElement(props.children) ? (\n props.children\n ) : (\n <Button type=\"primary\" ghost loading={loading}>\n {buttonName || '选择文件'}\n </Button>\n )}\n </Upload>\n );\n};\n\nFileImport.defaultProps = {\n name: 'file',\n accept: '.xlsx,.xls',\n};\n","import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex?: number | number[];\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局\n * 1. direction:默认值vertical\n * 2. gap间隙距离\n * 3. fullIndex:指定children数组索引值对象flex=1\n * 4. 为children添加key属性\n * @param props\n * @returns\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index) ? { flex: 1, ...childrenStyle } : childrenStyle;\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n","import { Col } from 'antd';\nimport { ReactNode } from 'react';\nconst forceAloneRowGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormColProps = {\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\n/**\n * 网格响应式布局,默认值:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n *```\n * grid\n * xs: 屏幕 < 576px\n * sm: 屏幕 ≥ 576px\n * md: 屏幕 ≥ 768px\n * lg: 屏幕 ≥ 992px\n * xl: 屏幕 ≥ 1200px\n * xxl: 屏幕 ≥ 1600px\n * ```\n *\n * @returns\n */\nexport const FormCol = (props: FormColProps) => {\n const { forceAloneRow, ...otherProps } = props;\n const forceGrid = forceAloneRow ? forceAloneRowGrid : otherProps;\n return <Col {...forceGrid}>{props.children}</Col>;\n};\n\nFormCol['domTypeName'] = 'FormCol';\n","import { classNames } from '@dimjs/utils';\nimport { Col, Form, Row, RowProps, Space } from 'antd';\nimport { ReactElement, useMemo } from 'react';\n\nconst fullGrid = { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 };\nexport type FormOperateColProps = {\n className?: string;\n leftList?: ReactElement[];\n rightList?: ReactElement[];\n // 对齐方式,优先级最高\n justify?: RowProps['justify'];\n /** 强制单独一行 */\n forceAloneRow?: boolean;\n};\n\n/**\n * FormOperateCol 布局说明\n * ```\n * 1. 网格数以及位置为动态计算,不支持 xs、sm、md等\n * 2. 如果FormRow只有一行col,则OperateCol会在当前行剩余网格内居左对齐\n * 3. 如果同时设置 leftList、rightList,则此cell会强制独占一行,并左右布局\n * 4. 如果只设置 leftList、rightList其中一个,则会在最后一行剩余网格内居右对齐\n * ```\n */\nexport const FormOperateCol = (props: FormOperateColProps) => {\n const { leftList, rightList, rowColTotal, justify, forceAloneRow, ...otherProps } =\n props as FormOperateColProps & {\n rowColTotal: number;\n };\n const _leftList = leftList || [];\n const _rightList = rightList || [];\n const hasAll = _leftList.length > 0 && _rightList.length > 0;\n const forceGrid = forceAloneRow || hasAll ? fullGrid : {};\n\n const colJustify = useMemo(() => {\n if (justify) return justify;\n if (hasAll) return 'space-between';\n if (forceAloneRow) return 'end';\n if (rowColTotal === 1) return 'start';\n return 'end';\n }, [forceAloneRow, hasAll, justify, rowColTotal]);\n\n const className = classNames(props.className, 'v-form-col-operate');\n\n return (\n <Col {...otherProps} {...forceGrid} className={className}>\n <Form.Item>\n <Row justify={colJustify}>\n <Space>\n {_leftList.map((item) => {\n return item;\n })}\n </Space>\n <Space>\n {_rightList?.map((item) => {\n return item;\n })}\n </Space>\n </Row>\n </Form.Item>\n </Col>\n );\n};\n\nFormOperateCol['domTypeName'] = 'FormOperateCol';\n","import { Grid } from 'antd';\nimport { useMemo } from 'react';\n\n/**\n * 获取响应式节点\n */\nexport const useResponsivePoint = () => {\n const screens = Grid.useBreakpoint();\n return useMemo(() => {\n const filter = Object.keys(screens).filter((key) => {\n return screens[key] === true;\n });\n const order = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\n const targetIndex = order.findIndex((key) => filter.includes(key));\n return order[targetIndex] as string | undefined;\n }, [screens]);\n};\n","/**\n * 用于计算 operateCol 所占用网格数\n * ```\n * col网格数据 [8,8,8,12,24,0,8] => [[8,8,8],[12],[24],[0,8]],分组后计算operateCol所在行中剩余网格数\n * ```\n * @returns\n */\nexport const calculateOperateGrid = (gridList: number[], operateColIndex: number) => {\n try {\n const groupList = [] as { index: number; value: number }[][];\n const getGroupItem = function (index) {\n const value = gridList[index];\n return { index, value: value > 24 ? 24 : value };\n };\n let condition = true;\n let groupItemList = [] as { index: number; value: number }[];\n let currentIndex = 0;\n let total = 0;\n while (condition) {\n const currentValue = gridList[currentIndex];\n groupItemList.push(getGroupItem(currentIndex));\n if (currentValue >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n } else if (currentIndex === gridList.length - 1) {\n groupList.push(groupItemList);\n } else {\n total += currentValue;\n if (total >= 24) {\n groupList.push(groupItemList);\n groupItemList = [];\n total = 0;\n }\n }\n currentIndex = currentIndex + 1;\n if (currentIndex >= gridList.length) {\n condition = false;\n }\n }\n const hasOperateList =\n groupList.find((item) => !!item.find((temp) => temp.index === operateColIndex)) || [];\n let hasOperateTotal = 0;\n let hasOperateIndex = 0;\n hasOperateList.forEach((item, index) => {\n if (item.index === operateColIndex) hasOperateIndex = index;\n if (item.index < operateColIndex) {\n hasOperateTotal = hasOperateTotal + item.value;\n }\n });\n if (hasOperateTotal === 24 || hasOperateTotal === 0) {\n hasOperateList[hasOperateIndex].value = 24;\n } else {\n hasOperateList[hasOperateIndex].value = 24 - hasOperateTotal;\n }\n\n return {\n gridList: groupList.reduce((a, b) => a.concat(b)).map((temp) => temp.value),\n gridGroupList: groupList,\n };\n } catch (error) {\n return {\n gridList,\n gridGroupList: [],\n };\n }\n};\n","import { toArray, valueIsEqual } from '@flatbiz/utils';\nimport { Row, RowProps } from 'antd';\nimport { cloneElement, Fragment, isValidElement, ReactElement, ReactNode, useMemo } from 'react';\nimport { useResponsivePoint } from '../hooks/use-responsive-point';\nimport { calculateOperateGrid } from './utils';\n\nexport type FormRowProps = RowProps & {\n children?: ReactNode | ReactNode[];\n};\nconst defaultGrid = { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n\n/**\n * FormItem网格响应式布局\n *```\n * 1. 应用场景:Form条件布局\n * 2. 子元素只能是 FormCol、FormOperateCol,其他会被忽略\n * 3. 所有子元素中只能存在一个 FormOperateCol\n */\nexport const FormRow = (props: FormRowProps) => {\n const screenType = useResponsivePoint();\n const childrenList = toArray<ReactElement>(props.children).filter((item) => {\n if (!isValidElement(item)) return false;\n return valueIsEqual(item.type['domTypeName'], ['FormOperateCol', 'FormCol']);\n });\n const { gridList, gridGroupList } = useMemo(() => {\n const operateColIndex = childrenList.findIndex((item) => {\n return item.type['domTypeName'] === 'FormOperateCol';\n });\n if (screenType === undefined || operateColIndex < 0) {\n return { gridList: [] as number[], gridGroupList: [] };\n }\n const _currentGridList = childrenList.map((temp, index) => {\n if (index === operateColIndex) return 0;\n return temp.props?.[screenType] || defaultGrid[screenType];\n });\n return calculateOperateGrid(_currentGridList, operateColIndex);\n }, [childrenList, screenType]);\n\n if (!screenType) return <Fragment>{props.children}</Fragment>;\n return (\n <Row {...props}>\n {childrenList.map((item, index) => {\n const itemProps = { ...defaultGrid, ...item.props };\n const newProps = {\n key: index,\n ...itemProps,\n [screenType]: gridList[index] || itemProps[screenType],\n };\n if (item.type['domTypeName'] === 'FormOperateCol') {\n newProps['rowColTotal'] = gridGroupList.length;\n }\n return cloneElement(item, newProps);\n })}\n </Row>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, FC, ReactElement } from 'react';\nimport { useThemeToken } from '../../hooks';\nimport './style.less';\n\nexport type FormItemCardProps = {\n title?: string | ReactElement;\n children: ReactElement | ReactElement[];\n className?: string;\n style?: CSSProperties;\n titleSign?: boolean;\n};\nexport const FormItemCard: FC<FormItemCardProps> = (props) => {\n const classNamePrefix = 'form-item-group-card';\n\n const theme = useThemeToken();\n\n const style = { '--form-item-group-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames(classNamePrefix, props.className)} style={{ ...style, ...props.style }}>\n {props.title ? (\n <div\n className={classNames(`${classNamePrefix}-title`, {\n [`${classNamePrefix}-title-sign`]: props.titleSign === true,\n })}\n >\n {props.title}\n </div>\n ) : null}\n {props.children}\n </div>\n );\n};\n\nFormItemCard.defaultProps = {\n titleSign: true,\n};\n","import { classNames } from '@dimjs/utils';\nimport { Form } from 'antd';\nimport { cloneElement, CSSProperties, isValidElement, ReactElement, useMemo } from 'react';\nimport { FlexLayout } from '../../flex-layout';\nimport './style.less';\n\nexport type FormItemHorizontalUnionProps = {\n className?: string;\n style?: CSSProperties;\n label?: string;\n groupConfigList: {\n before?: ReactElement | string;\n width?: number | string;\n mainItem: ReactElement;\n after?: ReactElement | string;\n }[];\n gap?: number;\n flexLayoutStyle?: CSSProperties;\n hidden?: boolean;\n required?: boolean;\n};\n\nexport const FormItemHorizontalUnion = (props: FormItemHorizontalUnionProps) => {\n const groupFlexElementData = useMemo(() => {\n const fullIndex = [] as number[];\n const flexElementList = [] as Array<ReactElement>;\n props.groupConfigList.forEach((item) => {\n if (item.before) {\n flexElementList.push(\n isValidElement(item.before) ? (\n (item.before as ReactElement)\n ) : (\n <div className=\"union-before-text\">{item.before}</div>\n ),\n );\n }\n if (item.width) {\n flexElementList.push(\n cloneElement(item.mainItem, {\n style: { width: item.width, ...item.mainItem.props.style },\n }),\n );\n } else {\n fullIndex.push(flexElementList.length);\n flexElementList.push(item.mainItem);\n }\n if (item.after) {\n flexElementList.push(\n isValidElement(item.after) ? (\n (item.after as ReactElement)\n ) : (\n <div className=\"union-after-text\">{item.after}</div>\n ),\n );\n }\n });\n return {\n flexElementList,\n fullIndex,\n };\n }, [props.groupConfigList]);\n\n return (\n <Form.Item\n label={props.label}\n className={classNames('form-item-group-horizontal-union', props.className)}\n style={props.style}\n hidden={props.hidden}\n required={props.required}\n >\n <FlexLayout\n direction=\"horizontal\"\n gap={props.gap === undefined ? 15 : props.gap}\n fullIndex={groupFlexElementData.fullIndex}\n style={props.flexLayoutStyle}\n >\n {groupFlexElementData.flexElementList.map((item, index) => {\n return cloneElement(item, { key: index });\n })}\n </FlexLayout>\n </Form.Item>\n );\n};\n","import { FormItemCard } from './card';\nimport { FormItemHorizontalUnion } from './horizontal-union';\n\nexport const FormItemGroup = {\n HorizontalUnion: FormItemHorizontalUnion,\n Card: FormItemCard,\n};\n","import { CSSProperties } from 'react';\n\nexport type GapProps = {\n height?: number;\n width?: number;\n className?: string;\n style?: CSSProperties;\n inline?: boolean;\n};\n\n/**\n * 间隙组件\n * @param props\n * @returns\n */\nexport const Gap = (props: GapProps) => {\n return (\n <div\n style={{\n height: props.height,\n ...props.style,\n display: props.inline ? 'inline-block' : 'block',\n width: props.width,\n }}\n className={props.className}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport './style.less';\n\nexport type IconWrapperProps = {\n hoverTips?: string | React.ReactElement;\n icon?: React.ReactNode;\n style?: CSSProperties;\n text?: string | React.ReactElement;\n className?: string;\n size?: 'small' | 'middle' | 'large';\n onClick?: (event) => void;\n hideHoverBgColor?: boolean;\n};\nexport const IconWrapper = (props: IconWrapperProps) => {\n const className = classNames(\n 'icon-wrapper',\n `icon-wrapper-${props.size || 'middle'}`,\n {\n 'icon-wrapper-hidden-hover-bgcolor': props.hideHoverBgColor,\n },\n props.className,\n );\n\n if (props.hoverTips) {\n return (\n <Tooltip title={props.hoverTips}>\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n </Tooltip>\n );\n }\n return (\n <span className={className} style={props.style} onClick={props.onClick}>\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </span>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Descriptions } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\nimport './style.less';\n\nexport type LabelValueLayoutProps = {\n options: { label: string | ReactElement; value: string | number | ReactElement }[];\n labelWidth?: number;\n // 一行占几组,默认1\n column?: number;\n bordered?: boolean;\n};\n\nexport const LabelValueLayout = (props: LabelValueLayoutProps) => {\n const style = { '--v-label-value-layout-lWidth': `${props.labelWidth || 120}px` } as CSSProperties;\n const className = classNames('v-label-value-layout');\n return (\n <Descriptions\n column={props.column || 1}\n bordered={props.bordered}\n size=\"small\"\n className={className}\n style={style}\n >\n {props.options.map((item, index) => {\n return (\n <Descriptions.Item key={index} label={item.label}>\n {item.value}\n </Descriptions.Item>\n );\n })}\n </Descriptions>\n );\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n open: boolean;\n /**\n * 用来处理form, `更新`的时候的传递当前item列表行的数据, 当`创建`的时候强制设置为 `undefined`\n */\n itemData?: Record<string, unknown> | null;\n operateType: 'create' | 'update' | 'view';\n pageLoading?: boolean;\n}\n\nexport interface ModalActionsParamType {\n openModalForm: Pick<ModalStateType, 'title' | 'itemData' | 'operateType' | 'pageLoading'>;\n closeModal: void;\n setModalItemData: Record<string, unknown>;\n}\n\n/**\n * @shared\n * 提供公共的modal处理, 通常用来表单编辑, 弹窗抽屉模式.\n * 注意全部理论上只允许一个modal实例存在,如需处理多个, 请自行实例话模型.\n */\nexport const ModalModel: ModelType<ModalStateType, ModalActionsParamType> = {\n actions: {\n openModalForm({ itemData, title, operateType, pageLoading }) {\n return (state) => {\n state.itemData = itemData;\n state.title = title;\n state.operateType = operateType;\n state.pageLoading = pageLoading;\n state.open = true;\n };\n },\n closeModal() {\n return (state) => {\n state.open = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n open: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationOldProps {\n loading?: boolean;\n okText?: string;\n cancelText?: string;\n onOk?: () => void;\n onCancel?: () => void;\n hideOkBtn?: boolean;\n okButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n cancelButtonProps?: Omit<ButtonProps, 'onClick' | 'loading' | 'className'>;\n}\n\nexport const ModalOperation = ({\n loading,\n okText = '保存',\n cancelText = '取消',\n onCancel,\n onOk,\n hideOkBtn,\n ...otherProps\n}: ModalOperationOldProps) => {\n return (\n <Fragment>\n <Space size=\"middle\">\n <Button {...otherProps.cancelButtonProps} className=\"cancel-btn\" onClick={onCancel}>\n {cancelText}\n </Button>\n {hideOkBtn != true && (\n <Button\n type=\"primary\"\n {...otherProps.okButtonProps}\n className=\"ok-btn\"\n onClick={onOk}\n loading={loading}\n >\n {okText}\n </Button>\n )}\n </Space>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Modal, ModalProps } from 'antd';\nimport { FC, Fragment, ReactNode } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { ModalOperation, ModalOperationOldProps } from './modal-operation';\nimport './style.less';\n\ntype ModalWrapperStaticMethods = {\n Content: typeof ModalWrapperContent;\n Footer: typeof ModalWrapperFooter;\n};\n\nexport type ModalWrapperProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n} & Omit<\n ModalProps,\n | 'footer'\n | 'onOk'\n | 'okText'\n | 'cancelText'\n | 'okButtonProps'\n | 'cancelButtonProps'\n | 'okType'\n | 'confirmLoading'\n>;\n\nconst PageLoader = () => {\n return (\n <div className=\"modal-wrapper-loader\">\n <div className=\"loader-wrapper\">\n <div className=\"loader-inner\" />\n <div className=\"loader-text\">LOADING</div>\n </div>\n </div>\n );\n};\n\nconst ModalWrapperContent = (props: { operationProps?: ModalOperationOldProps; children?: ReactNode }) => {\n return (\n <Fragment>\n <div className=\"modal-wrapper-content\">{props.children}</div>\n {props.operationProps ? (\n <ModalWrapperFooter>\n <ModalOperation {...props.operationProps} />\n </ModalWrapperFooter>\n ) : null}\n </Fragment>\n );\n};\n\nconst ModalWrapperFooter = (props) => {\n return <div className=\"modal-wrapper-footer\">{props.children}</div>;\n};\n\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * 3. 如果设置 forceRender = true,会导致弹框中的接口提前调用\n *\n * 注意\n * 1. <Modal /> 默认关闭后状态不会自动清空, 如果希望每次打开都是新内容,请设置 destroyOnClose。\n * 2. <Modal /> 和 Form 一起配合使用时,设置 destroyOnClose 也不会在 Modal 关闭时销毁表单字段数据,需要设置 <Form preserve={false} />。\n *\n * ```\n */\nexport const ModalWrapper: FC<ModalWrapperProps> & ModalWrapperStaticMethods = (props) => {\n const { pageLoading, className, width, children, ...otherProps } = props;\n\n useEffectCustom(() => {\n if (props['operationProps']) {\n throw new Error('ModalWrapper组件升级,参数operationProps用法变更,请及时更新');\n }\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wrapper', className)}\n keyboard={false}\n destroyOnClose={true}\n forceRender={false}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <Fragment>\n {children}\n {pageLoading && <PageLoader />}\n </Fragment>\n </Modal>\n );\n};\n\nModalWrapper.Content = ModalWrapperContent;\nModalWrapper.Footer = ModalWrapperFooter;\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst modalModels: Record<string, API<ModelType<ModalStateType, ModalActionsParamType, any>>> = {};\n\n/**\n * modal弹窗模型\n * @param key 唯一值必传\n * @returns\n *\n * ```\n * 使用方式\n * const [modalState, modalActions] = createModalWrapperModel('key值').useStore();\n * ```\n */\nexport const createModalWrapperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wrapper';\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode } from 'react';\nimport './style.less';\n\nexport type PageFixedFooterProps = {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport const PageFixedFooter = (props: PageFixedFooterProps) => {\n return (\n <div className={classNames('page-fixed-footer', props.className)} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { Result } from 'antd';\n\nexport type Page404Props = {\n message?: string;\n};\n\nexport const Page404 = (props: Page404Props) => {\n return <Result status=\"404\" title=\"404\" subTitle={props.message} />;\n};\n","import './style.less';\n/**\n * 使用在Form组件上,预定义form-item label宽度\n */\nexport const formClassName = {\n label_width_70: 'form-label-70',\n label_width_80: 'form-label-80',\n label_width_90: 'form-label-90',\n label_width_100: 'form-label-100',\n label_width_110: 'form-label-110',\n label_width_120: 'form-label-120',\n label_width_130: 'form-label-130',\n label_width_140: 'form-label-140',\n label_width_150: 'form-label-150',\n label_width_160: 'form-label-160',\n label_width_170: 'form-label-170',\n label_width_180: 'form-label-180',\n label_width_190: 'form-label-190',\n label_width_200: 'form-label-200',\n label_width_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\n label_value_vertical: 'form-label-value-vertical',\n};\n\n/**\n * 使用在Form.Item组件上,预定义form-item label宽度\n */\nexport const formItemClassName = {\n label_width_70: 'form-item-label-70',\n label_width_80: 'form-item-label-80',\n label_width_90: 'form-item-label-90',\n label_width_100: 'form-item-label-100',\n label_width_110: 'form-item-label-110',\n label_width_120: 'form-item-label-120',\n label_width_130: 'form-item-label-130',\n label_width_140: 'form-item-label-140',\n label_width_150: 'form-item-label-150',\n label_width_160: 'form-item-label-160',\n label_width_170: 'form-item-label-170',\n label_width_180: 'form-item-label-180',\n label_width_190: 'form-item-label-190',\n label_width_200: 'form-item-label-200',\n label_width_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\n label_value_vertical: 'form-item-label-value-vertical',\n};\n","import { formClassName, formItemClassName } from './form';\n\n/**\n * 预定义className\n * ```\n * form: 使用在Form组件上,设置form-item label宽度\n * formItem: 使用在Form.Item组件上,设置form-item label宽度\n * ```\n */\nexport const preDefinedClassName = {\n form: formClassName,\n formItem: formItemClassName,\n};\n","import { valueIsEqual } from '@flatbiz/utils';\nimport { Radio, Space } from 'antd';\nimport { ReactElement } from 'react';\n\nexport type RadioGroupWrapperValue<T extends string | number> = T;\n\nexport type RadioGroupWrapperOptionItem = {\n label: string | ReactElement;\n value: string | number;\n disabled?: boolean;\n};\n\nexport type CustomRadioGroupProps = {\n value?: RadioGroupWrapperValue<string | number>;\n onChange?: (value?: RadioGroupWrapperValue<string | number>) => void;\n onPreChange?: (value?: RadioGroupWrapperValue<string | number>) => Promise<void>;\n options: RadioGroupWrapperOptionItem[];\n /** 是否可取消选中,默认:false */\n isCancel?: boolean;\n disabled?: boolean;\n};\n\n/**\n * RadioGroupWrapper 为了解决 RadioGroup 组件不能取消选中问题\n * @param props\n * @returns\n */\nexport const RadioGroupWrapper = (props: CustomRadioGroupProps) => {\n const onChange = async (event) => {\n const value = event.target.value;\n if (props.onPreChange) {\n await props.onPreChange(value);\n }\n props.onChange?.(value);\n };\n const onClick = (event) => {\n if (!props.isCancel) return;\n const value = event.target.value;\n if (valueIsEqual(props.value, value)) {\n props.onChange?.(undefined);\n }\n };\n return (\n <Space size={5} wrap={true}>\n {props.options.map((item) => {\n return (\n <Radio\n value={item.value}\n onClick={onClick}\n checked={props.value === item.value}\n key={item.value}\n onChange={onChange}\n disabled={props.disabled || item.disabled}\n >\n {item.label}\n </Radio>\n );\n })}\n </Space>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { Tag } from 'antd';\nimport { CSSProperties } from 'react';\nimport { RelationProps } from '../type';\n\nexport const Relation = (props: RelationProps) => {\n const style = {\n '--relation-tagline-width': `${props.tagLineWidth || 40}px`,\n '--relation-group-indent-width': `${props.indentWidth || 80}px`,\n '--relation-tag-width': `${props.tagWidth || 26}px`,\n '--relation-line-color': `${props.lineColor || '#fda148'}`,\n } as CSSProperties;\n\n const className = classNames(\n 'relation-list',\n { 'relation-list-only-one': props.onlyOne, 'relation-list-only-no-main-one': props.onlyOne },\n props.className,\n );\n const { solt1, solt2 } = props;\n\n return (\n <div className={className} style={style}>\n {solt1 ? (\n <div className=\"relation-list-solt1\">\n <div className=\"relation-list-line\"></div>\n <div className=\"relation-list-label\">{props.label}</div>\n\n {props.tagName ? (\n <Tag\n className=\"relation-item-tag\"\n color={props.tagColor || '#fecd96'}\n onClick={props.onTagClick?.bind(null, props.tagName)}\n >\n {props.tagName}\n </Tag>\n ) : null}\n {solt1()}\n </div>\n ) : null}\n {solt2 ? <div className=\"relation-list-solt2\">{solt2()}</div> : null}\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { ReactElement } from 'react';\n\nexport type RelationGroupListProps = {\n children: ReactElement | ReactElement[] | null;\n className?: string;\n};\n\nexport const RelationGroupList = (props: RelationGroupListProps) => {\n return <div className={classNames('relation-group-list', props.className)}>{props.children}</div>;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type RelationItemProps = {\n children: ReactElement | null | Array<ReactElement | null>;\n className?: string;\n style?: CSSProperties;\n isFirst?: boolean;\n isLast?: boolean;\n onlyOne?: boolean;\n};\n\nexport const RelationItem = (props: RelationItemProps) => {\n const className = classNames('relation-item', {\n 'relation-item-line': true,\n 'relation-item-first': props.isFirst,\n 'relation-item-last': props.isLast,\n 'relation-item-only-one': props.onlyOne,\n });\n\n return (\n <div className={className} style={props.style}>\n {props.children}\n </div>\n );\n};\n","import { TRelationTreeData } from './type';\n\nexport const deleteLoop = (data: TRelationTreeData, uid: string) => {\n if (data.uid === uid) {\n data['_delete'] = true;\n }\n data?.relationList?.forEach((item) => {\n if (item.uid === uid || item.customData?.uid === uid) {\n item['_delete'] = true;\n if (data.relationList.length === 1) {\n data['_delete'] = true;\n }\n }\n\n item.children?.forEach((innerItem) => {\n deleteLoop(innerItem, uid);\n });\n });\n};\n\nexport const filterSurplusData = (data: TRelationTreeData) => {\n data.relationList = data.relationList || [];\n data.relationList = data.relationList.filter((item) => !item['_delete']);\n\n data.relationList.forEach((item) => {\n item.children = item.children || [];\n item.children = item.children.filter((item) => !item['_delete']);\n\n item.children.forEach((innerItem) => {\n filterSurplusData(innerItem);\n });\n });\n\n data.relationList = data.relationList.filter((item) => {\n if (!item.customData && !item.children) {\n return false;\n }\n if (!item.customData && (!item.children || item.children.length === 0)) {\n return false;\n }\n return true;\n });\n};\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form } from 'antd';\nimport { Fragment, ReactElement, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { Relation } from './compts/relation';\nimport { RelationGroupList } from './compts/relation-group-list';\nimport { RelationItem } from './compts/relation-item';\n\nimport {\n RelationTreeProps,\n TRelationTreeCustomData,\n TRelationTreeData,\n TRelationTreeRelationItem,\n} from './type';\nimport { deleteLoop, filterSurplusData } from './utils';\n\ntype TRelationTreeLoop = {\n dataSource: TRelationTreeData;\n relationItemRender: (data: TRelationTreeCustomData, extraData?: TPlainObject) => ReactElement;\n className?: string;\n relationProps?: RelationTreeProps['relationProps'];\n onTagClick?: RelationTreeProps['onTagClick'];\n};\n\ntype RelationItemRenderProps = TRelationTreeLoop & {\n relationItem: TRelationTreeRelationItem;\n index: number;\n onlyOne?: boolean;\n};\n\nconst RelationItemRender = (props: RelationItemRenderProps) => {\n const relationItem = props.relationItem;\n const dataSource = props.dataSource;\n const index = props.index;\n\n if (relationItem.customData && relationItem.children && relationItem.children.length > 0) {\n return (\n <Fragment key={relationItem.uid}>\n <RelationItem\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </RelationItem>\n <RelationGroupList>\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n className={props.className}\n />\n );\n })}\n </RelationGroupList>\n </Fragment>\n );\n }\n if (relationItem.children && relationItem.children.length > 0) {\n return (\n <div\n className={classNames('form-list-no-main-group', { 'form-list-no-main-group': index === 0 })}\n key={relationItem.uid}\n >\n {relationItem.children?.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n className={classNames('form-list-no-main', {\n 'form-list-no-main-first': index === 0,\n 'form-list-no-main-last': index === dataSource.relationList.length - 1,\n })}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </div>\n );\n }\n if (relationItem.customData) {\n return (\n <RelationItem\n key={relationItem.uid}\n isFirst={index === 0}\n isLast={index === dataSource.relationList.length - 1}\n onlyOne={props.onlyOne}\n >\n <Form component={false}>\n {props.relationItemRender(relationItem.customData, relationItem.extraData)}\n </Form>\n </RelationItem>\n );\n }\n return null;\n};\n\nconst RelationTreeLoop = (props: TRelationTreeLoop) => {\n const dataSource = props.dataSource;\n const relationList = dataSource.relationList || [];\n\n const lastRelationItem = relationList[relationList.length - 1];\n const hasSolt2 =\n relationList.length > 0 &&\n lastRelationItem.customData &&\n lastRelationItem.children &&\n lastRelationItem.children.length > 0;\n const onlyOne = relationList.length == 1;\n // const onlyNoMainOne =\n // onlyOne && !relationList[0].customData && toArray(relationList[0].children).length === 1;\n return (\n <Relation\n {...props.relationProps}\n tagName={dataSource.tagName}\n key={dataSource.uid}\n onlyOne={onlyOne}\n label={dataSource.label}\n className={props.className}\n onTagClick={() => {\n props.onTagClick?.(dataSource.uid, dataSource.extraData);\n }}\n solt1={() => {\n return (\n <Fragment>\n {relationList.map((relationItem, index) => {\n const flat = hasSolt2 && index === relationList.length - 1;\n return (\n <RelationItemRender\n key={index}\n dataSource={props.dataSource}\n relationItemRender={props.relationItemRender}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItem={\n flat\n ? {\n ...relationItem,\n children: undefined,\n }\n : relationItem\n }\n index={index}\n onlyOne={onlyOne}\n />\n );\n })}\n </Fragment>\n );\n }}\n solt2={() => {\n // 渲染最后一个relation item的children list数据\n if (hasSolt2 && lastRelationItem.children && lastRelationItem.children.length > 0) {\n return (\n <RelationGroupList key={lastRelationItem.uid}>\n {lastRelationItem.children.map((innerItem) => {\n return (\n <RelationTreeLoop\n dataSource={innerItem}\n relationItemRender={props.relationItemRender}\n key={innerItem.uid}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n />\n );\n })}\n </RelationGroupList>\n );\n }\n return null;\n }}\n ></Relation>\n );\n};\n\nexport const RelationTree = (props: RelationTreeProps) => {\n const [dataSource, setDataSource] = useState<TRelationTreeData>();\n\n useEffectCustom(() => {\n setDataSource(props.dataSource);\n }, [props.dataSource]);\n\n const onRelationItemContentChange = hooks.useCallbackRef((data: TRelationTreeCustomData, name, value) => {\n if (data) {\n data[name] = value;\n props.onChange?.({ ...dataSource } as TRelationTreeData);\n }\n });\n\n const getTargetRelationList = (relationTreeList: TRelationTreeData[], uid: string) => {\n for (let index = 0; index < relationTreeList.length; index++) {\n const relationTree = relationTreeList[index];\n for (let innerIndex = 0; innerIndex < relationTree.relationList.length; innerIndex++) {\n const element = relationTree.relationList[innerIndex];\n if (element.customData?.uid === uid) {\n return {\n relationTree,\n index: innerIndex,\n element: element,\n };\n } else if (element.children) {\n const result = getTargetRelationList(element.children, uid);\n if (result) {\n return result;\n }\n }\n }\n }\n return null;\n };\n\n const onAdd = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeRelationItem) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.relationTree?.relationList) {\n result.relationTree?.relationList.splice((result.index as number) + 1, 0, initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n const addChildren = hooks.useCallbackRef(\n (data: TRelationTreeCustomData, initialData: TRelationTreeData) => {\n if (!dataSource) return;\n const result = getTargetRelationList([dataSource], data.uid);\n if (result.element) {\n result.element.children = (result.element.children || []).concat(initialData);\n props.onChange?.(dataSource);\n }\n },\n );\n\n const onRemove = hooks.useCallbackRef((uid: string) => {\n if (!dataSource) return;\n deleteLoop(dataSource, uid);\n if (dataSource['_delete']) {\n props.onChange?.(undefined);\n } else {\n filterSurplusData(dataSource);\n props.onChange?.(dataSource);\n }\n });\n\n if (!dataSource) return <Empty description=\"暂无数据\"></Empty>;\n\n return (\n <div className={classNames('relation-tree', props.className)}>\n <RelationTreeLoop\n dataSource={dataSource}\n relationProps={props.relationProps}\n onTagClick={props.onTagClick}\n relationItemRender={(data, extraData) => {\n return props.children(\n data,\n {\n add: onAdd,\n addChildren: addChildren,\n remove: onRemove,\n onChange: onRelationItemContentChange.bind(null, data),\n },\n extraData,\n );\n }}\n />\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { FlexLayout } from '../flex-layout';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-index\">{index + 1}. </span>\n <span>{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-index\"></span>\n <span>{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { LabelValueItem, TAny, TPlainObject } from '@flatbiz/utils';\nimport { Button, Select, SelectProps } from 'antd';\nimport { useMemo, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { RequestStatus, RequestStatusRender, RequestStatusRenderProps } from '../request-status';\n\nexport type SelectorWrapperSimpleServiceConfig = {\n params?: TPlainObject;\n onRequest: (params?: TAny) => TAny;\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type SelectorWrapperSimpleProps = Omit<\n SelectProps,\n 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'loading'\n> & {\n fieldNames?: { label: string; value: string; disabled?: string };\n /**\n * 请求服务需求的数据\n */\n serviceConfig: SelectorWrapperSimpleServiceConfig;\n /**\n * 添加全部选项\n * ```\n * 1. 默认值label=\"全部\",value=\"\"\n * 2. 可配置label、value\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /** selectorList发生变更时触发,每次都会调用 */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调\n */\n onSelectorRequestError?: (error: Error) => void;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n};\n/**\n * 选择器简单包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持search效果\n * 2. 不会缓存接口数据\n * 3. 不会对value、onChange做任何处理\n * ```\n */\nexport const SelectorWrapperSimple = (props: SelectorWrapperSimpleProps) => {\n const {\n showAllOption,\n serviceConfig,\n onSelectorListChange,\n onSelectorRequestError,\n requestMessageConfig,\n fieldNames,\n ...otherProps\n } = props;\n const [requestStatus, setRequestStatus] = useState<RequestStatus>('request-init');\n const [dataSource, setDataSource] = useState<TPlainObject[]>();\n const optionsItemLabelField = fieldNames?.label;\n const optionsItemValueField = fieldNames?.value;\n const optionsItemDisabledField = fieldNames?.disabled;\n const serviceParams = serviceConfig.params;\n\n const allOptionConfig = useMemo(() => {\n const isTrue = showAllOption === true;\n if (showAllOption) {\n return {\n label: isTrue ? '全部' : (showAllOption.label as string),\n value: isTrue ? '' : (showAllOption.value as any),\n };\n }\n return null;\n }, [showAllOption]);\n\n const serviceRespDataAdapter = (respData) => {\n const respDataList = serviceConfig.onRequestResultAdapter\n ? serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return (respDataList || []) as TPlainObject[];\n };\n\n const startDataSourceRequest = async () => {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceParams);\n let respAdapterData = serviceRespDataAdapter(respData);\n onSelectorListChange?.(respAdapterData);\n if (optionsItemLabelField && optionsItemValueField) {\n respAdapterData = respAdapterData.map((item) => {\n return {\n ...item,\n label: item[optionsItemLabelField],\n value: item[optionsItemValueField],\n disabled: item[optionsItemDisabledField || 'disabled'],\n };\n });\n }\n\n if (allOptionConfig) {\n respAdapterData.unshift(allOptionConfig);\n }\n setDataSource(respAdapterData);\n setRequestStatus('request-success');\n } catch (error) {\n setRequestStatus('request-error');\n onSelectorRequestError?.(error);\n }\n };\n\n useEffectCustom(() => {\n void startDataSourceRequest();\n }, []);\n\n const loading = requestStatus === 'request-progress';\n\n return (\n <Select\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n options={dataSource as LabelValueItem[]}\n notFoundContent={\n <RequestStatusRender\n status={requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={startDataSourceRequest} />\n ) : undefined\n }\n loading={loading}\n />\n );\n};\n","import { classNames, extend } from '@dimjs/utils';\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\nimport { useThemeToken } from '../hooks';\nimport './style.less';\n\nexport type SimpleLayoutProps = {\n className?: string;\n style?: CSSProperties;\n title?: string | ReactElement;\n desc?: string | ReactElement;\n formLabelAlign?: 'left' | 'right';\n layoutType?: 'layer' | 'tight';\n titleLeftLine?: boolean;\n contentStyle?: CSSProperties;\n /** 优先级大于 style padding */\n padding?: CSSProperties['padding'];\n /** 优先级大于 style width */\n width?: CSSProperties['width'];\n children?: ReactNode | ReactNode[];\n titleExtra?: string | ReactElement;\n};\n\n/**\n * 简单布局\n * @param props\n * @returns\n * ```\n * 1. layoutType 布局类型\n * layer:分层布局\n * tight:紧凑布局\n * ```\n */\nexport const SimpleLayout = (props: SimpleLayoutProps) => {\n const labelAlign = props.formLabelAlign || 'right';\n const className = classNames(\n 'simple-layout',\n {\n 'simple-layout-tight': props.layoutType === 'tight',\n 'simple-layout-formlabel-left': labelAlign === 'left',\n },\n props.className,\n );\n\n const titleClassName = classNames('simple-layout-title', {\n 'simple-layout-title-sign': props.titleLeftLine,\n });\n\n const theme = useThemeToken();\n const style = extend({ '--simple-layout-colorPrimary': theme.colorPrimary }, props.style, {\n padding: props.padding,\n width: props.width,\n });\n return (\n <div className={className} style={style}>\n {props.title && props.titleExtra ? (\n <div className={titleClassName}>\n <Space className=\"simple-layout-title-extra-space\">\n {props.title}\n <div className=\"simple-layout-title-extra\">{props.titleExtra}</div>\n </Space>\n </div>\n ) : null}\n {props.title && !props.titleExtra ? <div className={titleClassName}>{props.title}</div> : null}\n {props.desc ? <div className=\"simple-layout-desc\">{props.desc}</div> : null}\n {props.children ? (\n <div className=\"simple-layout-content\" style={props.contentStyle}>\n {props.children}\n </div>\n ) : null}\n </div>\n );\n};\n\nSimpleLayout.defaultProps = {\n titleLeftLine: true,\n layoutType: 'layer',\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nexport interface SmsCountDownProps {\n onSendRequest: () => Promise<void>; // 验证码请求函数\n totalTicks?: number; // 总倒计时,默认:60(s)\n duration?: number; // 倒计时间隔,默认:1000ms(1s)\n autoStart?: boolean; // 是否自动开始倒计时,默认:fasle,注意:不会自动调用 onSendRequest\n format?: string; // 倒计时格式化,默认:'{t}s'\n sendTxt?: string; // 文案,默认:'获取验证码'\n sentTxt?: string; // 倒计时完成文案,默认:'重新获取'\n processingTxt?: string; // 倒计时中文案,默认:'发送中...'\n onTick?: (time: number) => void; // 倒计时回调\n className?: string;\n}\nexport const SmsCountDown: FC<SmsCountDownProps> = (props) => {\n const [showMessage, setShowMessage] = useState<string>();\n\n const [running, setRunning] = useState(false);\n const [starting, setStarting] = useState(false);\n\n // 初始化设置有效\n const initConfig = useMemo<Omit<SmsCountDownProps, 'onSendRequest' | 'onTick' | 'className'>>(() => {\n return {\n sendTxt: props.sendTxt,\n sentTxt: props.sentTxt,\n processingTxt: props.processingTxt,\n format: props.format,\n autoStart: props.autoStart,\n totalTicks: props.totalTicks,\n duration: props.duration,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const format = initConfig.format as string;\n const totalTicks = initConfig.totalTicks as number;\n const duration = initConfig.duration as number;\n\n const countdownFnc = hooks.useCountdownCallback(\n (num) => {\n const second = num / 1000;\n if (num > 0) {\n if (!running) {\n setRunning(true);\n }\n setShowMessage(format.replace('{t}', String(second)));\n props.onTick?.(second);\n } else if (num === 0) {\n setRunning(false);\n setStarting(false);\n props.onTick?.(second);\n setShowMessage(initConfig.sentTxt);\n }\n },\n totalTicks * 1000,\n { intervalTime: duration },\n );\n\n useEffect(() => {\n if (!initConfig.autoStart) {\n setShowMessage(initConfig.sendTxt);\n } else {\n countdownFnc();\n setStarting(true);\n setRunning(true);\n }\n }, [countdownFnc, initConfig]);\n\n const onStart = hooks.useCallbackRef(() => {\n if (running || starting) return;\n setStarting(true);\n setShowMessage(initConfig.processingTxt);\n void props\n .onSendRequest()\n .then(() => {\n setRunning(true);\n countdownFnc();\n })\n .catch(() => {\n setShowMessage(initConfig.sendTxt);\n setStarting(false);\n });\n });\n\n const className = classNames('v-count-down', props.className, {\n running,\n starting,\n });\n\n return (\n <div className={className} onClick={onStart}>\n {showMessage}\n </div>\n );\n};\n\nSmsCountDown.defaultProps = {\n totalTicks: 60,\n duration: 1000,\n autoStart: false,\n format: '{t}s',\n sendTxt: '获取验证码',\n sentTxt: '重新获取',\n processingTxt: '发送中...',\n};\n","import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Switch, SwitchProps, Tooltip, TooltipProps } from 'antd';\ntype SwitchWrapperValue = string | number | boolean;\n\nexport type SwitchWrapperProps = Omit<SwitchProps, 'checked' | 'defaultChecked' | 'onChange'> & {\n value?: SwitchWrapperValue;\n checkedValue: SwitchWrapperValue;\n unCheckedValue: SwitchWrapperValue;\n onChange?: (value: SwitchWrapperValue) => void;\n tooltipProps?: Omit<TooltipProps, 'title'>;\n tooltipTitle?: string | ((value?: SwitchWrapperValue) => string | undefined);\n};\n/**\n * 解决Switch 和 Form.Item 使用只能接收boolean的限制\n * ```\n * 1. value 为状态值,不局限于boolean,可以为 [string | number | boolean]\n * 2. checkedValue 选中值\n * 3. unCheckedValue 未选中值\n * 4. 与 Form.Item 组合使用最佳\n * <Form.Item name=\"fieldName\" >\n * <SwitchWrapper checkedValue={2} unCheckedValue={1} />\n * </Form.Item>\n * 5. 可设置tooltip效果数据显示\n * ```\n */\nexport const SwitchWrapper = (props: SwitchWrapperProps) => {\n const { checkedValue, unCheckedValue, onChange, value, tooltipProps, tooltipTitle, ...otherProps } = props;\n const onChangeHandle = hooks.useCallbackRef((checked) => {\n onChange?.(checked ? checkedValue : unCheckedValue);\n });\n\n let tipTitle: string | undefined;\n\n if (typeof tooltipTitle === 'function') {\n tipTitle = tooltipTitle(value);\n } else {\n tipTitle = tooltipTitle;\n }\n\n return (\n <Tooltip placement=\"top\" {...tooltipProps} title={tipTitle}>\n <Switch\n {...otherProps}\n checked={!isUndefinedOrNull(value) && checkedValue === value}\n onChange={onChangeHandle}\n />\n </Tooltip>\n );\n};\n","import { isUndefinedOrNull, valueIsEqual } from '@flatbiz/utils';\nimport { Tag } from 'antd';\nimport { FC, Fragment, useMemo } from 'react';\n\nexport type TagWrapperValue = string | number | boolean;\nexport type TagWrapperDataItem = { label: string; value: TagWrapperValue; color?: string };\nexport type TagWrapperColorItem = { label: string; value: TagWrapperValue };\n\nexport type TagWrapperProps = {\n dataList: TagWrapperDataItem[];\n /**\n * 颜色配置数据,value为code、label为色值,例如:{ 1:'red', 2: 'blue'}\n */\n colorMap?: Record<string, string>;\n value?: TagWrapperValue;\n // 是否强制匹配,默认值false\n forceMatch?: boolean;\n};\n\n/**\n * 通过配置显示Tag效果\n * @param props\n * @returns\n * ```\n * 1. forceMatch: 是否强制匹配(默认值false)\n * - false: 匹配不到显示value值,\n * - true:匹配不到不显示\n * 2. value 与 dataList中label、value任一相等,都可匹配\n *\n * 用法1:\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1 }]\n * colorMap={{ 1:'red', 2: 'blue'}}\n * value={1} />\n * =>\n * <Tag color={'red'}>启用</Tag>\n *\n * 用法2\n * <TagWrapper\n * dataList=[{ label: '启用', value: 1. color: 'red' }]\n * value=\"启用\" />\n * =>\n * <Tag color={'red'}>启用</Tag>\n * ```\n */\nexport const TagWrapper: FC<TagWrapperProps> = (props) => {\n const tagItem = useMemo(() => {\n if (isUndefinedOrNull(props.value)) {\n return null;\n }\n if (!props.dataList || props.dataList.length === 0) {\n return { label: `${props.value}` };\n }\n\n const target = props.dataList.find(\n (item) => valueIsEqual(item.value, props.value) || item.label === props.value,\n );\n if (target) {\n return { label: target.label, color: props.colorMap?.[String(target.value)] || target.color };\n }\n if (props.forceMatch) {\n return undefined;\n }\n return { label: `${props.value}` };\n }, [props.colorMap, props.dataList, props.forceMatch, props.value]);\n\n if (!tagItem) {\n return <Fragment>{props.value}</Fragment>;\n }\n\n return (\n <Fragment>{tagItem?.color ? <Tag color={tagItem.color}>{tagItem.label}</Tag> : tagItem?.label}</Fragment>\n );\n};\n\nTagWrapper.defaultProps = {\n forceMatch: false,\n};\n","import { isEmpty, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { get } from '@dimjs/utils';\nimport {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { Fragment, ReactElement } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\nimport { TagWrapper, TagWrapperProps } from '../tag-wrapper';\n\nconst tableColumnTooltipRender = (showMaxNumber?: number, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n if (isNumber(value)) return value;\n const colunmText = value.toString();\n const maxNumber = (isUndefinedOrNull(showMaxNumber) ? 10 : showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= maxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, maxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n return (_value: string | number, record) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (dateFormatType?: DateFormatType, defaultValue?: string) => {\n return (value: string | number) => {\n if (isEmpty(value) || value === '') return defaultValue;\n try {\n return flatbizDate.format(new Date(value), dateFormatType);\n } catch (error) {\n return value || defaultValue;\n }\n };\n};\n\n/**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n * @param pageSize\n * @param pageNo\n * @returns\n */\nconst tableColumnIndexRender = (pageNo?: number, pageSize?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n if (pageSize && pageNo) {\n return (pageNo - 1) * pageSize + index + 1;\n }\n return index + 1;\n };\n};\n\nconst tableColumnSelectorRender = (\n selectorList: TagWrapperProps['dataList'],\n colorMap?: TagWrapperProps['colorMap'],\n) => {\n return (value: string | number) => {\n return <TagWrapper dataList={selectorList} colorMap={colorMap} value={value} forceMatch={false} />;\n };\n};\n\nconst tableColumnObjectRender = (key: string, defaultValue?: string) => {\n return (value?: TPlainObject) => {\n if (isPlainObject(value)) {\n const target = get(value, key, defaultValue);\n if (!target) return '';\n if (isObject(target)) return JSON.stringify(target);\n return target;\n }\n return value || defaultValue;\n };\n};\n\ntype TableColumnIconRenderProps = {\n /** 额外内容 */\n extra: ReactElement;\n onClick?: (e) => void;\n // 是否显示数据\n showData?: boolean;\n // 显示最大长度,多余省略\n showMaxNumber?: number;\n extraPosition?: 'before' | 'after';\n};\n\nconst tableColumnExtraContentRender = (handle: (item: TPlainObject) => TableColumnIconRenderProps) => {\n return (value: TAny, item: TPlainObject) => {\n const options = handle?.(item);\n if (!options) return <Fragment>{value}</Fragment>;\n const showData = isUndefinedOrNull(options.showData) ? true : options.showData;\n const showMaxNumber = isUndefinedOrNull(options.showMaxNumber) ? 10 : (options.showMaxNumber as number);\n const extraPosition = options.extraPosition ? options.extraPosition : 'after';\n const renderValue = isString(value) ? cutString(value, showMaxNumber * 2) : value;\n if (options.extra && showData) {\n const spaceContent = [<span key=\"1\">{renderValue}</span>, <Fragment key=\"2\">{options.extra}</Fragment>];\n const spaceContentRender = extraPosition === 'before' ? spaceContent.reverse() : spaceContent;\n return (\n <Space onClick={options.onClick} style={{ cursor: options.onClick ? 'pointer' : undefined }} size={5}>\n {spaceContentRender.map((item, index) => {\n return <Fragment key={index}>{item}</Fragment>;\n })}\n </Space>\n );\n }\n if (options.extra) {\n return options.extra;\n }\n return <span onClick={options.onClick}>{value}</span>;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格单元格 拼接额外内容渲染\n * ```\n * 1. extra 额外内容\n * 2. showData 是否显示数据,默认值:true\n * 3. onClick 点击事件,showData != false 有效\n * 4. showMaxNumber 显示最大长度,作用于原单元格字符串数据\n * ```\n */\n extraContentRender: tableColumnExtraContentRender,\n /**\n * table 索引展示,如果存在pageSize、pageNo参数可分页展示索引,否则每页都从1开始\n */\n indexCell: tableColumnIndexRender,\n /**\n * 表格日期格式数据渲染,默认格式:YYYY-MM-DD\n * ```\n * dateFormatType: 日期格式\n * ```\n */\n dateCell: tableColumnDateRender,\n /**\n * table操作栏目渲染\n * ```\n * 使用方式\n * tableCellRender.operateCell((item) => ({\n * operateList: [\n * {\n * text: '编辑',\n * onClick: onItemOperate.bind(null, 'update', item),\n * permission: SystemAdminPermissionEnum.system_admin_edit,\n * },\n * {\n * text: '删除',\n * needConfirm: true,\n * confirmMessage: '确定要删除吗?',\n * onClick: onItemOperate.bind(null, 'delete', item),\n * permission: SystemAdminPermissionEnum.system_admin_delete,\n * },\n * ],\n * }))\n * ```\n */\n operateCell: tableColumnOperateRender,\n /**\n * 实现字段超出隐藏,默认长度10个字符\n * ```\n * 1. showMaxNumber: 显示最大长度\n * 2. 会讲字符转出字节进行计算显示\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\n /**\n * ```\n * 使用方式1\n * tableCellRender.selectorCell([{ label: '已开启', value: 1, color: '#108ee9' }])\n *\n * 使用方式2\n * tableCellRender.selectorCell([{ label: '已开启', value: 1 }], { 1: '#108ee9' })\n * ```\n */\n selectorCell: tableColumnSelectorRender,\n /**\n * 单元格对象数据处理,支持多级处理\n * ```\n * tableCellRender.objectCell('a.b.c')\n * ```\n */\n objectCell: tableColumnObjectRender,\n};\n","import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Space, Tooltip } from 'antd';\nimport { CSSProperties, ReactElement } from 'react';\n\nexport type TableTitleTooltipProps = {\n title: string;\n tooltip: string | { icon: ReactElement; content: string };\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n};\n\nexport const TableTitleTooltip = (props: TableTitleTooltipProps) => {\n const tooltip = props.tooltip;\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (typeof tooltip === 'string') {\n return (\n <Tooltip title={tooltip}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span style={{ opacity: 0.7 }}>\n <QuestionCircleOutlined />\n </span>\n </Space>\n </Tooltip>\n );\n }\n return (\n <Tooltip title={tooltip.content}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.title}</span>\n <span>{tooltip.icon}</span>\n </Space>\n </Tooltip>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { sessionStorageCache } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Tabs, TabsProps } from 'antd';\nimport { useMemo } from 'react';\nimport './style.less';\n\nexport type TabsWrapperProps = TabsProps & {\n /** Tabs Header 提供 Sticky 效果,默认值:true */\n isSticky?: boolean;\n /** 是否取消 active 缓存 */\n cancelActiveCache?: boolean;\n activeCacheKey?: string;\n};\n\n/**\n * Tabs 包装组件\n * ```\n * 1. Tabs Header 提供 Sticky 效果,默认值:true\n * 2. 使用时,父级必须要有高度,可置于Flex布局中\n * 3. 默认缓存激活的tab item(activeKey受控操作下缓存无效)\n * 当未设置activeKey,非受控操作时,组件内部会会话缓存activeKey,在刷新时,会显示上次的激活的tab item\n * 缓存Key:如果未设置 activeCacheKey,则使用默认的 cache key(tabs-wrapper-activeKey)\n * 缓存模式:会话缓存,在浏览器关闭后,会清除\n * ```\n */\nexport const TabsWrapper = (props: TabsWrapperProps) => {\n const { isSticky = true, activeCacheKey, cancelActiveCache, ...otherProps } = props;\n // 是否受控操作\n const isControl = Object.prototype.hasOwnProperty.call(props, 'activeKey');\n const cacheKey = activeCacheKey || 'tabs-wrapper-activeKey';\n\n const onChange = hooks.useCallbackRef((activeKey: string) => {\n if (cancelActiveCache !== true && !isControl) {\n sessionStorageCache.set(cacheKey, { activeKey });\n }\n otherProps.onChange?.(activeKey);\n });\n\n const defaultActiveKey = useMemo(() => {\n if (cancelActiveCache === true || isControl) {\n return props.defaultActiveKey;\n }\n const chcheActiveKey = sessionStorageCache.get(cacheKey)?.activeKey as string | undefined;\n return chcheActiveKey || otherProps.defaultActiveKey;\n }, [cacheKey, cancelActiveCache, isControl, otherProps.defaultActiveKey, props.defaultActiveKey]);\n\n const className = classNames({ 'tabs-sticky': isSticky }, otherProps.className);\n\n return (\n <Tabs {...otherProps} className={className} defaultActiveKey={defaultActiveKey} onChange={onChange} />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimePickerProps } from 'antd';\nimport dayjs from 'dayjs';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport type TimePickerWrapperProps = Omit<TimePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * 1. minTime、maxTime设置为 DayjsTimeTypeEnum,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimePickerWrapper = (props: TimePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, format, ...otherProps } = props;\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const customFormat = format || DayjsTimeTypeEnum.Hms;\n\n const onChangeTime = hooks.useCallbackRef((time: dayjs.Dayjs | null, timeString: string) => {\n if (time) {\n onChange?.(timeString);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value) {\n return dayjs(value, customFormat);\n }\n return undefined;\n }, [customFormat, props.value]);\n\n const getDisabledTime: TimePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n const showNow = useMemo(() => {\n const now = dayjs();\n return (\n now.isSameOrAfter(dayjs(minTime || '00:00:00', customFormat)) &&\n now.isSameOrBefore(dayjs(maxTime || '23:59:59', customFormat))\n );\n }, [customFormat, maxTime, minTime]);\n\n return (\n <TimePicker\n showNow={showNow}\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={customFormat}\n />\n );\n};\n","import { hooks } from '@wove/react';\nimport { TimePicker, TimeRangePickerProps } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport { useMemo } from 'react';\nimport { DayjsDateTypeEnum, DayjsTimeTypeEnum } from '../types';\nimport { getDisabledHour, getDisabledMinute, getDisabledSecond } from '../_utils/time';\n\nexport type TimeRangePickerWrapperProps = Omit<TimeRangePickerProps, 'value' | 'onChange' | 'format'> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minTime、maxTime设置格式,默认格式:DayjsTimeTypeEnum.Hms\n * 2. minTime、maxTime格式必须与 format 相同\n */\n disabledTimeConfig?: {\n minTime?: string;\n maxTime?: string;\n /** 禁用 小时 刻度列表,与日期无关 */\n disabledHourList?: number[];\n /** 禁用 分钟 刻度列表,与日期无关 */\n disabledMinuteList?: number[];\n /** 禁用 秒钟 刻度列表,与日期无关 */\n disabledSecondList?: number[];\n };\n format?: DayjsTimeTypeEnum;\n};\n// export declare type EventValue<DateType> = DateType | null;\n// export declare type RangeValue<DateType> = [EventValue<DateType>, EventValue<DateType>] | null;\n/**\n * TimePicker组件包装\n * ```\n * 1. value类型为 [string, string]\n * 2. onChange返回类型 [string, string]\n * 3. 默认格式化类型 HH:mm:ss,其他格式化类型自定义format\n * 4. 设置disabledTime后,disabledTimeConfig配置将失效\n * ```\n */\nexport const TimeRangePickerWrapper = (props: TimeRangePickerWrapperProps) => {\n const { onChange, disabledTimeConfig, ...otherProps } = props;\n\n const { minTime, maxTime, disabledHourList, disabledMinuteList, disabledSecondList } =\n disabledTimeConfig || {};\n\n const format = useMemo(() => {\n return props.format || DayjsTimeTypeEnum.Hms;\n }, [props.format]);\n\n const onChangeTime = hooks.useCallbackRef((date, [timeStart, timeEnd]: [string, string]) => {\n if (date) {\n onChange?.([timeStart, timeEnd]);\n } else {\n onChange?.(undefined);\n }\n });\n\n const timePickerValue = useMemo(() => {\n const value = props.value;\n if (value && value.length > 0) {\n return [\n value[0] ? dayjs(value[0], format) : value[0],\n value[1] ? dayjs(value[1], format) : value[1],\n ] as [Dayjs, Dayjs];\n }\n return undefined;\n }, [props.value, format]);\n\n const getDisabledTime: TimeRangePickerProps['disabledTime'] = () => {\n const date = dayjs().format(DayjsDateTypeEnum.YMD);\n const options = {\n minDateTime: minTime ? dayjs(`${date} ${minTime}`) : undefined,\n maxDateTime: maxTime ? dayjs(`${date} ${maxTime}`) : undefined,\n disabledHourList,\n disabledMinuteList,\n disabledSecondList,\n };\n return {\n disabledHours: () => {\n return getDisabledHour(dayjs(), options);\n },\n disabledMinutes: (hour: number) => {\n return getDisabledMinute(dayjs(`${date} ${hour}`), options);\n },\n disabledSeconds: (hour: number, minute: number) => {\n return getDisabledSecond(dayjs(`${date} ${hour}:${minute}`), options);\n },\n };\n };\n\n return (\n <TimePicker.RangePicker\n disabledTime={getDisabledTime}\n {...otherProps}\n value={timePickerValue}\n onChange={onChangeTime}\n format={format}\n />\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Form, FormItemProps, Input } from 'antd';\nimport { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport { TimeRangePickerWrapper, TimeRangePickerWrapperProps } from '../time-range-picker-wrapper';\nimport { FormItemNamePath } from '../types';\n\nexport type TimeRangePickerWrapperFormItemProps = Omit<FormItemProps, 'name'> & {\n /**\n * 开始的时间name\n */\n startName: FormItemNamePath;\n /**\n * 结束的时间name\n */\n endName: FormItemNamePath;\n /**\n * 如果 TimeRangePickerWrapperFormItem 在Form.List场景下 必传\n */\n formListName?: FormItemNamePath;\n timeRangePickerWrapperProps?: Omit<TimeRangePickerWrapperProps, 'onChange'>;\n};\n/**\n * 包含了Form.Item组件的时间区间选择组件\n * ```\n * 1. 时间区间组件可以定义成两个字段操作,不用再通过数组处理\n * 2. 会在form中产生一个 `__#invalid_time_xxxx_xxxx` 的无效字段,可以直接忽略\n * ```\n */\nexport const TimeRangePickerWrapperFormItem = (props: TimeRangePickerWrapperFormItemProps) => {\n const { startName, endName, formListName, timeRangePickerWrapperProps, ...otherProps } = props;\n const form = Form.useFormInstance();\n const bodyName = useMemo(() => {\n if (isArray(startName) && isArray(endName)) {\n return startName\n .slice(0, startName.length - 1)\n .concat(`__#invalid_time_${startName[startName.length - 1]}_${endName[endName.length - 1]}`);\n }\n return `__#invalid_time_${startName}_${endName}`;\n }, [startName, endName]);\n\n const startNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, startName) : startName;\n }, [startName, formListName]);\n\n const endNameMerge = useMemo(() => {\n return formListName ? ([] as (string | number)[]).concat(formListName, endName) : endName;\n }, [endName, formListName]);\n\n const startVal = Form.useWatch(startNameMerge, form);\n const endVal = Form.useWatch(endNameMerge, form);\n const bodyVal = Form.useWatch(bodyName, form);\n\n useEffectCustom(() => {\n if (startVal && endVal) {\n const name = formListName ? ([] as (string | number)[]).concat(formListName, bodyName) : bodyName;\n form.setFields([{ name, value: [startVal, endVal] }]);\n }\n }, [startVal, endVal, bodyVal]);\n\n const reftest = useRef<InputContentRef>(null);\n const reftest2 = useRef<InputContentRef>(null);\n\n const onChange = hooks.useCallbackRef((data) => {\n form.setFields([\n { name: startNameMerge, value: data?.[0] },\n { name: endNameMerge, value: data?.[1] },\n ]);\n // 为了解决 外部Form onValuesChange获取到操作值\n reftest.current?.onChange?.(data?.[0]);\n reftest2.current?.onChange?.(data?.[1]);\n });\n\n return (\n <>\n <Form.Item name={startName} hidden>\n <InputContent ref={reftest} />\n </Form.Item>\n <Form.Item name={endName} hidden>\n <InputContent ref={reftest2} />\n </Form.Item>\n <Form.Item {...otherProps} name={bodyName}>\n <TimeRangePickerWrapper {...timeRangePickerWrapperProps} onChange={onChange} />\n </Form.Item>\n </>\n );\n};\n\ntype InputContentProps = {\n onChange?: (data: any) => void;\n value?: string;\n};\n\ntype InputContentRef = {\n onChange?: (data: any) => void;\n};\n\nconst InputContent = forwardRef<InputContentRef, InputContentProps>((props, ref) => {\n useImperativeHandle(ref, () => {\n return {\n onChange: (startVal) => {\n props.onChange?.(startVal);\n },\n };\n });\n\n return <Input value={props.value} />;\n});\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: RequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNumber,\n isUndefinedOrNull,\n toArray,\n TPlainObject,\n treeToArray,\n valueIsEqual,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getExpandedKeys, getVauleList, treeSelectorWrapperValueDeepEqual } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n 'treeExpandedKeys' | 'treeData' | 'loading' | 'onTreeExpand' | 'onChange' | 'value' | 'fieldNames'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n // // label渲染适配器\n // onLabelRenderAdapter?: (dataItem: TPlainObject) => string;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n};\n\ntype TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n};\n\n/**\n * 树选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n // onLabelRenderAdapter,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n showAllOption,\n ...otherProps\n } = props as TreeSelectorWrapperPropsInner;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [innerOperateValue, setInnerOperateValue] = useState<\n Array<TPlainObject> | string | number | Array<string | number> | TPlainObject\n >();\n const isFirstUseValueRef = useRef(true);\n\n useEffectCustom(() => {\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (state.treeSelectorList.length > 0) {\n if (!treeSelectorWrapperValueDeepEqual(value, innerOperateValue, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeSelectorWrapper key refresh`, value, innerOperateValue);\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n setInnerOperateValue(valueList);\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: any[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[labelInValueFieldNamesMerge.label],\n value: item?.[labelInValueFieldNamesMerge.value],\n disabled: item?.['disabled'],\n };\n });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: any, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n setInnerOperateValue(values);\n onChange?.(values);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: any, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const innerOperateValueList = toArray(innerOperateValue);\n if (innerOperateValueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return innerOperateValueList.map((item) => ({ label: item, value: item }));\n }\n return innerOperateValueList.map((item) => {\n let targetParseItem: TPlainObject;\n let defualtValue;\n if (isString(item) || isNumber(item as any)) {\n const target = arrayFind(state.treeSelectorTiledArray, item as string, fieldNamesMerge.value);\n targetParseItem = parseDataSourceItem(target) as TPlainObject;\n defualtValue = item;\n } else {\n targetParseItem = parseLabelInValueItem(item as TPlainObject) as TPlainObject;\n }\n return {\n label: getValueOrDefault(targetParseItem?.label, defualtValue),\n value: getValueOrDefault(targetParseItem?.value, defualtValue),\n };\n });\n }\n return getVauleList(innerOperateValue, labelInValueFieldNamesMerge);\n }, [\n innerOperateValue,\n otherProps.treeCheckStrictly,\n labelInValueFieldNamesMerge,\n state.treeSelectorTiledArray,\n fieldNamesMerge.value,\n parseDataSourceItem,\n parseLabelInValueItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatusRender\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { RequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: RequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: RequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { useSafeState } from '../hooks';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { InputSearchWrapper } from '../input-wrapper';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[];\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n required?: boolean;\n requestMessageConfig?: RequestStatusRenderProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n // treeItem数据适配器\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n void actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n return loop(list);\n }, [\n state.treeList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const menuOptions = props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n if (!menuOptions || menuOptions.length === 0) {\n return <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>;\n }\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n\n if (state.treeList.length > 0 && state.requestStatus !== 'request-error') {\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n return (\n <div className=\"v-tree-wrapper\">\n <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>\n {showSearch ? (\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n style={{ marginBottom: 12 }}\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n ) : null}\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n );\n }\n\n return (\n <RequestStatusRender\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["styles","noop","getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","ButtonWrapper","useState","loading","_useState","setLoading","debounceDuration","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","hidden","jsx","Button","_extends","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","useRef","curRef","current","useSafeState","initialState","setState","isMounted","useIsMounted","value","useThemeToken","theme","useToken","token","dayjs","extend","customParseFormat","advancedFormat","weekday","localeData","weekOfYear","weekYear","dayjsUtc","ConfigProviderWrapper","locale","otherProps","_excluded","ConfigProvider","componentSize","space","size","enUS","zhCN","DropdownMenuWrapper","menuList","dropdownOtherProps","menuItems","open","setOpen","_useState2","onConfirmtTriggerClick","useCallbackRef","event","stopPropagation","onConfirm","item","forEach","index","text","color","permission","needConfirm","confirmMessage","type","style","popconfirmProps","_excluded2","newStyle","buttonType","nromal","key","label","_createElement","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","menu","items","onOpenChange","_open","ButtonOperate","log","operateList","filter","isValidElement","_item$props","_item$props2","_isString","_isPlainObject","viewList","useMemo","isFold","foldList","filterList","target","split","toArray","className","_classNames","classNames","_jsxs","Space","Divider","wrap","_isUndefined","map","placement","DefaultButton","undefined","createElement","length","foldIcon","_MoreOutlined","buttonTheme","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","components","defaultProps","RequestStatusRender","messageConfig","_extend","description","status","valueIsEqual","Empty","image","PRESENTED_IMAGE_SIMPLE","Spin","spinning","errorButton","defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","Model","CascaderWrapper","forwardRef","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","$await_3","concat","onChange","values","selectList","onClear","Cascader","showSearch","allowClear","popupClassName","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","CssNodeHover","cloneElement","DayjsDateTypeEnum","DayjsTimeTypeEnum","range","start","end","i","getDisabledHour","_options$minDateTime","_options$maxDateTime","minTimeHour","maxTimeHour","minDateTime","format","YMD","get","maxDateTime","selectableMinute","disabledHourList","_options$disabledHour","getDisabledMinute","_options$minDateTime2","_options$maxDateTime2","minTimeMinute","maxTimeMinute","YMDH","disabledMinuteList","_options$disabledMinu","getDisabledSecond","_options$minDateTime3","_options$maxDateTime3","minTimeSecond","maxTimeSecond","YMDHm","disabledSecondList","_options$disabledSeco","DatePickerWrapper","_ref","disabledDateConfig","minDate","maxDate","minDateTimeDayInst","maxDateTimeDayInst","customFormat","showTime","YMDHms","onChangeDate","date","dateString","getDisabledDate","currentDate","flatbizDate","in","gte","datePickerValue","dateNormalize","getDisabledTime","Date","disabledHours","disabledMinutes","disabledSeconds","DatePicker","disabledDate","disabledTime","width","DateRangePickerWrapper","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref2","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","bodyVal","setFields","reftest","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","cancelButtonProps","content","configProviderProps","okHidden","cancelHidden","footer","useForm","_Form$useForm","onClose","onCancelHandle","response","onOkHandle","onAfterClose","afterClose","operateGroup","footerNew","Modal","maskClosable","centered","destroyOnClose","getContainer","dialogModal","_bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","dialogConfirm","dialogAlert","okButtonExtraProps","cancelButtonExtraProps","_props$operatePositio","operatePosition","operateRender","_props$width","jsxs","operateRenderHandle","Drawer","contentWrapperStyle","maxWidth","extra","dialogDrawer","closable","dialogLoading","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWrapperContent","operationProps","DrawerWrapperFooter","DrawerWrapper","keyboard","forceRender","Content","Footer","drawerModels","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","inputValueRef","isFirstUseValueRef","inputKey","setInputKey","nativeEvent","onCompositionEnd","defaultValue","InputSearchWrapper","defaultSearchInputKey","setDefaultSearchInputKey","Search","InputTextAreaWrapper","seInputKey","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","requestRespCacheData","setSelectorListCount","resetSelectorList","onRequestRespHandle","request","requestStringify","onSearchRequestRespHandle","selectorWrapperModels","selectorWrapperModel","getVauleList","valueKey","_isObject","isObject","SelectorWrapper","showAllOption","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","outerSelectorList","searchIdFieldName","labelInValue","labelInValueFieldNames","serviceRequestParams","hasServiceRequestParams","keys","serviceRequestParamsStringify","sortDataStringify","JSON","stringify","_json","json","sort","prevServiceRequestParamsStringify","isSearch","hasOuterSelectorList","hasOwnProperty","_selectorWrapperModel","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isMultiple","mode","selectValue","targetList","stateSelectorList","_state$requestRespCac","_arrayFind","arrayFind","inputValue","searchId","_params","keyword","$Try_2_Post","$Try_2_Catch","serviceRequest","hasProcessRequest","process","setProcessRequestStatus","cacheList","prevRequestHandle","requiredParamsKeys","isEmpty","useUpdateEffect","filterOption","input","option","mergeString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","labelInValueList","onInnerChange","_value","otherParams","filterTarget","selectorAllList","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","isArray","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","isNumber","_isBoolean","warn","viewText","Typography","Paragraph","ellipsis","tooltip","TextFormItem","noStyle","TextAreaFormItem","UploadWrapper","onUploadError","uploadList","setUploadList","uid","url","onUploadChange","info","fileList","file","code","maxCount","targetIndex","findIndex","tempUid","splice","Upload","UploadTrigger","listType","marginTop","ghost","UploadWrapperFormItemContent","_objectWithoutPropertiesLoose","_editableComptProps","UploadWrapperFormItem","FormItemAdapter","newEditable","commomProps","completeName","FormList","from","formListConfig","onFormListBeforeRender","editableConfigList","onFormListAfterRender","onFormListItemBeforeRender","onFormListItemAfterRender","deleteOperateRender","List","fields","add","remove","getFieldValue","fieldChild","hasEditable","formListItemIndex","fieldItem","fieldName","DeleteFormListItem","_DeleteOutlined","FormListItem","hiddenField","dataIndex","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","EditorWrapper","_","editor","getContent","respValue","_Editor","Editor","cdnTinyMce","init","height","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FlexLayout","childrens","Children","direction","gap","fullIndexList","fullIndex","_children$props","childrenStyle","flex","marginRight","marginBottom","forceAloneRowGrid","xs","sm","md","lg","xl","xxl","FormCol","forceAloneRow","forceGrid","Col","fullGrid","FormOperateCol","leftList","rightList","rowColTotal","justify","_leftList","_rightList","hasAll","colJustify","Row","useResponsivePoint","screens","Grid","useBreakpoint","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","gridGroupList","defaultGrid","FormRow","screenType","childrenList","_currentGridList","_temp$props","itemProps","newProps","FormItemCard","_classNames2","classNamePrefix","titleSign","FormItemHorizontalUnion","groupFlexElementData","flexElementList","groupConfigList","before","mainItem","after","required","flexLayoutStyle","FormItemGroup","HorizontalUnion","Card","Gap","inline","IconWrapper","hideHoverBgColor","hoverTips","Tooltip","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","modalModels","createModalWrapperModel","PageFixedFooter","Page404","Result","subTitle","formClassName","label_width_70","label_width_80","label_width_90","label_width_100","label_width_110","label_width_120","label_width_130","label_width_140","label_width_150","label_width_160","label_width_170","label_width_180","label_width_190","label_width_200","label_width_auto","label_align_left","label_align_right","label_value_vertical","formItemClassName","preDefinedClassName","formItem","RadioGroupWrapper","onPreChange","$If_1","this","isCancel","checked","Relation","_props$onTagClick","tagLineWidth","indentWidth","tagWidth","lineColor","onlyOne","solt1","solt2","tagName","tagColor","onTagClick","RelationGroupList","RelationItem","isFirst","isLast","deleteLoop","_data$relationList","relationList","_item$customData","_item$children","customData","innerItem","filterSurplusData","RelationItemRender","relationItem","_relationItem$childre","relationItemRender","extraData","RelationTreeLoop","relationProps","_relationItem$childre2","component","lastRelationItem","hasSolt2","flat","RelationTree","setDataSource","onRelationItemContentChange","getTargetRelationList","relationTreeList","relationTree","innerIndex","_element$customData","onAdd","initialData","_result$relationTree","_result$relationTree2","addChildren","onRemove","RuleDescribe","showTitleIndex","ruleDataList","ruleItemTitleStyle","desc","ruleItemDescStyle","SelectorWrapperSimple","setRequestStatus","serviceParams","unshift","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","titleExtra","contentStyle","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","_useState3","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","duration","countdownFnc","useCountdownCallback","num","second","replace","onTick","intervalTime","onStart","onSendRequest","SwitchWrapper","checkedValue","unCheckedValue","tooltipProps","tooltipTitle","onChangeHandle","tipTitle","Switch","TagWrapper","tagItem","_props$colorMap","colorMap","forceMatch","tableColumnTooltipRender","showMaxNumber","_isEmpty","colunmText","toString","maxNumber","strByteLen","getStrByteLen","cutString","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","_record","tableColumnSelectorRender","tableColumnObjectRender","_get","tableColumnExtraContentRender","handle","showData","extraPosition","renderValue","spaceContent","spaceContentRender","reverse","cursor","tableCellRender","extraContentRender","indexCell","dateCell","operateCell","tooltipCell","selectorCell","objectCell","TableTitleTooltip","opacity","_QuestionCircleOutlined","TabsWrapper","isSticky","_props$isSticky","activeCacheKey","cancelActiveCache","isControl","prototype","cacheKey","activeKey","sessionStorageCache","set","defaultActiveKey","_sessionStorageCache$","chcheActiveKey","Tabs","isSameOrBefore","isSameOrAfter","TimePickerWrapper","disabledTimeConfig","minTime","maxTime","Hms","onChangeTime","time","timeString","timePickerValue","hour","minute","showNow","TimePicker","TimeRangePickerWrapper","hooks","timeStart","timeEnd","TimeRangePickerWrapperFormItem","timeRangePickerWrapperProps","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","resetSelectBoxList","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","tempList","array2map","list","treeSelectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","TreeSelectorWrapper","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","hasTreeSelectorList","newEffectDependencyList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckable","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","valueIsEmpty","serviceResponseHandle","_respData2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","triggerNode","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isString","getValueOrDefault","treeSelectValue","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","defaultValueRef","treeSearchValue","setTreeSearchValue","refreshKey","setRefreshKey","innerOperateValueRef","$await_4","_item$label","onClearSelectorList","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","lvLabel","lvValue","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","adapterItem","strTitle","titleDom","beforeStr","substring","afterStr","_treeItemName","_disabled","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_5","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","stringLabel","menuOptions","getMenuOptions","onChangeDebounce","onSearchValueChange","onSearchChange","iconHandle","isLeafFlag","isParent","treeFieldNames","commonProps","showLine","blockNode","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","defaultSelectedKeys","sceneProps","placeholder","Tree"],"mappings":";8nEAGO,IAAMA,GAASC,EAAAA,yYCCTC,IAAAA,GAAoB,SAApBA,IACX,IAAAC,EAA0BC,EAAAA,gBAAlBC,IAAAA,cACR,IAAMC,EAA2BC,EAAQF,QAAAA,GAAiBA,EAAgB,GAC1E,OAAOC,CACT,MAEaE,GAAgB,SAAhBA,EAAiBC,GAC5B,IAAKA,EAAM,OAAO,KAClB,IAAMH,EAAiBJ,KACvB,GAAII,EAAeI,SAASD,GAAO,CACjC,OAAO,IACT,CACA,OAAO,KACT,MAMaE,GAAa,SAAbA,EAAcC,GACzB,IAAMN,EAAiBJ,KACvB,IAAKU,EAAMH,MAAQH,EAAeI,SAASE,EAAMH,MAAO,CACtD,OAAOI,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SAAEH,EAAMG,UAC1B,CACA,OAAO,IACT,MCPaC,GAAgB,SAAhBA,EAAiBJ,GAC5B,IAA8BK,EAAAA,EAAQA,SAAC,OAAhCC,EAAOC,EAAA,GAAEC,EAAUD,EAAA,GAE1B,IAAME,EAAmBC,EAAAA,kBAAkBV,EAAMS,kBAAoB,IAAMT,EAAMS,iBAEjF,IAAME,EAAUC,EAAAA,MAAMC,kBAAiB,SAACC,GACtC,IAAMH,EAAUX,EAAMW,QACtB,IAAKA,EAAS,CACZ,MACF,CACA,IAAMI,EAASJ,EAAQG,GACvB,GAAIC,GAAUC,YAAUD,GAAS,CAC/BP,EAAW,MACXO,EACGE,OAAM,SAACC,GACNC,QAAQD,MAAMA,EAChB,IACCE,SAAQ,WACPZ,EAAW,MACb,GACJ,CACD,GAAEC,GAEH,IAAKb,GAAcI,EAAMH,MAAO,CAC9B,OAAO,IACT,CAEA,GAAIG,EAAMqB,OAAQ,CAChB,OAAO,IACT,CAEA,OACEpB,EAAAqB,IAACC,EAAMA,OAAAC,GAAA,CAAA,EAAKxB,EAAK,CAAEW,QAASA,EAASL,QAASA,EAAQH,SACnDH,EAAMG,WAGb,ECxDO,IAAMsB,GAAkB,SAAlBA,EAAmBC,EAAoBC,GAElD,OAAOC,EAASA,UAACF,EAAIC,EACvB,ECHO,IAAME,GAAuB,SAAvBA,EAAwBH,EAAyBC,GAC5DC,EAAAA,WAAU,WACR,SAAeE,IAAf,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GACE,OAAMP,QAAAA,QAAAA,KAANQ,MAAU,SAAAC,GALhB,IAAI,OAAAH,GAA8B,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,CAAC,GAAAH,EAKnB,GACX,MACIH,GAEN,GAAEH,EACL,ECNA,IAAMU,GAAsB,SAAtBA,EAA0BC,EAAOC,GAAK,OAAMC,OAAOC,GAAGH,EAAGC,EAAE,EAE1D,SAASG,GACdC,EACAC,GACe,GADfA,SAAiC,EAAA,CAAjCA,EAAoCP,EAAmB,CAEvD,IAAMQ,EAAUC,EAAAA,SAChB,IAAMC,EAASD,EAAAA,SAEf,GAAIF,EAAaG,EAAOC,QAASL,GAAQ,CACvCE,EAAQG,QAAUD,EAAOC,QACzBD,EAAOC,QAAUL,CACnB,CAEA,OAAOE,EAAQG,OACjB,KChBaC,GAAe,SAAfA,EACXC,GAEA,IAA0B7C,EAAAA,EAAQA,SAAC6C,GAA5BP,EAAKpC,EAAA,GAAE4C,EAAQ5C,EAAA,GACtB,IAAM6C,EAAYxC,QAAMyC,eAExB,MAAO,CACLV,EACA,SAACW,GACC,GAAIF,EAAUJ,QAAS,CACrB,OAAOG,EAASG,EAClB,CACF,EAEJ,ECfaC,IAAAA,GAAgB,SAAhBA,IACX,IAAkBC,EAAAA,EAAKA,MAACC,WAAhBC,IAAAA,MACR,OAAOA,CACT,oBCUAC,EAAAA,WAAMC,OAAOC,EAAAA,YACbF,EAAAA,WAAMC,OAAOE,EAAAA,YACbH,EAAAA,WAAMC,OAAOG,EAAAA,YACbJ,EAAAA,WAAMC,OAAOI,EAAAA,YACbL,EAAAA,WAAMC,OAAOK,EAAAA,YACbN,EAAAA,WAAMC,OAAOM,EAAAA,YACbP,EAAAA,WAAMC,OAAOO,EAAAA,gBAMAC,GAAwB,SAAxBA,EAAyBpE,GACpC,IAAQqE,EAA0BrE,EAA1BqE,OAAWC,KAAetE,EAAKuE,IAEvC9C,IAAgB,WACdkC,EAAAA,WAAMU,OAAQrE,EAAMqE,QAAgC,QACrD,GAAE,IACH,OACEpE,MAACuE,EAAcA,eAAAhD,GAAA,CACbiD,cAAe,SACfC,MAAO,CAAEC,KAAM,WACXL,EAAU,CACdD,OAAQA,IAAW,KAAOO,EAAAA,WAAOC,EAAK,WAAA1E,SAErCH,EAAMG,WAGb,oICnBa2E,GAAsB,SAAtBA,EAAuB9E,GAClC,IAAQ+E,EAAoC/E,EAApC+E,SAAaC,KAAuBhF,EAAKuE,IACjD,IAAMU,EAAwB,GAC9B,IAAwB5E,EAAAA,EAAQA,SAAC,OAA1B6E,EAAI3E,EAAA,GAAE4E,EAAO5E,EAAA,GACpB,IAA8BF,EAAAA,EAAQA,SAAC,OAAhCC,EAAO8E,EAAA,GAAE5E,EAAU4E,EAAA,GAE1B,IAAMC,EAAyBzE,EAAAA,MAAM0E,gBAAe,SAACC,GACnDA,EAAMC,kBACNL,EAAQ,KACV,IAEA,IAAMM,EAAY7E,EAAM0E,MAAAA,gBAAe,SAACI,EAAwBH,GAC9DA,EAAMC,kBACN,IAAMzE,EAAS2E,EAAK/E,SAAL+E,UAAAA,EAAAA,EAAK/E,QAAU4E,GAC9B,GAAIxE,GAAUC,YAAUD,GAAS,CAC/BP,EAAW,MACXO,EAAOK,SAAQ,WACb+D,EAAQ,OACR3E,EAAW,MACb,IACA,MACF,CACA2E,EAAQ,MACV,IAEA,IAAMxE,EAAUC,EAAM0E,MAAAA,gBAAe,SAACI,EAAwBH,GAC5DA,EAAMC,kBACN,OAAOE,EAAK/E,SAAO,UAAA,EAAZ+E,EAAK/E,QAAU4E,EACxB,IAEAR,EAASY,SAAQ,SAACD,EAAME,GACtB,IAAKF,EAAM,OACX,IACEG,EAUEH,EAVFG,KACAC,EASEJ,EATFI,MACAC,EAQEL,EARFK,WACAC,EAOEN,EAPFM,YACAC,EAMEP,EANFO,eACA5E,EAKEqE,EALFrE,OACA6E,EAIER,EAJFQ,KACAC,EAGET,EAHFS,MACAC,EAEEV,EAFFU,gBACG9B,KACDoB,EAAIW,IACR,GAAIhF,EAAQ,OACZ,GAAI0E,IAAenG,GAAcmG,GAAa,OAC9C,IAAMO,EAAWR,EAAKtE,GAAA,CAAKsE,MAAAA,GAAUK,GAAUA,EAC/C,IAAMI,EAAaL,GAAQ,OAC3B,IAAMM,EAAS,CACbC,IAAKb,EACLc,MACEC,EAAAA,cAACvG,GAAaoB,GAAA,CACZmD,KAAK,SACDL,EAAU,CACd4B,KAAMK,EACNJ,MAAOG,EACPG,IAAKb,EACLjF,QAASA,EAAQiG,KAAK,KAAMlB,KAE3BG,IAIP,IAAMgB,EAAU,CACdJ,IAAKb,EACLc,MACEC,EAAAA,cAACG,EAAUA,WAAAtF,GAAA,CACTuF,OAAO,KACPC,WAAW,KACXC,QAAS,CAAC,SACVC,qBAAsB,MAClBd,EAAe,CACnBe,MAAOlB,EACPR,UAAWA,EAAUmB,KAAK,KAAMlB,GAChC0B,SAAU,SAAC7B,EAAAA,GACTA,GAAAA,UAAAA,EAAAA,EAAOC,kBACPL,EAAQ,MACR,EACFkC,mBAAoB,KACpBZ,IAAKb,EACL0B,aAAc,CAAEC,OAAQ,IACxBrC,KAAMA,EACNsC,cAAe,CACblH,QAAAA,KAGFL,EAAAA,IAACsB,EAAMA,OAAAC,GAAA,CACLmD,KAAK,SACDL,EAAU,CACd3D,QAAS0E,EACTa,KAAMK,EACNkB,OAAM,KACNtB,MAAOG,EAASnG,SAEf0F,OAKT,GAAIG,IAAgB1B,EAAWoD,SAAU,CACvCzC,EAAU0C,KAAKd,EACjB,KAAO,CACL5B,EAAU0C,KAAKnB,EACjB,CACF,IAEA,OACEvG,MAAC2H,EAAQA,SAAApG,GAAA,CACPyF,SAASjC,GAAAA,UAAAA,EAAAA,EAAoBiC,UAAW,CAAC,SACzCY,MAAO,CAAEC,cAAe,OACpB9C,EAAkB,CACtBsC,aAAY9F,GAAA,CAAI+F,OAAQ,GAAMvC,EAAmBsC,cACjDS,KAAM,CAAEC,MAAO/C,GACfgD,aAAc,SAACC,EAAAA,GACb,IAAKA,EAAO,CACV/C,EAAQ,OACR3E,EAAW,MACb,CACA,EAAAL,SAEDH,EAAMG,WAGb,iGCzGagI,GAAwC,SAAxCA,EAAyCnI,GACpDmB,QAAQiH,IAAI,QAASpI,GACrB,IAA8BK,EAAAA,EAAQA,SAAC,OAAhCC,EAAOC,EAAA,GAAEC,EAAUD,EAAA,GAE1B,IAAMkF,EAAY7E,EAAM0E,MAAAA,gBAAe,SAACI,EAAyBH,GAC/D,IAAMxE,EAAS2E,EAAK/E,SAAL+E,UAAAA,EAAAA,EAAK/E,QAAU4E,GAC9B,GAAIxE,GAAUC,YAAUD,GAAS,CAC/BP,EAAW,MACX,OAAOO,EAAOK,SAAQ,WACpBZ,EAAW,MACb,GACF,CACA,MACF,IAEA,IAAM6H,EAAcrI,EAAMqI,YAAYC,QAAO,SAAC5C,GAC5C,IAAKA,EAAM,OAAO,MAClB,GAAI6C,EAAAA,eAAe7C,GAAO,CAAA,IAAA8C,EAAAC,EACxB,KAAI/C,EAAAA,EAAK1F,QAAL,UAAA,EAAAwI,EAAa,aAAc,KAAM,OAAO,MAC5C,IAAMzC,KAAaL,EAAK1F,QAAL,UAAA,EAAAyI,EAAa,gBAChC,GAAIC,EAAAA,SAAS3C,GAAa,CACxB,OAAOnG,GAAcmG,EACvB,CACA,OAAO,IACT,CACA,GAAI4C,EAAAA,cAAcjD,GAAO,CACvB,IAAK9F,GAAc8F,EAAKK,YAAa,CACnC,OAAO,KACT,CACA,OAAQL,EAAKrE,MACf,CACA,OAAO,KACT,IAEA,IAAMuH,EAAWC,EAAAA,SAAQ,WACvB,OAAOR,EAAYC,QAAO,SAAC5C,GACzB,GAAI6C,EAAAA,eAAe7C,GAAO,CACxB,OAAO,IACT,CACA,OAAQA,EAAKoD,MACf,GACF,GAAG,CAACT,IAEJ,IAAMU,EAAWF,EAAAA,SAAQ,WACvB,IAAMG,EAAaX,EAAYC,QAAO,SAAC5C,GACrC,GAAI6C,EAAAA,eAAe7C,GAAO,CACxB,OAAO,KACT,CACA,OAAOA,EAAKoD,MACd,IACA,IAAM/H,EAAS,GACfiI,EAAWrD,SAAQ,SAACD,GAClB,IAAMuD,EAAcvD,GAAAA,CAAAA,EAAAA,UAEbuD,EAAOH,OACd/H,EAAO4G,KAAKsB,EACd,IACA,OAAOlI,CACT,GAAG,CAACsH,IAEJ,IAAM1D,GAAQ3E,EAAMkJ,MAAQC,EAAOA,QAASnJ,EAAM2E,MAAM,IAAM,GAAK,EAEnE,OACE1E,EAAAA,IAAA,MAAA,CAAKmJ,UAAWC,EAAWC,WAAA,gBAAiBtJ,EAAMoJ,WAAWjJ,SAC3DoJ,OAACC,QAAK,CACJN,MAAOlJ,EAAMkJ,MAAQjJ,EAAAA,IAACwJ,EAAAA,QAAO,CAACvD,KAAK,aAAgB,KACnDvB,KAAMA,EACN+E,KAAMC,EAAY3J,YAAAA,EAAM0J,MAAQ,KAAO1J,EAAM0J,KAAKvJ,SAEjDyI,CAAAA,EAASgB,KAAI,SAAClE,EAAME,GACnB,GAAI2C,iBAAe7C,GAAO,OAAOA,EACjC,IAAQG,EACNH,EADMG,KAAMC,EACZJ,EADYI,MAAOnF,EACnB+E,EADmB/E,QAASqF,EAC5BN,EAD4BM,YAAaC,EACzCP,EADyCO,eAAgBE,EACzDT,EADyDS,MAAOC,EAChEV,EADgEU,gBAAoB9B,KACpFoB,EAAInB,IACN,IAAM2B,EAAOR,EAAKQ,MAAQ,OAC1B,GAAIF,IAAgB1B,EAAWoD,SAAU,CACvC,OACEf,gBAACG,EAAUA,WAAAtF,GAAA,CACTuF,OAAO,KACPC,WAAW,KACXC,QAAS,CAAC,SACV4C,UAAU,WACVxC,mBAAoB,KACpBH,qBAAsB,MAClBd,EAAe,CACnBe,MAAOlB,EACPR,UAAWA,EAAUmB,KAAK,KAAMlB,GAChCe,IAAKb,EACL4B,cAAe,CACblH,QAAAA,GAEF2H,aAAc,SAACC,EAAAA,GACb,IAAKA,EAAO,CACV1H,EAAW,MACb,CACF,IAEAP,EAAAA,IAAC6J,GAAatI,GAAA,CAAA,EACR8C,EAAU,CACd3D,QAASoJ,UACT7D,KAAMA,EACNuB,OAAM,KACNtB,MAAOA,EACPL,MAAOA,EAAM3F,SAEZ0F,KAIT,CACA,OACEc,EAAAqD,cAACF,GAAatI,GAAA,CAAA,EACR8C,EAAU,CACd4B,KAAMA,EACNC,MAAOA,EACPM,IAAKb,EACLjF,QAASA,EACTmF,MAAOA,IAEND,EAGN,IACAkD,EAASkB,OAAS,EACjBhK,EAAAA,IAAC6E,GAAmB,CAACC,SAAUgE,EAAS5I,SACtCF,MAACsB,SAAM,CAAC2E,KAAK,OAAOkD,UAAU,mBAAkBjJ,SAC7CH,EAAMkK,SAAWlK,EAAMkK,SAAWjK,EAAAqB,IAAA6I,EAAA,WAAA,QAGrC,SAIZ,EAEA,IAAML,GAAgB,SAAhBA,EAAiB9J,GACrB,GAAIA,EAAM8F,QAAU9F,EAAM0H,SAAU,CAClC,IAAI0C,EAAuC,CAAA,EAC3C,GAAIpK,EAAMkG,OAAS,OAAQ,CACzBkE,EAAc,CACZC,UAAWrK,EAAM8F,MACjBwE,gBAAiBtK,EAAM8F,MACvByE,eAAgBvK,EAAM8F,MAE1B,MAAO,GAAI9F,EAAMkG,OAAS,UAAW,CACnCkE,EAAc,CACZI,aAAcxK,EAAM8F,MACpB2E,kBAAmBzK,EAAM8F,MACzB4E,mBAAoB1K,EAAM8F,MAE9B,KAAO,CACLsE,EAAc,CACZK,kBAAmBzK,EAAM8F,MACzB4E,mBAAoB1K,EAAM8F,MAC1B6E,UAAW3K,EAAM8F,MACjB8E,YAAa5K,EAAM8F,MAEvB,CAEA,OACE7F,EAAAA,IAACmE,GAAqB,CACpBZ,MAAO,CACLqH,WAAY,CACVtJ,OAAQ6I,IAEVjK,SAEFF,EAAAA,IAACG,GAAaoB,GAAA,CAAA,EAAKxB,EAAK,CAAAG,SAAGH,EAAMG,aAGvC,CACA,OAAOF,EAAAqB,IAAClB,GAAaoB,GAAA,CAAA,EAAKxB,EAAK,CAAAG,SAAGH,EAAMG,WAC1C,EAEAgI,GAAc2C,aAAe,CAC3BnG,KAAM,EACNuE,MAAO,UCvMI6B,GAAsB,SAAtBA,EAAuB/K,GAClC,IAAMgL,EAAgBC,EAAAA,OACpB,CACE,kBAAmB,OACnB,mBAAoB,QACpB,gBAAiB,SACjB,eAAgB,OAChB,yBAA0B,cAE5BjL,EAAMgL,eAER,IAAME,EAAcrC,EAAAA,SAAQ,WAC1B,GACE7I,EAAMmL,QACNC,EAAYA,aAACpL,EAAMmL,OAAQ,CACzB,kBACA,mBACA,gBACA,2BAEF,CACA,OAAOH,EAAchL,EAAMmL,OAC7B,CACA,OAAOH,EAAc,eACtB,GAAE,CAACA,EAAehL,EAAMmL,SACzB,OACE5B,EAAAA,KAAC8B,EAAAA,MAAK,CAACC,MAAOD,EAAKA,MAACE,uBAAwBL,YAAaA,EAAa9B,UAAW,mBAAmBjJ,SAAA,CAClGF,MAACuL,OAAI,CAACC,SAAUzL,EAAMM,SAAW,QAChCN,EAAMmL,SAAW,iBAAmBnL,EAAM0L,cAGjD,ECjCA,IAAMC,GAA2B,CAC/BC,aAAc,GACdC,aAAc,MACdC,cAAe,gBAGjB,IAAMC,GAAkE,CACtEC,QAAS,CACPC,iBAAkB,SAACC,EAAAA,GACjB,OAAO,SAACvJ,GACNA,EAAMiJ,aAAeM,EAAON,cAAgB,GAC5CjJ,EAAMmJ,cAAgB,kBAEzB,EACDK,oBAAqB,SAACD,EAAAA,GACpB,OAAO,SAACvJ,GACNA,EAAMmJ,cAAgBI,EAE1B,GAEFvJ,MAAOgJ,IAGT,IAAMS,GAA4F,CAAA,EAQ3F,IAAMC,GAAuB,SAAvBA,EAAwB5F,GACnC,IAAK2F,GAAsB3F,GAAM,CAC/B2F,GAAsB3F,GAAO6F,EAAKA,MAACP,GACrC,CACA,OAAOK,GAAsB3F,EAC/B,iHCOO,IAAM8F,GAAkBC,EAAUA,YAA8C,SAACxM,EAAOyM,GAC7F,IACEC,EAOE1M,EAPF0M,cACAC,EAME3M,EANF2M,SACAC,EAKE5M,EALF4M,WACAC,EAIE7M,EAJF6M,cACAC,EAGE9M,EAHF8M,qBACAC,EAEE/M,EAFF+M,qBACGzI,KACDtE,EAAKuE,IACT,IAA8BlE,EAAAA,EAAQA,SAAQ,IAAvC2M,EAAOzM,EAAA,GAAE0M,EAAU1M,EAAA,GAE1B,IAAM2M,EAAmBR,GAAiB,GAC1C,IAA8BzJ,EAAAA,GAAa,OAApC3C,EAAO6M,EAAA,GAAE3M,EAAU2M,EAAA,GAC1B,IAAAC,EAAyBf,GAAqBM,GAAUU,WAAjD1K,EAAKyK,EAAA,GAAEpB,EAAOoB,EAAA,GACrB,IAAME,EAAa,oBAAuBtN,EAAM2M,SAChD,IAAMY,EAAkBtC,EAAOrH,OAAA,KAAM,CAAE8C,MAAO,QAASpD,MAAO,QAASnD,SAAU,YAAcyM,GAC/F,IAAAxH,EAAkC/E,EAAAA,WAA3BmN,EAASpI,EAAA,GAAEqI,EAAYrI,EAAA,GAE9B,IAAMsI,EAAyB,SAAzBA,EAA0BC,GAC9B,IAAMC,EAAeV,EAAiBW,uBAClCX,EAAiBW,uBAAuBF,GACxCA,EACJ,OAAOC,GAAgB,IAGzB,IAAME,EAAyBlN,QAAM0E,gBAAe,WAAA,OAAA,IAAAvD,SAAA,SAAAC,EAAAC,GAAA,IAQ1C8L,EACAC,EARR,IAAKd,EAAiBe,UAAW,CAC/B,OAAAhM,EAAM,IAAIiM,MAAM,wBAClB,CAxFJ,IAAIC,EAAA,WAAJ,IAAI,OAAAnM,GAA8B,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,GAAlC,IAAIgM,EAAA,SA0GSlN,GA1Gb,IA2GMV,EAAW,OACX6N,OAAOf,GAAiB,WACnBtB,EAAQG,oBAAoB,sBAC5BmC,EAAOA,QAACpN,MAAMA,EAAMoN,SAAW,UA9G1C,OAAOH,GAA2B,CAAxB,MAAU/L,GAAC,OAAOH,EAAMG,EAAA,GAyF9B,IACE5B,EAAW,MACX6N,OAAOf,GAAiB,UACnBtB,EAAQG,oBAAoB,oBAChB,OAAApK,QAAAwM,QAAMrB,EAAiBe,WAAS,UAAA,EAA1Bf,EAAiBe,UAAYf,EAAiBhB,SAApDhK,MAA2D,SAAAsM,GA7FlF,IA6FYb,EAAWa,EACXR,EAAkBN,EAAuBC,GAC/C,GAAId,EAAe,CACjBmB,EAAgBpE,KAAI,SAAClE,GACnBA,EAAK+I,OAAS/I,EAAK+I,QAAU,KAC/B,GACF,CACAjO,EAAW,OACX6N,OAAOf,GAAiB,WACnBtB,EAAQC,iBAAiB,CAC5BL,aAAcoC,GAAmB,KAEnCjB,eAAAA,EAAuBiB,GAAmB,IAzGhD,OAAOG,GAA2B,CAAxB,MAAU/L,GAAC,OAAOgM,EAAMhM,EAAA,CAAC,GAAAgM,EA+G/B,CALE,MAAOlN,GAAOkN,EAAPlN,EAKT,CAAC,OAGHO,IAAgB,WACd,GAAI4M,OAAOf,GAAgB,OAC3B,GAAI3K,EAAMmJ,gBAAkB,kBAAmB,CAC7CmB,EAAWyB,EAAUA,WAAC/L,EAAMiJ,cAC9B,KAAO,MACAkC,GACP,CACD,GAAE,IAEHrM,IAAgB,WACd,IAAMkN,EAAYD,EAAAA,WAAW/L,EAAMiJ,cACnC,GAAI5L,EAAMsD,MAAO,CACf,IAAM0F,EAAa4F,uBACjB5O,EAAMsD,MACNuL,EAAgBA,iBAACF,EAAWpB,GAC5B,MAEF,GAAIvE,EAAWiB,SAAW,EAAG,CAC3BwD,EAAa,CAACzN,EAAMsD,OACtB,KAAO,CACLmK,EAAazE,EAAWY,KAAI,SAAClE,GAAI,OAAKA,EAAKpC,KAAK,IAClD,CACF,KAAO,CACLmK,EAAa1D,UACf,CACAkD,EAAW0B,EACZ,GAAE,CAAChM,EAAMiJ,aAAc5L,EAAMsD,QAE9BwL,EAAmBA,oBAACrC,GAAK,WACvB,MAAO,CACLsC,gBAAiB,SAAMA,IACrB,OAAOpM,EAAMiJ,YACf,EAEJ,IAEA,IAAMoD,EAAiBpO,QAAM0E,gBAAe,gBACrCwI,GACP,IAEA,IAAMmB,EAAW,SAAXA,EAAkBC,GAAP,OAAA,IAAAnN,SAAA,SAAAC,EAAAC,GAAA,IAAAkN,EACTC,EAEAzB,EAIAK,EANAoB,EAAeF,EAAgBA,EAAgBjF,OAAS,GAC9DmF,EAAa9O,QAAU,KACN,OAAM4M,QAAAA,QAAAA,EAAiBe,WAAjBf,UAAAA,EAAAA,EAAiBe,UAASzM,GAAA,CAAA,EAC5C0L,EAAiBhB,QAAMiD,EAAA,CAAA,EAAAA,EACzB5B,EAAgBjK,OAAQ8L,EAAa7B,EAAgBjK,OACtD6L,MAHejN,MAGf,SAAAmN,GAhKN,IA6JU1B,EAAW0B,EAIXrB,EAAkBN,EAAuBC,GAC/C,IAAKK,GAAmBA,EAAgB/D,SAAW,EAAG,CACpDmF,EAAaX,OAAS,IACxB,KAAO,CACLT,EAAgBpE,KAAI,SAAClE,GACnBA,EAAK+I,OAAS/I,EAAK+I,QAAU,KAC/B,IACAW,EAAajP,SAAW6N,CAC1B,CACAoB,EAAa9O,QAAU,WAClB0L,EAAQC,iBAAiB,CAC5BL,aAAcoB,GAAW,KAE3BD,eAAAA,EAAuBC,GAAW,IAClCC,EAAU,GAAAqC,OAAKtC,IAAU,OAAAhL,GA/KK,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,CAAC,GAAAH,EAgK7B,GAgBH,EAED,IAAMsN,EAAW3O,EAAM0E,MAAAA,gBAAe,SAACkK,EAAgCC,QAChEzP,EAAMuP,UAAQ,UAAA,EAAdvP,EAAMuP,SAAWC,GAAM,UAAA,EAANA,EAASA,EAAOvF,OAAS,GAAIwF,GACrD,IAEA,IAAMC,EAAU9O,QAAM0E,gBAAe,gBAC9BtF,EAAMuP,UAAQ,UAAA,EAAdvP,EAAMuP,SAAWxF,WACxB,IAEA,OACE9J,MAAC0P,EAAQA,SAAAnO,GAAA,CACPoO,WAAY,KACZC,WAAY,MACPvL,EAAU,CACfwL,eAAgBzG,EAAWC,WAAA,yBAA0BhF,EAAWwL,gBAChEC,gBACE9P,MAAC8K,GAAmB,CAClBI,OAAQxI,EAAMmJ,cACdxL,QAASA,EACT0K,cAAe8B,EACfpB,YACEzL,MAACsB,SAAM,CAAC2E,KAAK,UAAUvF,QAASqO,EAAe7O,SAAA,aAMrDG,QAASA,EACT2O,SAAUpC,EAAgBoC,EAAWlF,UACrC6C,WAAYW,EACZyC,WACErN,EAAMmJ,gBAAkB,gBACtB7L,EAAAA,IAAAgQ,GAAAA,WAAA,CAAcC,KAAM5P,EAASK,QAASqO,IACpCjF,UAENiD,QAASA,EACT1J,MAAOkK,EACP2C,SAAU,MACVZ,SAAUA,EACVG,QAASA,IAGf,QCnMaU,GAAe,SAAfA,EAAgBpQ,GAC3B,IAAMG,EAAWgJ,EAAAA,QAAmBnJ,EAAMG,UAC1C,GAAIA,EAAS8J,OAAS,EAAG,CACvB,OACEhK,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,cAAcjD,MAAOnG,EAAMmG,MAAMhG,SAC7CA,GAGP,CAEA,OACEF,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SACNkQ,EAAAA,aAAarQ,EAAMG,SAAU,CAC5BiJ,UAAWC,EAAWC,WAAA,cAAetJ,EAAMG,SAASH,MAAMoJ,WAC1DjD,MAAK3E,GAAA,CAAA,EAAOxB,EAAMmG,MAAUnG,EAAMG,SAASH,MAAMmG,UAIzD,ECxCYmK,QAAiBA,uBAAA,GAK5B,SALWA,GAAAA,EAAiB,UAAA,sBAAjBA,EAAiB,SAAA,mBAAjBA,EAAiB,QAAA,gBAAjBA,EAAiB,OAAA,YAAjBA,EAKX,CALWA,4BAAAA,QAAAA,kBAAiB,CAAA,IAOjBC,QAAiBA,uBAAA,GAO5B,SAPWA,GAAAA,EAAiB,OAAA,WAAjBA,EAAiB,MAAA,QAAjBA,EAAiB,KAAA,KAAjBA,EAAiB,MAAA,QAAjBA,EAAiB,KAAA,KAAjBA,EAAiB,KAAA,IAAjBA,EAOX,CAPWA,QAAiBA,oBAAjBA,0BAAiB,CAAA,ICN7B,IAAMC,GAAQ,SAARA,EAASC,EAAeC,GAC5B,IAAM3P,EAAmB,GACzB,IAAK,IAAI4P,EAAIF,EAAOE,GAAKD,EAAKC,IAAK,CACjC5P,EAAO4G,KAAKgJ,EACd,CACA,OAAO5P,CACT,EACO,IAAM6P,GAAkB,SAAlBA,EACX5N,EACAgK,GAKG,IAAA6D,EAAAC,EACH,IAAK9D,IAAYhK,EAAS,MAAO,GACjC,IAAI+N,EAAc,EAClB,IAAIC,EAAc,GAElB,KAAIH,EAAA7D,EAAQiE,0BAARJ,EAAqBK,OAAOZ,QAAAA,kBAAkBa,QAASnO,EAAQkO,OAAOZ,QAAAA,kBAAkBa,KAAM,CAChGJ,EAAc/D,EAAQiE,YAAYG,IAAI,OACxC,CACA,KAAIN,EAAA9D,EAAQqE,0BAARP,EAAqBI,OAAOZ,QAAAA,kBAAkBa,QAASnO,EAAQkO,OAAOZ,QAAAA,kBAAkBa,KAAM,CAChGH,EAAchE,EAAQqE,YAAYD,IAAI,OACxC,CACA,IAAIE,EAAmBd,GAAMO,EAAaC,GAC1C,GAAIhE,EAAQuE,iBAAkB,CAC5BD,EAAmBA,EAAiBhJ,QAAO,SAAC5C,GAAI,IAAA8L,EAAA,SAAKA,EAACxE,EAAQuE,yBAARC,EAA0B1R,SAAS4F,MAC3F,CACA,OAAO8K,GAAM,EAAG,IAAIlI,QAAO,SAAC5C,GAAI,OAAM4L,EAAiBxR,SAAS4F,KAClE,EAEO,IAAM+L,GAAoB,SAApBA,EACXzO,EACAgK,GAKG,IAAA0E,EAAAC,EACH,IAAK3E,IAAYhK,EAAS,MAAO,GACjC,IAAI4O,EAAgB,EACpB,IAAIC,EAAgB,GACpB,KAAIH,EAAA1E,EAAQiE,0BAARS,EAAqBR,OAAOZ,QAAAA,kBAAkBwB,SAAU9O,EAAQkO,OAAOZ,QAAAA,kBAAkBwB,MAAO,CAClGF,EAAgB5E,EAAQiE,YAAYG,IAAI,SAC1C,CACA,KAAIO,EAAA3E,EAAQqE,0BAARM,EAAqBT,OAAOZ,QAAAA,kBAAkBwB,SAAU9O,EAAQkO,OAAOZ,QAAAA,kBAAkBwB,MAAO,CAClGD,EAAgB7E,EAAQqE,YAAYD,IAAI,SAC1C,CACA,IAAIE,EAAmBd,GAAMoB,EAAeC,GAC5C,GAAI7E,EAAQ+E,mBAAoB,CAC9BT,EAAmBA,EAAiBhJ,QAAO,SAAC5C,GAAI,IAAAsM,EAAA,SAAKA,EAAChF,EAAQ+E,2BAARC,EAA4BlS,SAAS4F,MAC7F,CACA,OAAO8K,GAAM,EAAG,IAAIlI,QAAO,SAAC5C,GAAI,OAAM4L,EAAiBxR,SAAS4F,KAClE,EAEO,IAAMuM,GAAoB,SAApBA,EACXjP,EACAgK,GAKG,IAAAkF,EAAAC,EACH,IAAKnF,IAAYhK,EAAS,MAAO,GACjC,IAAIoP,EAAgB,EACpB,IAAIC,EAAgB,GACpB,KAAIH,EAAAlF,EAAQiE,0BAARiB,EAAqBhB,OAAOZ,QAAAA,kBAAkBgC,UAAWtP,EAAQkO,OAAOZ,QAAAA,kBAAkBgC,OAAQ,CACpGF,EAAgBpF,EAAQiE,YAAYG,IAAI,SAC1C,CACA,KAAIe,EAAAnF,EAAQqE,0BAARc,EAAqBjB,OAAOZ,QAAAA,kBAAkBgC,UAAWtP,EAAQkO,OAAOZ,QAAAA,kBAAkBgC,OAAQ,CACpGD,EAAgBrF,EAAQqE,YAAYD,IAAI,SAC1C,CACA,IAAIE,EAAmBd,GAAM4B,EAAeC,GAC5C,GAAIrF,EAAQuF,mBAAoB,CAC9BjB,EAAmBA,EAAiBhJ,QAAO,SAAC5C,GAAI,IAAA8M,EAAA,SAAKA,EAACxF,EAAQuF,2BAARC,EAA4B1S,SAAS4F,MAC7F,CACA,OAAO8K,GAAM,EAAG,IAAIlI,QAAO,SAAC5C,GAAI,OAAM4L,EAAiBxR,SAAS4F,KAClE,mDC1Ca+M,GAAoB,SAApBA,EAAqBzS,GAChC,IAAQsD,EAAkDtD,EAAlDsD,MAAOiM,EAA2CvP,EAA3CuP,SAAUpJ,EAAiCnG,EAAjCmG,MAAO+K,EAA0BlR,EAA1BkR,OAAW5M,KAAetE,EAAKuE,IAC/D,IAAAmO,EACE1S,EAAM2S,oBAAsB,CAAE,EADxBC,IAAAA,QAASC,IAAAA,QAAStB,IAAAA,iBAAkBQ,IAAAA,mBAAoBQ,IAAAA,mBAEhE,IAAMO,EAAqBF,EAAUjP,EAAK,WAACiP,GAAW7I,UACtD,IAAMgJ,EAAqBF,EAAUlP,EAAK,WAACkP,GAAW9I,UACtD,IAAMiJ,EAAenK,EAAAA,SAAQ,WAC3B,GAAIqI,EAAQ,OAAOA,EACnB,GAAIlR,EAAMiT,SAAU,OAAO3C,QAAAA,kBAAkB4C,OAC7C,OAAO5C,QAAAA,kBAAkBa,GAC1B,GAAE,CAACnR,EAAMiT,SAAU/B,IAEpB,IAAMiC,EAAevS,EAAM0E,MAAAA,gBAAe,SAAC8N,EAAMC,GAC/C,GAAID,EAAM,CACR7D,GAAAA,UAAAA,EAAAA,EAAW8D,EACb,KAAO,CACL9D,GAAAA,UAAAA,EAAAA,EAAWxF,UACb,CACF,IAEA,IAAMuJ,EAAkB1S,EAAAA,MAAM0E,gBAAe,SAACtC,GAC5C,IAAMuQ,EAAcvQ,EAAQkO,OAAOZ,QAAiBA,kBAACa,KACrD,IAAKnR,EAAM2S,mBAAoB,CAC7B,OAAO,KACT,CACA,GAAIG,GAAsBC,EAAoB,CAC5C,IACGS,EAAAA,YAAYC,GACXF,EACAT,EAAmB5B,OAAOZ,QAAAA,kBAAkBa,KAC5C4B,EAAmB7B,OAAOZ,QAAAA,kBAAkBa,MAE9C,CACA,OAAO,IACT,CACD,MAAM,GAAI2B,EAAoB,CAC7B,IAAKU,EAAAA,YAAYE,IAAIH,EAAaT,EAAmB5B,OAAOZ,QAAAA,kBAAkBa,MAAO,CACnF,OAAO,IACT,CACD,MAAM,GAAI4B,EAAoB,CAC7B,IAAKS,EAAAA,YAAYE,IAAIX,EAAmB7B,OAAOZ,0BAAkBa,KAAMoC,GAAc,CACnF,OAAO,IACT,CACF,CACA,OAAO,KACT,IAEA,IAAMI,EAAkB9K,EAAAA,SAAQ,WAC9B,GAAIvF,EAAO,CACT,OAAOK,EAAK,WAAC6P,EAAWA,YAACI,cAActQ,GACzC,CACA,OAAOyG,SACT,GAAG,CAACzG,IAEJ,IAAMuQ,EAAkBjT,EAAAA,MAAM0E,gBAAe,SAACtC,GAC5C,IAAMgK,EAAU,CACdiE,YAAa6B,EACbzB,YAAa0B,EACbxB,iBAAAA,EACAQ,mBAAAA,EACAQ,mBAAAA,GAEFvP,EAAUA,GAAW2Q,GAAmBhQ,EAAK,WAAC,IAAImQ,MAClD,MAAO,CACLC,cAAe,SAAMA,IACnB,OAAOnD,GAAgB5N,EAASgK,EACjC,EACDgH,gBAAiB,SAAMA,IACrB,OAAOvC,GAAkBzO,EAASgK,EACnC,EACDiH,gBAAiB,SAAMA,IACrB,OAAOhC,GAAkBjP,EAASgK,EACpC,EAEJ,IAEA,OACE/M,MAACiU,EAAUA,WAAA1S,GAAA,CACT2S,aAAcb,EACdc,aAAcP,GACVvP,EAAU,CACd4M,OAAQ8B,EACR7M,MAAK3E,GAAA,CAAI6S,MAAO,QAAWlO,GAC3B7C,MAAOqQ,EACPpE,SAAU4D,IAGhB,mDC5EamB,GAAyB,SAAzBA,EAA0BtU,GACrC,IAAQsD,EAAkDtD,EAAlDsD,MAAOiM,EAA2CvP,EAA3CuP,SAAUpJ,EAAiCnG,EAAjCmG,MAAO+K,EAA0BlR,EAA1BkR,OAAW5M,KAAetE,EAAKuE,IAC/D,IAAAmO,EACE1S,EAAM2S,oBAAsB,CAAE,EADxB4B,IAAAA,QAAS3B,IAAAA,QAASC,IAAAA,QAAStB,IAAAA,iBAAkBQ,IAAAA,mBAAoBQ,IAAAA,mBAEzE,IAAMO,EAAqBF,EAAUjP,EAAK,WAACiP,GAAW7I,UACtD,IAAMgJ,EAAqBF,EAAUlP,EAAK,WAACkP,GAAW9I,UAEtD,IAA0B1J,EAAAA,EAAQA,SAAa,MAAxCmU,EAAKjU,EAAA,GAAEkU,EAAQlU,EAAA,GACtB,IAAkCF,EAAAA,EAAQA,SAAa,MAAhDqU,EAAStP,EAAA,GAAEuP,EAAYvP,EAAA,GAE9B,IAAuB9B,EAAAA,GAAS,GAAzBsR,EAAKC,EAAA,GAAEC,EAAKD,EAAA,GACnB,IAAME,EAAmBlM,EAAAA,SAAQ,WAC/B,GAAI+L,GAASE,EAAO,CAClB,IAAME,EAAWxB,EAAAA,YAAYI,cAAcgB,GAC3C,IAAMK,EAAWzB,EAAAA,YAAYI,cAAckB,GAC3C,MAAO,CAACnR,EAAK,WAACqR,GAAWrR,EAAAA,WAAMsR,GACjC,CACA,OAAOlL,SACT,GAAG,CAAC6K,EAAOE,IAEX,IAAM9B,EAAenK,EAAAA,SAAQ,WAC3B,GAAIqI,EAAQ,OAAOA,EACnB,GAAIlR,EAAMiT,WAAa,KAAM,OAAO3C,QAAAA,kBAAkB4C,OACtD,OAAO5C,QAAAA,kBAAkBa,GAC1B,GAAE,CAACnR,EAAMiT,SAAU/B,IAEpB,IAAMiC,EAAevS,EAAM0E,MAAAA,gBAAe,SAACkP,EAAOU,GAChD,GAAIV,GAASA,EAAM,IAAMA,EAAM,GAAI,CACjCjF,GAAAA,UAAAA,EAAAA,EAAW2F,EACb,KAAO,CACL3F,GAAAA,UAAAA,EAAAA,EAAWxF,UACb,CACF,IAEA,IAAMuJ,EAAkB1S,EAAAA,MAAM0E,gBAAe,SAACtC,GAC5C,IAAMuQ,EAAcvQ,EAAQkO,OAAOZ,QAAiBA,kBAACa,KACrD,IAAKnR,EAAM2S,mBAAoB,CAC7B,OAAO,KACT,CACA,GAAIG,GAAsBC,EAAoB,CAC5C,IACGS,EAAAA,YAAYC,GACXF,EACAT,EAAmB5B,OAAOZ,QAAAA,kBAAkBa,KAC5C4B,EAAmB7B,OAAOZ,QAAAA,kBAAkBa,MAE9C,CACA,OAAO,IACT,CACD,MAAM,GAAI2B,EAAoB,CAC7B,IAAKU,EAAAA,YAAYE,IAAIH,EAAaT,EAAmB5B,OAAOZ,QAAAA,kBAAkBa,MAAO,CACnF,OAAO,IACT,CACD,MAAM,GAAI4B,EAAoB,CAC7B,IAAKS,EAAAA,YAAYE,IAAIX,EAAmB7B,OAAOZ,0BAAkBa,KAAMoC,GAAc,CACnF,OAAO,IACT,CACF,CAEA,IAAKgB,KAAaC,GAAK,MAALA,EAAQ,OAAOA,GAAAA,MAAAA,EAAQ,IAAK,CAC5C,OAAO,KACT,CAEA,IAAMW,GAAUX,GAAK,UAAA,EAALA,EAAQ,KAAMxR,EAAQoS,KAAKZ,EAAM,GAAI,QAAUD,EAAU,EACzE,IAAMc,GAAWb,GAAK,UAAA,EAALA,EAAQ,KAAMA,EAAM,GAAGY,KAAKpS,EAAS,QAAUuR,EAAU,EAC1E,QAASc,KAAcF,CACzB,IAEA,IAAMlN,EAAe,SAAfA,EAAgB/C,GACpB,GAAIqP,GAAWA,EAAU,EAAG,CAC1B,GAAIrP,EAAM,CACRyP,EAAa,CAAC,KAAM,OACpBF,EAAS,CAAC,KAAM,MAClB,KAAO,CACLE,EAAa,KACf,CACF,GAGF,IAAMd,EAAkBjT,EAAAA,MAAM0E,gBAAe,SAACtC,GAC5C,IAAMgK,EAAU,CACdiE,YAAa6B,EACbzB,YAAa0B,EACbxB,iBAAAA,EACAQ,mBAAAA,EACAQ,mBAAAA,GAEFvP,EAAUA,GAAWW,EAAK,WAACiR,GAAS,IAAId,MACxC,MAAO,CACLC,cAAe,SAAMA,IACnB,OAAOnD,GAAgB5N,EAASgK,EACjC,EACDgH,gBAAiB,SAAMA,IACrB,OAAOvC,GAAkBzO,EAASgK,EACnC,EACDiH,gBAAiB,SAAMA,IACrB,OAAOhC,GAAkBjP,EAASgK,EACpC,EAEJ,IAEA,OACE/M,MAACiU,EAAAA,WAAWoB,YAAW9T,GAAA,CACrB2S,aAAcb,EACdc,aAAcP,GACVvP,EAAU,CACd4M,OAAQ8B,EACR7M,MAAK3E,GAAA,CAAI6S,MAAO,QAAWlO,GAC3B7C,MAAOoR,GAAaK,EACpBxF,SAAU4D,EACVlL,aAAcA,EACdsN,iBAAkB,WAACC,GAAG,OAAKf,EAASe,EAAkB,IAG5D,kFCtIaC,GAAiC,SAAjCA,EAAkCzV,GAC7C,IAAQ0V,EAAiF1V,EAAjF0V,UAAWC,EAAsE3V,EAAtE2V,QAASC,EAA6D5V,EAA7D4V,aAAcC,EAA+C7V,EAA/C6V,4BAAgCvR,KAAetE,EAAKuE,IAC9F,IAAMuR,EAAOC,OAAKC,kBAClB,IAAMC,EAAWpN,EAAAA,SAAQ,WACvB,GAAIlJ,UAAQ+V,IAAc/V,EAAQgW,QAAAA,GAAU,CAC1C,OAAOD,EACJQ,MAAM,EAAGR,EAAUzL,OAAS,GAC5BqF,OAA0BoG,mBAAAA,EAAUA,EAAUzL,OAAS,GAAM0L,IAAAA,EAAQA,EAAQ1L,OAAS,GAC3F,CACA,MAA0ByL,mBAAAA,MAAaC,CACzC,GAAG,CAACD,EAAWC,IAEf,IAAMQ,EAAiBtN,EAAAA,SAAQ,WAC7B,OAAO+M,EAAgB,GAA2BtG,OAAOsG,EAAcF,GAAaA,CACtF,GAAG,CAACA,EAAWE,IAEf,IAAMQ,EAAevN,EAAAA,SAAQ,WAC3B,OAAO+M,EAAgB,GAA2BtG,OAAOsG,EAAcD,GAAWA,CACpF,GAAG,CAACA,EAASC,IAEb,IAAMS,EAAWN,EAAIA,KAACO,SAASH,EAAgBL,GAC/C,IAAMS,EAASR,EAAIA,KAACO,SAASF,EAAcN,GAC3C,IAAMU,EAAUT,EAAIA,KAACO,SAASL,EAAUH,GAExCrU,IAAgB,WACd,GAAI4U,GAAYE,EAAQ,CACtB,IAAM1W,EAAO+V,EAAgB,GAA2BtG,OAAOsG,EAAcK,GAAYA,EACzFH,EAAKW,UAAU,CAAC,CAAE5W,KAAAA,EAAMyD,MAAO,CAAC+S,EAAUE,KAC5C,CACD,GAAE,CAACF,EAAUE,EAAQC,IAEtB,IAAME,EAAU5T,SAAwB,MACxC,IAAM6T,EAAW7T,SAAwB,MAEzC,IAAMyM,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACsR,GAAS,IAAAC,EAAAC,EAC9ChB,EAAKW,UAAU,CACb,CAAE5W,KAAMsW,EAAgB7S,MAAOsT,GAAAA,UAAAA,EAAAA,EAAO,IACtC,CAAE/W,KAAMuW,EAAc9S,MAAOsT,GAAAA,UAAAA,EAAAA,EAAO,OAGtCC,EAAAH,EAAQ1T,UAAR,UAAA,EAAA6T,EAAiBtH,UAAjB,UAAA,EAAAsH,EAAiBtH,SAAWqH,GAAAA,UAAAA,EAAAA,EAAO,KACnCE,EAAAH,EAAS3T,UAAT,UAAA,EAAA8T,EAAkBvH,UAAlB,UAAA,EAAAuH,EAAkBvH,SAAWqH,GAAAA,UAAAA,EAAAA,EAAO,GACtC,IAEA,OACErN,EAAAA,KAAAwN,EAAAA,SAAA,CAAA5W,SACE,CAAAF,EAAAA,IAAC8V,EAAIA,KAACiB,KAAI,CAACnX,KAAM6V,EAAWrU,OAAM,KAAAlB,SAChCF,MAACgX,GAAY,CAACxK,IAAKiK,MAErBzW,EAAAA,IAAC8V,EAAIA,KAACiB,KAAI,CAACnX,KAAM8V,EAAStU,OAAM,KAAAlB,SAC9BF,MAACgX,GAAY,CAACxK,IAAKkK,MAErB1W,EAACqB,IAAAyU,EAAIA,KAACiB,WAAS1S,EAAU,CAAEzE,KAAMoW,EAAS9V,SACxCF,EAAAA,IAACqU,GAAsB9S,GAAA,CAAA,EAAKqU,EAA2B,CAAEtG,SAAUA,UAI3E,EAWA,IAAM0H,GAAezK,EAAUA,YAAqC,SAACxM,EAAOyM,GAC1EqC,EAAmBA,oBAACrC,GAAK,WACvB,MAAO,CACL8C,SAAU,SAAC8G,EAAAA,GACTrW,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAW8G,EACnB,EAEJ,IAEA,OAAOpW,EAAAA,IAACiX,EAAAA,MAAK,CAAC5T,MAAOtD,EAAMsD,OAC7B,IC5GO,IAAM6T,GAAuB,SAAvBA,IACX,IAAMC,EAAMC,SAASrN,cAAc,OACnC,IAAMsN,EAAE,MAASxD,KAAKyD,MACtBH,EAAII,aAAa,KAAMF,GACvBD,SAASI,KAAKC,OAAON,GACrB,MAAO,CACLO,WAAYP,EACZQ,UAAWN,EAEf,EAEO,IAAMO,GAAkB,SAAlBA,EAAmBC,GAC9B,IACET,SAASI,KAAKM,YAAYV,SAASW,cAAcF,GAEjD,CADA,MAAO5W,GACP,CAEJ,+LCUA,IAAM+W,GAAc,SAAdA,EAAejY,GACnB,IACE2X,EAeE3X,EAfF2X,WACAC,EAcE5X,EAdF4X,UACAM,EAaElY,EAbFkY,KACA9Q,EAYEpH,EAZFoH,SACAI,EAWExH,EAXFwH,cACA2Q,EAUEnY,EAVFmY,kBACAC,EASEpY,EATFoY,QACAC,EAQErY,EARFqY,oBACAjP,EAOEpJ,EAPFoJ,UACAkP,EAMEtY,EANFsY,SACAC,EAKEvY,EALFuY,aACAC,EAIExY,EAJFwY,OACAxR,EAGEhH,EAHFgH,WACAD,EAEE/G,EAFF+G,OACGzC,KACDtE,EAAKuE,IACT,IAAwBlE,EAAAA,EAAQA,SAAC,MAA1B6E,EAAI3E,EAAA,GAAE4E,EAAO5E,EAAA,GACpB,IAAewV,EAAAA,EAAIA,KAAC0C,UAAb3C,EAAI4C,EAAA,GAEX,IAAMC,EAAU/X,QAAM0E,gBAAe,WACnC,WACS+I,OAAOuJ,EAEd,CADA,MAAO1W,GACP,CAEFiE,EAAQ,MACV,IAEA1D,IAAgB,WACd4M,OAAOuJ,GAAae,CACtB,GAAG,CAACA,IAEJ,IAAMC,EAAiBhY,EAAAA,MAAM0E,gBAAe,SAACxE,GAC3C,GAAIsG,EAAU,CACZ,IAAMyR,EAAWzR,EAAS0O,EAAMhV,GAChC,GAAI+X,GAAY7X,YAAU6X,GAAW,CACnC,OAAOA,EAAS3W,KAAKyW,EACvB,CACF,CACA,OAAOA,GACT,IAEA,IAAMG,EAAalY,EAAAA,MAAM0E,gBAAe,SAACxE,GACvC,GAAIoX,EAAM,CACR,IAAMW,EAAWX,EAAKpC,EAAMhV,GAC5B,GAAI+X,GAAY7X,YAAU6X,GAAW,CACnC,OAAOA,EAAS3W,KAAKyW,EACvB,CACF,CACA,OAAOA,GACT,IAEA,IAAMI,EAAenY,QAAM0E,gBAAe,WACxCuS,GAAe,IAAKD,GACpB5X,EAAMgZ,YAAU,UAAA,EAAhBhZ,EAAMgZ,YACR,IAEA,IAAMC,EAAe,CACnBhZ,EAACqB,IAAAlB,SAA0B+X,EAAiB,CAAExX,QAASiY,EAAgBvX,OAAQkX,EAAapY,SACzF6G,GAAc,OADE,KAGnB/G,MAACG,GAAaoB,GAAA,CAAS0E,KAAK,WAAcsB,EAAa,CAAE7G,QAASmY,EAAYzX,OAAQiX,EAASnY,SAC5F4G,GAAU,OADM,MAKrB,IAAMmS,EAAYV,GAAUS,EAE5B,OACEhZ,EAAAqB,IAAC8C,GAAqB5C,GAAA,CAAA,EAAK6W,EAAmB,CAAAlY,SAC5CF,EAAAA,IAACkZ,EAAKA,MAAA3X,GAAA,CACJ4X,aAAc,KACdC,SAAU,KACVjS,SAAUuR,EACVW,eAAc,MACVhV,EAAU,CACd8E,UAAWC,EAAAA,WAAW,iBAAkBD,GACxClE,KAAMA,EACN8T,WAAYD,EACZQ,aAAc5B,EACda,OAAQU,EAAU/Y,gBAEViY,IAAY,WAAaA,EAAQtC,EAAM,CAAE6C,QAAAA,IAAaP,OAItE,EAgCO,IAAMoB,GAAc,CACzBtU,KAAM,SAAClF,EAAAA,GACL,IAAAyZ,EAAkCtC,KAA1BQ,IAAAA,WAAYC,IAAAA,UACpBvJ,OAAO,4BAA8BuJ,EACrC,IAAM8B,EAAOC,aAAWhC,GACxB+B,EAAKE,OAAO3Z,EAACqB,IAAA2W,SAAgBjY,EAAK,CAAE2X,WAAYA,EAAYC,UAAWA,MACvE,MAAO,CACLiC,MAAO,SAAMA,IAAA,IAAAC,EAAAC,GACXD,GAAAC,EAAA1L,QAAOuJ,iBAAPkC,EAAqBE,KAAAD,EACvB,EAEH,EAODF,MAAO,SAAMA,IACX,IAAI,IAAAI,EAAAC,EACF,IAAMtC,EAAYvJ,OAAO,4BACzB,GAAI3F,EAAAA,SAASkP,IAAYqC,GAAAC,EAAA7L,QAAOuJ,KAAU,UAAA,EAAjBqC,EAAqBD,KAAAE,EAE9C,CADA,MAAOhZ,GACP,CAEJ,GCxKK,IAAMiZ,GAAgB,CAC3BjV,KAAM,SAAClF,EAAAA,GACL,IAAMoJ,EAAYC,EAAWC,WAAA,mBAAoBtJ,EAAMoJ,WACvD,OAAOoQ,GAAYtU,KAAI1D,GAAA,CACrB6S,MAAO,IACPtN,OAAQ,KACRC,WAAY,KACZoS,aAAc,MACXpZ,EAAK,CACRoJ,UAAAA,IAEJ,GCJK,IAAMgR,GAAc,CACzBlV,KAAM,SAAClF,EAAAA,GACL,OAAOma,GAAcjV,KAAI1D,GAAA,CACvBuF,OAAQ,KACRwR,aAAc,KACda,aAAc,OACXpZ,EAAK,CACRkY,KAAMlY,EAAMW,UAEhB,+NCSF,IAAMsX,GAAc,SAAdA,EAAejY,GACnB,IACE2X,EAgBE3X,EAhBF2X,WACAC,EAeE5X,EAfF4X,UACAM,EAcElY,EAdFkY,KACA9Q,EAaEpH,EAbFoH,SACAgR,EAYEpY,EAZFoY,QACAC,EAWErY,EAXFqY,oBACAtR,EAUE/G,EAVF+G,OACAC,EASEhH,EATFgH,WACAqT,EAQEra,EARFqa,mBACAC,EAOEta,EAPFsa,uBAAsBC,EAOpBva,EANFwa,gBAAAA,aAAkB,SAAQD,EAC1BE,EAKEza,EALFya,cAAaC,EAKX1a,EAJFqU,MAAAA,aAAQ,IAAGqG,EACXpC,EAGEtY,EAHFsY,SACAC,EAEEvY,EAFFuY,aACGjU,KACDtE,EAAKuE,IACT,IAAwBlE,EAAAA,EAAQA,SAAC,MAA1B6E,EAAI3E,EAAA,GAAE4E,EAAO5E,EAAA,GACpB,IAAewV,EAAAA,EAAIA,KAAC0C,UAAb3C,EAAI4C,EAAA,GAEX,IAAMC,EAAU/X,QAAM0E,gBAAe,WACnC,WACS+I,OAAOuJ,EAEd,CADA,MAAO1W,GACP,CAEFiE,EAAQ,MACV,IAEA1D,IAAgB,WACd4M,OAAOuJ,GAAae,CACtB,GAAG,CAACA,IAEJ,IAAMC,EAAiBhY,EAAAA,MAAM0E,gBAAe,SAACxE,GAC3C,GAAIsG,EAAU,CACZ,IAAMyR,EAAWzR,EAAS0O,EAAMhV,GAChC,GAAI+X,GAAY7X,YAAU6X,GAAW,CACnC,OAAOA,EAAS3W,KAAKyW,EACvB,CACF,CACA,OAAOA,GACT,IAEA,IAAMG,EAAalY,EAAAA,MAAM0E,gBAAe,SAACxE,GACvC,GAAIoX,EAAM,CACR,IAAMW,EAAWX,EAAKpC,EAAMhV,GAC5B,GAAI+X,GAAY7X,YAAU6X,GAAW,CACnC,OAAOA,EAAS3W,KAAKyW,EACvB,CACF,CACA,OAAOA,GACT,IAEA,IAAMM,EACJ1P,EAAAoR,KAACnR,QAAK,CAAArJ,SAAA,CACHmY,EAAW,KACVrY,EAAAA,IAACG,SAAkBka,EAAsB,CAAE3Z,QAASiY,EAAezY,SAChE6G,GAAc,QAGlBuR,EAAe,KACdtY,EAAAA,IAACG,GAAaoB,GAAA,CAAC0E,KAAK,WAAcmU,EAAkB,CAAE1Z,QAASmY,EAAW3Y,SACvE4G,GAAU,WAMnB,IAAM6T,EAAsB,SAAtBA,IACJ,GAAIH,EAAe,CACjB,OAAOA,EAAc3E,EACvB,CACA,IAAKwC,IAAaC,EAAc,CAC9B,OAAOU,CACT,CACA,OAAO,MAGT,OACEhZ,EAAAqB,IAAC8C,GAAqB5C,GAAA,CAAA,EAAK6W,EAAmB,CAAAlY,SAC5CF,EAAAA,IAAC4a,EAAMA,OAAArZ,GAAA,CACL4X,aAAc,KACdE,eAAc,KACdX,QAASA,EACTtE,MAAO,MACPyG,oBAAqB,CAAEC,SAAU1G,GACjC2G,MAAOR,IAAoB,SAAWI,IAAwB,KAC9DpC,OAAQgC,IAAoB,SAAWI,IAAwB,MAC3DtW,EAAU,CACdY,KAAMA,EACNqU,aAAc5B,EAAWxX,gBAEjBiY,IAAY,WAAaA,EAAQtC,EAAM,CAAE6C,QAAAA,IAAaP,OAItE,EAkCO,IAAM6C,GAAe,CAC1B/V,KAAM,SAAClF,EAAAA,GACL,IAAAyZ,EAAkCtC,KAA1BQ,IAAAA,WAAYC,IAAAA,UACpBvJ,OAAO,6BAA+BuJ,EACtC,IAAM8B,EAAOC,aAAWhC,GACxB+B,EAAKE,OAAO3Z,EAACqB,IAAA2W,SAAgBjY,EAAK,CAAE2X,WAAYA,EAAYC,UAAWA,MACvE,MAAO,CACLiC,MAAO,SAAMA,IAAA,IAAAC,EAAAC,GACXD,GAAAC,EAAA1L,QAAOuJ,iBAAPkC,EAAqBE,KAAAD,EACvB,EAEH,EAODF,MAAO,SAAMA,IACX,IAAI,IAAAI,EAAAC,EACF,IAAMtC,EAAYvJ,OAAO,6BACzB,GAAI3F,EAAAA,SAASkP,IAAYqC,GAAAC,EAAA7L,QAAOuJ,KAAU,UAAA,EAAjBqC,EAAqBD,KAAAE,EAE9C,CADA,MAAOhZ,GACP,CAEJ,GC3KF,IAAM+W,GAAc,SAAdA,EAAejY,GACnB,IAAM4X,EAAY5X,EAAM4X,UACxB,IAAkBpU,EAAAA,EAAKA,MAACC,WAAhBC,IAAAA,MACR,IAAM8G,EAAe9G,EAAM8G,aAE3B,IAAwBnK,EAAAA,EAAQA,SAAC,MAA1B6E,EAAI3E,EAAA,GAAE4E,EAAO5E,EAAA,GAEpB,IAAMoY,EAAU/X,QAAM0E,gBAAe,WACnC,WACS+I,OAAOuJ,EAEd,CADA,MAAO1W,GACP,CAEFiE,EAAQ,MACV,IAEA1D,IAAgB,WACd4M,OAAOuJ,GAAae,CACtB,GAAG,CAACA,IAEJ,IAAMI,EAAenY,QAAM0E,gBAAe,WACxCuS,GAAe,IAAKD,EACtB,IAEA,OACE3X,EAAAA,IAACkZ,EAAAA,MAAK,CACJC,aAAc,MACdC,SAAU,KACVC,eAAc,KACdlQ,UAAWC,EAAWC,WAAA,mBAAoBtJ,EAAMoJ,WAChDlE,KAAMA,EACN8T,WAAYD,EACZQ,aAAcvZ,EAAM2X,WACpBa,OAAQ,KAER0C,SAAU,MACV/U,MAAO,CAAE,oBAAqBqE,GAAgCrK,SAE9DF,EAAAqB,IAAA,MAAA,CAAK8H,UAAWC,EAAWC,WAAA,4BAA4BnJ,SACrDoJ,EAAAoR,KAAA,MAAA,CAAKvR,UAAU,iBAAgBjJ,SAC7B,CAAAF,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,iBACfnJ,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,cAAajJ,SAAEH,EAAMsO,SAAW,cAKzD,EAEO,IAAM6M,GAAgB,CAC3BjW,KAAM,SAAClF,EAAAA,GACL,IAAAyZ,EAAkCtC,KAA1BQ,IAAAA,WAAYC,IAAAA,UACpBvJ,OAAO,8BAAgCuJ,EACvC,IAAM8B,EAAOC,aAAWhC,GACxB+B,EAAKE,OAAO3Z,EAACqB,IAAA2W,SAAgBjY,EAAK,CAAE2X,WAAYA,EAAYC,UAAWA,MACvE,MAAO,CACLiC,MAAO,SAAMA,IAAA,IAAAC,EAAAC,GACXD,GAAAC,EAAA1L,QAAOuJ,iBAAPkC,EAAqBE,KAAAD,EACvB,EAEH,EAODF,MAAO,SAAMA,IACX,IAAI,IAAAI,EAAAC,EACF,IAAMtC,EAAYvJ,OAAO,8BACzB,GAAI3F,EAAAA,SAASkP,IAAYqC,GAAAC,EAAA7L,QAAOuJ,KAAU,UAAA,EAAjBqC,EAAqBD,KAAAE,EAE9C,CADA,MAAOhZ,GACP,CAEJ,GC7DK,IAAMka,GAAkE,CAC7EpP,QAAS,CACPqP,eAA8D,SAAAA,EAAA3I,GAAA,IAA7C4I,IAAAA,SAAUnU,IAAAA,MAAOoU,IAAAA,YAAaC,IAAAA,YAC7C,OAAO,SAAC7Y,GACNA,EAAM2Y,SAAWA,EACjB3Y,EAAMwE,MAAQA,EACdxE,EAAM4Y,YAAcA,EACpB5Y,EAAM6Y,YAAcA,EACpB7Y,EAAMuC,KAAO,KAEhB,EACDuW,YAAc,SAAAA,IACZ,OAAO,SAAC9Y,GACNA,EAAMuC,KAAO,MAEhB,EACDwW,kBAAiB,SAAAA,EAACxP,GAChB,OAAO,SAACvJ,GACNA,EAAM6Y,YAAc,MACpB7Y,EAAM2Y,SAAWpP,EAErB,GAEFvJ,MAAO,CACLuC,KAAM,MACNiC,MAAO,GACPoU,YAAa,OCvCV,IAAMI,GAAkB,SAAlBA,EAAmB3b,GAC9B,OACEC,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,qBAAoBjJ,SACjCoJ,OAACC,QAAK,CAAC7E,KAAK,SAAQxE,SAAA,CAClBF,EAAAA,IAACsB,EAAMA,OAAKvB,GAAAA,CAAAA,EAAAA,EAAMmY,kBAAiB,CAAE/O,UAAU,aAAazI,QAASX,EAAMoH,SAASjH,SACjFH,EAAMgH,YAAc,QAEtBhH,EAAM4b,WAAa,MAClB3b,MAACsB,EAAMA,OAAAC,GAAA,CACL0E,KAAK,UACL2V,KAAM5b,EAAAA,IAAA6b,GAAA,WAAA,KACF9b,EAAMwH,cAAa,CACvB4B,UAAU,SACVzI,QAASX,EAAMkY,KACf5X,QAASN,EAAMM,QAAQH,SAEtBH,EAAM+G,QAAU,YAM7B,wDChBA,IAAMgV,GAAa,SAAbA,IACJ,OACE9b,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,wBAAuBjJ,SACpCoJ,EAAAoR,KAAA,MAAA,CAAKvR,UAAU,iBAAgBjJ,SAC7B,CAAAF,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,iBACfnJ,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,cAAajJ,SAAA,gBAIpC,EAEA,IAAM6b,GAAuB,SAAvBA,EAAwBhc,GAC5B,OACEuJ,EAAAA,KAACrJ,EAAAA,SAAQ,CAAAC,SACP,CAAAF,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,yBAAwBjJ,SAAEH,EAAMG,WAC9CH,EAAMic,eACLhc,EAAAA,IAACic,GAAmB,CAAA/b,SAClBF,EAACqB,IAAAqa,GAAoB3b,GAAAA,CAAAA,EAAAA,EAAMic,mBAE3B,OAGV,EAEA,IAAMC,GAAsB,SAAtBA,EAAuBlc,GAC3B,OAAOC,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,wBAAuBjJ,SAAEH,EAAMG,UACvD,MAeagc,GAAqE,SAArEA,EAAsEnc,GACjF,IAAQwb,EAAiExb,EAAjEwb,YAAapS,EAAoDpJ,EAApDoJ,UAASsR,EAA2C1a,EAAzCqU,MAAAA,aAAQ,IAAGqG,EAAEva,EAA4BH,EAA5BG,SAAamE,KAAetE,EAAKuE,IAE9E9C,IAAgB,WACd,GAAIzB,EAAM,kBAAmB,CAC3B,MAAM,IAAIkO,MAAM,+CAClB,CACD,GAAE,IAEH,OACE3E,OAACsR,EAAMA,OAAArZ,GAAA,CACL4H,UAAWC,EAAAA,WAAW,iBAAkBD,GACxCgT,SAAU,MACV9C,eAAgB,KAChB+C,YAAa,MACbhI,MAAO,MACPyG,oBAAqB,CAAEC,SAAU1G,GACjC1P,KAAK,WACDL,EAAU,CACdkU,OAAQ,KAAKrY,SAAA,CAEZqb,GAAevb,EAAAA,IAAC8b,GAAU,CAAA,GAC1B5b,KAGP,EAEAgc,GAAcG,QAAUN,GACxBG,GAAcI,OAASL,GCpFvB,IAAMM,GAA6F,CAAA,MAYtFC,GAA2B,SAA3BA,EAA4BhW,GACvC,IAAK+V,GAAa/V,GAAM,CACtB+V,GAAa/V,GAAO6F,EAAKA,MAAC8O,GAC5B,CACA,OAAOoB,GAAa/V,EACtB,ECpBO,IAAMiW,GAAc,SAAdA,EAAeC,EAAyCC,GACnE,cAAcD,IAAa,UAAYA,EAAWA,GAAAA,UAAAA,EAAAA,EAAW,CAAEC,cAAAA,GACjE,ECSA,IAAMC,GAA+B,SAA/BA,EAAgC7c,GACpC,IAA6CA,EAAAA,EAAM8c,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAU/C,IAAAA,OAClC,IAAMoD,EAAsBD,EAA+CC,mBAC3E,IAAMC,EAAgBpU,EAAAA,SAAQ,WAC5B,GAAI8T,EAAU,MAAO,GACrB,IAAMrZ,EAAQ3D,EAAAA,QAAQK,EAAMsD,OAAStD,EAAMsD,MAAS,GACpD,IAAM0J,EAAWgQ,EAAmBhQ,SAAW,GAC/C,IAAKrN,EAAQqN,QAAAA,IAAYA,EAAQ/C,SAAW,EAAG,CAC7C,OAAO3G,EAAMsG,KAAI,SAAClE,GAAI,MAAM,CAAEgB,MAAOhB,EAAMpC,MAAOoC,EAAM,GAC1D,CACA,IAAMwX,EAAa,GACnB5Z,EAAMqC,SAAQ,SAACD,GACb,IAAMuD,EAAS+D,EAAQmQ,MAAK,SAACC,GAAI,OAAKA,EAAK9Z,QAAUoC,KACrDwX,EAAWvV,KAAKsB,EAASA,EAAS,CAAEvC,MAAOhB,EAAMpC,MAAOoC,GAC1D,IACA,OAAOwX,CACT,GAAG,CAACP,EAAUK,EAAmBhQ,QAAShN,EAAMsD,QAEhD,IAAMiM,EAAW3O,EAAAA,MAAM0E,gBAAe,SAAChC,GACrCtD,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWjM,GACjB0Z,EAAmBzN,UAAnByN,UAAAA,EAAAA,EAAmBzN,SAAWjM,EAChC,IAEA,GAAIqZ,EAAU,CACZ,OAAO1c,EAAAA,IAACod,EAAAA,SAASC,YAAUN,EAAkB,CAAE1Z,MAAOtD,EAAMsD,MAAOiM,SAAUA,IAC/E,CACA,OACEtP,EAAAA,IAAA,OAAA,CAAMmJ,UAAU,+BAA8BjJ,SAC3CyZ,EACGA,EAAO5Z,EAAMsD,OACb2Z,EAAcrT,KAAI,SAAC2T,EAAK3X,GAAK,OAC3B3F,EAAAA,IAACud,EAAAA,IAAG,CAAa1X,MAAM,UAAS3F,SAC7Bod,EAAI7W,OADGd,OAMtB,EAEO,IAAM6X,GAAwB,SAAxBA,EAAyBzd,GACpC,IAAQ0d,EAAkB1d,EAAM8c,YAAxBY,cAER,OACEzd,EAAAA,IAAC8V,EAAAA,KAAKiB,WACA0G,EAAa,CACjB7d,KAAMG,EAAMH,KACZuJ,UAAWC,EAAAA,WAAW,oCAAqCqU,GAAAA,UAAAA,EAAAA,EAAetU,WAAWjJ,SAErFF,EAAAqB,IAACub,GAA4Brb,GAAA,CAAA,EAAKxB,MAGxC,EC3DO,IAAM2d,GAA4B,SAA5BA,EAA6B3d,GACxC,IAA0CA,EAAAA,EAAM8c,YAAxCY,IAAAA,cAAeX,IAAAA,eACvB,OACE9c,EAAAA,IAAC8V,EAAAA,KAAKiB,WACA0G,EAAa,CACjB7d,KAAMG,EAAMH,KACZuJ,UAAWC,EAAAA,WAAW,wCAAyCqU,GAAAA,UAAAA,EAAAA,EAAetU,WAAWjJ,SAEzFF,EAAAA,IAACwS,GAAiBjR,GAAA,CAChBqO,WAAU,MACLkN,EAAmDC,uBAIhE,ECNA,IAAMY,GAAkB,SAAlBA,EAAmB5d,GACvB,IAA6CA,EAAAA,EAAM8c,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAU/C,IAAAA,OAClC,IAAMoD,EAAsBD,EAAwDC,mBAEpF,IAAMzN,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACsR,GACrC5W,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWqH,GACjBoG,GAAkB,UAAA,EAAlBA,EAAoBzN,UAAQ,UAAA,EAA5ByN,EAAoBzN,SAAWqH,EACjC,IAEA,IAAMiH,EAAYhV,EAAAA,SAAQ,WACxB,IAAMvF,EAAQ3D,EAAAA,QAAQK,EAAMsD,OAAStD,EAAMsD,MAAS,GACpD,GAAIqZ,EAAU,OAAO5S,UACrB,OAAOzG,EAAMwa,KAAK,IACnB,GAAE,CAACnB,EAAU3c,EAAMsD,QAEpB,GAAIqZ,EAAU,CACZ,OACE1c,MAACqU,GAAsB9S,GAAA,CAACqO,WAAU,MAAKmN,EAAkB,CAAE1Z,MAAOtD,EAAMsD,MAAOiM,SAAUA,IAE7F,CACA,OAAOtP,EAAAA,IAAA,OAAA,CAAMmJ,UAAU,kCAAiCjJ,SAAEyZ,EAASA,EAAO5Z,EAAMsD,OAASua,GAC3F,EAEO,IAAMpI,GAAiC,SAAjCA,EAAkCzV,GAC7C,IAAQ0d,EAAkB1d,EAAM8c,YAAxBY,cACR,OACEzd,EAAAA,IAAC8V,EAAAA,KAAKiB,WACA0G,EAAa,CACjB7d,KAAMG,EAAMH,KACZuJ,UAAWC,EAAAA,WAAW,8CAA+CqU,GAAAA,UAAAA,EAAAA,EAAetU,WAAWjJ,SAE/FF,EAAAqB,IAACsc,GAAepc,GAAA,CAAA,EAAKxB,MAG3B,uBC5Ba+d,GAAe,SAAfA,EAAgB/d,GAC3B,IAAQsD,EAAyBtD,EAAzBsD,MAAUgB,KAAetE,EAAKuE,IACtC,IAAMyZ,EAAgBlb,EAAAA,SACtB,IAAMmb,EAAqBnb,SAAO,MAClC,IAAgCzC,EAAAA,EAAQA,SAAC,GAAlC6d,EAAQ3d,EAAA,GAAE4d,EAAW5d,EAAA,GAE5BkB,IAAgB,WACd,GAAIf,EAAiBA,kBAAC4C,IAAU2a,EAAmBjb,QAAS,OAC5Dib,EAAmBjb,QAAU,MAC7B,GAAIM,IAAU0a,EAAchb,UAAYtC,EAAiBA,kBAAC4C,GAAQ,OAClE6a,EAAYrK,KAAKyD,MACnB,GAAG,CAACjU,IAEJ,IAAMiM,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACC,GACrC,GAAIA,EAAM6Y,YAAY,eAAiB,wBAAyB,CAC9D,MACF,CACAJ,EAAchb,QAAUuC,EAAM0D,OAAO3F,MACrCtD,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWhK,EACnB,IAEA,IAAM8Y,EAAmBzd,EAAAA,MAAM0E,gBAAe,SAACC,GAC7CgK,EAAShK,EACX,IAEA,OACEoB,EAAAqD,cAACkN,EAAKA,MAAA1V,GAAA,CAAA,EACA8C,EAAU,CACdmC,IAAKyX,EACLG,iBAAkBA,EAClB9O,SAAUA,EACV+O,aAAchb,IAGpB,uBCjCaib,GAAqB,SAArBA,EAAsBve,GACjC,IAAQsD,EAAyBtD,EAAzBsD,MAAUgB,KAAetE,EAAKuE,IACtC,IAAMyZ,EAAgBlb,EAAAA,SACtB,IAAMmb,EAAqBnb,SAAO,MAClC,IAA0DzC,EAAAA,EAAQA,SAAC,GAA5Dme,EAAqBje,EAAA,GAAEke,EAAwBle,EAAA,GAEtDkB,IAAgB,WACd,GAAIf,EAAiBA,kBAAC4C,IAAU2a,EAAmBjb,QAAS,OAC5Dib,EAAmBjb,QAAU,MAC7B,GAAIM,IAAU0a,EAAchb,UAAYtC,EAAiBA,kBAAC4C,GAAQ,OAClEmb,EAAyB3K,KAAKyD,MAChC,GAAG,CAACjU,IAEJ,IAAMiM,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACC,GACrC,GAAIA,EAAM6Y,YAAY,eAAiB,wBAAyB,CAC9D,MACF,CACAJ,EAAchb,QAAUuC,EAAM0D,OAAO3F,MACrCtD,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWhK,EACnB,IAEA,IAAM8Y,EAAmBzd,EAAAA,MAAM0E,gBAAe,SAACC,GAC7CgK,EAAShK,EACX,IAEA,OACEoB,EAAAA,cAACuQ,EAAAA,MAAMwH,aACDpa,EAAU,CACdmC,IAAK+X,EACLH,iBAAkBA,EAClB9O,SAAUA,EACV+O,aAAchb,IAGpB,uBCjCaqb,GAAuB,SAAvBA,EAAwB3e,GACnC,IAAQsD,EAAyBtD,EAAzBsD,MAAUgB,KAAetE,EAAKuE,IACtC,IAAMyZ,EAAgBlb,EAAAA,SACtB,IAAMmb,EAAqBnb,SAAO,MAClC,IAA+BzC,EAAAA,EAAQA,SAAC,GAAjC6d,EAAQ3d,EAAA,GAAEqe,EAAUre,EAAA,GAE3BkB,IAAgB,WACd,GAAIf,EAAiBA,kBAAC4C,IAAU2a,EAAmBjb,QAAS,OAC5Dib,EAAmBjb,QAAU,MAC7B,GAAIM,IAAU0a,EAAchb,UAAYtC,EAAiBA,kBAAC4C,GAAQ,OAClEsb,EAAW9K,KAAKyD,MAClB,GAAG,CAACjU,IAEJ,IAAMiM,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACC,GACrC,GAAIA,EAAM6Y,YAAY,eAAiB,wBAAyB,CAC9D,MACF,CACAJ,EAAchb,QAAUuC,EAAM0D,OAAO3F,MACrCtD,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWhK,EACnB,IAEA,IAAM8Y,EAAmBzd,EAAAA,MAAM0E,gBAAe,SAACC,GAC7CgK,EAAShK,EACX,IAEA,OACEoB,EAAAA,cAACuQ,EAAAA,MAAM2H,eACDva,EAAU,CACdmC,IAAKyX,EACLG,iBAAkBA,EAClB9O,SAAUA,EACV+O,aAAchb,IAGpB,ECnDO,IAAMwb,GAAgB,SAAhBA,EAAiB9e,GAC5B,IAA0CA,EAAAA,EAAM8c,YAAxCY,IAAAA,cAAeX,IAAAA,eAEvB,OACE9c,EAAAA,IAAC8V,EAAAA,KAAKiB,WAAS0G,EAAa,CAAE7d,KAAMG,EAAMH,KAAKM,SAC7CF,EAAAA,IAAC8d,GAAYvc,GAAA,CAACqO,WAAU,MAAMkN,EAAuCC,uBAG3E,ECRO,IAAM+B,GAAsB,SAAtBA,EAAuB/e,GAClC,IAA0CA,EAAAA,EAAM8c,YAAxCY,IAAAA,cAAeX,IAAAA,eACvB,OACE9c,EAAAA,IAAC8V,EAAAA,KAAKiB,WACA0G,EAAa,CACjB7d,KAAMG,EAAMH,KACZuJ,UAAWC,EAAAA,WAAW,kCAAmCqU,GAAAA,UAAAA,EAAAA,EAAetU,WAAWjJ,SAEnFF,EAACqB,IAAA0d,cAAiBjC,GAAAA,CAAAA,EAAAA,EAA6CC,uBAGrE,ECFA,IAAMiC,GAA4B,SAA5BA,EAA6Bjf,GACjC,IAA6CA,EAAAA,EAAM8c,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAU/C,IAAAA,OAClC,IAAMoD,EAAsBD,EAA4CC,mBAExE,IAAMa,EAAYhV,EAAAA,SAAQ,WACxB,GAAI8T,EAAU,MAAO,GACrB,IAAMrZ,EAAQtD,EAAMsD,MACpB,IAAM0J,EAAWgQ,EAAmBhQ,SAAW,GAC/C,IAAKrN,EAAQqN,QAAAA,IAAYA,EAAQ/C,SAAW,EAAG,CAC7C,OAAO3G,CACT,CACA,IAAM2F,EAAS+D,EAAQmQ,MAAK,SAACzX,GAAI,OAAKA,EAAKpC,QAAUA,KACrD,OAAO2F,GAAM,UAAA,EAANA,EAAQvC,QAASpD,CAC1B,GAAG,CAACqZ,EAAUK,EAAmBhQ,QAAShN,EAAMsD,QAEhD,IAAMiM,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACxE,GACrCd,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWzO,EAAEmI,OAAO3F,OAC1B0Z,EAAmBzN,UAAnByN,UAAAA,EAAAA,EAAmBzN,SAAWzO,EAChC,IAEA,GAAI6b,EAAU,CACZ,OAAO1c,EAAAA,IAACif,EAAAA,MAAM5B,YAAUN,EAAkB,CAAE1Z,MAAOtD,EAAMsD,MAAOiM,SAAUA,IAC5E,CACA,OACEtP,EAAAA,IAAA,OAAA,CAAMmJ,UAAU,4BAA2BjJ,SACxCyZ,EAASA,EAAO5Z,EAAMsD,OAASua,EAAY5d,EAAAqB,IAACkc,MAAG,CAAC1X,MAAM,UAAS3F,SAAE0d,IAAmB,MAG3F,EAEO,IAAMsB,GAAqB,SAArBA,EAAsBnf,GACjC,IAAQ0d,EAAkB1d,EAAM8c,YAAxBY,cAER,OACEzd,EAAAA,IAAC8V,EAAAA,KAAKiB,WACA0G,EAAa,CACjB7d,KAAMG,EAAMH,KACZuJ,UAAWC,EAAAA,WAAW,iCAAkCqU,GAAAA,UAAAA,EAAAA,EAAetU,WAAWjJ,SAElFF,EAAAqB,IAAC2d,GAAyBzd,GAAA,CAAA,EAAKxB,MAGrC,EC5BA,IAAM2L,GAA2B,CAC/BG,cAAe,eACfsT,qBAAsB,GACtBC,qBAAsB,GAGxB,IAAMtT,GAAkE,CACtEC,QAAS,CACPsT,kBAAmB,SAACpT,EAAAA,GAClB,OAAO,SAACvJ,GACNA,EAAMyc,qBAAuB,CAC3B,CACEvG,SAAU3M,EAAON,eAGrB,GAAIjJ,EAAMmJ,cAAe,CACvBnJ,EAAMmJ,cAAgBnJ,EAAMmJ,aAC9B,CACAnJ,EAAM0c,qBAAuB1c,EAAM0c,qBAAuB,EAE7D,EACDE,oBAAqB,SAACrT,EAAAA,GACpB,OAAO,SAACvJ,GACNA,EAAMyc,qBAAqBzX,KAAK,CAC9B6X,QAAStT,EAAOuT,iBAChB5G,SAAU3M,EAAOyB,WAEnBhL,EAAMmJ,cAAgB,kBACtBnJ,EAAM0c,qBAAuB1c,EAAM0c,qBAAuB,EAE7D,EAEDK,0BAA2B,SAACxT,EAAAA,GAC1B,OAAO,SAACvJ,GACNA,EAAMyc,qBAAuB,CAC3B,CACEI,QAAS,SACT3G,SAAU3M,IAGdvJ,EAAMmJ,cAAgB,kBACtBnJ,EAAM0c,qBAAuB1c,EAAM0c,qBAAuB,EAE7D,EACDlT,oBAAqB,SAACD,EAAAA,GACpB,OAAO,SAACvJ,GACNA,EAAMmJ,cAAgBI,EAE1B,GAEFvJ,MAAOgJ,IAGT,IAAMgU,GAA4F,CAAA,EAQ3F,IAAMC,GAAuB,SAAvBA,EAAwBnZ,GACnC,IAAKkZ,GAAsBlZ,GAAM,CAC/BkZ,GAAsBlZ,GAAO6F,EAAKA,MAACP,GACrC,CACA,OAAO4T,GAAsBlZ,EAC/B,EClFO,IAAMoZ,GAAe,SAAfA,EAAgBjJ,EAAMkJ,GACjC,IAAItS,EAAYrE,UAAyByN,GACzCpJ,EAAYA,EAAU5D,KAAI,SAAClE,GACzB,GAAIqa,EAAAC,SAASta,GAAO,OAAOA,EAAKoa,GAChC,OAAOpa,CACT,IACA,OAAO8H,CACT,kTCwHayS,GAAkB,SAAlBA,EAAmBjgB,GAC9B,IACE0M,EAiBE1M,EAjBF0M,cACAwT,EAgBElgB,EAhBFkgB,cACAnT,EAeE/M,EAfF+M,qBACAoT,EAcEngB,EAdFmgB,wBACAC,EAaEpgB,EAbFogB,uBACAC,EAYErgB,EAZFqgB,qBACAvT,EAWE9M,EAXF8M,qBACAyO,EAUEvb,EAVFub,YACA+E,EASEtgB,EATFsgB,gBACcC,EAQZvgB,EARF4L,aACAe,EAOE3M,EAPF2M,SACAC,EAME5M,EANF4M,WACA4T,EAKExgB,EALFwgB,kBACAld,EAIEtD,EAJFsD,MACAmd,EAGEzgB,EAHFygB,aACAC,EAEE1gB,EAFF0gB,uBACGpc,KACDtE,EAAKuE,IACT,IAAMoc,EAAuB9X,EAAAA,SAAQ,WAAA,OAAM6D,GAAAA,UAAAA,EAAAA,EAAeR,SAAU,EAAE,GAAE,CAACQ,GAAa,UAAA,EAAbA,EAAeR,SACxF,IAAM0U,EAA0B/X,EAAAA,SAAQ,WACtC,OAAO8X,GAAwBne,OAAOqe,KAAKF,GAAsB1W,OAAS,CAC5E,GAAG,CAAC0W,IAEJ,IAA8BtgB,EAAAA,EAAQA,SAAC,OAAhCC,EAAOC,EAAA,GAAEC,EAAUD,EAAA,GAE1B,IAAMugB,EAAgCjY,EAAAA,SAAQ,WAC5C,IACE,GAAI+X,EAAyB,CAC3B,IAAMG,EAAoBC,KAAKC,UAAUC,EAAAC,KAAKC,KAAKT,IACnD,GAAII,IAAsB,KAAM,CAC9B,OAAOhX,SACT,CACA,OAAOgX,CACT,CACe,CAAf,MAAO7f,GAAQ,CACjB,OAAO6I,SACT,GAAG,CAAC6W,EAAyBD,IAE7B,IAAMU,EAAoC3e,GAAYoe,GAEtD,IAAMQ,EAAW/F,IAAgB,SAEjC,IAAMgG,EAAuBvhB,EAAMwhB,eAAe,gBAElD,IAAAC,EAAyB7B,GAAqBjT,GAAUU,WAAjD1K,EAAK8e,EAAA,GAAEzV,EAAOyV,EAAA,GAErB,IAAMnU,0CAAwDX,EAE9D,IAII9D,EAAAA,EAAAA,SAAQ,WACV,OAAArH,GAAA,CAASkF,MAAO,QAASpD,MAAO,QAASoE,SAAU,YAAekF,EACpE,GAAG,CAACA,IALK8U,IAAPhb,MACOib,IAAPre,MACUse,IAAVla,SAKF,IAAMma,EAA8BhZ,EAAAA,SAAQ,WAC1C,OAAArH,GAAA,CAASkF,MAAO,QAASpD,MAAO,SAAYod,EAC9C,GAAG,CAACA,IAEJ,IAAMoB,EAAkBjZ,EAAAA,SAAQ,WAC9B,GAAIqX,EAAe,CAAA,IAAAxN,EACjB,IAAMqP,EAAS7B,IAAkB,KACjC,OAAAxN,EAAA,CAAA,EAAAA,EACGgP,GAAwBK,EAAS,KAAO7B,EAAcxZ,MACtDib,EAAAA,GAAwBI,EAAS,GAAK7B,EAAc5c,MAAKoP,CAE9D,CACA,OAAO,IACR,GAAE,CAACgP,EAAuBC,EAAuBzB,IAElD,IAAM8B,EAAa5W,EAAAA,aAAapL,EAAMiiB,KAAM,CAAC,aAE7C,IAAMC,EAAcrZ,EAAAA,SAAQ,WAC1B,IAAMsZ,EAAatC,GAAavc,EAAOue,EAA4Bve,OACnE,OAAO0e,EAAaG,EAAaA,EAAW,EAC7C,GAAE,CAACH,EAAYH,EAA6Bve,IAE7C,IAAM8e,EAAoBvZ,EAAAA,SAAQ,WAAM,IAAAwZ,EACtC,GAAIf,EAAU,CAAA,IAAAgB,EACZ,OAAAA,EAAOC,YAAU5f,EAAMyc,qBAAsB,SAAU,aAAhD,UAAA,EAAAkD,EAA4DzJ,QACrE,CACA,OAAAwJ,EAAO1f,EAAMyc,qBAAqBjC,MAAK,SAACzX,GAAI,OAAKA,EAAK8Z,UAAYsB,CAA8B,MAAA,UAAA,EAAzFuB,EACHxJ,QACL,GAAE,CAACyI,EAAUR,EAA+Bne,EAAMyc,uBAEnD,IAAM1R,EAAyB,SAAzBA,EAA0BC,GAC9B,IAAMC,EAAelB,GAAAA,MAAAA,EAAemB,uBAChCnB,GAAa,UAAA,EAAbA,EAAemB,uBAAuBF,GACtCA,EACJ,OAAOC,GAAgB,IAGzB,IAAME,EAAyB,SAAzBA,EAAgC0U,EAAqBC,GAA5B,OAAA,IAAA1gB,SAAA,SAAAC,EAAAC,GAAA,IAGrBygB,EAGEC,EAIF5U,EACAC,EApPZ,IAAI4U,EAAA,WAAJ,IAAI,OAAA5gB,GAA8B,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,GAAlC,IAAIygB,EAAA,SA+PS3hB,GA/Pb,IAgQMC,QAAQD,MAAMA,GACdV,EAAW,YACNwL,EAAQG,oBAAoB,iBACjCiU,GAAAA,UAAAA,EAAAA,EAAyBlf,GAnQ/B,OAAO0hB,GAA2B,CAAxB,MAAUxgB,GAAC,OAAOH,EAAMG,EAAA,GA0O9B,IACE5B,EAAW,MACL0L,EAASyU,GAAwB,QAClC3U,EAAQG,oBAAoB,oBACjC,KAAMzL,EAAAA,kBAAkB8hB,KAAgB9hB,oBAAkB+hB,KAAcnB,EAAU,CAC1EqB,EAAUrC,GAAmB,UACnCpU,EAAOyW,GAAWH,EAClBtW,EAAOsU,GAAqB,YAAciC,CAC5C,CACiB,OAAA1gB,QAAAwM,QAAM7B,GAAa,UAAA,EAAbA,EAAeuB,WAAS,UAAA,EAAxBvB,EAAeuB,UAAY/B,IAAjChK,MAAwC,SAAAmN,GAnP/D,IAmPY1B,EAAW0B,EACXrB,EAAkBN,EAAuBC,GAE/C,GAAI2T,EAAU,MACPtV,EAAQ0T,0BAA0B1R,EACzC,KAAO,MACAhC,EAAQuT,oBAAoB,CAC/B5R,SAAUK,EACVyR,iBAAkBqB,GAEtB,CACAtgB,EAAW,OA9PjB,OAAOoiB,GAA2B,CAAxB,MAAUxgB,GAAC,OAAOygB,EAAMzgB,EAAA,CAAC,GAAAygB,EAoQ/B,CALE,MAAO3hB,GAAO2hB,EAAP3hB,EAKT,CAAC,GACF,EAED,IAAM4hB,EAAiB,CACrBC,kBAAmB,SAAMA,IACvB,IAAMC,EAAU3U,OAAOf,GACvB,GAAIwT,EAA+B,CACjC,GAAInhB,EAAAA,QAAQqjB,IAAYA,EAAQljB,SAASghB,GAAgC,OAAO,IAClF,KAAO,CACL,QAASkC,CACX,CACA,OAAO,KACR,EACDC,wBAAyB,SAAMA,IAC7B,GAAInC,EAA+B,CACjC,IAAMoC,EAAa7U,OAAOf,IAAkB,GAC5C,IAAK4V,EAAUpjB,SAASghB,GAAgC,CACtDzS,OAAOf,GAAiB4V,EAAU5T,OAAOwR,EAC3C,CACF,KAAO,CACLzS,OAAOf,GAAiB,EAC1B,CACF,GAGF,IAAM6V,EAAoB,SAApBA,IACJ,KAAKzW,GAAa,MAAbA,EAAeuB,WAAW,CAC7B,MAAM,IAAIC,MAAM,uBAClB,CAGA,GAAI4U,EAAeC,oBAAqB,CACtC,MACF,CACAD,EAAeG,+BAEVnV,KAGPrM,IAAgB,WACd,GAAI8f,GAAwBD,EAAU,OACtC,GAAIV,EAAyB,CAC3B,IAAMwC,EAAqB1W,GAAAA,UAAAA,EAAAA,EAAe0W,mBAC1C,GAAIA,GAAsBA,EAAmBnZ,OAAS,EAAG,CACvD,IAAMoZ,EAAUD,EAAmBjG,MAAK,SAAC1W,GACvC,OAAOka,EAAqBla,KAAS,IAAM/F,EAAAA,kBAAkBigB,EAAqBla,GACpF,IACA,GAAI4c,EAAS,CACX,GAAIjB,GAAqBA,EAAkBnY,OAAS,EAAG,CAErDoE,OAAOf,GAAiBvD,eACnBiC,EAAQsT,kBAAkB,CAC7B1T,aAAc,GACdE,cAAe,0BAEnB,KAAO,MACAE,EAAQG,oBAAoB,yBACnC,CAKA,GAAIkV,EAAmC,CACrCrhB,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWxF,UACnB,CACA,MACF,CACF,CACF,CAWA,GAAIqY,IAAsBrY,UAAW,CACnCoZ,GACF,CACF,GAAG,CAACxC,IAEJ/f,EAAM0iB,MAAAA,iBAAgB,WACpB,GAAI3gB,EAAM0c,qBAAuB,EAAG,CAElCtS,GAAAA,UAAAA,EAAAA,EAAuBqV,EACzB,CACAjC,GAAAA,UAAAA,EAAAA,EAA0BiC,EAC5B,GAAG,CAACzf,EAAM0c,uBAEV5d,IAAgB,WACd,GAAI8f,EAAsB,MACnBvV,EAAQsT,kBAAkB,CAC7B1T,aAAc2U,GAAqB,IAEvC,CACF,GAAG,CAACA,IAEJ,IAAMgD,EAAe3iB,EAAM0E,MAAAA,gBAAe,SAACke,EAAeC,GACxD,IAAMtjB,EAAWgJ,EAAAA,QAAQsa,EAAOtjB,UAChC,IAAIujB,EAAc,GAClBvjB,EAASwF,SAAQ,SAACD,GAChB,GAAIgD,WAAShD,GAAOge,GAAehe,CACrC,IACA,OAAOge,EAAYC,cAAcC,QAAQJ,EAAMG,gBAAkB,CACnE,IAEA,IAAME,GAAWjjB,EAAAA,MAAMkjB,qBAAoB,SAACxgB,GAC1C,GAAIA,EAAO,MACJwK,EAAuBxK,EAC9B,KAAO,MACA0I,EAAQsT,kBAAkB,CAC7B1T,aAAc,IAElB,CACD,GAAE,KAEH,IAAMmY,GAAenjB,EAAAA,MAAM0E,gBAAe,SAAC0e,GACzC,GAAIA,EAAa/Z,SAAW,EAAG,OAAOjK,EAAMuP,sBAANvP,EAAMuP,SAAWxF,WAEvD,GAAI0W,EAAc,CAChB,IAAQ/Z,EAAiBmb,EAAjBnb,MAAOpD,EAAUue,EAAVve,MACf,IAAM2gB,EAAmBD,EAAapa,KAAI,SAAClE,GAAS,IAAAmP,EAClD,OAAAA,EAAA,CAAA,EAAAA,EACGnO,GAAQhB,EAAKgc,GACbpe,EAAAA,GAAQoC,EAAKic,GAAsB9M,CAExC,IACA,GAAImN,EAAY,CACdhiB,EAAMuP,UAAQ,UAAA,EAAdvP,EAAMuP,SAAW0U,EAAkBD,EACrC,KAAO,CACLhkB,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAW0U,EAAiB,GAAID,EACxC,CACF,KAAO,CACL,IAAMxW,EAAYwW,EAAapa,KAAI,SAAClE,GAAI,OAAKA,EAAKic,MAClD,GAAIK,EAAY,CACdhiB,EAAMuP,UAAQ,UAAA,EAAdvP,EAAMuP,SAAW/B,EAAWwW,EAC9B,KAAO,CACLhkB,EAAMuP,UAAQ,UAAA,EAAdvP,EAAMuP,SAAW/B,EAAU,GAAIwW,EAAa,GAC9C,CACF,CACF,IAEA,IAAME,GAAgBtjB,EAAM0E,MAAAA,gBAAe,SAAC6e,EAAQC,GAClD,IAAMJ,EAAe7a,UAAcib,GACnC,IAAMjC,EAAa,GACnB6B,EAAare,SAAQ,SAACD,GACpB,GAAIwa,GAAiB4B,GAAmBpc,EAAKpC,QAAUwe,EAAgBH,GAAwB,CAC7FQ,EAAWxa,KAAKma,EAClB,KAAO,CACL,IAAMuC,EAAe9B,EAAAA,UAAUH,GAAqB,GAAI1c,EAAKpC,MAAOqe,GACpE,GAAI0C,EAAc,CAChBlC,EAAWxa,KAAK0c,EAClB,CACF,CACF,IACAN,GAAa5B,EACf,IAEA,IAAMnT,GAAiBpO,QAAM0E,gBAAe,gBACrCwI,GACP,IAEA,IAAMwW,GAAkBzb,EAAAA,SAAQ,WAC9B,GAAIlG,EAAMmJ,gBAAkB,iBAAmBnJ,EAAMmJ,gBAAkB,mBAAoB,CACzF,MAAO,EACT,CACA,IAAKsW,GAAqBA,EAAkBnY,SAAW,EAAG,MAAO,GACjE,IAAK6X,EAAiB,OAAOM,EAC7B,MAAO,CAACN,GAAiBxS,OAAO8S,GAAqB,GACtD,GAAE,CAACN,EAAiBnf,EAAMmJ,cAAesW,IAE1C,OACEniB,MAACskB,EAAMA,OAAA/iB,GAAA,CACLoO,WAAY,KACZC,WAAY,KACZ2U,yBAA0B,OACtBlgB,EAAU,CACd6B,MAAK3E,GAAA,CAAI6S,MAAO,QAAWrU,EAAMmG,OACjC7C,MAAO4e,EACPnS,gBACE9P,MAAC8K,GAAmB,CAClBI,OAAQxI,EAAMmJ,cACdxL,QAASA,EACT0K,cAAaxJ,GAAA,CACX,eAAgB8f,EAAW,UAAY,QACpCxU,GAELpB,YACEzL,MAACsB,SAAM,CAAC2E,KAAK,UAAUvF,QAASqO,GAAe7O,SAAA,aAMrDG,QAASA,EACTujB,SAAUvC,EAAWuC,GAAW9Z,UAChCwZ,aAAcjC,EAAW,MAAQiC,EACjChU,SAAU2U,GACVtX,WAAY7C,UACZiG,WACErN,EAAMmJ,gBAAkB,gBACtB7L,EAAAA,IAAAgQ,GAAAA,WAAA,CAAcC,KAAM5P,EAASK,QAASqO,KACpCjF,UACL5J,UAECmkB,IAAmB,IAAI1a,KAAI,SAAClE,EAAME,GAClC,IAAMtC,EAAQoC,EAAKic,GACnB,IAAMjb,EAAQhB,EAAKgc,GACnB,OACEnY,EAAAoR,KAAC4J,EAAMA,OAACE,OAAM,CACZnhB,MAAOA,EACPoD,MAAOA,EAEPgB,SAAUhC,EAAKkc,GAA0BzhB,SAExCH,CAAAA,EAAM0kB,SAAWzkB,EAAAA,IAAA,OAAA,CAAMmJ,UAAU,uBAAsBjJ,SAAEH,EAAM6b,MAAI,UAAA,EAAV7b,EAAM6b,KAAOnW,KAAgB,KACtF2a,EAAuBA,EAAqB3a,GAAQgB,IAJ7CpD,EAASsC,IAAAA,QAU7B,ECvdA,IAAMgY,GAAkB,SAAlBA,EAAmB5d,GACvB,IAA6CA,EAAAA,EAAM8c,YAA3CC,IAAAA,eAAgBJ,IAAAA,SAAU/C,IAAAA,OAClC,IAAMoD,EAAsBD,EAA+CC,mBAC3E,IAAwC3c,EAAAA,EAAQA,SAAmB,IAA5DuL,EAAYrL,EAAA,GAAEokB,EAAepkB,EAAA,GACpC,IAA0CF,EAAAA,EAAQA,SAAmB,IAA9D4c,EAAa7X,EAAA,GAAEwf,EAAgBxf,EAAA,GAGtCxD,EAAAA,WAAU,WACR,IAAK+a,EAAU,CACb,IAAMrZ,EAAQ3D,EAAAklB,QAAQ7kB,EAAMsD,OAAStD,EAAMsD,MAAQtD,EAAMsD,QAAUyG,UAAY,GAAK,CAAC/J,EAAMsD,OAC3F,GAAIsI,EAAa3B,SAAW,EAAG,CAC7B2a,EAAiBthB,EAAMsG,KAAI,SAAClE,GAAI,MAAM,CAAEgB,MAAOhB,EAAgBpC,MAAOoC,EAAO,IAC/E,CACA,IAAMwX,EAAa,GACnB5Z,EAAMqC,SAAQ,SAACD,GACb,IAAMuD,EAAS2C,EAAauR,MAAK,SAACC,GAAI,OAAKA,EAAK9Z,QAAUoC,KAC1DwX,EAAWvV,KAAKsB,EAASA,EAAS,CAAEvC,MAAOoe,OAAOpf,GAAOpC,MAAOoC,GAClE,IACAkf,EAAiB1H,EACnB,CACF,GAAG,CAACP,EAAUK,EAAmBpQ,WAAY5M,EAAMsD,MAAOsI,IAE1D,IAAMmB,EAAuBnM,EAAAA,MAAM0E,gBAAe,SAACyf,GACjDJ,EAAgBK,EAAqBA,sBAACD,GAAY,GAAI/H,EAAmBpQ,YAC3E,IAEA,IAAM2C,EAAW3O,EAAM0E,MAAAA,gBAAe,SAAChC,EAAOmM,GAC5CzP,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWjM,GACjB0Z,EAAmBzN,UAAQ,UAAA,EAA3ByN,EAAmBzN,SAAWjM,EAAOmM,EACvC,IAEA,GAAIkN,EAAU,CACZ,OACE1c,EAAAqB,IAAC2e,GAAeze,GAAA,CAAA,EACVwb,EAAkB,CACtB1Z,MAAOtD,EAAMsD,MACbiM,SAAUA,EACVxC,qBAAsBA,IAG5B,CACA,OACExD,EAAAA,KAACrJ,EAAAA,SAAQ,CAAAC,SACP,CAAAF,EAAAqB,IAAA,MAAA,CAAK6E,MAAO,CAAE8e,QAAS,QAAS9kB,SAC9BF,EAAAA,IAACggB,GAAeze,GAAA,CAAA,EAAKwb,EAAkB,CAAEjQ,qBAAsBA,OAEjE9M,EAAAqB,IAAA,OAAA,CAAM8H,UAAU,yBAAwBjJ,SACrCyZ,EACGA,EAAO5Z,EAAMsD,OACb2Z,EAAcrT,KAAI,SAAC2T,EAAK3X,GAAK,OAC3B3F,EAAAA,IAACud,EAAAA,IAAG,CAAa1X,MAAM,UAAS3F,SAC7Bod,EAAI7W,OADGd,UAOxB,EAEO,IAAMsf,GAA0B,SAA1BA,EAA2BllB,GACtC,IAAQ0d,EAAkB1d,EAAM8c,YAAxBY,cAER,OACEzd,EAAAA,IAAC8V,EAAAA,KAAKiB,WACA0G,EAAa,CACjB7d,KAAMG,EAAMH,KACZuJ,UAAWC,EAAAA,WAAW,sCAAuCqU,GAAAA,UAAAA,EAAAA,EAAetU,WAAWjJ,SAEvFF,EAAAqB,IAACsc,GAAepc,GAAA,CAAA,EAAKxB,MAG3B,EChFA,IAAMmlB,GAAsB,SAAtBA,EAAuBnlB,GAIvB,IAAAolB,EAAAC,EACJ,IAAM/hB,EAAQuF,EAAAA,SAAQ,WAAM,IAAAyc,EAC1B,IAAItlB,EAAAA,EAAM8c,cAAW,MAAjBwI,EAAmB1L,OAAQ,OAAO7P,UACtC,IAAMwb,EACJ7c,EAAAA,SAAS1I,EAAMsD,QAAUkiB,EAAAC,SAASzlB,EAAMsD,QAAUoiB,EAAAA,UAAU1lB,EAAMsD,SAAWtD,EAAMsD,MACrF,IAAKiiB,EAAY,CACfpkB,QAAQwkB,KAAwB3lB,mBAAAA,EAAMH,KAAI,OAAOmhB,KAAKC,UAAUjhB,EAAMsD,OAAkB,YAC1F,CACA,OAAOiiB,EAAavlB,EAAMsD,MAAQyG,SACnC,GAAE,EAAC/J,EAAAA,EAAM8c,0BAANsI,EAAmBxL,OAAQ5Z,EAAMH,KAAMG,EAAMsD,QACjD,IAAMsiB,IAAWP,EAAArlB,EAAM8c,0BAANuI,EAAmBzL,QAAnB,UAAA,EAAAyL,EAAmBzL,OAAS5Z,EAAMsD,SAAUA,EAC7D,OACErD,EAAAqB,IAACukB,EAAUA,WAACC,UAAS,CACnB1c,UAAU,qBACV2c,SAAUrd,EAAAA,SAASkd,GAAY,CAAEI,QAASJ,GAAa,KAAKzlB,SAE3DylB,GAGP,EAEO,IAAMK,GAAe,SAAfA,EAAgBjmB,GAC3B,OACEC,EAAAqB,IAACyU,EAAIA,KAACiB,KAAI,CAACkP,QAAO,KAACrmB,KAAMG,EAAMH,KAAKM,SAClCF,MAACklB,GAAmB,CAACtlB,KAAMG,EAAMH,KAAMid,YAAa9c,EAAM8c,eAGhE,EChCO,IAAMqJ,GAAmB,SAAnBA,EAAoBnmB,GAC/B,IAA0CA,EAAAA,EAAM8c,YAAxCY,IAAAA,cAAeX,IAAAA,eACvB,OACE9c,EAAAA,IAAC8V,EAAAA,KAAKiB,WAAS0G,EAAa,CAAE7d,KAAMG,EAAMH,KAAKM,SAC7CF,EAACqB,IAAAqd,GAA0B5B,GAAAA,CAAAA,EAAAA,EAA0CC,uBAG3E,kDCgDaoJ,GAAgB,SAAhBA,EAAiBpmB,GAC5B,IAAQuP,EAAkDvP,EAAlDuP,SAAU8W,EAAwCrmB,EAAxCqmB,cAAe/iB,EAAyBtD,EAAzBsD,MAAUgB,KAAetE,EAAKuE,IAC/D,IAAAhE,EAAoCF,EAAAA,WAA7BimB,EAAU/lB,EAAA,GAAEgmB,EAAahmB,EAAA,GAChC,IAAMqM,EAAa3B,EAAAA,OACjB,CACEub,IAAK,MACL3mB,KAAM,OACN4mB,IAAK,OAEPzmB,EAAM4M,YAGRnL,IAAgB,WACd8kB,EACEjjB,GAAAA,UAAAA,EAAAA,EAAOsG,KAAI,SAAClE,GACV,MAAO,CACL8gB,IAAK9gB,EAAKkH,EAAW4Z,KACrB3mB,KAAM6F,EAAKkH,EAAW/M,MACtB4mB,IAAK/gB,EAAKkH,EAAW6Z,KAExB,IAEL,GAAG,CAAC7Z,EAAW/M,KAAM+M,EAAW4Z,IAAK5Z,EAAW6Z,IAAKnjB,IAErD,IAAMojB,EAAiB9lB,EAAAA,MAAM0E,gBAAe,SAACqhB,GAC3C,IAAMC,EAAWD,EAAKC,SACtB,GAAID,EAAKE,KAAK1b,SAAW,OAAQ,CAC/B,IAAMwC,EAAWgZ,EAAKE,KAAKhO,SAC3B,GAAIlL,EAASmZ,OAAS,OAAQ,CAC5B,IAAM/lB,EACJf,EAAM6N,uBAAyB7N,EAAM6N,uBAAuBF,EAASiJ,MAAQjJ,EAASiJ,KAExF7V,EAAO6L,EAAW4Z,KAAOzlB,EAAO6L,EAAW4Z,MAAQG,EAAKE,KAAKL,IAC7DzlB,EAAO6L,EAAW/M,MAAQkB,EAAO6L,EAAW/M,OAAS8mB,EAAKE,KAAKhnB,KAC/D,GAAIG,EAAM+mB,WAAa,EAAG,CACxBxX,eAAAA,EAAW,CAACxO,GACd,KAAO,CACLwO,GAAAA,UAAAA,EAAAA,GAAYjM,GAAS,IAAIgM,OAAOvO,GAClC,CACF,KAAO,CACL,GAAIslB,EAAe,CACjBA,EAAc1Y,EAASW,QACzB,KAAO,MACAA,EAAOA,QAACpN,MAAOyM,EAASW,SAAsB,YACrD,CACAsY,EAASA,EAAS3c,OAAS,GACtB2c,GAAAA,CAAAA,EAAAA,EAASA,EAAS3c,OAAS,GAAE,CAChCkB,OAAQ,SAEZ,CACAnL,EAAM0mB,gBAAN1mB,UAAAA,EAAAA,EAAM0mB,eAAiBC,GAEvB,MACD,MAAM,GAAIA,EAAKE,KAAK1b,SAAW,UAAW,CACzC,IAAMqb,EAAMG,EAAKE,KAAKL,IACtB,IAAMrE,EAAa7e,IAAUyG,UAAgBzG,GAAAA,OAAAA,GAAS,GACtD,IAAM0jB,EAAc7E,EAAW8E,WAAU,SAACvhB,GACxC,IAAMwhB,EAAUxhB,EAAKkH,EAAW4Z,KAChC,OAAOU,IAAYV,CACrB,IACA,GAAIQ,GAAe,EAAG,CACpB7E,EAAWgF,OAAOH,EAAa,EACjC,CACAzX,GAAAA,UAAAA,EAAAA,EAAW4S,EACZ,MAAM,GAAIwE,EAAKE,KAAK1b,SAAW,QAAS,CACvC,GAAIkb,EAAe,CACjBA,GACF,KAAO,MACA/X,EAAOA,QAACpN,MAAM,YACrB,CACF,CAEAqlB,EAAa,GAAAjX,OAAKsX,IAClB5mB,EAAM0mB,gBAAN1mB,UAAAA,EAAAA,EAAM0mB,eAAiBC,EACzB,IAEA,OACE1mB,EAAAqB,IAAC8lB,EAAMA,OAAA5lB,GAAA,CAAA,EACD8C,EAAU,CACdiL,SAAUmX,EACVE,SAAUN,EACVld,UAAWC,EAAWC,WAAA,mBAAoBhF,EAAW8E,WAAWjJ,SAE/DmE,EAAWoD,SAAW,KACrBzH,EAAAA,IAAConB,GAAa,CAACC,SAAUhjB,EAAWgjB,SAASnnB,SAAEH,EAAMG,aAI7D,EAEA,IAAMknB,GAAgB,SAAhBA,EAAiBrnB,GACrB,GAAIA,EAAMG,SAAU,OAAOF,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SAAEH,EAAMG,WAC5C,GAAIH,EAAMsnB,WAAa,eAAgB,CACrC,OACE/d,EAAAA,KAAA,MAAA,CAAApJ,SAAA,CACEF,EAAAA,sBACAA,EAAAqB,IAAA,MAAA,CAAK6E,MAAO,CAAEohB,UAAW,GAAIpnB,SAAA,WAGnC,CACA,GAAIH,EAAMsnB,WAAa,UAAW,CAChC,OACErnB,EAAAA,IAACsB,EAAAA,OAAM,CAAC2E,KAAK,UAAUshB,MAAK,KAAArnB,SAAA,UAIhC,CACA,OACEF,EAAAA,IAACsB,EAAAA,OAAM,CAAC2E,KAAK,UAAUshB,MAAK,KAAArnB,SAAA,UAIhC,sBCtKA,IAAMsnB,GAA+B,SAA/BA,EACJznB,GAEA,IAA6CA,EAAAA,EAAM8c,YAA3CC,IAAAA,eAAgBnD,IAAAA,OAAQ+C,IAAAA,SAChC,IAAqCI,EAAAA,EAA4CC,mBAAzE7c,IAAAA,SAAamE,EAAUojB,GAAAC,EAAApjB,IAC/B,GAAIoY,EAAU,CACZ,OACE1c,MAACmmB,GAAa5kB,GAAA,CAAC8lB,SAAS,QAAWhjB,EAAU,CAAEhB,MAAOtD,EAAMsD,MAAOiM,SAAUvP,EAAMuP,SAASpP,SACzFA,IAGP,CACA,OACEF,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,+BAA8BjJ,SAC1CyZ,EACCA,EAAO5Z,EAAMsD,OAEbrD,EAAAqB,IAAC8kB,GAAa5kB,GAAA,CAAC8lB,SAAS,QAAWhjB,EAAU,CAAEhB,MAAOtD,EAAMsD,MAAOoE,SAAU,SAIrF,EAEO,IAAMkgB,GAAwB,SAAxBA,EAAyB5nB,GACpC,IAAQ0d,EAAkB1d,EAAM8c,YAAxBY,cACR,OACEzd,EAAAA,IAAC8V,EAAAA,KAAKiB,WACA0G,EAAa,CACjB7d,KAAMG,EAAMH,KACZuJ,UAAWC,EAAAA,WAAW,oCAAqCqU,GAAAA,UAAAA,EAAAA,EAAetU,WAAWjJ,SAErFF,EAAAqB,IAACmmB,GAA4BjmB,GAAA,CAAA,EAAKxB,MAGxC,EClBO,IAAM6nB,GAAkB,SAAlBA,EAAmB7nB,GAC9B,IAAqCA,EAAAA,EAAM8c,YAAnCC,IAAAA,eAAgBJ,IAAAA,SACxB,IAAMmL,EAAcpL,GAAYC,EAAU3c,EAAM4c,eAChD,IAAME,EAAc7R,EAAOrH,OAAA,GAAI5D,EAAM8c,YAAa,CAAEH,SAAUmL,IAE9D,IAAMC,EAAc,CAClBloB,KAAMG,EAAMH,KACZid,YAAAA,GAGF,IAAIC,GAAc,UAAA,EAAdA,EAAgB7W,QAAS,SAAW4hB,EAAa,CACnD,OAAO7nB,EAAAA,IAAC6e,GAAkBiJ,GAAAA,CAAAA,EAAAA,GAC5B,MAAO,IAAIhL,GAAAA,UAAAA,EAAAA,EAAgB7W,QAAS,eAAiB4hB,EAAa,CAChE,OAAO7nB,EAAAA,IAAC8e,GAAwBgJ,GAAAA,CAAAA,EAAAA,GAClC,MAAO,IAAIhL,GAAAA,UAAAA,EAAAA,EAAgB7W,QAAS,YAAc4hB,EAAa,CAC7D,OAAO7nB,EAAAA,IAACkmB,GAAqB4B,GAAAA,CAAAA,EAAAA,GAC/B,MAAO,IAAIhL,GAAAA,UAAAA,EAAAA,EAAgB7W,QAAS,qBAAuB4hB,EAAa,CACtE,OAAO7nB,EAAAA,IAAC0d,GAA8BoK,GAAAA,CAAAA,EAAAA,SACjC,IAAIhL,GAAc,UAAA,EAAdA,EAAgB7W,QAAS,yBAA0B,CAC5D,OAAOjG,EAAAA,IAACwV,GAAmCsS,GAAAA,CAAAA,EAAAA,SACtC,IAAIhL,GAAc,UAAA,EAAdA,EAAgB7W,QAAS,kBAAmB,CACrD,OAAOjG,EAAAA,IAACilB,GAA4B6C,GAAAA,CAAAA,EAAAA,SAC/B,IAAIhL,GAAc,UAAA,EAAdA,EAAgB7W,QAAS,gBAAiB,CACnD,OAAOjG,EAAAA,IAACwd,GAA0BsK,GAAAA,CAAAA,EAAAA,SAC7B,IAAIhL,GAAc,UAAA,EAAdA,EAAgB7W,QAAS,aAAc,CAChD,OAAOjG,EAAAA,IAACkf,GAAuB4I,GAAAA,CAAAA,EAAAA,SAC1B,IAAIhL,GAAc,UAAA,EAAdA,EAAgB7W,QAAS,gBAAiB,CACnD,OAAOjG,EAAAA,IAAC2nB,GAA0BG,GAAAA,CAAAA,EAAAA,SAC7B,IAAIhL,GAAc,UAAA,EAAdA,EAAgB7W,QAAS,SAAU,CAC5C,OAAO6W,EAAeC,mBAAmB,CACvCnd,KAAMG,EAAMH,KACZ8c,SAAUmL,EACVE,aAAchoB,EAAMgoB,aACpBpL,cAAe5c,EAAM4c,eAEzB,CAEA,OAAO3c,EAAAA,IAACgmB,GAAiB8B,GAAAA,CAAAA,EAAAA,GAC3B,EC7CO,IAAME,GAAW,SAAXA,EAAYjoB,GACvB,IAAMkoB,EAAOnS,OAAKC,kBAClB,IAOIhW,EAAAA,EAAMmoB,eANRC,IAAAA,uBACAC,IAAAA,mBACAC,IAAAA,sBACAC,IAAAA,2BACAC,IAAAA,0BACAC,IAAAA,oBAEF,OACExoB,EAAAqB,IAACyU,EAAIA,KAAC2S,KAAI,CAAC7oB,KAAMG,EAAMH,KAAKM,SACzB,WAACwoB,EAAMjW,GAAA,IAAIkW,IAAAA,IAAKC,IAAAA,OAAM,OACrBtf,EAAAA,KAAAwN,EAAAA,SAAA,CAAA5W,SACGioB,CAAAA,EACGA,EAAuB,CACrBxL,cAAe5c,EAAM4c,cACrBgM,IAAAA,EACItlB,YACF,OAAO4kB,EAAKY,cAAc9oB,EAAMgoB,aAClC,IAEF,KACHW,EAAO/e,KAAI,SAACmf,EAAYnjB,GACvB,IAAMojB,EAAcX,EAAmBlL,MAAK,SAACzX,GAAI,OAC/CgX,GAAYhX,EAAKiX,SAAU3c,EAAM4c,kBAEnC,IAAMxT,EAAYC,EAAAA,WAChB,+BAA8B,gCACErJ,EAAMH,KAAK,GAC3C,CAAE,wCAAyCmpB,IAE7C,OACEzf,EAAAA,KAAA,MAAA,CAAiBH,UAAWA,EAAUjJ,SACnCooB,CAAAA,GAAAA,UAAAA,EAAAA,EAA6B,CAC5BK,IAAAA,EACAC,OAAQ,SAAMA,IACZA,EAAOjjB,EACR,EACDqjB,kBAAmBrjB,EACnBgX,cAAe5c,EAAM4c,cACjBtZ,YACF,OAAO4kB,EAAKY,cAAkB9oB,GAAAA,OAAAA,EAAMgoB,aAAce,CAAAA,EAAWlpB,OAC/D,IAEF0J,EAAAoR,KAACnR,QAAK,CAAArJ,SACHkoB,CAAAA,EAAmBze,KAAI,SAACsf,EAAWtjB,GAClC,OACE3F,EAAAA,IAAC4nB,GAAe,CACdhoB,KAAM,CAACkpB,EAAWlpB,KAAMqpB,EAAUC,WAClCrM,YAAaoM,EAEbtM,cAAe5c,EAAM4c,cACrBoL,uBAAkBhoB,EAAMgoB,aAAce,CAAAA,EAAWlpB,QAF5C+F,EAKX,IACCojB,EACC/oB,MAACmpB,GAAkB,CACjBX,oBAAqBA,EACrBI,OAAQ,SAAMA,IACZA,EAAOjjB,EACP,EACFA,MAAOA,IAEPmE,aAELye,GAAAA,UAAAA,EAAAA,EAA4B,CAC3BI,IAAAA,EACAK,kBAAmBrjB,EACnBgX,cAAe5c,EAAM4c,cACrBiM,OAAQ,SAAMA,IACZA,EAAOjjB,EACR,EACGtC,YACF,OAAO4kB,EAAKY,cAAkB9oB,GAAAA,OAAAA,EAAMgoB,aAAce,CAAAA,EAAWlpB,OAC/D,MA3CM+F,EA+Cd,IACC0iB,EACGA,EAAsB,CACpB1L,cAAe5c,EAAM4c,cACrBgM,IAAAA,EACItlB,YACF,OAAO4kB,EAAKY,cAAc9oB,EAAMgoB,aAClC,IAEF,OACH,GAIX,EAEA,IAAMoB,GAAqB,SAArBA,EAAsBppB,GAK1B,OACEC,EAAAqB,IAACyU,EAAIA,KAACiB,KAAI,CAAA7W,SACPH,EAAMyoB,oBACLzoB,EAAMyoB,oBAAoB,CAAEI,OAAQ7oB,EAAM6oB,OAAQI,kBAAmBjpB,EAAM4F,QAE3E3F,EAAAqB,IAACC,SAAM,CAAC2E,KAAK,OAAOuB,OAAM,KAACoU,KAAM5b,EAAAA,IAAmBopB,GAAA,WAAA,IAAC1oB,QAASX,EAAM6oB,OAAO1oB,SAAA,QAMnF,EC9GO,IAAMmpB,GAAe,SAAfA,EAAgBtpB,GAC3B,GAAIA,EAAM8c,YAAa,CACrB,GAAInd,EAAAklB,QAAQ7kB,EAAM8c,YAAY,uBAAwB,CACpD,IAAMqL,EAAiBnoB,EAAM8c,YAC7B,OACE7c,EAAAA,IAACgoB,GAAQ,CACPpoB,KAAMG,EAAMH,KACZmoB,aAAchoB,EAAMgoB,aACpBG,eAAgBA,EAChBvL,cAAe5c,EAAM4c,eAG3B,KAAO,CACL,OACErT,EAAAA,KAACrJ,EAAAA,SAAQ,CAAAC,SAAA,CACPF,MAAC4nB,GAAe,CACdhoB,KAAMG,EAAMH,KACZid,YAAa9c,EAAM8c,YACnBF,cAAe5c,EAAM4c,cACrBoL,aAAchoB,EAAMgoB,eAErBhoB,EAAMupB,YACLtpB,EAAAA,IAAC8V,EAAAA,KAAKiB,KAAI,CAAC3V,OAAQ,KAAMxB,KAAMG,EAAMupB,YAAYC,UAAUrpB,SACzDF,EAAAA,IAACiX,EAAKA,MAAA,MAEN,OAGV,CACF,CACA,OAAOjX,EAAAA,IAACgmB,GAAY,CAACpmB,KAAMG,EAAMH,MACnC,gDCiBa4pB,GAAgB,SAAhBA,EAAiBzpB,GAA8B,IAAA0pB,EAC1D,IAAMC,EAAU9gB,EAAAA,SAAQ,WACtB,IAAK7I,EAAM2pB,QAAS,MAAO,GAC3B,OAAO3pB,EAAM2pB,QAAQ/f,KAAI,SAACggB,GACxB,IAAQ9M,EAAsD8M,EAAtD9M,YAAa+M,EAAyCD,EAAzCC,iBAAqBC,KAAoBF,EAAUrlB,IACxE,OAAA/C,GAAA,CACEuoB,OAAQ,SAAMA,IAAA,IAAAC,EACZ,MAAO,CACLC,WAAQjqB,EAAMkqB,aAAN,UAAA,EAAAF,EAAkBG,oBAAqB,SAEnD,GACGL,EAAe,CAClBlQ,OAAQ,SAAAA,EAACuK,EAAQiG,GACf,IAAMC,EAAe,CAACrqB,EAAMH,KAAMuqB,EAAOvqB,MACzC,IAAMmoB,EAAe4B,EAAWJ,UAAS,GAAAla,OAAO+a,EAAY,CAAET,EAAWJ,YAAaa,EACtF,IAAMC,EAAeT,GAAgB,UAAA,EAAhBA,EAAmB,CACtChqB,KAAMmoB,EACNpL,cAAewN,EAAOvqB,KACtB0qB,UAAWH,EAAOG,UAClBF,aAAAA,IAEF,GAAIC,EAAc,CAChB,OAAOA,CACT,CAEA,IAAME,SACG1N,IAAgB,WACnBA,EAAY,CACVjd,KAAMmoB,EACNpL,cAAewN,EAAOvqB,KACtBwqB,aAAAA,IAEFvN,EACN,OACE7c,EAAAA,IAACqpB,GAAY,CACXzpB,KAAM+pB,EAAWJ,UAAY,CAACY,EAAOvqB,KAAM+pB,EAAWJ,WAAa,CAACY,EAAOvqB,MAC3EmoB,aAAcA,EACdlL,YAAa0N,EACb5N,cAAewN,EAAOvqB,KACtB0pB,YAAaK,EAAWL,aAG9B,GAEJ,GACD,GAAE,CAACvpB,EAAM2pB,QAAS3pB,EAAMH,MAAI6pB,EAAE1pB,EAAMkqB,yBAANR,EAAkBS,oBAEjD,OACElqB,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,iBAAgBjJ,SAC7BF,EAAAA,IAAC8V,EAAIA,KAAC2S,KAAI,CAAC7oB,KAAMG,EAAMH,KAAM4qB,MAAOzqB,EAAMyqB,MAAMtqB,SAC7C,SAACwoB,EAAAA,EAAQ+B,GACR,OACEnhB,EAAAA,KAACrJ,EAAAA,SAAQ,CAAAC,SAAA,CACNH,EAAM2qB,oBAAsB3qB,EAAM2qB,oBAAoBD,EAAmB/B,EAAO1e,QAAU,KAC3FhK,EAAAA,IAAC2qB,EAAAA,MAAKppB,GAAA,CACJqpB,OAAQ,CAAEC,EAAG,eACbC,WAAY,MACZC,OAAO,OACHhrB,EAAMkqB,WAAU,CACpBe,WAAYtC,EAAO/e,KAAI,SAAClE,GAAI,OAAAlE,GAAA,CAAA,EAAWkE,EAAI,CAAE6kB,UAAWG,GAAiB,IACzEf,QAASA,KAEV3pB,EAAMkrB,mBACLlrB,EAAMkrB,mBAAmBR,EAAmB/B,EAAO1e,QAEnDhK,EAAAA,IAACsB,EAAAA,OAAM,CACL2E,KAAK,SACLvF,QAAS,SAAAA,IAAA,OAAM+pB,EAAkB9B,KAAM,EACvCuC,MAAK,KACLtP,KAAM5b,EAAAA,IAAiBmrB,GAAA,WAAA,IACvBjlB,MAAO,CAAEohB,UAAW,IAAKpnB,SAAA,SAOnC,KAIR,MC7HakrB,GAAgB,SAAhBA,EAAiBrrB,GAC5B,IAAMuP,EAAW3O,EAAM0E,MAAAA,gBAAe,SAACgmB,EAAGC,GACxC,IAAMnT,EAAUmT,EAAOC,aACvB,IAAMC,EAAYrT,EAAUA,EAAUrO,UACtC/J,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWkc,EACnB,IAWA,OACExrB,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,mBAAkBjJ,SAC/BF,EAAAA,IAAAyrB,EAAAC,OAAAnqB,GAAA,CACE8B,MAAOtD,EAAMsD,MACbsoB,WAAW,oDACXC,KAAIrqB,GAAA,CACFsqB,OAAQ9rB,EAAM8rB,QAAU,IACxBC,QAAS,KACTC,SAAU,QACVC,8BAA+B,MAC/BC,qBAAsB,CACpB7X,MAAO,QAET8X,QACE,iGACFC,QAAS,CACP,qBACA,qDACA,+DACA,mCACA,mBACAtO,KAAK,KACPuO,iBAAkB,8CAClBC,yBAA0B,IAgBvBtsB,EAAMusB,mBAEPvsB,EAAMwsB,YAAW,CACrBC,eAAgBld,MAIxB,6CC/Camd,GAAa,SAAbA,EAAc1sB,GACzB,IAAQ2sB,EAA8C3sB,EAA9C2sB,eAAgBC,EAA8B5sB,EAA9B4sB,WAAetoB,KAAetE,EAAKuE,IAE3D,IAA8BlE,EAAAA,EAAQA,SAAC,OAAhCC,EAAOC,EAAA,GAAEC,EAAUD,EAAA,GAE1B,IAAMgP,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACqhB,GACrC,GAAIA,EAAKE,KAAK1b,SAAW,YAAa,CACpC3K,EAAW,KACZ,MAAM,GAAImmB,EAAKE,KAAK1b,SAAW,OAAQ,CACtC3K,EAAW,OACX,IAAMmN,EAAWgZ,EAAKE,KAAKhO,SAC3B,GAAIlL,EAASmZ,OAAS,OAAQ,CAC5B6F,EAAehf,EAASiJ,KAC1B,KAAO,MACAtI,EAAOA,QAACpN,MAAOyM,EAASW,SAAsB,YACrD,CACF,CACF,IAEA,OACErO,MAACmnB,EAAMA,OAAA5lB,GAAA,CAACqrB,eAAgB,MAAO9F,SAAU,GAAOziB,EAAU,CAAEiL,SAAUA,EAASpP,gBACrEH,EAAMG,WAAa,WACzBH,EAAMG,UAAQ,UAAA,EAAdH,EAAMG,SAAW,CAAEG,QAAAA,IACjBiI,EAAAA,eAAevI,EAAMG,UACvBH,EAAMG,SAENF,MAACsB,SAAM,CAAC2E,KAAK,UAAUshB,MAAK,KAAClnB,QAASA,EAAQH,SAC3CysB,GAAc,WAKzB,EAEAF,GAAW5hB,aAAe,CACxBjL,KAAM,OACNitB,OAAQ,kBChDGC,GAAa,SAAbA,EAAc/sB,GACzB,IAAMgtB,EAAYC,EAAQA,SAAC9jB,QAAQnJ,EAAMG,UACzC,IAAM+sB,EAAYltB,EAAMktB,WAAa,WACrC,IAAMC,EAAMntB,EAAMmtB,IAAMntB,EAAMmtB,IAAM,EACpC,IAAMC,EAAgBjkB,EAAAA,QAAgBnJ,EAAMqtB,WAC5C,OACEptB,EAAAA,IAAA,MAAA,CACEmJ,UAAWC,aAAW,gBAAe,UAAY6jB,EAAaltB,EAAMoJ,WACpEjD,MAAOnG,EAAMmG,MACbxF,QAASX,EAAMW,QAAQR,SAEtB6sB,EAAUpjB,KAAI,SAACzJ,EAAUyF,GAAU,IAAA0nB,EAClC,IAAMC,IAAgBD,EAAAntB,EAASH,QAAK,UAAA,EAAdstB,EAAgBnnB,QAAS,CAAA,EAC/C,IAAMA,EAAQinB,EAActtB,SAAS8F,GAAMpE,GAAA,CAAKgsB,KAAM,GAAMD,GAAkBA,EAC9E,GAAI3nB,EAAQonB,EAAU/iB,OAAS,GAAKkjB,EAAM,EAAG,CAC3C,GAAID,IAAc,aAAc,CAC9B/mB,EAAMsnB,YAAcN,CACtB,KAAO,CACLhnB,EAAMunB,aAAeP,CACvB,CACF,CACA,OAAO9c,EAAAA,aAAalQ,EAAU,CAAEgG,MAAAA,EAAOM,IAAKb,QAIpD,2BC9CA,IAAM+nB,GAAoB,CAAEC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,IAAK,QAiC5DC,GAAU,SAAVA,EAAWluB,GACtB,IAAQmuB,EAAiCnuB,EAAjCmuB,cAAkB7pB,KAAetE,EAAKuE,IAC9C,IAAM6pB,EAAYD,EAAgBR,GAAoBrpB,EACtD,OAAOrE,EAAAqB,IAAC+sB,EAAGA,IAAA7sB,GAAA,CAAA,EAAK4sB,EAAS,CAAAjuB,SAAGH,EAAMG,WACpC,EAEA+tB,GAAQ,eAAiB,kFCrCzB,IAAMI,GAAW,CAAEV,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,IAAK,QAoBnDM,GAAiB,SAAjBA,EAAkBvuB,GAC7B,IAAA0S,EACE1S,EADMwuB,IAAAA,SAAUC,IAAAA,UAAWC,IAAAA,YAAaC,IAAAA,QAASR,IAAAA,cAAkB7pB,EAAUojB,GAAAhV,EAAAnO,IAI/E,IAAMqqB,EAAYJ,GAAY,GAC9B,IAAMK,EAAaJ,GAAa,GAChC,IAAMK,EAASF,EAAU3kB,OAAS,GAAK4kB,EAAW5kB,OAAS,EAC3D,IAAMmkB,EAAYD,GAAiBW,EAASR,GAAW,CAAA,EAEvD,IAAMS,EAAalmB,EAAAA,SAAQ,WACzB,GAAI8lB,EAAS,OAAOA,EACpB,GAAIG,EAAQ,MAAO,gBACnB,GAAIX,EAAe,MAAO,MAC1B,GAAIO,IAAgB,EAAG,MAAO,QAC9B,MAAO,KACR,GAAE,CAACP,EAAeW,EAAQH,EAASD,IAEpC,IAAMtlB,EAAYC,EAAWrJ,WAAAA,EAAMoJ,UAAW,sBAE9C,OACEnJ,EAAAA,IAACouB,EAAAA,IAAQ/pB,GAAAA,CAAAA,EAAAA,EAAgB8pB,EAAS,CAAEhlB,UAAWA,EAAUjJ,SACvDF,EAAAA,IAAC8V,EAAIA,KAACiB,KAAI,CAAA7W,SACRoJ,OAACylB,MAAG,CAACL,QAASI,EAAW5uB,SAAA,CACvBF,MAACuJ,QAAK,CAAArJ,SACHyuB,EAAUhlB,KAAI,SAAClE,GACd,OAAOA,OAGXzF,MAACuJ,QAAK,CAAArJ,SACH0uB,eAAAA,EAAYjlB,KAAI,SAAClE,GAChB,OAAOA,cAOrB,EAEA6oB,GAAe,eAAiB,iBC1DzB,IAAMU,GAAqB,SAArBA,IACX,IAAMC,EAAUC,OAAKC,gBACrB,OAAOvmB,EAAOA,SAAC,WACb,IAAMP,EAAS9F,OAAOqe,KAAKqO,GAAS5mB,QAAO,SAAC7B,GAC1C,OAAOyoB,EAAQzoB,KAAS,IAC1B,IACA,IAAM4oB,EAAQ,CAAC,MAAO,KAAM,KAAM,KAAM,KAAM,MAC9C,IAAMrI,EAAcqI,EAAMpI,WAAU,SAACxgB,GAAG,OAAK6B,EAAOxI,SAAS2G,MAC7D,OAAO4oB,EAAMrI,EACf,GAAG,CAACkI,GACN,ECTO,IAAMI,GAAuB,SAAvBA,EAAwBC,EAAoBC,GACvD,IACE,IAAMC,EAAY,GAClB,IAAMC,EAAe,SAAfA,EAAyB9pB,GAC7B,IAAMtC,EAAQisB,EAAS3pB,GACvB,MAAO,CAAEA,MAAAA,EAAOtC,MAAOA,EAAQ,GAAK,GAAKA,IAE3C,IAAIqsB,EAAY,KAChB,IAAIC,EAAgB,GACpB,IAAIC,EAAe,EACnB,IAAIC,EAAQ,EACZ,MAAOH,EAAW,CAChB,IAAMI,EAAeR,EAASM,GAC9BD,EAAcjoB,KAAK+nB,EAAaG,IAChC,GAAIE,GAAgB,GAAI,CACtBN,EAAU9nB,KAAKioB,GACfA,EAAgB,GAChBE,EAAQ,CACT,MAAM,GAAID,IAAiBN,EAAStlB,OAAS,EAAG,CAC/CwlB,EAAU9nB,KAAKioB,EACjB,KAAO,CACLE,GAASC,EACT,GAAID,GAAS,GAAI,CACfL,EAAU9nB,KAAKioB,GACfA,EAAgB,GAChBE,EAAQ,CACV,CACF,CACAD,EAAeA,EAAe,EAC9B,GAAIA,GAAgBN,EAAStlB,OAAQ,CACnC0lB,EAAY,KACd,CACF,CACA,IAAMK,EACJP,EAAUtS,MAAK,SAACzX,GAAI,QAAOA,EAAKyX,MAAK,SAACC,GAAI,OAAKA,EAAKxX,QAAU4pB,IAAgB,KAAK,GACrF,IAAIS,EAAkB,EACtB,IAAIC,EAAkB,EACtBF,EAAerqB,SAAQ,SAACD,EAAME,GAC5B,GAAIF,EAAKE,QAAU4pB,EAAiBU,EAAkBtqB,EACtD,GAAIF,EAAKE,MAAQ4pB,EAAiB,CAChCS,EAAkBA,EAAkBvqB,EAAKpC,KAC3C,CACF,IACA,GAAI2sB,IAAoB,IAAMA,IAAoB,EAAG,CACnDD,EAAeE,GAAiB5sB,MAAQ,EAC1C,KAAO,CACL0sB,EAAeE,GAAiB5sB,MAAQ,GAAK2sB,CAC/C,CAEA,MAAO,CACLV,SAAUE,EAAUU,QAAO,SAAC7tB,EAAGC,GAAC,OAAKD,EAAEgN,OAAO/M,EAAE,IAAEqH,KAAI,SAACwT,GAAI,OAAKA,EAAK9Z,SACrE8sB,cAAeX,EAOnB,CALE,MAAOvuB,GACP,MAAO,CACLquB,SAAAA,EACAa,cAAe,GAEnB,CACF,ECzDA,IAAMC,GAAc,CAAEzC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGC,IAAK,OASpDqC,GAAU,SAAVA,EAAWtwB,GACtB,IAAMuwB,EAAatB,KACnB,IAAMuB,EAAernB,EAAAA,QAAsBnJ,EAAMG,UAAUmI,QAAO,SAAC5C,GACjE,IAAK6C,EAAcA,eAAC7C,GAAO,OAAO,MAClC,OAAO0F,EAAYA,aAAC1F,EAAKQ,KAAK,eAAgB,CAAC,iBAAkB,WACnE,IACA,IAAoC2C,EAAAA,EAAAA,SAAQ,WAC1C,IAAM2mB,EAAkBgB,EAAavJ,WAAU,SAACvhB,GAC9C,OAAOA,EAAKQ,KAAK,iBAAmB,gBACtC,IACA,GAAIqqB,IAAexmB,WAAaylB,EAAkB,EAAG,CACnD,MAAO,CAAED,SAAU,GAAgBa,cAAe,GACpD,CACA,IAAMK,EAAmBD,EAAa5mB,KAAI,SAACwT,EAAMxX,GAAU,IAAA8qB,EACzD,GAAI9qB,IAAU4pB,EAAiB,OAAO,EACtC,QAAOpS,EAAAA,EAAKpd,QAAL,UAAA,EAAA0wB,EAAaH,KAAeF,GAAYE,EACjD,IACA,OAAOjB,GAAqBmB,EAAkBjB,EAChD,GAAG,CAACgB,EAAcD,IAZVhB,IAAAA,SAAUa,IAAAA,cAclB,IAAKG,EAAY,OAAOtwB,MAACC,WAAQ,CAAAC,SAAEH,EAAMG,WACzC,OACEF,EAAAqB,IAAC0tB,EAAGA,IAAAxtB,GAAA,CAAA,EAAKxB,EAAK,CAAAG,SACXqwB,EAAa5mB,KAAI,SAAClE,EAAME,GAAU,IAAAuJ,EACjC,IAAMwhB,EAAiBN,GAAAA,CAAAA,EAAAA,GAAgB3qB,EAAK1F,OAC5C,IAAM4wB,EAAQpvB,GAAA,CACZiF,IAAKb,GACF+qB,GAASxhB,EAAA,GAAAA,EACXohB,GAAahB,EAAS3pB,IAAU+qB,EAAUJ,GAC5CphB,IACD,GAAIzJ,EAAKQ,KAAK,iBAAmB,iBAAkB,CACjD0qB,EAAS,eAAiBR,EAAcnmB,MAC1C,CACA,OAAOoG,EAAYA,aAAC3K,EAAMkrB,QAIlC,EC3CO,IAAMC,GAAsC,SAAtCA,EAAuC7wB,GAAU,IAAA8wB,EAC5D,IAAMC,EAAkB,uBAExB,IAAMvtB,EAAQD,KAEd,IAAM4C,EAAQ,CAAE,iCAAkC3C,EAAMgH,cAExD,OACEjB,EAAAA,KAAA,MAAA,CAAKH,UAAWC,EAAW0nB,WAAAA,EAAiB/wB,EAAMoJ,WAAYjD,YAAYA,EAAUnG,EAAMmG,OAAQhG,SAC/FH,CAAAA,EAAMmH,MACLlH,EAAAA,IAAA,MAAA,CACEmJ,UAAWC,EAAAA,WAAc0nB,EACnBA,UAAAA,EAAAA,CAAAA,EAAAA,EAAAA,EAA+B/wB,eAAAA,EAAMgxB,YAAc,KACtDF,IAAA3wB,SAEFH,EAAMmH,QAEP,KACHnH,EAAMG,WAGb,EAEA0wB,GAAa/lB,aAAe,CAC1BkmB,UAAW,MCdN,IAAMC,GAA0B,SAA1BA,EAA2BjxB,GACtC,IAAMkxB,EAAuBroB,EAAAA,SAAQ,WACnC,IAAMwkB,EAAY,GAClB,IAAM8D,EAAkB,GACxBnxB,EAAMoxB,gBAAgBzrB,SAAQ,SAACD,GAC7B,GAAIA,EAAK2rB,OAAQ,CACfF,EAAgBxpB,KACdY,EAAcA,eAAC7C,EAAK2rB,QACjB3rB,EAAK2rB,OAENpxB,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,oBAAmBjJ,SAAEuF,EAAK2rB,SAG/C,CACA,GAAI3rB,EAAK2O,MAAO,CACd8c,EAAgBxpB,KACd0I,eAAa3K,EAAK4rB,SAAU,CAC1BnrB,MAAK3E,GAAA,CAAI6S,MAAO3O,EAAK2O,OAAU3O,EAAK4rB,SAAStxB,MAAMmG,SAGzD,KAAO,CACLknB,EAAU1lB,KAAKwpB,EAAgBlnB,QAC/BknB,EAAgBxpB,KAAKjC,EAAK4rB,SAC5B,CACA,GAAI5rB,EAAK6rB,MAAO,CACdJ,EAAgBxpB,KACdY,EAAcA,eAAC7C,EAAK6rB,OACjB7rB,EAAK6rB,MAENtxB,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,mBAAkBjJ,SAAEuF,EAAK6rB,QAG9C,CACF,IACA,MAAO,CACLJ,gBAAAA,EACA9D,UAAAA,EAEJ,GAAG,CAACrtB,EAAMoxB,kBAEV,OACEnxB,EAAAqB,IAACyU,EAAIA,KAACiB,KAAI,CACRtQ,MAAO1G,EAAM0G,MACb0C,UAAWC,EAAWC,WAAA,mCAAoCtJ,EAAMoJ,WAChEjD,MAAOnG,EAAMmG,MACb9E,OAAQrB,EAAMqB,OACdmwB,SAAUxxB,EAAMwxB,SAASrxB,SAEzBF,MAAC8sB,GAAU,CACTG,UAAU,aACVC,IAAKntB,EAAMmtB,MAAQpjB,UAAY,GAAK/J,EAAMmtB,IAC1CE,UAAW6D,EAAqB7D,UAChClnB,MAAOnG,EAAMyxB,gBAAgBtxB,SAE5B+wB,EAAqBC,gBAAgBvnB,KAAI,SAAClE,EAAME,GAC/C,OAAOyK,EAAAA,aAAa3K,EAAM,CAAEe,IAAKb,UAK3C,EC/EO,IAAM8rB,GAAgB,CAC3BC,gBAAiBV,GACjBW,KAAMf,QCUKgB,GAAM,SAANA,EAAO7xB,GAClB,OACEC,EAAAA,IAAA,MAAA,CACEkG,MAAK3E,GAAA,CACHsqB,OAAQ9rB,EAAM8rB,QACX9rB,EAAMmG,MAAK,CACd8e,QAASjlB,EAAM8xB,OAAS,eAAiB,QACzCzd,MAAOrU,EAAMqU,QAEfjL,UAAWpJ,EAAMoJ,WAGvB,MCZa2oB,GAAc,SAAdA,EAAe/xB,GAC1B,IAAMoJ,EAAYC,EAAAA,WAChB,eAAc,iBACErJ,EAAM2E,MAAQ,UAC9B,CACE,oCAAqC3E,EAAMgyB,kBAE7ChyB,EAAMoJ,WAGR,GAAIpJ,EAAMiyB,UAAW,CACnB,OACEhyB,EAAAA,IAACiyB,EAAAA,QAAO,CAAC/qB,MAAOnH,EAAMiyB,UAAU9xB,SAC9BoJ,EAAAoR,KAAA,OAAA,CAAMvR,UAAWA,EAAWjD,MAAOnG,EAAMmG,MAAOxF,QAASX,EAAMW,QAAQR,SAAA,CACpEH,EAAM6b,KACN7b,EAAM6F,KAAO5F,EAAAqB,IAAA,OAAA,CAAM8H,UAAU,oBAAmBjJ,SAAEH,EAAM6F,OAAe,SAIhF,CACA,OACE0D,EAAAA,KAAA,OAAA,CAAMH,UAAWA,EAAWjD,MAAOnG,EAAMmG,MAAOxF,QAASX,EAAMW,QAAQR,SAAA,CACpEH,EAAM6b,KACN7b,EAAM6F,KAAO5F,EAAAqB,IAAA,OAAA,CAAM8H,UAAU,oBAAmBjJ,SAAEH,EAAM6F,OAAe,OAG9E,MC5BassB,GAAmB,SAAnBA,EAAoBnyB,GAC/B,IAAMmG,EAAQ,CAAE,iCAAoCnG,EAAMoyB,YAAc,KAAG,MAC3E,IAAMhpB,EAAYC,aAAW,wBAC7B,OACEpJ,EAAAA,IAACoyB,EAAAA,aAAY,CACXC,OAAQtyB,EAAMsyB,QAAU,EACxBC,SAAUvyB,EAAMuyB,SAChB5tB,KAAK,QACLyE,UAAWA,EACXjD,MAAOA,EAAMhG,SAEZH,EAAMgN,QAAQpD,KAAI,SAAClE,EAAME,GACxB,OACE3F,EAAAqB,IAAC+wB,EAAYA,aAACrb,KAAI,CAAatQ,MAAOhB,EAAKgB,MAAMvG,SAC9CuF,EAAKpC,OADgBsC,OAOlC,ECNO,IAAM4sB,GAA+D,CAC1ExmB,QAAS,CACPymB,cAA6D,SAAAA,EAAA/f,GAAA,IAA7C4I,IAAAA,SAAUnU,IAAAA,MAAOoU,IAAAA,YAAaC,IAAAA,YAC5C,OAAO,SAAC7Y,GACNA,EAAM2Y,SAAWA,EACjB3Y,EAAMwE,MAAQA,EACdxE,EAAM4Y,YAAcA,EACpB5Y,EAAM6Y,YAAcA,EACpB7Y,EAAMuC,KAAO,KAEhB,EACDwtB,WAAa,SAAAA,IACX,OAAO,SAAC/vB,GACNA,EAAMuC,KAAO,MAEhB,EACDytB,iBAAgB,SAAAA,EAACzmB,GACf,OAAO,SAACvJ,GACNA,EAAM6Y,YAAc,MACpB7Y,EAAM2Y,SAAWpP,EAErB,GAEFvJ,MAAO,CACLuC,KAAM,MACNiC,MAAO,GACPoU,YAAa,gFCvCV,IAAMqX,GAAiB,SAAjBA,EAQiBlgB,GAAA,IAP5BpS,IAAAA,QAAOuyB,EAAAngB,EACP3L,OAAAA,aAAS,KAAI8rB,EAAAC,EAAApgB,EACb1L,WAAAA,aAAa,KAAI8rB,EACjB1rB,IAAAA,SACA8Q,IAAAA,KACA0D,IAAAA,UACGtX,EAAUojB,GAAAhV,EAAAnO,IAEb,OACEtE,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SACPoJ,OAACC,QAAK,CAAC7E,KAAK,SAAQxE,SAAA,CAClBF,EAAAA,IAACsB,EAAMA,OAAK+C,GAAAA,CAAAA,EAAAA,EAAW6T,kBAAiB,CAAE/O,UAAU,aAAazI,QAASyG,EAASjH,SAChF6G,KAEF4U,GAAa,MACZ3b,EAAAA,IAACsB,EAAAA,OAAMC,GAAA,CACL0E,KAAK,WACD5B,EAAWkD,cAAa,CAC5B4B,UAAU,SACVzI,QAASuX,EACT5X,QAASA,EAAQH,SAEhB4G,SAMb,wDCfA,IAAMgV,GAAa,SAAbA,IACJ,OACE9b,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,uBAAsBjJ,SACnCoJ,EAAAoR,KAAA,MAAA,CAAKvR,UAAU,iBAAgBjJ,SAC7B,CAAAF,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,iBACfnJ,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,cAAajJ,SAAA,gBAIpC,EAEA,IAAM4yB,GAAsB,SAAtBA,EAAuB/yB,GAC3B,OACEuJ,EAAAA,KAACrJ,EAAAA,SAAQ,CAAAC,SACP,CAAAF,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,wBAAuBjJ,SAAEH,EAAMG,WAC7CH,EAAMic,eACLhc,EAAAA,IAAC+yB,GAAkB,CAAA7yB,SACjBF,EAACqB,IAAAsxB,GAAmB5yB,GAAAA,CAAAA,EAAAA,EAAMic,mBAE1B,OAGV,EAEA,IAAM+W,GAAqB,SAArBA,EAAsBhzB,GAC1B,OAAOC,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,uBAAsBjJ,SAAEH,EAAMG,UACtD,MAea8yB,GAAkE,SAAlEA,EAAmEjzB,GAC9E,IAAQwb,EAA2Dxb,EAA3Dwb,YAAapS,EAA8CpJ,EAA9CoJ,UAAWiL,EAAmCrU,EAAnCqU,MAAOlU,EAA4BH,EAA5BG,SAAamE,KAAetE,EAAKuE,IAExE9C,IAAgB,WACd,GAAIzB,EAAM,kBAAmB,CAC3B,MAAM,IAAIkO,MAAM,8CAClB,CACD,GAAE,IAEH,OACEjO,MAACkZ,EAAKA,MAAA3X,GAAA,CACJ4H,UAAWC,EAAAA,WAAW,gBAAiBD,GACvCgT,SAAU,MACV9C,eAAgB,KAChB+C,YAAa,OACT/X,EAAU,CACd+P,MAAOA,GAAS,IAChBmE,OAAQ,KAAKrY,SAEboJ,OAACrJ,WAAQ,CAAAC,SAAA,CACNA,EACAqb,GAAevb,EAAAA,IAAC8b,GAAa,CAAA,QAItC,EAEAkX,GAAa3W,QAAUyW,GACvBE,GAAa1W,OAASyW,GC5FtB,IAAME,GAA0F,CAAA,MAYnFC,GAA0B,SAA1BA,EAA2B1sB,GACtC,IAAKysB,GAAYzsB,GAAM,CACrBysB,GAAYzsB,GAAO6F,EAAKA,MAACkmB,GAC3B,CACA,OAAOU,GAAYzsB,EACrB,MCZa2sB,GAAkB,SAAlBA,EAAmBpzB,GAC9B,OACEC,EAAAA,IAAA,MAAA,CAAKmJ,UAAWC,EAAWC,WAAA,oBAAqBtJ,EAAMoJ,WAAYjD,MAAOnG,EAAMmG,MAAMhG,SAClFH,EAAMG,UAGb,MCVakzB,GAAU,SAAVA,EAAWrzB,GACtB,OAAOC,EAAAA,IAACqzB,EAAAA,OAAM,CAACnoB,OAAO,MAAMhE,MAAM,MAAMosB,SAAUvzB,EAAMsO,SAC1D,ECJO,IAAMklB,GAAgB,CAC3BC,eAAgB,gBAChBC,eAAgB,gBAChBC,eAAgB,gBAChBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,gBAAiB,iBACjBC,iBAAkB,kBAClBC,iBAAkB,wBAClBC,kBAAmB,yBACnBC,qBAAsB,6BAMjB,IAAMC,GAAoB,CAC/BlB,eAAgB,qBAChBC,eAAgB,qBAChBC,eAAgB,qBAChBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,gBAAiB,sBACjBC,iBAAkB,uBAClBC,iBAAkB,6BAClBC,kBAAmB,8BACnBC,qBAAsB,kCCrCjB,IAAME,GAAsB,CACjC9e,KAAM0d,GACNqB,SAAUF,QCgBCG,GAAoB,SAApBA,EAAqB90B,GAChC,IAAMuP,EAAW,SAAXA,EAAkBhK,GAAP,OAAA,IAAAxD,SAAA,SAAAC,EAAAC,GAAA,IACTqB,EAAAA,EAAQiC,EAAM0D,OAAO3F,MAC3B,GAAItD,EAAM+0B,YAAa,CACrB,OAAM/0B,QAAAA,QAAAA,EAAM+0B,YAAYzxB,IAAxBpB,KA/BN,SAAAsM,GAAA,IAAI,OAAJwmB,EAAGhb,KAAQib,KAAuB,CAAxB,MAAU7yB,GAAC,OAAOH,EAAMG,EAAA,CAA/BwE,EAAAA,KAAKquB,MAAKhzB,EAgCT,CAAC,SAAA+yB,IACDh1B,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWjM,GAAO,OAAAtB,GAAA,CAAA,OAjC5BgzB,EAAGhb,KAAQib,KAAA,GAkCR,EACD,IAAMt0B,EAAU,SAAVA,EAAW4E,GACf,IAAKvF,EAAMk1B,SAAU,OACrB,IAAM5xB,EAAQiC,EAAM0D,OAAO3F,MAC3B,GAAI8H,eAAapL,EAAMsD,MAAOA,GAAQ,CACpCtD,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWxF,UACnB,GAEF,OACE9J,EAAAA,IAACuJ,EAAAA,MAAK,CAAC7E,KAAM,EAAG+E,KAAM,KAAKvJ,SACxBH,EAAMgN,QAAQpD,KAAI,SAAClE,GAClB,OACEzF,EAAAA,IAACif,EAAAA,MAAK,CACJ5b,MAAOoC,EAAKpC,MACZ3C,QAASA,EACTw0B,QAASn1B,EAAMsD,QAAUoC,EAAKpC,MAE9BiM,SAAUA,EACV7H,SAAU1H,EAAM0H,UAAYhC,EAAKgC,SAASvH,SAEzCuF,EAAKgB,OAJDhB,EAAKpC,WAUtB,ECvDO,IAAM8xB,GAAW,SAAXA,EAAYp1B,GAAyB,IAAAq1B,EAChD,IAAMlvB,EAAQ,CACZ,4BAA+BnG,EAAMs1B,cAAgB,IAAM,KAC3D,iCAAoCt1B,EAAMu1B,aAAe,IAAM,KAC/D,wBAA2Bv1B,EAAMw1B,UAAY,IAAM,KACnD,wBAA4Bx1B,IAAAA,EAAMy1B,WAAa,YAGjD,IAAMrsB,EAAYC,EAChBC,WAAA,gBACA,CAAE,yBAA0BtJ,EAAM01B,QAAS,iCAAkC11B,EAAM01B,SACnF11B,EAAMoJ,WAER,IAAQusB,EAAiB31B,EAAjB21B,MAAOC,EAAU51B,EAAV41B,MAEf,OACErsB,EAAAA,KAAA,MAAA,CAAKH,UAAWA,EAAWjD,MAAOA,EAAMhG,SAAA,CACrCw1B,EACCpsB,EAAAoR,KAAA,MAAA,CAAKvR,UAAU,sBAAqBjJ,SAClC,CAAAF,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,uBACfnJ,EAAAqB,IAAA,MAAA,CAAK8H,UAAU,sBAAqBjJ,SAAEH,EAAM0G,QAE3C1G,EAAM61B,QACL51B,EAAAA,IAACud,EAAAA,IAAG,CACFpU,UAAU,oBACVtD,MAAO9F,EAAM81B,UAAY,UACzBn1B,SAASX,EAAAA,EAAM+1B,aAAN,UAAA,EAAAV,EAAkBzuB,KAAK,KAAM5G,EAAM61B,SAAS11B,SAEpDH,EAAM61B,UAEP,KACHF,OAED,KACHC,EAAQ31B,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,sBAAqBjJ,SAAEy1B,MAAiB,OAGtE,EClCO,IAAMI,GAAoB,SAApBA,EAAqBh2B,GAChC,OAAOC,EAAAA,IAAA,MAAA,CAAKmJ,UAAWC,EAAWC,WAAA,sBAAuBtJ,EAAMoJ,WAAWjJ,SAAEH,EAAMG,UACpF,ECEO,IAAM81B,GAAe,SAAfA,EAAgBj2B,GAC3B,IAAMoJ,EAAYC,EAAWC,WAAA,gBAAiB,CAC5C,qBAAsB,KACtB,sBAAuBtJ,EAAMk2B,QAC7B,qBAAsBl2B,EAAMm2B,OAC5B,yBAA0Bn2B,EAAM01B,UAGlC,OACEz1B,EAAAA,IAAA,MAAA,CAAKmJ,UAAWA,EAAWjD,MAAOnG,EAAMmG,MAAMhG,SAC3CH,EAAMG,UAGb,ECvBO,IAAMi2B,GAAa,SAAbA,EAAcxf,EAAyB4P,GAAgB,IAAA6P,EAClE,GAAIzf,EAAK4P,MAAQA,EAAK,CACpB5P,EAAK,WAAa,IACpB,CACAA,GAAI,UAAA,GAAAyf,EAAJzf,EAAM0f,eAAY,UAAA,EAAlBD,EAAoB1wB,SAAQ,SAACD,GAAS,IAAA6wB,EAAAC,EACpC,GAAI9wB,EAAK8gB,MAAQA,KAAO+P,EAAA7wB,EAAK+wB,aAAL,UAAA,EAAAF,EAAiB/P,OAAQA,EAAK,CACpD9gB,EAAK,WAAa,KAClB,GAAIkR,EAAK0f,aAAarsB,SAAW,EAAG,CAClC2M,EAAK,WAAa,IACpB,CACF,EAEAlR,EAAAA,EAAKvF,WAAQ,UAAA,EAAbq2B,EAAe7wB,SAAQ,SAAC+wB,GACtBN,EAAWM,EAAWlQ,EACxB,GACF,GACF,EAEO,IAAMmQ,GAAoB,SAApBA,EAAqB/f,GAChCA,EAAK0f,aAAe1f,EAAK0f,cAAgB,GACzC1f,EAAK0f,aAAe1f,EAAK0f,aAAahuB,QAAO,SAAC5C,GAAI,OAAMA,EAAK,cAE7DkR,EAAK0f,aAAa3wB,SAAQ,SAACD,GACzBA,EAAKvF,SAAWuF,EAAKvF,UAAY,GACjCuF,EAAKvF,SAAWuF,EAAKvF,SAASmI,QAAO,SAAC5C,GAAI,OAAMA,EAAK,cAErDA,EAAKvF,SAASwF,SAAQ,SAAC+wB,GACrBC,EAAkBD,EACpB,GACF,IAEA9f,EAAK0f,aAAe1f,EAAK0f,aAAahuB,QAAO,SAAC5C,GAC5C,IAAKA,EAAK+wB,aAAe/wB,EAAKvF,SAAU,CACtC,OAAO,KACT,CACA,IAAKuF,EAAK+wB,cAAgB/wB,EAAKvF,UAAYuF,EAAKvF,SAAS8J,SAAW,GAAI,CACtE,OAAO,KACT,CACA,OAAO,IACT,GACF,ECVA,IAAM2sB,GAAqB,SAArBA,EAAsB52B,GAC1B,IAAM62B,EAAe72B,EAAM62B,aAC3B,IAAM5L,EAAajrB,EAAMirB,WACzB,IAAMrlB,EAAQ5F,EAAM4F,MAEpB,GAAIixB,EAAaJ,YAAcI,EAAa12B,UAAY02B,EAAa12B,SAAS8J,OAAS,EAAG,CAAA,IAAA6sB,EACxF,OACEvtB,EAAAA,KAACrJ,EAAAA,SAAQ,CAAAC,SAAA,CACPF,MAACg2B,GAAY,CACXC,QAAStwB,IAAU,EACnBuwB,OAAQvwB,IAAUqlB,EAAWqL,aAAarsB,OAAS,EACnDyrB,QAAS11B,EAAM01B,QAAQv1B,SAEtBH,EAAM+2B,mBAAmBF,EAAaJ,WAAYI,EAAaG,aAElE/2B,MAAC+1B,GAAiB,CAAA71B,UACf02B,EAAAA,EAAa12B,WAAQ,UAAA,EAArB22B,EAAuBltB,KAAI,SAAC8sB,GAC3B,OACEz2B,EAAAA,IAACg3B,GAAgB,CACfhM,WAAYyL,EACZK,mBAAoB/2B,EAAM+2B,mBAE1BG,cAAel3B,EAAMk3B,cACrBnB,WAAY/1B,EAAM+1B,WAClB3sB,UAAWpJ,EAAMoJ,WAHZstB,EAAUlQ,YAdVqQ,EAAarQ,IAwBhC,CACA,GAAIqQ,EAAa12B,UAAY02B,EAAa12B,SAAS8J,OAAS,EAAG,CAAA,IAAAktB,EAC7D,OACEl3B,EAAAA,IAAA,MAAA,CACEmJ,UAAWC,EAAWC,WAAA,0BAA2B,CAAE,0BAA2B1D,IAAU,IAAKzF,UAG5F02B,EAAAA,EAAa12B,WAAQ,UAAA,EAArBg3B,EAAuBvtB,KAAI,SAAC8sB,GAC3B,OACEz2B,EAAAA,IAACg3B,GAAgB,CACfhM,WAAYyL,EACZK,mBAAoB/2B,EAAM+2B,mBAE1B3tB,UAAWC,EAAWC,WAAA,oBAAqB,CACzC,0BAA2B1D,IAAU,EACrC,yBAA0BA,IAAUqlB,EAAWqL,aAAarsB,OAAS,IAEvEitB,cAAel3B,EAAMk3B,cACrBnB,WAAY/1B,EAAM+1B,YANbW,EAAUlQ,SAPhBqQ,EAAarQ,IAmBxB,CACA,GAAIqQ,EAAaJ,WAAY,CAC3B,OACEx2B,EAAAA,IAACg2B,GAAY,CAEXC,QAAStwB,IAAU,EACnBuwB,OAAQvwB,IAAUqlB,EAAWqL,aAAarsB,OAAS,EACnDyrB,QAAS11B,EAAM01B,QAAQv1B,SAEvBF,MAAC8V,OAAI,CAACqhB,UAAW,MAAMj3B,SACpBH,EAAM+2B,mBAAmBF,EAAaJ,WAAYI,EAAaG,cAN7DH,EAAarQ,IAUxB,CACA,OAAO,IACT,EAEA,IAAMyQ,GAAmB,SAAnBA,EAAoBj3B,GACxB,IAAMirB,EAAajrB,EAAMirB,WACzB,IAAMqL,EAAerL,EAAWqL,cAAgB,GAEhD,IAAMe,EAAmBf,EAAaA,EAAarsB,OAAS,GAC5D,IAAMqtB,EACJhB,EAAarsB,OAAS,GACtBotB,EAAiBZ,YACjBY,EAAiBl3B,UACjBk3B,EAAiBl3B,SAAS8J,OAAS,EACrC,IAAMyrB,EAAUY,EAAarsB,QAAU,EAGvC,OACEtD,EAAAA,cAACyuB,GACKp1B,GAAAA,CAAAA,EAAAA,EAAMk3B,cAAa,CACvBrB,QAAS5K,EAAW4K,QACpBpvB,IAAKwkB,EAAWzE,IAChBkP,QAASA,EACThvB,MAAOukB,EAAWvkB,MAClB0C,UAAWpJ,EAAMoJ,UACjB2sB,WAAY,SAAMA,IAChB/1B,EAAM+1B,YAAN/1B,UAAAA,EAAAA,EAAM+1B,WAAa9K,EAAWzE,IAAKyE,EAAW+L,UAC9C,EACFrB,MAAO,SAAMA,IACX,OACE11B,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SACNm2B,EAAa1sB,KAAI,SAACitB,EAAcjxB,GAC/B,IAAM2xB,EAAOD,GAAY1xB,IAAU0wB,EAAarsB,OAAS,EACzD,OACEhK,EAAAA,IAAC22B,GAAkB,CAEjB3L,WAAYjrB,EAAMirB,WAClB8L,mBAAoB/2B,EAAM+2B,mBAC1BG,cAAel3B,EAAMk3B,cACrBnB,WAAY/1B,EAAM+1B,WAClBc,aACEU,EAAI/1B,GAAA,CAAA,EAEKq1B,EAAY,CACf12B,SAAU4J,YAEZ8sB,EAENjxB,MAAOA,EACP8vB,QAASA,GAdJ9vB,OAoBf,EACFgwB,MAAO,SAAMA,IAEX,GAAI0B,GAAYD,EAAiBl3B,UAAYk3B,EAAiBl3B,SAAS8J,OAAS,EAAG,CACjF,OACEhK,EAAAA,IAAC+1B,GAAiB,CAAA71B,SACfk3B,EAAiBl3B,SAASyJ,KAAI,SAAC8sB,GAC9B,OACEz2B,EAAAA,IAACg3B,EAAgB,CACfhM,WAAYyL,EACZK,mBAAoB/2B,EAAM+2B,mBAE1BG,cAAel3B,EAAMk3B,cACrBnB,WAAY/1B,EAAM+1B,YAFbW,EAAUlQ,SANC6Q,EAAiB7Q,IAc7C,CACA,OAAO,IACT,IAGN,MAEagR,GAAe,SAAfA,EAAgBx3B,GAC3B,IAAAO,EAAoCF,EAAAA,WAA7B4qB,EAAU1qB,EAAA,GAAEk3B,EAAal3B,EAAA,GAEhCkB,IAAgB,WACdg2B,EAAcz3B,EAAMirB,WACtB,GAAG,CAACjrB,EAAMirB,aAEV,IAAMyM,EAA8B92B,EAAAA,MAAM0E,gBAAe,SAACsR,EAA+B/W,EAAMyD,GAC7F,GAAIsT,EAAM,CACRA,EAAK/W,GAAQyD,EACbtD,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAQ/N,GAAA,CAAA,EAAQypB,GACxB,CACF,IAEA,IAAM0M,EAAwB,SAAxBA,EAAyBC,EAAuCpR,GACpE,IAAK,IAAI5gB,EAAQ,EAAGA,EAAQgyB,EAAiB3tB,OAAQrE,IAAS,CAC5D,IAAMiyB,EAAeD,EAAiBhyB,GACtC,IAAK,IAAIkyB,EAAa,EAAGA,EAAaD,EAAavB,aAAarsB,OAAQ6tB,IAAc,CAAA,IAAAC,EACpF,IAAMjgB,EAAU+f,EAAavB,aAAawB,GAC1C,KAAIC,EAAAjgB,EAAQ2e,yBAARsB,EAAoBvR,OAAQA,EAAK,CACnC,MAAO,CACLqR,aAAAA,EACAjyB,MAAOkyB,EACPhgB,QAASA,EAEb,MAAO,GAAIA,EAAQ3X,SAAU,CAC3B,IAAMY,EAAS42B,EAAsB7f,EAAQ3X,SAAUqmB,GACvD,GAAIzlB,EAAQ,CACV,OAAOA,CACT,CACF,CACF,CACF,CACA,OAAO,MAGT,IAAMi3B,EAAQp3B,EAAM0E,MAAAA,gBAClB,SAACsR,EAA+BqhB,GAA2C,IAAAC,EACzE,IAAKjN,EAAY,OACjB,IAAMlqB,EAAS42B,EAAsB,CAAC1M,GAAarU,EAAK4P,KACxD,IAAA0R,EAAIn3B,EAAO82B,eAAP,MAAAK,EAAqB5B,aAAc,CAAA,IAAA6B,GACrCA,EAAAp3B,EAAO82B,2BAAPM,EAAqB7B,aAAanP,OAAQpmB,EAAO6E,MAAmB,EAAG,EAAGqyB,GAC1Ej4B,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAW0b,EACnB,CACF,IAEF,IAAMmN,EAAcx3B,EAAM0E,MAAAA,gBACxB,SAACsR,EAA+BqhB,GAC9B,IAAKhN,EAAY,OACjB,IAAMlqB,EAAS42B,EAAsB,CAAC1M,GAAarU,EAAK4P,KACxD,GAAIzlB,EAAO+W,QAAS,CAClB/W,EAAO+W,QAAQ3X,UAAYY,EAAO+W,QAAQ3X,UAAY,IAAImP,OAAO2oB,GACjEj4B,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAW0b,EACnB,CACF,IAGF,IAAMoN,EAAWz3B,EAAAA,MAAM0E,gBAAe,SAACkhB,GACrC,IAAKyE,EAAY,OACjBmL,GAAWnL,EAAYzE,GACvB,GAAIyE,EAAW,WAAY,CACzBjrB,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAWxF,UACnB,KAAO,CACL4sB,GAAkB1L,GAClBjrB,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAW0b,EACnB,CACF,IAEA,IAAKA,EAAY,OAAOhrB,MAACoL,QAAK,CAACH,YAAY,SAE3C,OACEjL,EAAAA,IAAA,MAAA,CAAKmJ,UAAWC,EAAWC,WAAA,gBAAiBtJ,EAAMoJ,WAAWjJ,SAC3DF,MAACg3B,GAAgB,CACfhM,WAAYA,EACZiM,cAAel3B,EAAMk3B,cACrBnB,WAAY/1B,EAAM+1B,WAClBgB,mBAAoB,SAAAA,EAACngB,EAAMogB,GACzB,OAAOh3B,EAAMG,SACXyW,EACA,CACEgS,IAAKoP,EACLI,YAAaA,EACbvP,OAAQwP,EACR9oB,SAAUmoB,EAA4B9wB,KAAK,KAAMgQ,IAEnDogB,EAEJ,KAIR,MC5PasB,GAAe,SAAfA,EAAgBt4B,GAC3B,IAAMu4B,EAAiB73B,EAAAA,kBAAkBV,EAAMu4B,gBAAkB,KAAOv4B,EAAMu4B,eAE9E,IAAM/0B,EAAQD,KAEd,IAAM4C,EAAQ,CAAE,+BAAgC3C,EAAMgH,cAEtD,OACEjB,EAAAA,KAAA,MAAA,CAAKH,UAAWC,EAAWC,WAAA,kBAAmBtJ,EAAMoJ,WAAYjD,MAAOA,EAAMhG,SAC1EH,CAAAA,EAAMmH,MACLlH,EAAAA,IAAA,MAAA,CACEmJ,UAAWC,EAAWC,WAAA,wBAAyB,CAAE,6BAA8BtJ,EAAMgxB,YAAa7wB,SAEjGH,EAAMmH,QAEP,KACHnH,EAAMw4B,aAAa5uB,KAAI,SAAClE,EAAME,GAC7B,GAAI2yB,GAAkB7yB,EAAKyB,MAAO,CAChC,OACEoC,EAAAA,KAAA,MAAA,CAAiBH,UAAU,uBAAsBjJ,SAAA,CAC/CoJ,OAACwjB,GAAU,CACTG,UAAU,aACV9jB,UAAU,6BACVjD,MAAOnG,EAAMy4B,mBAAmBt4B,SAEhC,CAAAoJ,EAAAoR,KAAA,OAAA,CAAMvR,UAAU,6BAA4BjJ,SAAEyF,CAAAA,EAAQ,EAAC,QACvD3F,EAAAqB,IAAA,OAAA,CAAAnB,SAAOuF,EAAKyB,WAEbzB,EAAKgzB,KACJnvB,EAAAA,KAACwjB,GAAU,CACTG,UAAU,aACV9jB,UAAU,4BACVjD,MAAOnG,EAAM24B,kBAAkBx4B,SAE/B,CAAAF,EAAAqB,IAAA,OAAA,CAAM8H,UAAU,+BAChBnJ,EAAAqB,IAAA,OAAA,CAAAnB,SAAOuF,EAAKgzB,UAEZ,OAlBI9yB,EAqBd,CACA,OACE2D,EAAAA,KAAA,MAAA,CAAiBH,UAAU,uBAAsBjJ,SAC9CuF,CAAAA,EAAKyB,MACJlH,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,6BAA6BjD,MAAOnG,EAAMy4B,mBAAmBt4B,SACzEuF,EAAKyB,QAEN,KACHzB,EAAKgzB,KACJz4B,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,4BAA4BjD,MAAOnG,EAAM24B,kBAAkBx4B,SACvEuF,EAAKgzB,OAEN,OAVI9yB,EAad,MAGN,mIC9BagzB,GAAwB,SAAxBA,EAAyB54B,GACpC,IACEkgB,EAOElgB,EAPFkgB,cACAxT,EAME1M,EANF0M,cACAK,EAKE/M,EALF+M,qBACAqT,EAIEpgB,EAJFogB,uBACAtT,EAGE9M,EAHF8M,qBACAF,EAEE5M,EAFF4M,WACGtI,KACDtE,EAAKuE,IACT,IAA0ClE,EAAAA,EAAQA,SAAgB,gBAA3DyL,EAAavL,EAAA,GAAEs4B,EAAgBt4B,EAAA,GACtC,IAAA6E,EAAoC/E,EAAAA,WAA7B4qB,EAAU7lB,EAAA,GAAEqyB,EAAaryB,EAAA,GAChC,IAAMsc,EAAwB9U,GAAAA,UAAAA,EAAAA,EAAYlG,MAC1C,IAAMib,EAAwB/U,GAAAA,UAAAA,EAAAA,EAAYtJ,MAC1C,IAAMse,EAA2BhV,GAAAA,UAAAA,EAAAA,EAAYlF,SAC7C,IAAMoxB,EAAgBpsB,EAAcR,OAEpC,IAAM4V,EAAkBjZ,EAAAA,SAAQ,WAC9B,IAAMkZ,EAAS7B,IAAkB,KACjC,GAAIA,EAAe,CACjB,MAAO,CACLxZ,MAAOqb,EAAS,KAAQ7B,EAAcxZ,MACtCpD,MAAOye,EAAS,GAAM7B,EAAc5c,MAExC,CACA,OAAO,IACT,GAAG,CAAC4c,IAEJ,IAAMxS,EAAyB,SAAzBA,EAA0BC,GAC9B,IAAMC,EAAelB,EAAcmB,uBAC/BnB,EAAcmB,uBAAuBF,GACrCA,EACJ,OAAQC,GAAgB,IAG1B,IAAME,EAAyB,SAAzBA,IAAyB,OAAA,IAAA/L,SAAA,SAAAC,EAAAC,GAAA,IAGrB8L,EACFC,EAxFV,IAAIG,EAAA,WAAJ,IAAI,OAAAnM,GAA8B,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,GAAlC,IAAIgM,EAAA,SA0GSlN,GA1Gb,IA2GM23B,EAAiB,iBACjBzY,GAAAA,UAAAA,EAAAA,EAAyBlf,GA5G/B,OAAOiN,GAA2B,CAAxB,MAAU/L,GAAC,OAAOH,EAAMG,EAAA,GAqF9B,IACEy2B,EAAiB,oBACA,OAAMnsB,QAAAA,QAAAA,EAAcuB,WAAdvB,UAAAA,EAAAA,EAAcuB,UAAY6qB,IAAhC52B,MAA8C,SAAAsM,GAvFrE,IAuFYb,EAAWa,EACbR,EAAkBN,EAAuBC,GAC7CZ,GAAAA,UAAAA,EAAAA,EAAuBiB,GACvB,GAAI0T,GAAyBC,EAAuB,CAClD3T,EAAkBA,EAAgBpE,KAAI,SAAClE,GACrC,OAAAlE,GAAA,CAAA,EACKkE,EAAI,CACPgB,MAAOhB,EAAKgc,GACZpe,MAAOoC,EAAKic,GACZja,SAAUhC,EAAKkc,GAA4B,aAE/C,GACF,CAEA,GAAIE,EAAiB,CACnB9T,EAAgB+qB,QAAQjX,EAC1B,CACA2V,EAAczpB,GACd6qB,EAAiB,mBAzGvB,OAAO1qB,GAA2B,CAAxB,MAAU/L,GAAC,OAAOgM,EAAMhM,EAAA,CAAC,GAAAgM,EA6G/B,CAHE,MAAOlN,GAAOkN,EAAPlN,EAGT,CAAC,GACF,EAEDO,IAAgB,gBACTqM,GACN,GAAE,IAEH,IAAMxN,EAAUwL,IAAkB,mBAElC,OACE7L,EAAAqB,IAACijB,EAAMA,OAAA/iB,GAAA,CAAA,EACD8C,EAAU,CACd6B,MAAK3E,GAAA,CAAI6S,MAAO,QAAWrU,EAAMmG,OACjC6G,QAASie,EACTlb,gBACE9P,MAAC8K,GAAmB,CAClBI,OAAQW,EACRxL,QAASA,EACT0K,cAAe8B,EACfpB,YACEzL,MAACsB,SAAM,CAAC2E,KAAK,UAAUvF,QAASmN,EAAuB3N,SAAA,aAM7D6P,WACElE,IAAkB,gBAChB7L,EAAAA,IAAAgQ,GAAAA,WAAA,CAAcC,KAAM5P,EAASK,QAASmN,IACpC/D,UAENzJ,QAASA,IAGf,MC9Ga04B,GAAe,SAAfA,EAAgBh5B,GAC3B,IAAMi5B,EAAaj5B,EAAMk5B,gBAAkB,QAC3C,IAAM9vB,EAAYC,EAChBC,WAAA,gBACA,CACE,sBAAuBtJ,EAAMm5B,aAAe,QAC5C,+BAAgCF,IAAe,QAEjDj5B,EAAMoJ,WAGR,IAAMgwB,EAAiB/vB,EAAWC,WAAA,sBAAuB,CACvD,2BAA4BtJ,EAAMq5B,gBAGpC,IAAM71B,EAAQD,KACd,IAAM4C,EAAQ8E,EAAAA,OAAO,CAAE,+BAAgCzH,EAAMgH,cAAgBxK,EAAMmG,MAAO,CACxFmzB,QAASt5B,EAAMs5B,QACfjlB,MAAOrU,EAAMqU,QAEf,OACE9K,EAAAA,KAAA,MAAA,CAAKH,UAAWA,EAAWjD,MAAOA,EAAMhG,SAAA,CACrCH,EAAMmH,OAASnH,EAAMu5B,WACpBt5B,EAAAqB,IAAA,MAAA,CAAK8H,UAAWgwB,EAAej5B,SAC7BoJ,OAACC,QAAK,CAACJ,UAAU,kCAAiCjJ,SAC/CH,CAAAA,EAAMmH,MACPlH,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,4BAA2BjJ,SAAEH,EAAMu5B,kBAGpD,KACHv5B,EAAMmH,QAAUnH,EAAMu5B,WAAat5B,EAAAqB,IAAA,MAAA,CAAK8H,UAAWgwB,EAAej5B,SAAEH,EAAMmH,QAAe,KACzFnH,EAAM04B,KAAOz4B,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,qBAAoBjJ,SAAEH,EAAM04B,OAAc,KACtE14B,EAAMG,SACLF,EAAAA,IAAA,MAAA,CAAKmJ,UAAU,wBAAwBjD,MAAOnG,EAAMw5B,aAAar5B,SAC9DH,EAAMG,WAEP,OAGV,EAEA64B,GAAaluB,aAAe,CAC1BuuB,cAAe,KACfF,WAAY,aC5DDM,GAAsC,SAAtCA,EAAuCz5B,GAClD,IAAAO,EAAsCF,EAAAA,WAA/Bq5B,EAAWn5B,EAAA,GAAEo5B,EAAcp5B,EAAA,GAElC,IAA8BF,EAAAA,EAAQA,SAAC,OAAhCu5B,EAAOx0B,EAAA,GAAEy0B,EAAUz0B,EAAA,GAC1B,IAAgC/E,EAAAA,EAAQA,SAAC,OAAlCy5B,EAAQC,EAAA,GAAEC,EAAWD,EAAA,GAG5B,IAAME,EAAapxB,EAAAA,SAA2E,WAC5F,MAAO,CACLqxB,QAASl6B,EAAMk6B,QACfC,QAASn6B,EAAMm6B,QACfC,cAAep6B,EAAMo6B,cACrBlpB,OAAQlR,EAAMkR,OACdmpB,UAAWr6B,EAAMq6B,UACjBC,WAAYt6B,EAAMs6B,WAClBC,SAAUv6B,EAAMu6B,SAGnB,GAAE,IAEH,IAAMrpB,EAAS+oB,EAAW/oB,OAC1B,IAAMopB,EAAaL,EAAWK,WAC9B,IAAMC,EAAWN,EAAWM,SAE5B,IAAMC,EAAe55B,EAAAA,MAAM65B,sBACzB,SAACC,GACC,IAAMC,EAASD,EAAM,IACrB,GAAIA,EAAM,EAAG,CACX,IAAKd,EAAS,CACZC,EAAW,KACb,CACAF,EAAezoB,EAAO0pB,QAAQ,MAAO9V,OAAO6V,KAC5C36B,EAAM66B,QAAN76B,UAAAA,EAAAA,EAAM66B,OAASF,EACjB,MAAO,GAAID,IAAQ,EAAG,CACpBb,EAAW,OACXG,EAAY,OACZh6B,EAAM66B,QAAN76B,UAAAA,EAAAA,EAAM66B,OAASF,GACfhB,EAAeM,EAAWE,QAC5B,CACF,GACAG,EAAa,IACb,CAAEQ,aAAcP,IAGlB34B,EAAAA,WAAU,WACR,IAAKq4B,EAAWI,UAAW,CACzBV,EAAeM,EAAWC,QAC5B,KAAO,CACLM,IACAR,EAAY,MACZH,EAAW,KACb,CACF,GAAG,CAACW,EAAcP,IAElB,IAAMc,EAAUn6B,QAAM0E,gBAAe,WACnC,GAAIs0B,GAAWE,EAAU,OACzBE,EAAY,MACZL,EAAeM,EAAWG,oBACrBp6B,EACFg7B,gBACA94B,MAAK,WACJ23B,EAAW,MACXW,GACF,IACCv5B,OAAM,WACL04B,EAAeM,EAAWC,SAC1BF,EAAY,MACd,GACJ,IAEA,IAAM5wB,EAAYC,EAAWC,WAAA,eAAgBtJ,EAAMoJ,UAAW,CAC5DwwB,QAAAA,EACAE,SAAAA,IAGF,OACE75B,EAAAA,IAAA,MAAA,CAAKmJ,UAAWA,EAAWzI,QAASo6B,EAAQ56B,SACzCu5B,GAGP,EAEAD,GAAa3uB,aAAe,CAC1BwvB,WAAY,GACZC,SAAU,IACVF,UAAW,MACXnpB,OAAQ,OACRgpB,QAAS,QACTC,QAAS,OACTC,cAAe,wGC/EJa,GAAgB,SAAhBA,EAAiBj7B,GAC5B,IAAQk7B,EAA6Fl7B,EAA7Fk7B,aAAcC,EAA+En7B,EAA/Em7B,eAAgB5rB,EAA+DvP,EAA/DuP,SAAUjM,EAAqDtD,EAArDsD,MAAO83B,EAA8Cp7B,EAA9Co7B,aAAcC,EAAgCr7B,EAAhCq7B,aAAiB/2B,KAAetE,EAAKuE,IAC1G,IAAM+2B,EAAiB16B,EAAAA,MAAM0E,gBAAe,SAAC6vB,GAC3C5lB,GAAQ,UAAA,EAARA,EAAW4lB,EAAU+F,EAAeC,EACtC,IAEA,IAAII,EAEJ,UAAWF,IAAiB,WAAY,CACtCE,EAAWF,EAAa/3B,EAC1B,KAAO,CACLi4B,EAAWF,CACb,CAEA,OACEp7B,MAACiyB,EAAOA,QAAA1wB,GAAA,CAACqI,UAAU,OAAUuxB,EAAY,CAAEj0B,MAAOo0B,EAASp7B,SACzDF,EAAAA,IAACu7B,EAAAA,OAAMh6B,GAAA,CAAA,EACD8C,EAAU,CACd6wB,SAAUz0B,EAAiBA,kBAAC4C,IAAU43B,IAAiB53B,EACvDiM,SAAU+rB,OAIlB,MCJaG,GAAkC,SAAlCA,EAAmCz7B,GAC9C,IAAM07B,EAAU7yB,EAAAA,SAAQ,WACtB,GAAInI,EAAiBA,kBAACV,EAAMsD,OAAQ,CAClC,OAAO,IACT,CACA,IAAKtD,EAAM+kB,UAAY/kB,EAAM+kB,SAAS9a,SAAW,EAAG,CAClD,MAAO,CAAEvD,MAAK,GAAK1G,EAAMsD,MAC3B,CAEA,IAAM2F,EAASjJ,EAAM+kB,SAAS5H,MAC5B,SAACzX,GAAI,OAAK0F,EAAYA,aAAC1F,EAAKpC,MAAOtD,EAAMsD,QAAUoC,EAAKgB,QAAU1G,EAAMsD,SAE1E,GAAI2F,EAAQ,CAAA,IAAA0yB,EACV,MAAO,CAAEj1B,MAAOuC,EAAOvC,MAAOZ,QAAO9F,EAAAA,EAAM47B,uBAAND,EAAiB7W,OAAO7b,EAAO3F,UAAW2F,EAAOnD,MACxF,CACA,GAAI9F,EAAM67B,WAAY,CACpB,OAAO9xB,SACT,CACA,MAAO,CAAErD,MAAK,GAAK1G,EAAMsD,MAC3B,GAAG,CAACtD,EAAM47B,SAAU57B,EAAM+kB,SAAU/kB,EAAM67B,WAAY77B,EAAMsD,QAE5D,IAAKo4B,EAAS,CACZ,OAAOz7B,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SAAEH,EAAMsD,OAC1B,CAEA,OACErD,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SAAEu7B,GAAAA,MAAAA,EAAS51B,MAAQ7F,MAACud,MAAG,CAAC1X,MAAO41B,EAAQ51B,MAAM3F,SAAEu7B,EAAQh1B,QAAeg1B,GAAAA,UAAAA,EAAAA,EAASh1B,OAE5F,EAEA+0B,GAAW3wB,aAAe,CACxB+wB,WAAY,OC5Dd,IAAMC,GAA2B,SAA3BA,EAA4BC,EAAwBzd,GACxD,OAAO,SAAChb,GACN,GAAI04B,EAAAA,QAAQ14B,IAAUA,IAAU,GAAI,OAAOgb,EAC3C,GAAIkH,WAASliB,GAAQ,OAAOA,EAC5B,IAAM24B,EAAa34B,EAAM44B,WACzB,IAAMC,EAAaz7B,EAAiBA,kBAACq7B,GAAiB,GAAKA,EAC3D,IAAMK,EAAaC,gBAAcJ,GACjC,GAAIG,GAAcD,EAAY,EAAG,CAC/B,OAAOF,CACT,CACA,OACEh8B,EAAAA,IAACiyB,EAAAA,QAAO,CAACroB,UAAU,UAAU1C,MAAO80B,EAAW97B,SAC5Cm8B,EAASA,UAACL,EAAYE,EAAY,KAI3C,EAEA,IAAMI,GAA2B,SAA3BA,EAA4BvvB,GAChC,OAAO,SAACmX,EAAyBiG,GAC/B,IAAMoS,EAAexvB,EAAQod,GAC7B,OAAOnqB,EAAAA,IAACkI,GAAkBq0B,GAAAA,CAAAA,EAAAA,IAE9B,EAEA,IAAMC,GAAwB,SAAxBA,EAAyBC,EAAiCpe,GAC9D,OAAO,SAAChb,GACN,GAAI04B,EAAAA,QAAQ14B,IAAUA,IAAU,GAAI,OAAOgb,EAC3C,IACE,OAAO9K,EAAAA,YAAYtC,OAAO,IAAI4C,KAAKxQ,GAAQo5B,EAG7C,CAFE,MAAOx7B,GACP,OAAOoC,GAASgb,CAClB,EAEJ,EAQA,IAAMqe,GAAyB,SAAzBA,EAA0BC,EAAiBC,GAE/C,OAAO,SAAC1Y,EAAyB2Y,EAAuBl3B,GACtD,GAAIi3B,GAAYD,EAAQ,CACtB,OAAQA,EAAS,GAAKC,EAAWj3B,EAAQ,CAC3C,CACA,OAAOA,EAAQ,EAEnB,EAEA,IAAMm3B,GAA4B,SAA5BA,EACJnxB,EACAgwB,GAEA,OAAO,SAACt4B,GACN,OAAOrD,EAAAA,IAACw7B,GAAU,CAAC1W,SAAUnZ,EAAcgwB,SAAUA,EAAUt4B,MAAOA,EAAOu4B,WAAY,QAE7F,EAEA,IAAMmB,GAA0B,SAA1BA,EAA2Bv2B,EAAa6X,GAC5C,OAAO,SAAChb,GACN,GAAIqF,EAAAA,cAAcrF,GAAQ,CACxB,IAAM2F,EAASg0B,EAAI35B,IAAAA,EAAOmD,EAAK6X,GAC/B,IAAKrV,EAAQ,MAAO,GACpB,GAAI8W,EAAAA,SAAS9W,GAAS,OAAO+X,KAAKC,UAAUhY,GAC5C,OAAOA,CACT,CACA,OAAO3F,GAASgb,EAEpB,EAaA,IAAM4e,GAAgC,SAAhCA,EAAiCC,GACrC,OAAO,SAAC75B,EAAaoC,GACnB,IAAMsH,EAAUmwB,eAAAA,EAASz3B,GACzB,IAAKsH,EAAS,OAAO/M,MAACC,WAAQ,CAAAC,SAAEmD,IAChC,IAAM85B,EAAW18B,EAAAA,kBAAkBsM,EAAQowB,UAAY,KAAOpwB,EAAQowB,SACtE,IAAMrB,EAAgBr7B,EAAAA,kBAAkBsM,EAAQ+uB,eAAiB,GAAM/uB,EAAQ+uB,cAC/E,IAAMsB,EAAgBrwB,EAAQqwB,cAAgBrwB,EAAQqwB,cAAgB,QACtE,IAAMC,EAAc50B,WAASpF,GAASg5B,EAAAA,UAAUh5B,EAAOy4B,EAAgB,GAAKz4B,EAC5E,GAAI0J,EAAQgO,OAASoiB,EAAU,CAC7B,IAAMG,EAAe,CAACt9B,EAAAqB,IAAA,OAAA,CAAAnB,SAAem9B,GAAL,KAA0Br9B,EAAAqB,IAACpB,WAAQ,CAAAC,SAAU6M,EAAQgO,OAAb,MACxE,IAAMwiB,EAAqBH,IAAkB,SAAWE,EAAaE,UAAYF,EACjF,OACEt9B,EAAAA,IAACuJ,EAAAA,MAAK,CAAC7I,QAASqM,EAAQrM,QAASwF,MAAO,CAAEu3B,OAAQ1wB,EAAQrM,QAAU,UAAYoJ,WAAapF,KAAM,EAAExE,SAClGq9B,EAAmB5zB,KAAI,SAAClE,EAAME,GAC7B,OAAO3F,EAAAA,IAACC,EAAAA,SAAQ,CAAAC,SAAcuF,GAARE,OAI9B,CACA,GAAIoH,EAAQgO,MAAO,CACjB,OAAOhO,EAAQgO,KACjB,CACA,OAAO/a,EAAAA,IAAA,OAAA,CAAMU,QAASqM,EAAQrM,QAAQR,SAAEmD,IAE5C,EAEO,IAAMq6B,GAAkB,CAU7BC,mBAAoBV,GAIpBW,UAAWlB,GAOXmB,SAAUrB,GAuBVsB,YAAaxB,GAQbyB,YAAalC,GAUbmC,aAAclB,GAOdmB,WAAYlB,QCrLDmB,GAAoB,SAApBA,EAAqBn+B,GAChC,IAAMgmB,EAAUhmB,EAAMgmB,QACtB,IAAMmH,EAAMzsB,EAAAA,kBAAkBV,EAAMmtB,KAAO,EAAIntB,EAAMmtB,IACrD,UAAWnH,IAAY,SAAU,CAC/B,OACE/lB,EAAAA,IAACiyB,EAAAA,QAAO,CAAC/qB,MAAO6e,EAAQ7lB,SACtBoJ,OAACC,QAAK,CAAC7E,KAAMwoB,EAAK/jB,UAAWpJ,EAAMoJ,UAAWjD,MAAOnG,EAAMmG,MAAMhG,SAC/D,CAAAF,EAAAqB,IAAA,OAAA,CAAAnB,SAAOH,EAAMmH,QACblH,EAAAqB,IAAA,OAAA,CAAM6E,MAAO,CAAEi4B,QAAS,IAAMj+B,SAC5BF,EAAAA,IAAAo+B,GAAA,WAAA,UAKV,CACA,OACEp+B,EAAAA,IAACiyB,EAAAA,QAAO,CAAC/qB,MAAO6e,EAAQ5N,QAAQjY,SAC9BoJ,OAACC,QAAK,CAAC7E,KAAMwoB,EAAK/jB,UAAWpJ,EAAMoJ,UAAWjD,MAAOnG,EAAMmG,MAAMhG,SAC/D,CAAAF,EAAAqB,IAAA,OAAA,CAAAnB,SAAOH,EAAMmH,QACblH,EAAAqB,IAAA,OAAA,CAAAnB,SAAO6lB,EAAQnK,WAIvB,+DCXayiB,GAAc,SAAdA,EAAet+B,GAC1B,IAA8EA,EAAAA,EAAtEu+B,SAAAA,aAAW,KAAIC,EAAEC,EAAqDz+B,EAArDy+B,eAAgBC,EAAqC1+B,EAArC0+B,kBAAsBp6B,KAAetE,EAAKuE,IAEnF,IAAMo6B,EAAYn8B,OAAOo8B,UAAUpd,eAAexH,KAAKha,EAAO,aAC9D,IAAM6+B,EAAWJ,GAAkB,yBAEnC,IAAMlvB,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACw5B,GACrC,GAAIJ,IAAsB,OAASC,EAAW,CAC5CI,EAAmBA,oBAACC,IAAIH,EAAU,CAAEC,UAAAA,GACtC,CACAx6B,EAAWiL,UAAXjL,UAAAA,EAAAA,EAAWiL,SAAWuvB,EACxB,IAEA,IAAMG,EAAmBp2B,EAAAA,SAAQ,WAAM,IAAAq2B,EACrC,GAAIR,IAAsB,MAAQC,EAAW,CAC3C,OAAO3+B,EAAMi/B,gBACf,CACA,IAAME,GAAiBJ,EAAAA,EAAAA,oBAAoB3tB,IAAIytB,KAAxB,UAAA,EAAAK,EAAmCJ,UAC1D,OAAOK,GAAkB76B,EAAW26B,gBACtC,GAAG,CAACJ,EAAUH,EAAmBC,EAAWr6B,EAAW26B,iBAAkBj/B,EAAMi/B,mBAE/E,IAAM71B,EAAYC,EAAAA,WAAW,CAAE,cAAek1B,GAAYj6B,EAAW8E,WAErE,OACEnJ,EAAAqB,IAAC89B,EAAIA,KAAA59B,GAAA,CAAA,EAAK8C,EAAU,CAAE8E,UAAWA,EAAW61B,iBAAkBA,EAAkB1vB,SAAUA,IAE9F,oDC5CA5L,EAAAA,WAAMC,OAAOy7B,GAAAA,YACb17B,EAAAA,WAAMC,OAAO07B,GAAAA,gBA+BAC,GAAoB,SAApBA,EAAqBv/B,GAChC,IAAQuP,EAAwDvP,EAAxDuP,SAAUiwB,EAA8Cx/B,EAA9Cw/B,mBAAoBtuB,EAA0BlR,EAA1BkR,OAAW5M,KAAetE,EAAKuE,IACrE,IACEi7B,EAAAA,GAAsB,CAAE,EADlBC,IAAAA,QAASC,IAAAA,QAASnuB,IAAAA,iBAAkBQ,IAAAA,mBAAoBQ,IAAAA,mBAGhE,IAAMS,EAAe9B,GAAUX,QAAiBA,kBAACovB,IAEjD,IAAMC,EAAeh/B,EAAM0E,MAAAA,gBAAe,SAACu6B,EAA0BC,GACnE,GAAID,EAAM,CACRtwB,GAAAA,UAAAA,EAAAA,EAAWuwB,EACb,KAAO,CACLvwB,GAAAA,UAAAA,EAAAA,EAAWxF,UACb,CACF,IAEA,IAAMg2B,EAAkBl3B,EAAAA,SAAQ,WAC9B,IAAMvF,EAAQtD,EAAMsD,MACpB,GAAIA,EAAO,CACT,OAAOK,EAAK,WAACL,EAAO0P,EACtB,CACA,OAAOjJ,SACR,GAAE,CAACiJ,EAAchT,EAAMsD,QAExB,IAAMuQ,EAAmD,SAAnDA,IACJ,IAAMT,EAAOzP,EAAAA,aAAQuN,OAAOZ,QAAiBA,kBAACa,KAC9C,IAAMnE,EAAU,CACdiE,YAAawuB,EAAU97B,EAAK,WAAIyP,EAAQqsB,IAAAA,GAAa11B,UACrDsH,YAAaquB,EAAU/7B,EAAK,WAAIyP,EAAQssB,IAAAA,GAAa31B,UACrDwH,iBAAAA,EACAQ,mBAAAA,EACAQ,mBAAAA,GAEF,MAAO,CACLwB,cAAe,SAAMA,IACnB,OAAOnD,GAAgBjN,EAAAA,aAASqJ,EACjC,EACDgH,gBAAiB,SAACgsB,EAAAA,GAChB,OAAOvuB,GAAkB9N,EAAAA,WAASyP,MAAQ4sB,GAAShzB,EACpD,EACDiH,gBAAiB,SAAAA,EAAC+rB,EAAcC,GAC9B,OAAOhuB,GAAkBtO,aAASyP,EAAI,IAAI4sB,EAAI,IAAIC,GAAWjzB,EAC/D,IAIJ,IAAMkzB,EAAUr3B,EAAAA,SAAQ,WACtB,IAAM0O,EAAM5T,EAAAA,aACZ,OACE4T,EAAI+nB,cAAc37B,EAAAA,WAAM87B,GAAW,WAAYzsB,KAC/CuE,EAAI8nB,eAAe17B,EAAAA,WAAM+7B,GAAW,WAAY1sB,GAEnD,GAAE,CAACA,EAAc0sB,EAASD,IAE3B,OACEx/B,MAACkgC,EAAUA,WAAA3+B,GAAA,CACT0+B,QAASA,EACT9rB,aAAcP,GACVvP,EAAU,CACdhB,MAAOy8B,EACPxwB,SAAUqwB,EACV1uB,OAAQ8B,IAGd,+CClEaotB,GAAyB,SAAzBA,EAA0BpgC,GACrC,IAAQuP,EAAgDvP,EAAhDuP,SAAUiwB,EAAsCx/B,EAAtCw/B,mBAAuBl7B,KAAetE,EAAKuE,IAE7D,IACEi7B,EAAAA,GAAsB,CAAE,EADlBC,IAAAA,QAASC,IAAAA,QAASnuB,IAAAA,iBAAkBQ,IAAAA,mBAAoBQ,IAAAA,mBAGhE,IAAMrB,EAASrI,EAAAA,SAAQ,WACrB,OAAO7I,EAAMkR,QAAUX,QAAiBA,kBAACovB,GAC3C,GAAG,CAAC3/B,EAAMkR,SAEV,IAAM0uB,EAAeh/B,EAAAy/B,MAAM/6B,gBAAe,SAAC8N,EAAiDyB,GAAA,IAA1CyrB,EAASzrB,EAAA,GAAE0rB,EAAO1rB,EAAA,GAClE,GAAIzB,EAAM,CACR7D,GAAQ,UAAA,EAARA,EAAW,CAAC+wB,EAAWC,GACzB,KAAO,CACLhxB,GAAAA,UAAAA,EAAAA,EAAWxF,UACb,CACF,IAEA,IAAMg2B,EAAkBl3B,EAAAA,SAAQ,WAC9B,IAAMvF,EAAQtD,EAAMsD,MACpB,GAAIA,GAASA,EAAM2G,OAAS,EAAG,CAC7B,MAAO,CACL3G,EAAM,GAAKK,EAAK,WAACL,EAAM,GAAI4N,GAAU5N,EAAM,GAC3CA,EAAM,GAAKK,EAAK,WAACL,EAAM,GAAI4N,GAAU5N,EAAM,GAE/C,CACA,OAAOyG,SACR,GAAE,CAAC/J,EAAMsD,MAAO4N,IAEjB,IAAM2C,EAAwD,SAAxDA,IACJ,IAAMT,EAAOzP,EAAAA,aAAQuN,OAAOZ,QAAiBA,kBAACa,KAC9C,IAAMnE,EAAU,CACdiE,YAAawuB,EAAU97B,EAAK,WAAIyP,EAAQqsB,IAAAA,GAAa11B,UACrDsH,YAAaquB,EAAU/7B,EAAK,WAAIyP,EAAQssB,IAAAA,GAAa31B,UACrDwH,iBAAAA,EACAQ,mBAAAA,EACAQ,mBAAAA,GAEF,MAAO,CACLwB,cAAe,SAAMA,IACnB,OAAOnD,GAAgBjN,EAAAA,aAASqJ,EACjC,EACDgH,gBAAiB,SAACgsB,EAAAA,GAChB,OAAOvuB,GAAkB9N,EAAAA,WAASyP,MAAQ4sB,GAAShzB,EACpD,EACDiH,gBAAiB,SAAAA,EAAC+rB,EAAcC,GAC9B,OAAOhuB,GAAkBtO,aAASyP,EAAI,IAAI4sB,EAAI,IAAIC,GAAWjzB,EAC/D,IAIJ,OACE/M,MAACkgC,EAAAA,WAAW7qB,YAAW9T,GAAA,CACrB4S,aAAcP,GACVvP,EAAU,CACdhB,MAAOy8B,EACPxwB,SAAUqwB,EACV1uB,OAAQA,IAGd,kFCnEasvB,GAAiC,SAAjCA,EAAkCxgC,GAC7C,IAAQ0V,EAAiF1V,EAAjF0V,UAAWC,EAAsE3V,EAAtE2V,QAASC,EAA6D5V,EAA7D4V,aAAc6qB,EAA+CzgC,EAA/CygC,4BAAgCn8B,KAAetE,EAAKuE,IAC9F,IAAMuR,EAAOC,OAAKC,kBAClB,IAAMC,EAAWpN,EAAAA,SAAQ,WACvB,GAAIlJ,UAAQ+V,IAAc/V,EAAQgW,QAAAA,GAAU,CAC1C,OAAOD,EACJQ,MAAM,EAAGR,EAAUzL,OAAS,GAC5BqF,OAA0BoG,mBAAAA,EAAUA,EAAUzL,OAAS,GAAM0L,IAAAA,EAAQA,EAAQ1L,OAAS,GAC3F,CACA,MAA0ByL,mBAAAA,MAAaC,CACzC,GAAG,CAACD,EAAWC,IAEf,IAAMQ,EAAiBtN,EAAAA,SAAQ,WAC7B,OAAO+M,EAAgB,GAA2BtG,OAAOsG,EAAcF,GAAaA,CACtF,GAAG,CAACA,EAAWE,IAEf,IAAMQ,EAAevN,EAAAA,SAAQ,WAC3B,OAAO+M,EAAgB,GAA2BtG,OAAOsG,EAAcD,GAAWA,CACpF,GAAG,CAACA,EAASC,IAEb,IAAMS,EAAWN,EAAIA,KAACO,SAASH,EAAgBL,GAC/C,IAAMS,EAASR,EAAIA,KAACO,SAASF,EAAcN,GAC3C,IAAMU,EAAUT,EAAIA,KAACO,SAASL,EAAUH,GAExCrU,IAAgB,WACd,GAAI4U,GAAYE,EAAQ,CACtB,IAAM1W,EAAO+V,EAAgB,GAA2BtG,OAAOsG,EAAcK,GAAYA,EACzFH,EAAKW,UAAU,CAAC,CAAE5W,KAAAA,EAAMyD,MAAO,CAAC+S,EAAUE,KAC5C,CACD,GAAE,CAACF,EAAUE,EAAQC,IAEtB,IAAME,EAAU5T,SAAwB,MACxC,IAAM6T,EAAW7T,SAAwB,MAEzC,IAAMyM,EAAW3O,EAAAA,MAAM0E,gBAAe,SAACsR,GAAS,IAAAC,EAAAC,EAC9ChB,EAAKW,UAAU,CACb,CAAE5W,KAAMsW,EAAgB7S,MAAOsT,GAAAA,UAAAA,EAAAA,EAAO,IACtC,CAAE/W,KAAMuW,EAAc9S,MAAOsT,GAAAA,UAAAA,EAAAA,EAAO,OAGtCC,EAAAH,EAAQ1T,UAAR,UAAA,EAAA6T,EAAiBtH,UAAjB,UAAA,EAAAsH,EAAiBtH,SAAWqH,GAAAA,UAAAA,EAAAA,EAAO,KACnCE,EAAAH,EAAS3T,UAAT,UAAA,EAAA8T,EAAkBvH,UAAlB,UAAA,EAAAuH,EAAkBvH,SAAWqH,GAAAA,UAAAA,EAAAA,EAAO,GACtC,IAEA,OACErN,EAAAA,KAAAwN,EAAAA,SAAA,CAAA5W,SACE,CAAAF,EAAAA,IAAC8V,EAAIA,KAACiB,KAAI,CAACnX,KAAM6V,EAAWrU,OAAM,KAAAlB,SAChCF,MAACgX,GAAY,CAACxK,IAAKiK,MAErBzW,EAAAA,IAAC8V,EAAIA,KAACiB,KAAI,CAACnX,KAAM8V,EAAStU,OAAM,KAAAlB,SAC9BF,MAACgX,GAAY,CAACxK,IAAKkK,MAErB1W,EAACqB,IAAAyU,EAAIA,KAACiB,WAAS1S,EAAU,CAAEzE,KAAMoW,EAAS9V,SACxCF,EAAAA,IAACmgC,GAAsB5+B,GAAA,CAAA,EAAKi/B,EAA2B,CAAElxB,SAAUA,UAI3E,EAWA,IAAM0H,GAAezK,EAAUA,YAAqC,SAACxM,EAAOyM,GAC1EqC,EAAmBA,oBAACrC,GAAK,WACvB,MAAO,CACL8C,SAAU,SAAC8G,EAAAA,GACTrW,EAAMuP,UAANvP,UAAAA,EAAAA,EAAMuP,SAAW8G,EACnB,EAEJ,IAEA,OAAOpW,EAAAA,IAACiX,EAAAA,MAAK,CAAC5T,MAAOtD,EAAMsD,OAC7B,ICtFA,IAAMqI,GAA2B,CAC/B+0B,iBAAkB,GAClBC,uBAAwB,GACxB90B,aAAc,OAGhB,IAAM+0B,GAAqE,CACzE50B,QAAS,CACPC,iBAAkB,SAACC,EAAAA,GACjB,OAAO,SAACvJ,GACNA,EAAM+9B,iBAAmBx0B,EAAOw0B,kBAAoB,GACpD/9B,EAAMg+B,uBAAyBz0B,EAAOy0B,wBAA0B,GAChEh+B,EAAMmJ,cAAgB,kBAEzB,EACD+0B,mBAAoB,SAAMA,IACxB,OAAO,SAACl+B,GACNA,EAAM+9B,iBAAmB,GAE5B,EACDv0B,oBAAqB,SAACD,EAAAA,GACpB,OAAO,SAACvJ,GACNA,EAAMmJ,cAAgBI,EAE1B,GAEFvJ,MAAOgJ,IAGT,IAAMm1B,GAAgG,CAAA,EAQ/F,IAAMC,GAA2B,SAA3BA,EAA4Bt6B,GACvC,IAAKq6B,GAA0Br6B,GAAM,CACnCq6B,GAA0Br6B,GAAO6F,EAAKA,MAACs0B,GACzC,CACA,OAAOE,GAA0Br6B,EACnC,ECpDO,IAAMu6B,GAAkB,SAAlBA,EACX19B,EACA29B,EACAr0B,GAEA,IAAKjN,EAAAklB,QAAQoc,IAAaA,EAASh3B,SAAW,EAAG,MAAO,GACxD,IAAMi3B,EAAaryB,EAAAA,iBAAiBoyB,EAAUr0B,GAC9C,OAAOgC,uBAAqBtL,EAAO49B,EAAY,KAAM,CAAE59B,MAAO,QAAS69B,YAAa,eACtF,EAEO,IAAMthB,GAAe,SAAfA,EAAgBjJ,EAAMhK,GACjC,IAAIw0B,EAAWj4B,UAAwCyN,GACvDwqB,EAAWA,EAASx3B,KAAI,SAAClE,GACvB,GAAIqa,EAAAA,SAASra,GAAO,OAAOA,EAAKkH,EAAWtJ,OAC3C,OAAOoC,CACT,IACA,OAAO07B,CACT,EAEO,IAAMC,GAAY,SAAZA,EAAazqB,EAAMhK,GAC9B,IAAM00B,EAAOzhB,GAAajJ,EAAMhK,GAChC,IAAMhD,EAAM,CAAA,EACZ03B,EAAK37B,SAAQ,SAACD,GACZkE,EAAIlE,GAAQ,IACd,IACA,OAAOkE,CACT,EASO,IAAM23B,GAAoC,SAApCA,EACXC,EACAC,EACA70B,GAEA,GAAIlM,EAAAA,kBAAkB8gC,IAAW9gC,EAAiBA,kBAAC+gC,GAAS,OAAO,KACnE,IAAMC,EAAUL,GAAUG,EAAQ50B,GAClC,IAAM+0B,EAAUN,GAAUI,EAAQ70B,GAClC,IAAMwI,EAAOwsB,EAAAA,OAAOF,EAASC,GAC7B,OAAOvsB,CACT,2UCqFaysB,GAAsB,SAAtBA,EAAuB7hC,GAClC,IAAA0S,EAmBI1S,EAlBF0M,IAAAA,cACAo1B,IAAAA,qBACAC,IAAAA,yBACAC,IAAAA,2BAEAtB,IAAAA,iBACA5zB,IAAAA,qBACAH,IAAAA,SACArJ,IAAAA,MACc2+B,IAAdxhB,aACAC,IAAAA,uBACAwhB,IAAAA,sBAAqBC,EAAAzvB,EACrB0vB,qCAAAA,aAAuC,KAAID,EAC3Cv1B,IAAAA,WACA2C,IAAAA,SACA+rB,IAAAA,eACApb,IAAAA,cACG5b,EAAUojB,GAAAhV,EAAAnO,IAMf,IAAM89B,EAAsBriC,EAAMwhB,eAAe,oBACjD,IAAMtU,EAAmBR,GAAiB,GAC1C,IAAM41B,EAA0BR,GAAwB,GACxD,IAA8B7+B,EAAAA,GAAa,OAApC3C,EAAO6M,EAAA,GAAE3M,EAAU2M,EAAA,GAC1B,IAAA5M,EAAgDF,EAAAA,WAAzCkiC,EAAgBhiC,EAAA,GAAEiiC,EAAmBjiC,EAAA,GAC5C,IAAAkiC,EAAyB1B,GAAyBp0B,GAAUU,WAArD1K,EAAK8/B,EAAA,GAAEz2B,EAAOy2B,EAAA,GACrB,IAAMn1B,sBAAoCX,EAC1C,IAAMqV,EAAa1d,EAAWo+B,cAK9B,IAAMjiB,EAAe5X,EAAAA,SAAQ,WAC3B,GAAIvE,EAAWq+B,kBAAmB,OAAO,KACzC,OAAOV,CACR,GAAE,CAACA,EAAe39B,EAAWq+B,oBAE9B,IAAMp1B,EAAkB1E,EAAAA,SAAQ,WAC9B,OAAArH,GAAA,CAASkF,MAAO,QAASpD,MAAO,QAASnD,SAAU,WAAYuH,SAAU,YAAekF,EAC1F,GAAG,CAACA,IAEJ,IAAMiV,EAA8BhZ,EAAAA,SAAQ,WAC1C,OAAArH,GAAA,CAASkF,MAAO,QAASpD,MAAO,SAAYod,EAC9C,GAAG,CAACA,IAEJ,IAAMoB,EAAkBjZ,EAAAA,SAAQ,WAC9B,GAAIqX,EAAe,CACjB,IAAM6B,EAAS7B,IAAkB,KACjC,MAAO,CACLxZ,MAAOqb,EAAS,KAAO7B,EAAcxZ,MACrCpD,MAAOye,EAAS,GAAK7B,EAAc5c,MAEvC,CACA,OAAO,IACT,GAAG,CAAC4c,IAEJ,IAAA9a,EAAkD/E,EAAAA,WAA3CuiC,EAAiBx9B,EAAA,GAAEy9B,EAAoBz9B,EAAA,GAG9C,IAAM6Y,EAAqBnb,SAAO,MAElCrB,IAAgB,WACd,GAAIf,EAAiBA,kBAAC4C,IAAU2a,EAAmBjb,QAAS,OAC5Dib,EAAmBjb,QAAU,MAC7B,GAAIL,EAAM+9B,iBAAiBz2B,OAAS,EAAG,CACrC,IAAKs3B,GAAkCj+B,EAAOs/B,EAAmB/gB,GAA8B,CAC7F1gB,QAAQiH,IAAgBuE,YAAAA,qCAA4CrJ,EAAOs/B,GAC3E,IAAMp1B,EAAYqS,GAAavc,EAAOue,GACtCghB,EAAqBr1B,GAErB,IAAMs1B,EAAeC,GAAoBv1B,EAAW,MACpDg1B,EAAoBQ,MAAM9a,KAAK,IAAI+a,IAAIH,IACzC,CACF,CACD,GAAE,CAACx/B,EAAOX,EAAM+9B,mBAEjB,IAAMwC,EAAe,SAAfA,EAAgB5/B,GACpB,OAAOA,IAAU,IAAM5C,EAAiBA,kBAAC4C,IAG3C,IAAM6/B,GAAwB,SAAxBA,EAAyBx1B,GAC7B,IAAMC,EAAeV,EAAiBW,uBAClCX,EAAiBW,uBAAuBF,GACxCA,EACJ,OAAOC,GAGT,IAAME,GAAyBlN,QAAM0E,gBAAe,WAAA,OAAA,IAAAvD,SAAA,SAAAC,EAAAC,GAAA,IAI5CmhB,EACAlX,EACAmX,EAWEtV,EACAq1B,EAjBR,IAAKl2B,EAAiBe,UAAW,CAC/B,OAAAhM,EAAM,IAAIiM,MAAM,wBAClB,CACMkV,EAAqBlW,EAAiBkW,oBAAsB,GAC5DlX,EAASjB,EAAAA,OAAO,CAAA,EAAIiC,EAAiBhB,QACrCmX,EAAUD,EAAmBjG,MAAK,SAAC1W,GACvC,OAAOy8B,EAAah3B,EAAOzF,GAC7B,IACA,GAAI4c,EAAS,CACXliB,QAAQwkB,KAAiCvC,4BAAAA,EAAmBtF,KAAK,KAAW,QAC5E,OAAA9b,GACF,CAtPJ,IAAImM,EAAA,WAAJ,IAAI,OAAAnM,GAA8B,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,GAAlC,IAAIgM,EAAA,SAgQSlN,GAhQb,IAiQMV,EAAW,OACX6N,OAAOf,GAAiB,WACnBtB,EAAQG,oBAAoB,iBACjC61B,GAAAA,UAAAA,EAAAA,EAA6B9gC,GApQnC,OAAOiN,GAA2B,CAAxB,MAAU/L,GAAC,OAAOH,EAAMG,EAAA,GAuP9B,IACE5B,EAAW,MACX6N,OAAOf,GAAiB,UACnBtB,EAAQG,oBAAoB,oBACf,OAAMe,QAAAA,QAAAA,EAAiBe,WAAjBf,UAAAA,EAAAA,EAAiBe,UAAY/B,IAAnChK,MAA0C,SAAAsM,GA3PlE,IA2PYT,EAAYS,EACZb,EAAWw1B,GAAsBp1B,GACvCvN,EAAW,OACX6N,OAAOf,GAAiB,MACxB+1B,GAAqB11B,GAAY,IA/PvC,OAAOQ,GAA2B,CAAxB,MAAU/L,GAAC,OAAOgM,EAAMhM,EAAA,CAAC,GAAAgM,EAqQ/B,CALE,MAAOlN,GAAOkN,EAAPlN,EAKT,CAAC,OAGHN,EAAM0iC,MAAAA,wBACJ,WACE,GAAIjB,EAAqB,OAEzB,GAAIkB,QAAQjB,EAAwBr4B,QAAS,CAE3Co5B,GAAqB,SAChBv1B,KACL,MACF,CACA,IAAM01B,EAAWzC,GAAyBp0B,GAAU82B,WACpD,GAAID,EAAS13B,gBAAkB,kBAAmB,CAChD,MACF,CAEA,IAAKuC,OAAOf,GAAgB,MACrBQ,KACL,MACF,CACF,GACAw0B,EACAV,EAAAA,QAGF,IAAMyB,GAAuBziC,EAAAA,MAAM0E,gBAAe,SAACyf,GAAoB,IAAAlQ,EACrE,IAAIkQ,GAAQ,UAAA,EAARA,EAAU9a,UAAW,GAAKtH,EAAM+9B,iBAAiBz2B,SAAW,EAAG,MAC5D+B,EAAQC,iBAAiB,CAC5By0B,iBAAkB,GAClBC,uBAAwB,KAE1BoB,GAAAA,UAAAA,EAAAA,EAA2B,IAC3B,MACF,CAEA,IAAM2B,EAAW5hB,GAAejN,EAAA,CAAA,EAAAA,EAEzBtH,EAAgB7G,OAAQob,EAAgBpb,MACxC6G,EAAAA,EAAgBjK,OAAQwe,EAAgBxe,SAE3CyG,UACJ,IAAM45B,EAAczjB,EAAa,CAAIwjB,GAAa3e,OAAAA,GAAYA,OACzD/Y,EAAQC,iBAAiB,CAC5By0B,iBAAkBiD,EAClBhD,uBAAwBiD,EAAAA,YAAYD,GAAe,GAAIp2B,EAAgBpN,YAEzE4hC,GAAAA,UAAAA,EAAAA,EAA2Bhd,EAC7B,IAEAtjB,IAAgB,WACd,GAAI4gC,EAAqB,CACvBgB,GAAqB3C,GAAoB,GAC3C,CACF,GAAG,CAACA,IAEJ,IAAMmD,GAAejjC,EAAAA,MAAM0E,gBAAe,SAACw9B,GACzCN,EAAoBM,EACtB,IAEA,IAAM9zB,GAAiBpO,QAAM0E,gBAAe,gBACrCwI,IACP,IAEA,IAAMi1B,GAAsBniC,EAAM0E,MAAAA,gBAAe,SAACkI,EAAmCs2B,GACnF,IAAIC,EAAsB,GAC1Bv2B,EAAU7H,SAAQ,SAACrC,GACjB,IAAKwgC,GAAWvB,GAAgB,MAAhBA,EAAkBziC,SAASwD,GAAQ,OACnD,IAAM6e,EAAa6e,GAAgB19B,EAAOX,EAAM+9B,iBAAkBnzB,GAClEw2B,EAAsBA,EAAoBz0B,OAAO6S,EAAWvY,KAAI,SAAClE,GAAI,OAAKA,EAAKpC,KAAK,IACtF,IACA,OAAOygC,CACT,IAKA,IAAMC,GAAsBpjC,EAAAA,MAAM0E,gBAAe,SAACI,GAChD,IAAKA,EAAM,OAAOqE,UAClB,MAAO,CACLrD,MAAOhB,GAAAA,UAAAA,EAAAA,EAAO6H,EAAgB7G,OAC9BpD,MAAOoC,GAAAA,UAAAA,EAAAA,EAAO6H,EAAgBjK,OAC9BnD,SAAUuF,GAAAA,UAAAA,EAAAA,EAAO6H,EAAgBpN,UACjCuH,SAAUhC,GAAAA,UAAAA,EAAAA,EAAO,YAErB,IAIA,IAAMu+B,GAAwBrjC,EAAAA,MAAM0E,gBAAe,SAACI,GAClD,IAAKA,EAAM,OAAOqE,UAClB,MAAO,CACLrD,MAAOhB,GAAAA,UAAAA,EAAAA,EAAOmc,EAA4Bnb,OAC1CpD,MAAOoC,GAAAA,UAAAA,EAAAA,EAAOmc,EAA4Bve,OAC1CoE,SAAUhC,GAAAA,UAAAA,EAAAA,EAAO,YAErB,IAEA,IAAMw+B,GAA0BtjC,EAAM0E,MAAAA,gBAAe,SAAC6+B,EAAkBC,GACtE,IAAM52B,EAAYqS,GAAaskB,EAAa,CAAE7gC,MAAO,QAASoD,MAAO,UACrE,IAAI29B,EAAuB,GAC3B72B,EAAU7H,SAAQ,SAACD,GACjB,IAAMuD,EAASsZ,EAAAA,UAAU5f,EAAMg+B,uBAAwBj7B,EAAM6H,EAAgBjK,OAC7E,IAAK2F,EAAQ,OACbo7B,EAAqB18B,KAAKsB,EAC5B,IACA,GAAI3E,EAAWq+B,mBAAqBP,EAAsC,CACxE,IAAMkC,EAAcN,GAClBI,EAAYjP,QACR5S,EAASA,UAAC5f,EAAMg+B,uBAAwByD,EAAYG,aAAch3B,EAAgBjK,OAClF,MAEN,GAAIghC,GAAe3kC,EAAQ2kC,QAAAA,EAAYnkC,WAAamkC,EAAYnkC,SAAS8J,OAAS,EAAG,CAEnF,IAAMu6B,EAAkBZ,EAAAA,YAAYU,EAAYnkC,SAAUoN,EAAgBpN,UAC1E,IAAMskC,EAAuBD,EAAgBl8B,QAAO,SAAC5C,GACnD,IAAMg/B,EAAYV,GAAoBt+B,GACtC,GAAIg/B,GAAAA,MAAAA,EAAWh9B,SAAU,OAAO,MAEhC,GAAI6a,YAAU8hB,EAAsBK,eAAAA,EAAWphC,MAAOiK,EAAgBjK,OAAQ,OAAO,MACrF,OAAO,IACT,IACA+gC,EAAuBA,EAAqB/0B,OAAOm1B,EACrD,CACF,CACA,IAAIE,EAAmB,GACvB,GAAIrgC,EAAWo+B,cAAe,CAC5B,GACEp+B,EAAWq+B,oBAAsB,MACjCv3B,EAAYA,aAAC9G,EAAWsgC,oBAAqB,CAAC,WAAY,gBAC1D,CAEAD,EAAmBN,CACrB,KAAO,CAELM,EAAmBN,EAAqB/7B,QAAO,SAAC5C,GAC9C,IAAMvF,EAAWuF,EAAK6H,EAAgBpN,UACtC,QAASR,EAAQQ,QAAAA,IAAaA,EAAS8J,OAAS,EAClD,GACF,CACF,KAAO,CACL06B,EAAmBN,CACrB,CACA,MAAO,CACLM,iBAAAA,EACAE,sBAAuBhlB,GAAa8kB,EAAkBp3B,GAE1D,IAEA,IAAMwW,GAAenjB,EAAAA,MAAM0E,gBAAe,SAACkK,EAAQs1B,EAAgBV,GACjEvB,EAAqBrzB,GACrBD,GAAAA,UAAAA,EAAAA,EAAWC,GACX8rB,GAAc,UAAA,EAAdA,EAAiB9rB,EAAQs1B,EAAgBV,EAC3C,IAMA,IAAMlgB,GAAgBtjB,EAAAA,MAAM0E,gBAAe,SAAC6+B,EAAkBY,EAAOX,GACnE,IAAAY,EAAoDd,GAAwBC,EAAaC,GAAjFO,IAAAA,iBAAkBE,IAAAA,sBAC1B,GAAIvgC,EAAWo+B,cAAe,CAC5BF,GAAoB,SAACyC,GACnB,IAAMC,EAAYnC,GAAoB8B,GAAuBv1B,OAAO21B,GAAQ,IAC5E,OAAOjC,MAAM9a,KAAK,IAAI+a,IAAIiC,GAC5B,GACF,CAEA,GAAIzkB,EAAc,CAChB,IAAMwD,EAAmB0gB,EAAiB/6B,KAAI,SAAClE,GAAS,IAAAy/B,EACtD,IAAMT,EAAYV,GAAoBt+B,GACtC,OAAAy/B,EAAA,GAAAA,EACGtjB,EAA4Bnb,OAAQg+B,GAAS,UAAA,EAATA,EAAWh+B,MAC/Cmb,EAAAA,EAA4Bve,OAAQohC,GAAAA,UAAAA,EAAAA,EAAWphC,MAAK6hC,CAEzD,IAEA,GAAInjB,EAAY,CACd+B,IAAY,UAAA,EAAZA,GAAeE,EAAkB0gB,EAAkBP,EACrD,KAAO,CACLrgB,IAAAA,UAAAA,EAAAA,GAAeE,EAAiB,GAAI0gB,EAAiB,GAAIP,EAC3D,CACF,KAAO,CACL,GAAIpiB,EAAY,CACd+B,IAAY,UAAA,EAAZA,GAAe8gB,EAAuBF,EAAkBP,EAC1D,KAAO,CACLrgB,IAAAA,UAAAA,EAAAA,GAAe8gB,EAAsB,GAAIF,EAAiB,GAAIP,EAChE,CACF,CACF,IAEA,IAAMgB,GAAUxkC,EAAAA,MAAM0E,gBAAe,SAACsR,GACpC,IAAKA,EAAM,OAAO,KAClB,OAAOA,EAAKhN,KAAI,SAAClE,GACf,IAAM2/B,GAAkBnD,GAAqB,UAAA,EAArBA,EAA6Bx8B,GAAAA,CAAAA,EAAAA,MAAWA,EAChE,IAAMvF,EAAWklC,EAAgB93B,EAAgBpN,UACjD,IAAMmD,EAAQ+hC,EAAgB93B,EAAgBjK,OAC9C,IAAMoD,EAAQ2+B,EAAgB93B,EAAgB7G,OAC9C,IAAMgB,EAAW29B,EAAgB93B,EAAgB7F,UAC7C29B,EAAgB93B,EAAgB7F,UAChC29B,EAAgB39B,SACpB,OACEf,EAAAA,cAAC2+B,EAAAA,WAAWC,eACNF,EAAe,CACnB39B,SAAUA,EACVpE,MAAOA,EACP6D,MAAOT,EACPD,IAAQnD,GAAAA,IAEPnD,GAAYA,EAAS8J,OAAS,GAAKm7B,GAAQjlC,GAGlD,GACF,IAMA,IAAMqlC,GAAkB38B,EAAAA,SAAQ,WAC9B,IAAM48B,EAAwBt8B,UAAQy5B,GACtC,GAAI6C,EAAsBx7B,QAAU,EAAG,MAAO,GAC9C,GAAI3F,EAAWq+B,kBAAmB,CAChC,GAAIhgC,EAAMg+B,uBAAuB12B,SAAW,EAAG,CAC7C,OAAOw7B,EAAsB77B,KAAI,SAAClE,GAAI,MAAM,CAAEgB,MAAOhB,EAAMpC,MAAOoC,EAAM,GAC1E,CACA,OAAO+/B,EAAsB77B,KAAI,SAAClE,GAAS,IAAAggC,EAAAC,EACzC,IAAIC,EACJ,IAAIC,EACJ,GAAIn9B,EAAAo9B,SAASpgC,IAAS+f,EAAQA,SAAC/f,GAAc,CAC3C,IAAMuD,EAASsZ,EAAAA,UAAU5f,EAAMg+B,uBAAwBj7B,EAAgB6H,EAAgBjK,OACvFsiC,EAAkB5B,GAAoB/6B,GACtC48B,EAAengC,CACjB,KAAO,CACLkgC,EAAkB3B,GAAsBv+B,EAC1C,CACA,MAAO,CACLgB,MAAOq/B,EAAAA,mBAAkBH,EAAAA,gBAAAF,EAAiBh/B,MAAOm/B,GACjDviC,MAAOyiC,EAAAA,mBAAkBH,EAAAA,gBAAAD,EAAiBriC,MAAOuiC,GAErD,GACF,CACA,OAAOhmB,GAAa+iB,EAAmB/gB,EACxC,GAAE,CACD+gB,EACAt+B,EAAWq+B,kBACX9gB,EACAlf,EAAMg+B,uBACNpzB,EAAgBjK,MAChB0gC,GACAC,KAGF,IAAM+B,GAAkBn9B,EAAAA,SAAQ,WAC9B,GAAIlJ,EAAAklB,QAAQ2gB,KAAoBA,GAAgBv7B,SAAW,EAAG,CAC5D,OAAOF,SACT,CACA,OAAOiY,EAAawjB,GAAkBA,GAAgB,EACxD,GAAG,CAACxjB,EAAYwjB,KAMhB,OACEvlC,MAACqlC,EAAUA,WAAA9jC,GAAA,CACTykC,cAAe,CAAEC,UAAW,IAAKC,SAAU,QAC3Cv2B,WAAY,KACZw2B,SAAU,CAAEC,aAAc,OAC1BC,mBAAmB,QACnBC,aAActmC,EAAAA,IAAoBumC,GAAA,WAAA,IAClCC,UAAS,MACLniC,EAAU,CACd8E,UAAWC,EAAWC,WAAA,wBAAyBhF,EAAW8E,WAC1D0G,eAAgBzG,EAAWC,WAAA,iCAAkChF,EAAWwL,gBACxEP,SAAU2U,GACVqe,iBAAkBA,EAClBj/B,MAAO0iC,GACP1lC,QAASA,EACTkkB,yBAA0B,MAC1Bqf,aAAcA,GACd19B,MAAK3E,GAAA,CAAI6S,MAAO,QAAW/P,EAAW6B,OACtC6J,WACErN,EAAMmJ,gBAAkB,gBACtB7L,EAAAA,IAAAgQ,GAAAA,WAAA,CAAcC,KAAM5P,EAASK,QAASqO,KACpCjF,UAENgG,gBACE9P,MAAC8K,GAAmB,CAClBI,OAAQxI,EAAMmJ,cACdd,cAAe8B,EACfxM,QAASA,EACToL,YACEzL,MAACsB,SAAM,CAAC2E,KAAK,UAAUvF,QAASqO,GAAe7O,SAAA,aAKpDA,SAEAilC,GAAQziC,EAAM+9B,oBAGrB,ECxhBA,IAAM/0B,GAA2B,CAC/Bs1B,SAAU,GACVyF,eAAgB,GAChB76B,aAAc,OAGhB,IAAM86B,GAA6D,CACjE36B,QAAS,CACP46B,YAAa,SAAC16B,EAAAA,GACZ,OAAO,SAACvJ,GACNA,EAAMs+B,SAAW/0B,EAAO+0B,UAAY,GACpCt+B,EAAM+jC,eAAiB9C,cAAYjhC,EAAMs+B,SAAU/0B,EAAO26B,cAC1DlkC,EAAMmJ,cAAgB,kBAEzB,EACDg7B,cAAe,SAAMA,IACnB,OAAO,SAACnkC,GACNA,EAAMs+B,SAAW,GAEpB,EACD90B,oBAAqB,SAACD,EAAAA,GACpB,OAAO,SAACvJ,GACNA,EAAMmJ,cAAgBI,EACtB,GAAIA,IAAW,gBAAiB,CAC9BvJ,EAAMs+B,SAAW,EACnB,EAEH,EACD8F,uBAAwB,SAAC76B,EAAAA,GACvB,OAAO,SAACvJ,GACN,IAAMqkC,EAAQpD,EAAAA,YAAYjhC,EAAMs+B,SAAU/0B,EAAO26B,cACjD,IAAM59B,EAAS+9B,EAAM7pB,MAAK,SAACzX,GAAI,OAAKA,EAAKwG,EAAO+6B,aAAe/6B,EAAO5I,SACtE,GAAI2F,EAAQ,CACV,GAAItJ,EAAAA,QAAQuM,EAAOg7B,aAAeh7B,EAAOg7B,WAAWj9B,OAAS,EAAG,CAC9DhB,EAAOiD,EAAO26B,cAAgB36B,EAAOg7B,UACvC,KAAO,CACLj+B,EAAOwF,OAAS,IAClB,CACF,CACA9L,EAAM+jC,eAAiB9C,cAAYjhC,EAAMs+B,SAAU/0B,EAAO26B,cAE9D,GAEFlkC,MAAOgJ,IAGT,IAAMw7B,GAAwF,CAAA,EAQvF,IAAMC,GAAmB,SAAnBA,EAAoB3gC,GAC/B,IAAK0gC,GAAkB1gC,GAAM,CAC3B0gC,GAAkB1gC,GAAO6F,EAAKA,MAACq6B,GACjC,CACA,OAAOQ,GAAkB1gC,EAC3B,ECtFO,IAAMu6B,GAAkB,SAAlBA,EACX19B,EACA29B,EACAr0B,GAEA,IAAMs0B,EAAaryB,EAAAA,iBAAiBoyB,EAAUr0B,GAC9C,OAAOgC,uBAAqBtL,EAAO49B,EAAY,KAAM,CAAE59B,MAAO,QAAS69B,YAAa,eACtF,EAMO,IAAMthB,GAAe,SAAfA,EAAgBjJ,EAAM8J,GACjC,IAAI0gB,EAAW1gC,EAAiBA,kBAACkW,GAAQ,GAAKA,EAC9CwqB,EAAWzhC,UAAQyhC,GAAYA,EAAW,CAACA,GAC3CA,EAAWA,EAASx3B,KAAI,SAAClE,GACvB,GAAIqa,EAAAA,SAASra,GAAO,OAAOA,EAAKgb,EAAuBpd,OACvD,OAAOoC,CACT,IACA,OAAO07B,CACT,EAEO,IAAMC,GAAY,SAAZA,EAAazqB,EAAM8J,GAC9B,IAAM4gB,EAAOzhB,GAAajJ,EAAM8J,GAChC,IAAM9W,EAAM,CAAA,EACZ03B,EAAK37B,SAAQ,SAACD,GACZkE,EAAIlE,GAAQ,IACd,IACA,OAAOkE,CACT,EAYO,IAAMy9B,GAA4B,SAA5BA,EACX7F,EACAC,EACA/gB,GAEA,GAAIhgB,EAAAA,kBAAkB8gC,IAAW9gC,EAAiBA,kBAAC+gC,GAAS,OAAO,KACnE,IAAMC,EAAUL,GAAUG,EAAQ9gB,GAClC,IAAMihB,EAAUN,GAAUI,EAAQ/gB,GAClC,IAAMtL,EAAOwsB,EAAAA,OAAOF,EAASC,GAC7B,OAAOvsB,CACT,6TCkHO,IAAMkyB,GAAc96B,EAAUA,YAAsC,SAACxM,EAAOyM,GACjF,IACEC,EAkBE1M,EAlBF0M,cACAo1B,EAiBE9hC,EAjBF8hC,qBACAyF,EAgBEvnC,EAhBFunC,iBACAjkC,EAeEtD,EAfFsD,MACAiM,EAcEvP,EAdFuP,SACA5C,EAaE3M,EAbF2M,SAAQ66B,EAaNxnC,EAZFynC,4BAAAA,aAA8B,KAAID,EAClCE,EAWE1nC,EAXF0nC,UACAC,EAUE3nC,EAVF2nC,yBACAC,EASE5nC,EATF4nC,oBACAC,EAQE7nC,EARF6nC,YACAj4B,EAOE5P,EAPF4P,WACAk4B,EAME9nC,EANF8nC,kBACAh7B,EAKE9M,EALF8M,qBACA4T,EAIE1gB,EAJF0gB,uBACAD,EAGEzgB,EAHFygB,aACAsnB,EAEE/nC,EAFF+nC,eACGzjC,KACDtE,EAAKuE,IACT,IAAMyjC,EAAsBhoC,EAAMwhB,eAAe,oBACjD,IAAMtU,EAAmBR,GAAiB,GAC1C,IAAM41B,EAA0BR,GAAwB,GACxD,IAAAvhC,EAAgDF,EAAAA,WAAzCkiC,EAAgBhiC,EAAA,GAAEiiC,EAAmBjiC,EAAA,GAC5C,IAAA0nC,EAAyBb,GAAiBz6B,GAAUU,WAA7C1K,EAAKslC,EAAA,GAAEj8B,EAAOi8B,EAAA,GACrB,IAA8BhlC,EAAAA,GAAa,OAApC3C,EAAO6M,EAAA,GAAE3M,EAAU2M,EAAA,GAC1B,IAAMG,EAAa,oBAAuBtN,EAAM2M,SAChD,IAAMC,EAAa/D,EAAAA,SAAQ,WACzB,OAAArH,GAAA,CAASkF,MAAO,QAASpD,MAAO,QAASnD,SAAU,YAAeH,EAAM4M,WAC1E,GAAG,CAAC5M,EAAM4M,aAEV,IAAMs7B,EAAkBplC,EAAAA,SAExB,IAAMkf,EAAa0lB,IAAc,KAEjC,IAAM7lB,EAA8BhZ,EAAAA,SAAQ,WAC1C,OAAArH,GAAA,CAASkF,MAAO,QAASpD,MAAO,SAAYod,EAC9C,GAAG,CAACA,IAEJ,IAAAtb,EAA8C/E,EAAAA,WAAvC8nC,EAAe/iC,EAAA,GAAEgjC,EAAkBhjC,EAAA,GAE1C,IAAM6Y,EAAqBnb,SAAO,MAClC,IAAoCzC,EAAAA,EAAQA,SAAC,GAAtCgoC,EAAUtO,EAAA,GAAEuO,GAAavO,EAAA,GAChC,IAAMwO,GAAuBzlC,EAAAA,SAE7B,IAAM0K,GAAY3E,EAAAA,SAAQ,WACxB,IAAMu4B,EAAWvhB,GAAavc,EAAOue,GACrC,OAAOuf,CACT,GAAG,CAACvf,EAA6Bve,IAEjC7B,IAAgB,WACd,GAAKf,EAAiBA,kBAAC4C,IAAU2a,EAAmBjb,SAAYL,EAAMs+B,SAASh3B,QAAU,EAAG,OAC5FgU,EAAmBjb,QAAU,MAC7B,IAAKqkC,GAA0B/jC,EAAOilC,GAAqBvlC,QAAS6e,GAA8B,CAChG1gB,QAAQiH,IAAG,YAAauE,EAAQ,2BAA4BrJ,EAAOilC,GAAqBvlC,SACxFulC,GAAqBvlC,QAAUgf,EAAaxU,GAAYA,GAAU,GAElE,IAAMs1B,EAAeC,GAAoBv1B,GAAW,MACpDg1B,EAAoBQ,MAAM9a,KAAK,IAAI+a,IAAIH,KACvCoF,EAAgBllC,QAAUwK,GAC1B86B,GAAcx0B,KAAKyD,MACrB,CACD,GAAE,CAACjU,EAAOX,EAAMs+B,WAEjB,IAAMiC,GAAe,SAAfA,EAAgBtsB,GACpB,OAAOA,IAAS,IAAMlW,EAAiBA,kBAACkW,IAG1C,IAAMusB,GAAwB,SAAxBA,EAAyBx1B,GAC7B,IAAMC,EACJV,EAAiBW,uBACbX,EAAiBW,uBAAuBF,GACxCA,EAEN,OAAOC,GAGTnM,IAAgB,WACd2mC,EAAmBP,EACrB,GAAG,CAACA,IAEJ,IAAM/5B,GAAyBlN,QAAM0E,gBAAe,WAAA,OAAA,IAAAvD,SAAA,SAAAC,EAAAC,GAAA,IAK1CmhB,EACAV,EAEEW,EAYAtV,EACAq1B,EA/Qd,IAAIj1B,EAAA,WAAJ,IAAI,OAAAnM,GAA8B,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,GAAlC,IAAIgM,EAAA,SAwRSlN,GAxRb,IAyRMV,EAAW,YACN8N,EAAOA,QAACpN,MAAOA,EAAMoN,SAAsB,aA1RtD,OAAOH,GAA2B,CAAxB,MAAU/L,GAAC,OAAOH,EAAMG,EAAA,GA2P9B,IACE,IAAK8K,EAAiBe,UAAW,CAC/B,MAAM,IAAIC,MAAM,uBAClB,CACMkV,EAAqBlW,EAAiBkW,mBACtClX,EAASjB,EAAAA,OAAO,CAAA,EAAIiC,EAAiBhB,QAC3C,GAAIkX,EAAoB,CAChBC,EAAUD,EAAmBjG,MAAK,SAAC1W,GACvC,OAAOy8B,GAAah3B,EAAOzF,GAC7B,IACA,GAAI4c,EAAS,CACXliB,QAAQwkB,KAAyBvC,oBAAAA,EAAmBtF,KAAK,KAAW,QACpE,OAAA9b,GACF,CACF,CAzQN,IAAI4gB,EAAA,WAAJ,IAAA,OAAOzU,GAA2B,CAAxB,MAAU/L,GAAC,OAAOgM,EAAMhM,EAAA,GAAlC,IAAIygB,EAAA,SAmRW3hB,GAnRf,IAoRQmN,OAAOf,GAAiB,MACxB9M,EAAW,YACNwL,EAAQG,oBAAoB,iBAtRzC,OAAOyW,GAA2B,CAAxB,MAAUxgB,GAAC,OAAOgM,EAAMhM,EAAA,GA0Q5B,IACE5B,EAAW,WACNwL,EAAQG,oBAAoB,oBACjCkC,OAAOf,GAAiB,KACN,OAAMJ,QAAAA,QAAAA,EAAiBe,WAAjBf,UAAAA,EAAAA,EAAiBe,UAAY/B,IAAnChK,MAA0C,SAAAsmC,GA9QpE,IA8Qcz6B,EAAYy6B,EACZ76B,EAAWw1B,GAAsBp1B,GACvCs1B,GAAqB11B,GAAY,IACjCnN,EAAW,OACX6N,OAAOf,GAAiB,MAlRhC,OAAOsV,GAA2B,CAAxB,MAAUxgB,GAAC,OAAOygB,EAAMzgB,EAAA,CAAC,GAAAygB,EAuR7B,CAJE,MAAO3hB,GAAO2hB,EAAP3hB,EAIT,CAIF,CAHE,MAAOA,GAAOkN,EAAPlN,EAGT,CAAC,OAGHO,IAAgB,WACd,GAAIumC,EAAqB,OAEzB,GAAIzE,QAAQjB,EAAwBr4B,QAAS,MACtC6D,KACL,MACF,CACA,IAAM01B,EAAW4D,GAAiBz6B,GAAU82B,WAC5C,GAAID,EAAS13B,gBAAkB,kBAAmB,CAChD,MACF,CAEA,IAAKuC,OAAOf,GAAgB,MACrBQ,KACL,MACF,CACD,GAAEw0B,GAEH7gC,IAAgB,WACd,GAAIumC,EAAqB,CACvB3E,GAAqBkE,GAAoB,GAC3C,CACF,GAAG,CAACA,IAEJ,IAAMlE,GAAuBziC,EAAAA,MAAM0E,gBAAe,SAACyf,GACjD,IAAIA,GAAQ,UAAA,EAARA,EAAU9a,UAAW,GAAKtH,EAAMs+B,SAASh3B,SAAW,EAAG,CACzD,MACF,MACK+B,EAAQ46B,YAAY,CACvB3F,SAAUlc,GAAY,GACtB8hB,aAAcj6B,EAAWzM,WAE3BwnC,GAAAA,UAAAA,EAAAA,EAA2B5iB,EAC7B,IAEA,IAAMge,GAAsBniC,EAAM0E,MAAAA,gBAAe,SAACkI,EAAmCs2B,GACnF,IAAIC,EAAsB,GAC1Bv2B,EAAU7H,SAAQ,SAACrC,GACjB,IAAKwgC,GAAWvB,GAAgB,MAAhBA,EAAkBziC,SAASwD,GAAQ,OACnD,IAAM6e,EAAa6e,GAAgB19B,EAAOX,EAAMs+B,SAAUr0B,GAC1Dm3B,EAAsBA,EAAoBz0B,OAAO6S,EAAWvY,KAAI,SAAClE,GAAI,OAAKA,EAAKpC,KAAK,IACtF,IACA,OAAOygC,CACT,IAEAnjC,EAAM0iB,MAAAA,iBAAgB,WACpB,GAAI6kB,EAAiB,CACnB,IAAMjH,EAAaryB,EAAAA,iBAAiBlM,EAAMs+B,UAAY,GAAIr0B,GAC1D,IAAMuV,EAAa+e,EAAW54B,QAAO,SAAC5C,GAAI,IAAA+iC,EAAA,OAAK/iC,EAAAA,EAAKgB,QAAL,UAAA,EAAA+hC,EAAY3oC,SAASqoC,GAAmB,OACvF3F,GAAoB,SAACyC,GACnB,IAAMC,EAAYnC,GAAoB5gB,EAAWvY,KAAI,SAAClE,GAAI,OAAKA,EAAKpC,KAAK,KAAGgM,OAAO21B,GAAQ,IAC3F,OAAOjC,MAAM9a,KAAK,IAAI+a,IAAIiC,GAC5B,GACF,KAAO,CACL1C,EAAoB,GACtB,CACF,GAAG,CAAC2F,IAEJr5B,EAAmBA,oBAACrC,GAAK,WACvB,MAAO,CACLi8B,oBAAqB,SAAMA,SACpB18B,EAAQ86B,eACd,EACD6B,gBAAiB,SAAMA,IACrB,OAAOhmC,EAAMs+B,QACf,EAEJ,IAEA,IAAM2H,GAAWhoC,EAAAA,MAAM0E,gBAAe,SAACw9B,GACrCN,EAAoBM,EACtB,IAEA,IAAM/e,GAAenjB,EAAAA,MAAM0E,gBAAe,SAACujC,EAAaC,EAAaC,GACnER,GAAqBvlC,QAAU6lC,EAC/B,IAAMp5B,EAAa/O,EAAAA,kBAAkBooC,GAAc,GAAKnpC,UAAQmpC,GAAcA,EAAa,CAACA,GAC5F,GAAIpoC,EAAAA,kBAAkBmoC,GAAc,CAClCt5B,GAAQ,UAAA,EAARA,EAAWs5B,EAAaC,EAAYC,GACpC,MACF,CACA,GAAItoB,EAAc,CAChB,IAAMuoB,EAAUnnB,EAA4Bnb,MAC5C,IAAMuiC,EAAUpnB,EAA4Bve,MAC5C,IAAM2gB,EAAmBxU,EAAW7F,KAAI,SAAClE,GAAS,IAAAgN,EAChD,OAAAA,EAAA,CAAA,EAAAA,EACGs2B,GAAUtjC,EAAKkH,EAAWlG,OAC1BuiC,EAAAA,GAAUvjC,EAAKkH,EAAWtJ,OAAMoP,CAErC,IACA,GAAI/S,EAAAA,QAAQkpC,GAAc,CACxBt5B,GAAQ,UAAA,EAARA,EAAW0U,EAAkBxU,EAAYs5B,EAC3C,KAAO,CACLx5B,GAAAA,UAAAA,EAAAA,EAAW0U,EAAiB,GAAIxU,EAAW,GAAIs5B,EACjD,CACF,KAAO,CACL,GAAIppC,EAAAA,QAAQkpC,GAAc,CACxBt5B,GAAQ,UAAA,EAARA,EAAWs5B,EAAap5B,EAAYs5B,EACtC,KAAO,CACLx5B,GAAQ,UAAA,EAARA,EAAWs5B,EAAap5B,EAAW,GAAIs5B,EACzC,CACF,CACF,IAEA,IAAMG,GAAqBtoC,EAAM0E,MAAAA,gBAAe,SAAC6jC,EAAaC,GAC5D,IAAIC,EAAmBrpC,EAAMspC,cAAgBH,EAAYhU,QAAUgU,EACnEE,EAAmB3oC,EAAAA,kBAAkByoC,GAAe,GAAKA,EACzDE,EAAmB1pC,UAAQ0pC,GAAoBA,EAAmB,CAACA,GAEnE,IAAME,EAAmB,GACzB,IAAMC,EAAwB,GAC9B,IAAMC,EAAkB,GACxB,IAAMC,EAAuB,GAC7BL,EAAiB1jC,SAAQ,SAACD,GACxB,IAAMuD,EAAStG,EAAM+jC,eAAevpB,MAAK,SAACC,GAAI,OAAKA,EAAKxQ,EAAWtJ,SAAWoC,KAC9E,IAAKuD,EAAQ,OACb,IAAM9I,EAAW8I,GAAM,UAAA,EAANA,EAAS2D,EAAWzM,UACrC,IAAKR,EAAQQ,QAAAA,IAAaA,EAAS8J,SAAW,EAAG,CAC/Cs/B,EAAiB5hC,KAAKsB,GACtBugC,EAAsB7hC,KAAKsB,EAAO2D,EAAWtJ,OAC/C,CACAmmC,EAAgB9hC,KAAKsB,GACrBygC,EAAqB/hC,KAAKsB,EAAO2D,EAAWtJ,OAC9C,IAEA,GAAIokC,EAAW,CACblF,GAAoB,SAACyC,GACnB,IAAMC,EAAYnC,GAAoByG,GAAuBl6B,OAAO21B,GAAQ,IAC5E,OAAOjC,MAAM9a,KAAK,IAAI+a,IAAIiC,GAC5B,IACA,IAAKuC,IAAgCznC,EAAMspC,cAAe,CACxDvlB,GAAaylB,EAAuBD,EAAkBE,EACxD,KAAO,CACL1lB,GAAa2lB,EAAsBD,EAAiBA,EACtD,CACF,KAAO,CACL,GAAIJ,EAAiB,GAAI,CACvB,IAAMM,EAAcF,EAAgBtsB,MAAK,SAACzX,GAAI,OAAKA,EAAKkH,EAAWtJ,SAAW+lC,EAAiB,MAC/FtlB,GAAaslB,EAAiB,GAAIM,EAAa,CAACA,GAClD,KAAO,CACL,IAAMC,EAAYR,EAAYS,KAAKj9B,EAAWtJ,OAC9C,IAAM2F,EAAStG,EAAM+jC,eAAevpB,MAAK,SAACC,GAAI,OAAKA,EAAKxQ,EAAWtJ,SAAWsmC,KAC9E7lB,GAAaha,UAAWd,EAAQ,CAACA,GACnC,CACF,CACF,IAEA,IAAM6gC,GAA4BlpC,EAAAA,MAAM0E,gBAAe,SAACykC,GACtD,OAAOnC,GAAmB,UAAA,EAAnBA,EAAsBmC,EAC/B,IAEA,IAAMC,GAAWnhC,EAAAA,SAAQ,WACvB,IAAMohC,EAAO,SAAPA,EAAQrzB,GAAY,OACxBA,eAAAA,EAAMhN,KAAI,SAAClE,GAAS,IAAAyJ,EAClB,IAAM+6B,GAAcJ,IAAyB,UAAA,EAAzBA,GAA4BpkC,KAASA,EACzD,IAAMgC,EAAWqgC,EAAiBh+B,UAAYmgC,EAAYxiC,SAC1D,IAAMyiC,EAAWD,EAAYt9B,EAAWlG,OACxC,IAAI0jC,EACJ,GAAIjC,EAAiB,CACnB,IAAMviC,EAAQukC,EAASvmB,QAAQukB,GAC/B,IAAMkC,EAAYF,EAASG,UAAU,EAAG1kC,GACxC,IAAM2kC,EAAWJ,EAASj0B,MAAMtQ,EAAQuiC,EAAgBl+B,QACxDmgC,EACExkC,GAAS,EACP2D,EAAAA,KAAA,OAAA,CAAMH,UAAWC,EAAAA,WAAW,CAAE,uBAAwB6gC,EAAYxiC,WAAYvH,SAAA,CAC3EkqC,EACDpqC,EAAAqB,IAAA,OAAA,CAAM8H,UAAU,yBAAwBjJ,SAAEgoC,IACzCoC,KAED,IACR,CACA,IAAKH,EAAU,CACbA,EACEnqC,EAAAqB,IAAA,OAAA,CAAM8H,UAAWC,EAAAA,WAAW,CAAE,uBAAwB6gC,EAAYxiC,WAAYvH,SAAEgqC,GAEpF,CACA,IAAMhqC,EAAW+pC,EAAYt9B,EAAWzM,UACxC,OAAAqB,GAAA,CAAA,EACK0oC,GAAW/6B,EAAA,CACdzH,SAAAA,GAAQyH,EACPvC,EAAWlG,OAAQ0jC,EACpBI,EAAAA,cAAeL,IACfM,UAAWP,EAAYxiC,SACtBkF,EAAAA,EAAWzM,UAAWR,EAAAA,QAAQQ,IAAaA,EAAS8J,OAAS,EAAIggC,EAAK9pC,GAAY4J,UAASoF,GAEhG,GAAE,EACJ,IAAMmyB,EAAO5yB,EAAUA,WAAC/L,EAAMs+B,UAAY,IAC1C,OAAOgJ,EAAK3I,EACb,GAAE,CACD3+B,EAAMs+B,SACN6I,GACA/B,EACAn7B,EAAWlG,MACXkG,EAAWzM,SACXgoC,IAGF,IAAMl5B,GAAWrO,EAAAA,MAAM0E,gBAAe,SAACykC,GACrC,OAAO,IAAIhoC,SAAc,SAAOwM,EAASm8B,GAAhB,OAAA,IAAA3oC,SAAA,SAAAC,EAAAC,GAAA,IAMf0oC,EAAAC,EAAAC,EAGAj9B,EARR,GAAIm8B,EAASn9B,EAAWzM,UAAW,CACjCoO,IACA,OAAAvM,GACF,CAveN,IAAI8oC,EAAA,WAAJ,IAAI,OAAA9oC,GAA8B,CAAxB,MAAUI,GAAC,OAAOH,EAAMG,EAAA,GAAlC,IAAI2oC,EAAA,SA4fW7pC,GA5ff,SA6faoN,EAAOA,QAACpN,MAAMA,EAAMoN,SAAW,aAEpCo8B,IA/fR,OAAOI,GAA2B,CAAxB,MAAU1oC,GAAC,OAAOH,EAAMG,EAAA,GAwe5B,IACmB,OAAMpC,QAAAA,SAAAA,EAAAA,EAAMgrC,wBAAN,UAAA,EAAAL,EAA6B18B,WAA7B,UAAA,EAAA08B,EAA6B18B,WAAS28B,EAC3D5qC,EAAMgrC,wBAAN,UAAA,EAAAJ,EAA6BK,WAAS,UAAA,EAAtCL,EAA6BK,UAAYlB,KAD1B7nC,MAEhB,SAAAgpC,GA3eT,IAyecv9B,EAAWu9B,EAGXt9B,EACJV,EAAiBW,uBACbX,EAAiBW,uBAAuBF,GACxCA,OAED3B,EACF+6B,uBAAuB,CACtBzjC,MAAOymC,EAASn9B,EAAWtJ,OAC3B4jC,WAAYt5B,EACZi5B,aAAcj6B,EAAWzM,SACzB8mC,UAAWr6B,EAAWtJ,QAEvBpB,MAAK,SAACshC,GACLH,GAAqBG,EAASvC,UAC9B1yB,GACF,IA3fV,OAAOu8B,GAA2B,CAAxB,MAAU1oC,GAAC,OAAO2oC,EAAM3oC,EAAA,CAAC,GAAA2oC,EAggB7B,CAJE,MAAO7pC,GAAO6pC,EAAP7pC,EAIT,CAAC,MAEL,IAEA,IAAMiqC,GAAavqC,EAAAA,MAAM0E,gBAAe,SAAC8lC,GACvC,IAAMjrC,EAAWirC,GAAQ,UAAA,EAARA,EAAWx+B,EAAWzM,UAEvC,IAAMkrC,EAAerrC,EAAMqrC,aAC3B,IAAMC,EAAkBD,GAAgBD,EAAS38B,OAAS,MAC1D,IAAM88B,EAAeprC,GAAYA,EAAS8J,OAAS,GAAMqhC,EACzD,OAAQC,CACV,IAEA,IAAMC,GAAc5qC,EAAAA,MAAM0E,gBAAe,SAAC8lC,GAAa,IAAAK,EACrD,IAAMC,EAAcN,EAASZ,eAAiBY,EAASx+B,EAAWlG,OAClE,IAAMilC,EAAc3rC,EAAM4rC,4BAAN5rC,EAAM4rC,eAAcpqC,GAAA,CAAA,EACnC4pC,GACFx+B,EAAAA,CAAAA,EAAAA,EAAAA,EAAWlG,OAAQglC,EACpBD,KAEF,IAAKE,GAAeA,EAAY1hC,SAAW,EAAG,CAC5C,OAAOhK,EAAAA,IAAA,OAAA,CAAMmJ,UAAU,kBAAiBjJ,SAAEirC,GAAAA,UAAAA,EAAAA,EAAWx+B,EAAWlG,QAClE,CAEA,OACE6C,EAAAA,KAACrJ,EAAAA,SAAQ,CAAAC,SACP,CAAAF,EAAAqB,IAAA,OAAA,CAAM8H,UAAU,kBAAiBjJ,SAAEirC,GAAAA,UAAAA,EAAAA,EAAWx+B,EAAWlG,SACzDzG,MAAC6E,GAAmB,CAACC,SAAU4mC,EAAYxrC,SACzCF,EAAAA,IAAAkK,EAAA,WAAA,QAIR,IAEA,IAAM0hC,GAAmBjrC,EAAAA,MAAMkjB,qBAAoB,SAACxgB,GAClD8kC,EAAmB9kC,GACnBtD,EAAM8rC,qBAAN9rC,UAAAA,EAAAA,EAAM8rC,oBAAsBxoC,EAC7B,GAAE,KAEH,IAAMyoC,GAAiBnrC,EAAAA,MAAM0E,gBAAe,SAACxE,GAC3C+qC,GAAiB/qC,EAAEmI,OAAO3F,MAC5B,IAEA,IAAM0oC,GAAaprC,EAAAA,MAAM0E,gBAAe,SAAC0kC,GACvC,IAAKhqC,EAAM6b,KAAM,OAAO,KACxB,GAAItT,EAAAA,eAAevI,EAAM6b,MAAO,OAAO7b,EAAM6b,KAC7C,IAAMowB,EAAad,GAAWnB,EAASpzB,MACvC,OAAO5W,EAAM6b,KAAIra,GAAA,CAAA,EACZwoC,EAAQ,CACXkC,UAAWD,EACXx9B,OAAQw9B,IAEZ,IAEA,IAAME,GAAiBtjC,EAAAA,SAAQ,WAC7B,MAAO,CAAE1B,MAAOyF,EAAWlG,MAAOD,IAAKmG,EAAWtJ,MAAOnD,SAAUyM,EAAWzM,SAChF,GAAG,CAACyM,IAEJ,GAAIjK,EAAMs+B,SAASh3B,OAAS,GAAKtH,EAAMmJ,gBAAkB,gBAAiB,CACxE,IAAMsgC,GAAW5qC,GAAA,CACf6qC,SAAU,CAAEhG,aAAc,OAC1BmF,YAAAA,GACAc,UAAW,KACX/F,aAActmC,EAAAA,IAAAumC,GAAA,WAAA,KACXliC,EAAU,CACbsI,WAAYu/B,GACZrJ,aAAcP,EACdyH,SAAAA,GACApB,SAAAA,GACA35B,SAAUjP,EAAMqrC,aAAep8B,GAAWlF,UAC1C5D,MAAK3E,GAAA,CAAI6S,MAAO,QAAW/P,EAAW6B,OACtC0V,KAAMmwB,KAGR,IAAMO,GAAe,CACnBC,QAAStD,GACTxB,UAAAA,EAEA+E,mBAAoBvE,EAAgBllC,SAGtC,IAAM0pC,GAAgB,CACpBC,SAAUzD,GACV/4B,SAAU,MAEVy8B,oBAAqB1E,EAAgBllC,SAEvC,IAAM6pC,GAAanF,EAAY6E,GAAeG,GAC9C,OACEnjC,EAAAA,KAAA,MAAA,CAAKH,UAAU,iBAAgBjJ,SAAA,CAC7BF,MAACuL,OAAI,CAACC,SAAUnL,EAAS8I,UAAU,2BAClCwG,EACC3P,EAAAqB,IAACid,GAAkB,CACjBnV,UAAU,wBACVjD,MAAO,CAAEunB,aAAc,IACvBof,YAAahF,EACbv4B,SAAUw8B,GACVzoC,MAAOukC,EACPh4B,WAAU,OAEV,KACJ5P,MAAC8sC,EAAAA,KAA0BF,GAAAA,CAAAA,EAAAA,GAAgBT,GAAW,CAAEhjC,UAAU,wBAAvDi/B,KAGjB,CAEA,OACEpoC,EAAAA,IAAC8K,GAAmB,CAClBI,OAAQxI,EAAMmJ,cACdxL,QAASA,EACT0K,cAAe8B,EACfpB,YACEzL,MAACsB,SAAM,CAAC2E,KAAK,UAAUvF,QAASmN,GAAuB3N,SAAA,YAM/D,IAEAmnC,GAAYx8B,aAAe,CACzBi9B,eAAgB"}