@flatbiz/antd 3.0.3 → 3.0.4
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.css +26 -5
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/index.d.ts +76 -2
- package/package.json +3 -3
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/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.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/dialog-drawer.tsx","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@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/index.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/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/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@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/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/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 './1_root.less';\nimport './2_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 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 (permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\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, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [visible, setVisible] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setVisible(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 setVisible(false);\n setLoading(false);\n });\n return;\n }\n setVisible(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void 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 <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\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 setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\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 overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPromise, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\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组件,可设置type=link,会有设置的hover效果\n * 2. 任何permission、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}\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 viewList = useMemo(() => {\n return props.operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n const has = item && !item.hidden && !item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n }, [props.operateList]);\n\n const foldList = useMemo(() => {\n const filterList = props.operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n const has = item && !item.hidden && item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [props.operateList]);\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const {\n text,\n color,\n onClick,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return null;\n if (permission && !hasPermission(permission)) return null;\n const newStyle = color ? { color, ...style } : style;\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 onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\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\nButtonOperate.defaultProps = {\n size: 0,\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 { 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 { 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 = 'request-init' | 'request-progress' | 'request-success' | 'request-error';\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 },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, ['request-success', 'request-progress', 'request-error'])\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 { 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';\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 /**\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 * 级联选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持多选\n * 2. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 3. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = 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 } 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 setValueList(filterList.map((item) => item.value) as string[]);\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\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\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 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 return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\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 />\n );\n});\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.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) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\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 moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | 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\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\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 [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\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('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, 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 return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\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';\n\nexport type FormItemNamePath = string | number | Array<string | number>;\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 */\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\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]);\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 } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'\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?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\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 width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(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 setLoading(true);\n return response.then(onClose).finally(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={false}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n footer={operatePosition === 'footer' ? operateGroup : null}\n extra={operatePosition === 'header' ? operateGroup : null}\n {...otherProps}\n visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\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. operatePosition='footer' 设置footer后 onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * 1. operatePosition='header' 设置extra后 onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\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?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(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 setLoading(true);\n return response.then(onClose).finally(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n destroyOnClose\n {...otherProps}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\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 ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: 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.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\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: DrawerOperationOldProps) => {\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 { useEffect } from 'react';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-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\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整',\n );\n }, []);\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\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] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: 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.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: 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 {...(editableConfig as EditableDatePickerWrapperConfig).editableComptProps} />\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 <DateRangePickerWrapper {...editableComptProps} value={props.value} onChange={onChange} />;\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 cpLockRef = useRef(false);\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 (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\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 cpLockRef = useRef(false);\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 (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\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 cpLockRef = useRef(false);\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 (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\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 {...(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 selectorList: TPlainObject[];\n // originalSelectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[]; requestStatus?: ModelState['requestStatus'] };\n resetSelectBoxList: void;\n changeRequestStatus: 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 if (params.requestStatus) {\n state.requestStatus = params.requestStatus;\n }\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\n state.requestStatus = 'request-init';\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 { 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的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport 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 { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Select, SelectProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList, selectorWrapperValueDeepEqual } 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 /**\n * 与 effectDependencyList 配合使用\n */\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n | 'filterOption'\n | 'onSearch'\n | 'loading'\n | 'notFoundContent'\n | 'options'\n | 'fieldNames'\n | 'onChange'\n | 'value'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * 3. 设置后 serviceConfig 失效\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\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查询接口字段名称,默认值:searchValue\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\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => TPlainObject[];\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 1.1: 当有effectDependencyList依赖项时,依赖项的发生变化后,每次都会去调用接口获取数据\n * 1.2: 当无effectDependencyList依赖项时,第一次调用接口成功后会有标记,下次访问存在标记,就不在调用接口,使用缓存数据;如果想强制刷新数据,可通过随便配置依赖项完成\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = forwardRef<SelectorWrapperRefApi, SelectorWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n showAllOption,\n effectDependencyList,\n onSelectorListChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n ...otherProps\n } = props;\n const isSearch = operateType === 'search';\n // search模式下,selectorList配置失效\n const hasSelectorList = props.hasOwnProperty('selectorList') && !isSearch;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const fieldNamesMerge = { label: 'label', value: 'value', ...fieldNames };\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\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 isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n // 保存 onChange 选择数据\n const innerOperateValueRef = useRef<any>();\n const defaultValueRef = useRef<any>();\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) return;\n isFirstUseValueRef.current = false;\n if (!selectorWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} SelectorWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = value;\n defaultValueRef.current = isMultiple ? valueList : valueList[0];\n setRefreshKey(Date.now());\n if (isSearch) {\n if (isUndefinedOrNull(value)) {\n void actions.resetSelectBoxList();\n // todo\n onSelectorListChange?.([]);\n } else {\n void startDataSourceRequest(undefined, props.value as string | number);\n }\n }\n }\n }, [value]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\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(\n async (inputValue?: string, searchId?: string | number) => {\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(`SelectorWrapper组件:设置必输项【${requiredParamsKeys.join('、')}】不能为空`);\n if (state.selectorList.length > 0) {\n void actions.setSelectBoxList({ selectorList: [] });\n }\n return;\n }\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\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 newServiceConfig.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({ selectorList: respAdapterData, requestStatus: 'request-success' });\n } catch (error) {\n console.error(error);\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n },\n );\n hooks.useCustomCompareEffect(\n () => {\n if (isSearch) return;\n if (hasSelectorList) {\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n void actions.setSelectBoxList({ selectorList: [] });\n void startDataSourceRequest();\n return;\n }\n const allState = selectorWrapperModel(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 useEffectCustom(() => {\n if (state.requestStatus === 'request-success') {\n // 初始化不调用\n onSelectorListChange?.(state.selectorList);\n }\n }, [state.selectorList]);\n\n useEffectCustom(() => {\n if (hasSelectorList) {\n void actions.setSelectBoxList({ selectorList: selectorList || [], requestStatus: 'request-success' });\n }\n }, [selectorList]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetSelectBoxList();\n },\n getSelectorList: () => {\n return state.selectorList;\n },\n };\n });\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = (\n !option.children ? [] : isArray(option.children) ? option.children : [option.children]\n ) as any[];\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.resetSelectBoxList();\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n if (labelInValue) {\n const labelInValueList = selectedList.map((item) => {\n return {\n [lvLabel]: item[fieldNamesMerge.label],\n [lvValue]: item[fieldNamesMerge.value],\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[fieldNamesMerge.value]);\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: any, otherParams) => {\n innerOperateValueRef.current = value;\n const selectedList = isArray(otherParams) ? otherParams : otherParams ? [otherParams] : [];\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig?.value) {\n targetList.push({\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n });\n } else {\n const filterTarget = state.selectorList.find((temp) => temp[fieldNamesMerge.value] === item.value);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n return (\n allOptionConfig\n ? [{ [fieldNamesMerge.label]: allOptionConfig.label, [fieldNamesMerge.value]: allOptionConfig.value }]\n : []\n ).concat(state.selectorList);\n }, [allOptionConfig, fieldNamesMerge.label, fieldNamesMerge.value, state.selectorList]);\n\n return (\n <Select\n key={refreshKey}\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n defaultValue={defaultValueRef.current}\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[fieldNamesMerge.value];\n const label = item[fieldNamesMerge.label];\n return (\n <Select.Option value={value} label={label} key={`${value}-${index}`} disabled={item['disabled']}>\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 });\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 { 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};\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 <FormItemAdapter\n name={props.name}\n fieldConfig={props.fieldConfig as FieldSingleConfig}\n tableRowIndex={props.tableRowIndex}\n completeName={props.completeName}\n />\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 * 渲染中间件,如果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 />\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 { useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type EditorWrapperProps = {\n onChange: (data?: string) => void;\n value?: string;\n editorProps?: TPlainObject;\n};\n\n/**\n * 富文本编辑器,配置参考tinymce\n * @param props\n * @returns\n */\nexport const EditorWrapper = (props) => {\n const [key, setKey] = useState(0);\n const [inputValue, setInputValue] = useState();\n\n const onChange = hooks.useCallbackRef((e) => {\n const content = e.target.$()?.html();\n const respValue = content ? content : undefined;\n setInputValue(respValue);\n props.onChange?.(respValue);\n });\n\n useEffectCustom(() => {\n if (props.value !== inputValue) {\n setKey(Date.now());\n }\n }, [props.value]);\n\n return (\n <div key={key} className=\"v-editor-wrapper\">\n <Editor\n initialValue={props.value}\n init={{\n menubar: true,\n language: 'zh_CN',\n height: '500px',\n paste_retain_style_properties: 'all',\n table_default_styles: {\n width: '100%',\n },\n plugins:\n ' advlist lists image charmap preview' +\n ' visualblocks code fullscreen' +\n ' media table paste help wordcount',\n toolbar:\n ' undo redo | formatselect | ' +\n ' bold italic backcolor bullist numlist | outdent indent alignleft aligncenter alignright alignjustify | textmark untextmark code preview |' +\n ' removeformat | help',\n fontsize_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n }}\n cdnTinyMce=\"https://file.40017.cn/tcsk/tinymce/tinymce.min.js\"\n {...props.editorProps}\n onChange={onChange}\n />\n </div>\n );\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 { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\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['uid'] || item[fieldNames.fileKey];\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 onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, 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;\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 = (isArray(props.children) ? props.children : [props.children]) as JSX.Element[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = !isUndefinedOrNull(props.fullIndex)\n ? isArray(props.fullIndex)\n ? props.fullIndex\n : [props.fullIndex as number]\n : [];\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 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 { 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};\nexport const IconWrapper = (props: IconWrapperProps) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\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 visible: 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.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\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}: ModalOperationProps) => {\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 { useEffect } from 'react';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\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-wraper-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\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用ModalWrapper替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整',\n );\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\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] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: 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.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: 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","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\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_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\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_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\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 { classNames, extend } from '@dimjs/utils';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\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};\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 style = extend({}, props.style, { padding: props.padding, width: props.width });\n\n return (\n <div className={className} style={style}>\n {props.title ? <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 { 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) => {\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 = otherProps.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 /**\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 const isMultiple = otherProps.treeCheckable;\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 /**\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 dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\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, 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?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => 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: any[]) => {\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: any[]): any[] =>\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","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","viewList","useMemo","operateList","filter","isValidElement","has","isFold","foldList","filterList","map","className","_classNames","classNames","_jsxs","Space","split","Divider","wrap","_isUndefined","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","useSafeState","initialState","state","setState","isMounted","useIsMounted","value","current","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","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","error","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","setFields","reftest","useRef","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","content","configProviderProps","okButtonExtraProps","cancelButtonExtraProps","operatePosition","_props$operatePositio","_props$width","useForm","_Form$useForm","onClose","onCancelHandle","e","response","onOkHandle","operateGroup","jsxs","ConfigProvider","locale","zh_CN","componentSize","space","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","footer","extra","getContainer","dialogDrawer","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","call","onAfterClose","afterClose","Modal","dialogModal","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","isUndefinedOrNull","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","resetSelectBoxList","selectorWrapperModels","selectorWrapperModel","getVauleList","labelInValueFieldNames","tempList","_isObject","array2map","list","selectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","SelectorWrapper","showAllOption","effectDependencyList","onSelectorListChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","searchIdFieldName","labelInValue","isSearch","hasSelectorList","hasOwnProperty","newEffectDependencyList","_selectorWrapperModel","labelInValueFieldNamesMerge","refreshKey","setRefreshKey","allOptionConfig","isTrue","isMultiple","mode","innerOperateValueRef","defaultValueRef","valueIsEmpty","inputValue","searchId","requiredParamsKeys","isEmpty","keyword","warn","useCustomCompareEffect","Boolean","allState","getState","onClearSelectorList","getSelectorList","filterOption","input","option","mergeString","_isString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","lvLabel","lvValue","labelInValueList","onInnerChange","otherParams","targetList","_targetList$push","filterTarget","selectorAllList","_ref2","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","_isBoolean","JSON","stringify","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","EditableTable","_props$tableProps2","columns","columnItem","renderMiddleware","otherColumnItem","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","_value","record","tableRowName","dataIndex","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","EditorWrapper","setKey","setInputValue","_e$target$$","$","html","respValue","_Editor","Editor","initialValue","init","menubar","language","height","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","cdnTinyMce","editorProps","FileImport","onImportFinish","buttonName","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","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","Object","keys","order","calculateOperateGrid","gridList","operateColIndex","groupList","getGroupItem","condition","groupItemList","currentIndex","total","currentValue","hasOperateList","hasOperateTotal","hasOperateIndex","reduce","a","b","gridGroupList","defaultGrid","FormRow","screenType","childrenList","toArray","_currentGridList","_temp$props","_extends2","itemProps","newProps","Gap","inline","IconWrapper","Tooltip","hoverTips","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","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_auto","label_align_left","label_align_right","formItemClassName","preDefinedClassName","formItem","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","padding","desc","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","catch","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","treeSelectorWrapperValueDeepEqual","TreeSelectorWrapper","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","onChangeHandle","hasTreeSelectorList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","Array","Set","serviceResponseHandle","_respData2","onChangeSelectorList","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","arrayFind","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","prev","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","isNumber","getValueOrDefault","dropdownStyle","maxHeight","overflow","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","treeSearchValue","setTreeSearchValue","_params","$Try_2_Post","$Try_2_Catch","$await_4","useUpdateEffect","_item$label","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","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/dropdown-menu-wrapper/index.tsx","@flatbiz/antd/src/button-operate/index.tsx","@flatbiz/antd/src/hooks/use-effect-custom.ts","@flatbiz/antd/src/hooks/use-effect-custom-async.ts","@flatbiz/antd/src/hooks/use-safe-state.ts","@flatbiz/antd/src/request-status/index.tsx","@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/index.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/dialog-drawer.tsx","@flatbiz/antd/src/dialog/dialog-modal.tsx","@flatbiz/antd/src/drawer-wraper/drawer.model.ts","@flatbiz/antd/src/drawer-wraper/drawer-operation.tsx","@flatbiz/antd/src/drawer-wraper/drawer-wraper.tsx","@flatbiz/antd/src/drawer-wraper/index.ts","@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/template.ts","@flatbiz/antd/src/editor-wrapper/types.ts","@flatbiz/antd/src/editor-wrapper/editor-wrapper.tsx","@flatbiz/antd/src/file-import/index.tsx","@flatbiz/antd/src/file-upload/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/gap/index.tsx","@flatbiz/antd/src/icon-wrapper/index.tsx","@flatbiz/antd/src/label-value-layout/index.tsx","@flatbiz/antd/src/modal-wraper/modal.model.ts","@flatbiz/antd/src/modal-wraper/modal-operation.tsx","@flatbiz/antd/src/modal-wraper/modal-wraper.tsx","@flatbiz/antd/src/modal-wraper/index.ts","@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/react/src/utils/dom.ts","@flatbiz/antd/react/src/utils/is-browser.ts","@flatbiz/antd/react/src/utils/dom-target.ts","@flatbiz/antd/react/src/utils/get-container.ts","@flatbiz/antd/react/src/utils/get-scroll-parent.ts","@flatbiz/antd/react/src/utils/native-props.ts","@flatbiz/antd/react/src/utils/pxrem.ts","@flatbiz/antd/react/src/utils/scroll-position.ts","@flatbiz/antd/react/src/utils/style-checker.ts","@flatbiz/antd/react/src/utils/z-index.ts","@flatbiz/antd/react/src/dynamic-node/index.tsx","@flatbiz/antd/react/src/progress/index.tsx","@flatbiz/antd/react/src/space/index.tsx","@flatbiz/antd/react/src/button/button.tsx","@flatbiz/antd/react/src/grid/grid.tsx","@flatbiz/antd/react/src/grid/grid-item.tsx","@flatbiz/antd/node_modules/@react-spring/rafz/dist/react-spring-rafz.esm.js","@flatbiz/antd/node_modules/@react-spring/shared/dist/react-spring-shared.esm.js","@flatbiz/antd/node_modules/@react-spring/animated/dist/react-spring-animated.esm.js","@flatbiz/antd/node_modules/@react-spring/core/dist/react-spring-core.esm.js","@flatbiz/antd/node_modules/@react-spring/web/dist/react-spring-web.esm.js","@flatbiz/antd/react/src/native-lock-scroll/touchable-service.ts","@flatbiz/antd/react/src/native-lock-scroll/index.tsx","@flatbiz/antd/react/src/mask/index.tsx","@flatbiz/antd/react/src/modal/utils/use-should-render.tsx","@flatbiz/antd/react/src/modal/index.tsx","@flatbiz/antd/react/src/modal-drawer/utils/use-should-render.tsx","@flatbiz/antd/react/src/modal-drawer/index.tsx","@flatbiz/antd/react/src/hooks/use-effect-custom.ts","@flatbiz/antd/react/src/spinner/animation.tsx","@flatbiz/antd/react/src/spinner/spinner.tsx","@flatbiz/antd/react/src/hooks/use-lock-fn.ts","@flatbiz/antd/react/src/hooks/use-mutation-effect.tsx","@flatbiz/antd/react/src/hooks/use-resize-effect.tsx","@flatbiz/antd/node_modules/intersection-observer/intersection-observer.js","@flatbiz/antd/react/src/in-visible-view/index.tsx","@flatbiz/antd/react/src/native-scroll/index.tsx","@flatbiz/antd/react/src/iphone-bottom-adaptive/index.tsx","@flatbiz/antd/react/src/swiper/item.tsx","@flatbiz/antd/react/src/swiper/plugin/auto-switch.ts","@flatbiz/antd/node_modules/keen-slider/react.js","@flatbiz/antd/react/src/swiper/swiper.tsx","@flatbiz/antd/react/src/icon/arrow-icon/index.tsx","@flatbiz/antd/react/src/list/list-item.tsx","@flatbiz/antd/node_modules/@use-gesture/core/dist/maths-b2a210f4.esm.js","@flatbiz/antd/node_modules/@use-gesture/core/dist/actions-aeda4790.esm.js","@flatbiz/antd/node_modules/@use-gesture/core/dist/use-gesture-core.esm.js","@flatbiz/antd/node_modules/@use-gesture/react/dist/use-gesture-react.esm.js","@flatbiz/antd/react/src/picker/utils.ts","@flatbiz/antd/react/src/picker/column.tsx","@flatbiz/antd/react/src/picker/index.tsx","@flatbiz/antd/react/src/date-picker/utils.ts","@flatbiz/antd/react/src/date-picker/date-view.tsx","@flatbiz/antd/react/src/tabs/tab-pane.tsx","@flatbiz/antd/react/src/hooks/use-props-list-active-value-change.ts","@flatbiz/antd/react/src/if/index.tsx","@flatbiz/antd/react/src/tabs/helper/bound.ts","@flatbiz/antd/react/src/tabs/tab-content.tsx","@flatbiz/antd/react/src/tabs/tabs.tsx","@flatbiz/antd/react/src/date-picker/date-range-picker.tsx","@flatbiz/antd/react/src/utils/inner-use/attach-properties-to-component.ts","@flatbiz/antd/react/src/form/context.tsx","@flatbiz/antd/react/src/form/helps/utils.ts","@flatbiz/antd/react/src/form/form-input/input/index.tsx","@flatbiz/antd/react/src/form/form-input/modal/index.tsx","@flatbiz/antd/react/src/form/form-input/text/index.tsx","@flatbiz/antd/react/src/form/form-input/textarea/index.tsx","@flatbiz/antd/react/src/keyboard/utils.ts","@flatbiz/antd/react/src/keyboard/view.tsx","@flatbiz/antd/react/src/keyboard/modal.tsx","@flatbiz/antd/react/src/form/form-input/virtual-input/index.tsx","@flatbiz/antd/react/src/form/compts/form-item-clear.tsx","@flatbiz/antd/react/src/form/compts/form-item-label.tsx","@flatbiz/antd/react/src/form/compts/validate-error.tsx","@flatbiz/antd/react/src/form/form-item.tsx","@flatbiz/antd/react/src/form/helps/form-store.ts","@flatbiz/antd/react/src/form/helps/use-form.tsx","@flatbiz/antd/react/src/form/helps/use-form-instance.ts","@flatbiz/antd/react/src/form/form.tsx","@flatbiz/antd/react/src/image/index.tsx","@flatbiz/antd/react/src/modal-full/index.tsx","@flatbiz/antd/react/src/zoom/index.tsx","@flatbiz/antd/react/src/image-viewer/image-viewer.tsx","@flatbiz/antd/react/src/image-viewer/methods.tsx","@flatbiz/antd/react/src/image-viewer/index.tsx","@flatbiz/antd/react/src/native-infinite-scroll/index.tsx","@flatbiz/antd/react/src/native-pull-to-refresh/utils/bound.ts","@flatbiz/antd/react/src/native-pull-to-refresh/utils/rubberband.ts","@flatbiz/antd/react/src/native-pull-to-refresh/index.tsx","@flatbiz/antd/react/src/sms-count-down/index.tsx","@flatbiz/antd/src/simple-layout/index.tsx","@flatbiz/antd/src/sms-count-down/index.tsx","@flatbiz/antd/src/table-column/render.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 './1_root.less';\nimport './2_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 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 (permissionList.includes(props.name)) {\n return <Fragment>{props.children}</Fragment>;\n }\n return null;\n};\n","import { isPromise } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Dropdown, DropdownProps, Menu, Popconfirm, PopconfirmProps } from 'antd';\nimport { ItemType } from 'antd/lib/menu/hooks/useItems';\nimport { ReactElement, useState } from 'react';\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, 'overlay'> {\n menuList: Array<DropdownMenuItem | null>;\n}\n\nexport const DropdownMenuWrapper = (props: DropdownMenuWrapperProps) => {\n const { menuList, ...dropdownOtherProps } = props;\n const menuItems: ItemType[] = [];\n const [visible, setVisible] = useState(false);\n const [loading, setLoading] = useState(false);\n\n const onConfirmtTriggerClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n setVisible(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 setVisible(false);\n setLoading(false);\n });\n return;\n }\n setVisible(false);\n });\n\n const onClick = hooks.useCallbackRef((item: DropdownMenuItem, event) => {\n event.stopPropagation();\n void 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 <Button\n size=\"small\"\n {...otherProps}\n type={buttonType}\n style={newStyle}\n key={index}\n onClick={onClick.bind(null, item)}\n >\n {text}\n </Button>\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 setVisible(false);\n }}\n arrowPointAtCenter={true}\n key={index}\n overlayStyle={{ zIndex: 10 }}\n visible={visible}\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 overlay={<Menu items={menuItems} />}\n onVisibleChange={(_visible) => {\n console.log(visible);\n if (!_visible) {\n setVisible(false);\n setLoading(false);\n }\n }}\n >\n {props.children}\n </Dropdown>\n );\n};\n","import { MoreOutlined } from '@ant-design/icons';\nimport { isPromise, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, Divider, Popconfirm, PopconfirmProps, Space, SpaceProps } from 'antd';\nimport { FC, isValidElement, ReactElement, useMemo, useState } from 'react';\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组件,可设置type=link,会有设置的hover效果\n * 2. 任何permission、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}\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 viewList = useMemo(() => {\n return props.operateList.filter((item) => {\n if (isValidElement(item)) {\n return true;\n }\n const has = item && !item.hidden && !item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n }, [props.operateList]);\n\n const foldList = useMemo(() => {\n const filterList = props.operateList.filter((item) => {\n if (isValidElement(item)) {\n return false;\n }\n const has = item && !item.hidden && item.isFold;\n if (item && item.permission) {\n return hasPermission(item.permission) && has;\n }\n return has;\n }) as ButtonOperateItem[];\n return [...filterList].map((item) => {\n // 多余字段渲染到react dom上,出现警告\n delete item.isFold;\n return item;\n });\n }, [props.operateList]);\n\n return (\n <div className={classNames('table-operate', props.className)}>\n <Space\n split={<Divider type=\"vertical\" />}\n size={props.size}\n wrap={isUndefined(props.wrap) ? true : props.wrap}\n >\n {viewList.map((item, index) => {\n if (isValidElement(item)) return item;\n const {\n text,\n color,\n onClick,\n permission,\n needConfirm,\n confirmMessage,\n hidden,\n style,\n popconfirmProps,\n ...otherProps\n } = item;\n if (hidden) return null;\n if (permission && !hasPermission(permission)) return null;\n const newStyle = color && !otherProps.disabled ? { color, ...style } : style;\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 onVisibleChange={(_visible) => {\n if (!_visible) {\n setLoading(false);\n }\n }}\n >\n <Button {...otherProps} onClick={undefined} type={type} danger style={newStyle}>\n {text}\n </Button>\n </Popconfirm>\n );\n }\n return (\n <Button {...otherProps} type={type} style={newStyle} key={index} onClick={onClick}>\n {text}\n </Button>\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\nButtonOperate.defaultProps = {\n size: 0,\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 { 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 { 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 = 'request-init' | 'request-progress' | 'request-success' | 'request-error';\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 },\n props.messageConfig,\n );\n const description = useMemo(() => {\n if (\n props.status &&\n valueIsEqual(props.status, ['request-success', 'request-progress', 'request-error'])\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 { 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';\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 /**\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 * 级联选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. 不支持多选\n * 2. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 3. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const { serviceConfig, modelKey, fieldNames, isDynamicLoad, requestMessageConfig, ...otherProps } = 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 } 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 setValueList(filterList.map((item) => item.value) as string[]);\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\n const respData = await newServiceConfig.onRequest?.(newServiceConfig.params);\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 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 return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as any)}\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 />\n );\n});\n","import { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { DatePicker } from 'antd';\nimport { PickerDateProps } from 'antd/lib/date-picker/generatePicker';\nimport moment from 'moment';\nimport { useMemo } from 'react';\n\nexport type DatePickerWrapperProps = Omit<PickerDateProps<moment.Moment>, 'value' | 'onChange'> & {\n value?: string;\n onChange?: (value?: string) => void;\n /**\n * minDate、maxDate设置格式:YYYY-MM-DD\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n };\n};\n\n/**\n * DatePicker包装组件\n * ```\n * 1. value类型为 string\n * 2. onChange返回类型 string\n * 3. 默认格式化类型 YYYY-MM-DD; 当showTime===true时,默认格式化类型YYYY-MM-DD HH:mm:ss\n * 4. 其他格式化类型自定义format\n * 5. 设置disabledDate后,disabledDateConfig配置将失效\n * ```\n */\nexport const DatePickerWrapper = (props: DatePickerWrapperProps) => {\n const { value, onChange, style, ...otherProps } = props;\n const format = useMemo(() => {\n if (props.format) return props.format as string;\n if (props.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\n }, [props.showTime, props.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) => {\n const currentDate = current.format('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, currentDate)) {\n return true;\n }\n }\n return false;\n });\n\n const datePickerValue = useMemo(() => {\n if (value) {\n return moment(flatbizDate.dateNormalize(value));\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePicker\n disabledDate={getDisabledDate}\n format={format}\n {...otherProps}\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 moment, { Moment } from 'moment';\nimport { useMemo, useState } from 'react';\n\nexport type DateRangePickerWrapperProps = Omit<\n RangePickerDateProps<moment.Moment>,\n 'value' | 'onChange' | 'onOpenChange' | 'onCalendarChange' | 'disabledDate'\n> & {\n value?: [string, string];\n onChange?: (value?: [string, string]) => void;\n /**\n * 1. minDate、maxDate设置格式:YYYY-MM-DD\n * 2. maxDays 最大可选的天数\n */\n disabledDateConfig?: {\n minDate?: string;\n maxDate?: string;\n maxDays?: number;\n };\n};\n\ntype RangeValue = [Moment | null, Moment | 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\n * 4. 其他格式化类型自定义format\n * 5. 可设置disabledDateConfig,来控制日期项的disbaled状态\n *\n * TODO: 引用DatePicker.RangePicker TS有问题,待解决\n * TODO: 存在场景缺陷,当设置maxDays、showTime后,在选择单个日期不通过确认按钮直接切换输入框,无法获取回调,无法约束disabledDate\n * ```\n */\nexport const DateRangePickerWrapper = (props: DateRangePickerWrapperProps) => {\n const { value, onChange, style, format: _format, ...otherProps } = props;\n const maxDays = props.disabledDateConfig?.maxDays;\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 [moment(newDate1), moment(newDate2)];\n }\n return undefined;\n }, [date1, date2]) as [Moment, Moment];\n\n const format = useMemo(() => {\n if (_format) return _format as string;\n if (props.showTime === true) return 'YYYY-MM-DD HH:mm:ss';\n return 'YYYY-MM-DD';\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('YYYY-MM-DD');\n if (!props.disabledDateConfig) {\n return false;\n }\n const { maxDays, minDate, maxDate } = props.disabledDateConfig;\n if (minDate && maxDate) {\n if (!flatbizDate.in(currentDate, minDate, maxDate)) {\n return true;\n }\n } else if (minDate) {\n if (!flatbizDate.gte(currentDate, minDate)) {\n return true;\n }\n } else if (maxDate) {\n if (!flatbizDate.gte(maxDate, 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 return (\n <DatePicker.RangePicker\n {...otherProps}\n format={format}\n disabledDate={getDisabledDate}\n style={{ width: '100%', ...style }}\n value={hackValue || rangePickerValue}\n onChange={onChangeDate}\n onOpenChange={onOpenChange}\n onCalendarChange={(val) => setDates(val)}\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';\n\nexport type FormItemNamePath = string | number | Array<string | number>;\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 */\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\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]);\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 } from '@dimjs/lang';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps, ConfigProvider, Drawer, DrawerProps, Form, FormInstance, Space } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport { bodyAppendDivElement, BodyAppendDivElementProps } from './utils';\n\nexport type DialogDrawerProps = Omit<\n DrawerProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'\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?: ConfigProviderProps;\n okButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children' | 'loading'>;\n cancelButtonExtraProps?: Omit<ButtonProps, 'onClick' | 'children'>;\n operatePosition?: 'header' | 'footer';\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 width = 600,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(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 setLoading(true);\n return response.then(onClose).finally(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const operateGroup = (\n <Space>\n <Button {...cancelButtonExtraProps} onClick={onCancelHandle}>\n {cancelText || '取消'}\n </Button>\n <Button type=\"primary\" {...okButtonExtraProps} onClick={onOkHandle} loading={loading}>\n {okText || '提交'}\n </Button>\n </Space>\n );\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Drawer\n maskClosable={false}\n destroyOnClose\n onClose={onClose}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n footer={operatePosition === 'footer' ? operateGroup : null}\n extra={operatePosition === 'header' ? operateGroup : null}\n {...otherProps}\n visible={visible}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Drawer>\n </ConfigProvider>\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. operatePosition='footer' 设置footer后 onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * 1. operatePosition='header' 设置extra后 onOk、onCancel、okText、cancelText、okButtonExtraProps、cancelButtonExtraProps配置失效\n * ```\n */\nexport const dialogDrawer = {\n open: (props: DialogDrawerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TNoopDefine } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ConfigProviderProps } from 'antd/lib/config-provider';\nimport zh_CN from 'antd/lib/locale/zh_CN';\nimport { ReactElement, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from './utils';\n\nexport type DialogModalProps = Omit<ModalProps, 'onOk' | 'onCancel' | 'getContainer' | 'visible' | 'open'> & {\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?: ConfigProviderProps;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n content,\n configProviderProps,\n className,\n ...otherProps\n } = props;\n const [visible, setVisible] = useState(true);\n const [loading, setLoading] = useState(false);\n const [form] = Form.useForm();\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setVisible(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 setLoading(true);\n return response.then(onClose).finally(() => {\n setLoading(false);\n });\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n return (\n <ConfigProvider\n locale={zh_CN}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...configProviderProps}\n >\n <Modal\n okText=\"确认\"\n cancelText=\"取消\"\n maskClosable={false}\n centered={true}\n destroyOnClose\n {...otherProps}\n className={classNames('dialog-modal', className)}\n visible={visible}\n onOk={onOkHandle}\n onCancel={onCancelHandle}\n afterClose={onAfterClose}\n getContainer={divElement}\n okButtonProps={{ loading, ...okButtonProps }}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProvider>\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 ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n};\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: 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.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: null,\n },\n};\n","import { SaveOutlined } from '@ant-design/icons';\nimport { Button, ButtonProps, Space } from 'antd';\n\nexport interface DrawerOperationOldProps {\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: DrawerOperationOldProps) => {\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 { useEffect } from 'react';\nimport { DrawerOperation, DrawerOperationOldProps } from './drawer-operation';\nimport './style.less';\n\nexport type DrawerFormProps = {\n className?: string;\n /**\n * 整个drawer页面级的spinning <Page loading />\n */\n pageLoading?: boolean;\n // 设置了 DrawerProps footer属性后,operationProps配置将失效\n operationProps?: DrawerOperationOldProps;\n} & DrawerProps;\n\nconst PageLoader = () => {\n return (\n <div className=\"drawer-wraper-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\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * ```\n */\nexport const DrawerWraper = (props: DrawerFormProps) => {\n const { pageLoading, className, width = 600, children, footer, operationProps, ...otherProps } = props;\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【DrawerWraper】组件已经过期,请使用DrawerWrapper替换包括DrawerWraper=>DrawerWrapper、createDrawerWraperModel=>createDrawerWrapperModel,如果使用DrawerWrapper组件原用法需要调整',\n );\n }, []);\n return (\n <Drawer\n className={classNames('drawer-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n width={'80%'}\n contentWrapperStyle={{ maxWidth: width }}\n size=\"default\"\n {...otherProps}\n footer={footer || footer === null ? footer : <DrawerOperation {...operationProps} />}\n >\n <div className=\"drawer-wraper-content\">{children}</div>\n {pageLoading && <PageLoader />}\n </Drawer>\n );\n};\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] = createDrawerWraperModel('key值').useStore();\n * ```\n */\nexport const createDrawerWraperModel = (key: string) => {\n if (!drawerModels[key]) {\n drawerModels[key] = Model(DrawerModel);\n }\n return drawerModels[key];\n};\n\nexport * from './drawer-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface DrawerStateType {\n title: string;\n /**\n * 显示drawer\n */\n visible: 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.visible = true;\n };\n },\n closeDrawer() {\n return (state) => {\n state.visible = false;\n };\n },\n setDrawerItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: 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 cpLockRef = useRef(false);\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 (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\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 cpLockRef = useRef(false);\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 (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n console.log('onCompositionStart');\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n console.log('onCompositionEnd');\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.Search\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\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 cpLockRef = useRef(false);\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 (cpLockRef.current) return;\n inputValueRef.current = event.target.value;\n props.onChange?.(event);\n });\n\n const onCompositionStart = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const onCompositionEnd = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onChange(event);\n });\n\n return (\n <Input.TextArea\n {...otherProps}\n key={defaultSearchInputKey}\n onCompositionStart={onCompositionStart}\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 selectorList: TPlainObject[];\n // originalSelectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: RequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[]; requestStatus?: ModelState['requestStatus'] };\n resetSelectBoxList: void;\n changeRequestStatus: 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 if (params.requestStatus) {\n state.requestStatus = params.requestStatus;\n }\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.selectorList = [];\n state.requestStatus = 'request-init';\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 { 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的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport 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 { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Select, SelectProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useEffectCustom, useSafeState } from '../hooks';\nimport { selectorWrapperModel } from './model';\nimport './style.less';\n\nimport { dequal } from 'dequal';\nimport { RequestStatusRender, RequestStatusRenderProps } from '../request-status';\nimport { getVauleList, selectorWrapperValueDeepEqual } 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 /**\n * 与 effectDependencyList 配合使用\n */\n requiredParamsKeys?: string[];\n onRequest?: (params?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\n\nexport type SelectorWrapperProps = Omit<\n SelectProps,\n 'filterOption' | 'onSearch' | 'notFoundContent' | 'options' | 'fieldNames' | 'onChange' | 'value'\n> & {\n // 模型唯一值\n modelKey: string;\n fieldNames?: { label: string; value: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据\n */\n serviceConfig?: SelectorServiceConfig;\n /**\n * 同步设置选择器选项列表\n * ```\n * 1. 如果配置fieldNames,会转换后使用\n * 2. 值为undefined、null不会更新,需要清空可传递空数组\n * 3. 设置后 serviceConfig 失效\n * ```\n */\n selectorList?: TPlainObject[];\n /**\n * selectorList发生变更时触发\n */\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\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查询接口字段名称,默认值:searchValue\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\nexport type SelectorWrapperRefApi = {\n onClearSelectorList: () => void;\n getSelectorList: () => TPlainObject[];\n};\n/**\n * 选择器包装组件\n * @param props\n * @returns\n * ```\n * 1. modelKey的配置是为了缓存数据;\n * 1.1: 当有effectDependencyList依赖项时,依赖项的发生变化后,每次都会去调用接口获取数据\n * 1.2: 当无effectDependencyList依赖项时,第一次调用接口成功后会有标记,下次访问存在标记,就不在调用接口,使用缓存数据;如果想强制刷新数据,可通过随便配置依赖项完成\n * 2. 设置 labelInValue 后,onChange 返回数据item:labelInValueFieldNames配置格式\n * 2. operateType=search状态下,外部传递 selectorValueList 回填数据查询接口时,会在接口中默认添加searchId字段(searchId的值为回填的selectorValueList,类型有:string | number | Array<string | number>)\n * ```\n */\nexport const SelectorWrapper = forwardRef<SelectorWrapperRefApi, SelectorWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n showAllOption,\n effectDependencyList,\n onSelectorListChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n operateType,\n searchFieldName,\n selectorList,\n modelKey,\n fieldNames,\n searchIdFieldName,\n value,\n labelInValue,\n labelInValueFieldNames,\n loading: loadingWrapper,\n ...otherProps\n } = props;\n const isSearch = operateType === 'search';\n // search模式下,selectorList配置失效\n const hasSelectorList = props.hasOwnProperty('selectorList') && !isSearch;\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = useSafeState(false);\n const [state, actions] = selectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const fieldNamesMerge = { label: 'label', value: 'value', ...fieldNames };\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\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 isMultiple = valueIsEqual(props.mode, ['multiple', 'tags']);\n // 保存 onChange 选择数据\n const innerOperateValueRef = useRef<any>();\n const defaultValueRef = useRef<any>();\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) return;\n isFirstUseValueRef.current = false;\n if (!selectorWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} SelectorWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = value;\n defaultValueRef.current = isMultiple ? valueList : valueList[0];\n setRefreshKey(Date.now());\n if (isSearch) {\n if (isUndefinedOrNull(value)) {\n void actions.resetSelectBoxList();\n // todo\n onSelectorListChange?.([]);\n } else {\n void startDataSourceRequest(undefined, props.value as string | number);\n }\n }\n }\n }, [value]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\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 useEffectCustom(() => {\n setLoading(loadingWrapper || false);\n }, [loadingWrapper]);\n\n const startDataSourceRequest = hooks.useCallbackRef(\n async (inputValue?: string, searchId?: string | number) => {\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(`SelectorWrapper组件:设置必输项【${requiredParamsKeys.join('、')}】不能为空`);\n if (state.selectorList.length > 0) {\n void actions.setSelectBoxList({ selectorList: [] });\n }\n return;\n }\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\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 newServiceConfig.onRequest?.(params);\n const respAdapterData = serviceRespDataAdapter(respData);\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({ selectorList: respAdapterData, requestStatus: 'request-success' });\n } catch (error) {\n console.error(error);\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n onSelectorRequestError?.(error);\n }\n },\n );\n hooks.useCustomCompareEffect(\n () => {\n if (isSearch) return;\n if (hasSelectorList) {\n return;\n }\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n void actions.setSelectBoxList({ selectorList: [] });\n void startDataSourceRequest();\n return;\n }\n const allState = selectorWrapperModel(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 useEffectCustom(() => {\n if (state.requestStatus === 'request-success') {\n // 初始化不调用\n onSelectorListChange?.(state.selectorList);\n }\n }, [state.selectorList]);\n\n useEffectCustom(() => {\n if (hasSelectorList) {\n void actions.setSelectBoxList({\n selectorList: selectorList || [],\n requestStatus: 'request-success',\n });\n }\n }, [selectorList]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetSelectBoxList();\n },\n getSelectorList: () => {\n return state.selectorList;\n },\n };\n });\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = (\n !option.children ? [] : isArray(option.children) ? option.children : [option.children]\n ) as any[];\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.resetSelectBoxList();\n }\n }, 300);\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (selectedList.length === 0) return props.onChange?.(undefined);\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n if (labelInValue) {\n const labelInValueList = selectedList.map((item) => {\n return {\n [lvLabel]: item[fieldNamesMerge.label],\n [lvValue]: item[fieldNamesMerge.value],\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[fieldNamesMerge.value]);\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: any, otherParams) => {\n innerOperateValueRef.current = value;\n const selectedList = isArray(otherParams) ? otherParams : otherParams ? [otherParams] : [];\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig?.value) {\n targetList.push({\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n });\n } else {\n const filterTarget = state.selectorList.find((temp) => temp[fieldNamesMerge.value] === item.value);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const selectorAllList = useMemo(() => {\n return (\n allOptionConfig\n ? [{ [fieldNamesMerge.label]: allOptionConfig.label, [fieldNamesMerge.value]: allOptionConfig.value }]\n : []\n ).concat(state.selectorList);\n }, [allOptionConfig, fieldNamesMerge.label, fieldNamesMerge.value, state.selectorList]);\n\n return (\n <Select\n key={refreshKey}\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n defaultValue={defaultValueRef.current}\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[fieldNamesMerge.value];\n const label = item[fieldNamesMerge.label];\n return (\n <Select.Option value={value} label={label} key={`${value}-${index}`} disabled={item['disabled']}>\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 });\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","export const editorTemplates = {\n block: {\n title: '块级卡片',\n description: '块级卡片',\n content: `<div style=\"{$varStyle} background-color:var(--editor-card-bgcolor);padding: 5px 20px;border-radius: 2px;color:#555\">\n <p>#自定义内容</p>\n </div><p></p>`,\n },\n primary_p: {\n title: 'primary_p',\n description: 'primary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-primary)\">#自定义内容</p><p></p>',\n },\n secondary_p: {\n title: 'secondary_p',\n description: 'secondary色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-secondary)\">#自定义内容</p><p></p>',\n },\n warning_p: {\n title: 'warning_p',\n description: 'warning色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-warning)\">#自定义内容</p><p></p>',\n },\n danger_p: {\n title: 'danger_p',\n description: 'danger色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-danger)\">#自定义内容</p><p></p>',\n },\n success_p: {\n title: 'success_p',\n description: 'success色调<p>',\n content: '<p style=\"{$varStyle}color:var(--fa-color-success)\">#自定义内容</p><p></p>',\n },\n p: {\n title: 'p',\n description: 'p',\n content: '<p></p>',\n },\n};\n","export type varStyles =\n | '--fa-color-primary'\n | '--fa-color-secondary'\n | '--fa-color-warning'\n | '--fa-color-danger'\n | '--fa-color-success'\n | '--editor-card-bgcolor';\n\nexport const defaultVarStyle: Record<varStyles, string> = {\n '--fa-color-primary': '#1677ff',\n '--fa-color-secondary': '#1677ff',\n '--fa-color-warning': '#ff8f1f',\n '--fa-color-danger': '#ff3141',\n '--fa-color-success': '#00b578',\n '--editor-card-bgcolor': '#f5f5f9',\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { Editor, hooks } from '@wove/react';\nimport { CSSProperties, useMemo } from 'react';\nimport './style.less';\nimport { editorTemplates } from './template';\nimport { defaultVarStyle, 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};\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 content_style: `body { ${varStyleString} }`,\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' +\n ' visualblocks code hr print' +\n ' media table paste help wordcount autolink autoresize link template',\n toolbar:\n ' undo redo code template| formatselect | ' +\n ' bold italic backcolor bullist numlist hr | outdent indent alignleft aligncenter alignright alignjustify | textmark untextmark code preview |' +\n ' removeformat | link image print help',\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: '',\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 { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { useEffect, useState } from 'react';\nimport { useEffectCustom } from '../hooks';\nimport './style.less';\n\nexport type FileUploadItem = {\n fileKey: string;\n fileName: string;\n};\n\ntype AntdFileUploadItem = {\n uid: string;\n name: string;\n fileKey: string;\n};\n\nexport type FileUploadProps = {\n onChange?: (value?: FileUploadItem[]) => void;\n onUploadError?: (message?: string) => void;\n value?: FileUploadItem[];\n onPreview?: (item: FileUploadItem) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n fileKey?: string;\n fileName?: string;\n };\n} & Omit<UploadProps, 'onChange' | 'fileList' | 'onPreview'>;\n\n/**\n * 文件上传,结合Form使用最佳\n * ```\n * 接口返回结构:\n * formData上传接口必须返回fileKey值\n * {\n * code: '0000',\n * data: {\n * fileKey: '预览文件对应的fileKey'\n * }\n * }\n * 可通过fieldNames配置接口返回值属性名称映射\n * ```\n * ```\n * 最佳使用方式:\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <FileUpload action={uploadUrl} onPreview={onPreviewFile}>\n * <Button type=\"primary\">选择文件导入</Button>\n * </FileUpload>\n * </Form.Item>\n * ```\n *\n */\nexport const FileUpload = (props: FileUploadProps) => {\n useEffectCustom(() => {\n console.error('@flatbiz/antd库【FileUpload】组件已经过期,请使用【UploadWrapper】组件替换');\n }, []);\n\n const { onChange, onUploadError, onPreview, value, ...otherProps } = props;\n const [uploadValue, setUploadValue] = useState<AntdFileUploadItem[]>([]);\n const fieldNames = extend(\n {\n fileKey: 'fileKey',\n fileName: 'fileName',\n },\n props.fieldNames,\n ) as FileUploadItem;\n\n useEffect(() => {\n if (value && isArray(value)) {\n setUploadValue(\n value.map((item) => {\n return {\n uid: item['uid'] || item[fieldNames.fileKey],\n name: item[fieldNames.fileName],\n fileKey: item[fieldNames.fileKey],\n url: item[fieldNames.fileKey],\n thumbUrl: item[fieldNames.fileKey],\n };\n }),\n );\n }\n }, [fieldNames.fileKey, fieldNames.fileName, value]);\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n if (info.file.status === 'done') {\n const respData = info.file.response;\n if (respData.code === '0000') {\n const result = respData.data || {};\n const uploadItem = {\n uid: info.file.uid,\n fileName: result[fieldNames.fileName] || (info.file.name as string),\n fileKey: result[fieldNames.fileKey],\n } as FileUploadItem;\n const respValue = (value || []).concat(uploadItem);\n onChange?.(respValue as unknown as FileUploadItem[]);\n } else {\n onUploadError?.(respData.message as string);\n }\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['uid'] || item[fieldNames.fileKey];\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 onUploadError?.();\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadValue([...info.fileList]);\n props.onUploadChange?.(info);\n });\n\n const onUploadPreview = hooks.useCallbackRef((file) => {\n onPreview?.({\n fileKey: file[fieldNames.fileKey],\n fileName: file[fieldNames.fileName],\n });\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n onPreview={onUploadPreview}\n fileList={uploadValue}\n className={classNames('v-file-upload', otherProps.className)}\n >\n {props.children}\n </Upload>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, 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;\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 = (isArray(props.children) ? props.children : [props.children]) as JSX.Element[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = !isUndefinedOrNull(props.fullIndex)\n ? isArray(props.fullIndex)\n ? props.fullIndex\n : [props.fullIndex as number]\n : [];\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 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 { 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};\nexport const IconWrapper = (props: IconWrapperProps) => {\n return (\n <Tooltip title={props.hoverTips}>\n <div\n className={classNames('icon-wrapper', `icon-wrapper-${props.size || 'middle'}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {props.icon}\n {props.text ? <span className=\"icon-wrapper-text\">{props.text}</span> : null}\n </div>\n </Tooltip>\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 visible: 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.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: false,\n title: '',\n operateType: 'view',\n },\n};\n","import { Button, ButtonProps, Space } from 'antd';\nimport { Fragment } from 'react';\n\nexport interface ModalOperationProps {\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}: ModalOperationProps) => {\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 { useEffect } from 'react';\nimport { ModalOperation, ModalOperationProps } from './modal-operation';\nimport './style.less';\n\nexport type ModalFormProps = {\n className?: string;\n // 整个modal页面级的spinning <Page loading />\n pageLoading?: boolean;\n // 设置了 ModalProps footer属性后,operationProps配置将失效\n operationProps?: ModalOperationProps;\n footer?: null | React.ReactNode;\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-wraper-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\n/**\n * 弹窗机制\n * ```\n * 1. 默认 destroyOnClose = true\n * 2. 默认 forceRender = false\n * @deprecated 请使用ModalWrapper替换\n * ```\n */\nexport const ModalWraper = (props: ModalFormProps) => {\n const { pageLoading, className, width, children, footer, operationProps, ...otherProps } = props;\n\n useEffect(() => {\n console.error(\n '@flatbiz/antd库【ModalWraper】组件已经过期,请使用ModalWrapper替换包括ModalWraper=>ModalWrapper、createModalWraperModel=>createModalWrapperModel,如果使用ModalWrapper组件原用法需要调整',\n );\n }, []);\n\n return (\n <Modal\n className={classNames('modal-wraper', className)}\n keyboard={false}\n forceRender={false}\n destroyOnClose={true}\n {...otherProps}\n width={width || 600}\n footer={null}\n >\n <div className=\"modal-wraper-content\">\n {children}\n {pageLoading && <PageLoader />}\n </div>\n {footer !== null && (\n <div className=\"modal-wraper-content-footer\">\n {footer ? footer : <ModalOperation {...operationProps} />}\n </div>\n )}\n </Modal>\n );\n};\n","import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { ModalActionsParamType, ModalModel, ModalStateType } from './modal.model';\n\n/**\n * 组件单词写错,请输入\n */\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] = createModalWraperModel('key值').useStore();\n * ```\n */\nexport const createModalWraperModel = (key: string) => {\n if (!modalModels[key]) {\n modalModels[key] = Model(ModalModel);\n }\n return modalModels[key];\n};\n\nexport * from './modal-wraper';\n","import { ModelType } from '@dimjs/model';\n\nexport interface ModalStateType {\n title?: string;\n /**\n * 显示modal\n */\n visible: 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.visible = true;\n };\n },\n closeModal() {\n return (state) => {\n state.visible = false;\n };\n },\n setModalItemData(params) {\n return (state) => {\n state.pageLoading = false;\n state.itemData = params;\n };\n },\n },\n state: {\n visible: 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","export const Page404 = () => {\n return <div className=\"v-404\">404</div>;\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_auto: 'form-label-auto',\n label_align_left: 'form-label-align-left',\n label_align_right: 'form-label-align-right',\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_auto: 'form-item-label-auto',\n label_align_left: 'form-item-label-align-left',\n label_align_right: 'form-item-label-align-right',\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 { getUuid } from '@flatbiz/utils';\n\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\nexport function getOwnerWindow(node?: HTMLElement | null) {\n return node instanceof Element ? getOwnerDocument(node).defaultView ?? window : window;\n}\n\nexport function getOwnerDocument(node?: HTMLElement | null) {\n return node instanceof Element ? node.ownerDocument ?? document : document;\n}\n\nexport function contains(parent: HTMLElement, child: HTMLElement) {\n return parent === child || parent.contains(child);\n}\n\nexport const isWindow = (obj) => {\n return obj != null && obj === obj.window;\n};\n\nexport const getStyles = (elem) => {\n // Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n // IE throws on elements created in popups\n // FF meanwhile throws on frame elements through 'defaultView.getComputedStyle'\n if (elem.ownerDocument.defaultView.opener) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return elem.ownerDocument.defaultView.getComputedStyle(elem, '');\n }\n return window.getComputedStyle(elem, '');\n};\n\nexport const accessProperty = (elem, propName: string): number => {\n elem = elem || window;\n\n if (isWindow(elem)) {\n return elem.document.documentElement['client' + propName] as number;\n }\n\n // Get document width or height\n if (elem.nodeType === 9) {\n const doc = elem.documentElement;\n return Math.max(\n elem.body[`scroll${propName}`],\n doc['scroll' + propName],\n elem.body['offset' + propName],\n doc['offset' + propName],\n doc['client' + propName],\n );\n }\n\n // Get width or height on the element, requesting but not forcing parseFloat\n return parseInt(getStyles(elem)[propName.toLowerCase()], 10) || 0;\n};\n\nexport const getElemWidth = (elem?: HTMLElement): number => {\n return accessProperty(elem, 'Width');\n};\n\nexport const getElemHeight = (elem?: HTMLElement): number => {\n return accessProperty(elem, 'Height');\n};\n\nexport interface BodyAppendDivElementProps {\n divElement: HTMLDivElement;\n elementId: string;\n}\n\nexport const bodyAppendDivElement = (): BodyAppendDivElementProps => {\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 createDivElement = () => {\n const div = document.createElement('div');\n const id = `id_${getUuid()}`;\n div.setAttribute('id', id);\n return div;\n};\n\n// 删除body的子节点\nexport const removeBodyChild = (element: string) => {\n try {\n document.body.removeChild(document.querySelector(element) as Node);\n } catch (error) {\n //\n }\n};\n\n/**\n * 获取React dom 根节点\n * @returns\n */\nexport const getRectRootNodeElement = () => {\n return document.querySelector('#app') as HTMLDivElement;\n};\n","export const isBrowser = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n","import type { MutableRefObject } from 'react';\nimport { isBrowser } from './is-browser';\n\ntype TargetValue<T> = T | undefined | null;\n\ntype TargetType = Element | Document | Window;\n\nexport type BasicDomTarget<T extends TargetType = Element> =\n | (() => TargetValue<T>)\n | TargetValue<T>\n | MutableRefObject<TargetValue<T>>;\n\nexport function getTargetElement<T extends TargetType>(target: BasicDomTarget<T>, defaultElement?: T) {\n if (!isBrowser) {\n return undefined;\n }\n\n if (!target) {\n return defaultElement;\n }\n\n let targetElement: TargetValue<T>;\n\n if (typeof target === 'function') {\n targetElement = target();\n } else if ('current' in target) {\n targetElement = target.current;\n } else {\n targetElement = target;\n }\n\n return targetElement;\n}\n","export type GetContainer = HTMLElement | (() => HTMLElement) | null;\n\nexport function resolveContainer(container: HTMLElement | (() => HTMLElement) | string | undefined | null) {\n if (typeof container === 'string') {\n return document.querySelector(container) || document.body;\n } else {\n const containerElement = typeof container === 'function' ? container() : container;\n return containerElement || document.body;\n }\n}\n","import { isBrowser } from './is-browser';\n\ntype ScrollElement = HTMLElement | Window | Document;\n\nconst overflowScrollReg = /scroll|auto/i;\nconst defaultRoot = isBrowser ? window : undefined;\n\nfunction isElement(node: Element) {\n const ELEMENT_NODE_TYPE = 1;\n return node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === ELEMENT_NODE_TYPE;\n}\n\n/**\n * 查询指定节点层层父节点中第一个原生滚动节点\n * @param el\n * @param root\n * @returns\n */\n// https://github.com/youzan/vant/issues/3823\nexport function getScrollParent(el: Element, root: ScrollElement | null | undefined = defaultRoot) {\n let node = el;\n\n while (node && node !== root && isElement(node)) {\n const { overflowY } = window.getComputedStyle(node);\n if (overflowScrollReg.test(overflowY)) {\n return node;\n }\n node = node.parentNode as Element;\n }\n\n return root;\n}\n","import { classNames } from '@dimjs/utils';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\n\nexport interface NativeProps<S extends string = never> {\n className?: string;\n style?: CSSProperties & Partial<Record<S, string>>;\n}\n\nexport type VarProps<S extends string = never> = Partial<Record<S, string>>;\n\nexport interface CommonProps<S extends TPlainObject = TPlainObject> {\n className?: string;\n style?: CSSProperties & Partial<S>;\n}\nexport interface CommonPropsWithChildren<S extends TPlainObject = TPlainObject> {\n className?: string;\n style?: CSSProperties & Partial<S>;\n children?: ReactNode | undefined;\n}\n\nexport function withNativeProps<P extends NativeProps>(props: P, element: ReactElement<P>) {\n const p = {\n ...element.props,\n };\n if (props.className) {\n p.className = classNames(element.props.className as string, props.className);\n }\n if (props.style) {\n p.style = {\n ...p.style,\n ...props.style,\n };\n }\n return cloneElement<P>(element, p);\n}\n","import { isString } from '@dimjs/lang';\n\nexport interface Viewport {\n currRem: number;\n}\n\n// 转换特定设备分辨率下的缩放值到屏幕设计稿像素对应PX值\nexport const dpiPX2px = (d: number | string): string => {\n const { currRem } = fabricViewport();\n return `${(parseFloat(d.toString()) / currRem) * 100}px`;\n};\n\n// 转换屏幕实际像素PX值到特定设备分辨率下的缩放值\nexport const px2DPIpx = (d: number | string): string => {\n const { currRem } = fabricViewport();\n return `${(parseFloat(d.toString()) / 100) * currRem}px`;\n};\n\n// 转换750PX下的视觉稿PX尺寸到REM值\nexport const px2rem = (d: number): string => {\n return `${d / 100}rem`;\n};\n\nexport const fabricViewport = () => {\n return window['fabricViewport'] as Viewport;\n};\n\n/**\n * 数字格式px转rem\n * @param pxValue px值\n * @param defaultValue 默认值\n * @returns\n * ```\n * 1. px、defaultValue如果是字符串,不会进行如何处理\n * 2. px、defaultValue如果是数字,会使用px2rem处理\n * ```\n */\nexport const numberPx2rem = (pxValue?: string | number, defaultValue?: string | number) => {\n const newDefaultValue = defaultValue\n ? isString(defaultValue)\n ? defaultValue\n : px2rem(defaultValue as number)\n : undefined;\n const newPxValue = pxValue ? (isString(pxValue) ? pxValue : px2rem(pxValue as number)) : undefined;\n\n return newPxValue || newDefaultValue;\n};\n\n/**\n * 数字格式px转DPIpx\n * @param pxValue px值\n * @param defaultValue 默认值\n * @returns\n * ```\n * 1. px、defaultValue如果是字符串,不会进行如何处理\n * 2. px、defaultValue如果是数字,会使用DPIpx处理\n * ```\n */\nexport const numberPx2DPIpx = (pxValue?: string | number, defaultValue?: string | number) => {\n const newDefaultValue = defaultValue\n ? isString(defaultValue)\n ? defaultValue\n : px2DPIpx(defaultValue as number)\n : undefined;\n const newPxValue = pxValue ? (isString(pxValue) ? pxValue : px2DPIpx(pxValue as number)) : undefined;\n\n return newPxValue || newDefaultValue;\n};\n","import { BasicDomTarget, getTargetElement } from './dom-target';\n\n/**\n * 计算H5原生滚动条滚动距离\n * @param target\n * @returns\n */\nexport const getScrollPosition = (target: BasicDomTarget) => {\n const targetElement = getTargetElement<Element | Document | Window>(target, document);\n let position = { left: 0, top: 0 };\n if (targetElement === document || targetElement === window) {\n if (document.scrollingElement) {\n position = {\n left: document.scrollingElement.scrollLeft,\n top: document.scrollingElement.scrollTop,\n };\n } else {\n // When in quirks mode, the scrollingElement attribute returns the HTML body element if it exists and is potentially scrollable, otherwise it returns null.\n // https://developer.mozilla.org/zh-CN/docs/Web/API/Document/scrollingElement\n // https://stackoverflow.com/questions/28633221/document-body-scrolltop-firefox-returns-0-only-js\n position = {\n top: Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop),\n left: Math.max(window.pageXOffset, document.documentElement.scrollLeft, document.body.scrollLeft),\n };\n }\n } else {\n position = {\n left: (targetElement as Element)?.scrollLeft || 0,\n top: (targetElement as Element)?.scrollTop || 0,\n };\n }\n return position;\n};\n","import { isBrowser } from './is-browser';\n\nconst _isStyleNameSupport = (styleName: string | string[]): boolean => {\n if (isBrowser && window.document.documentElement) {\n const styleNameList = Array.isArray(styleName) ? styleName : [styleName];\n const { documentElement } = window.document;\n\n return styleNameList.some((name) => name in documentElement.style);\n }\n return false;\n};\n\nconst detectFlexGapSupported = () => {\n if (window['flexGapSupported']) {\n return true;\n }\n if (!isBrowser) {\n return false;\n }\n // create flex container with row-gap set\n const flex = document.createElement('div');\n flex.style.display = 'flex';\n flex.style.flexDirection = 'column';\n flex.style.rowGap = '1px';\n\n // create two, elements inside it\n flex.appendChild(document.createElement('div'));\n flex.appendChild(document.createElement('div'));\n\n // append to the DOM (needed to obtain scrollHeight)\n document.body.appendChild(flex);\n const flexGapSupported = flex.scrollHeight === 1; // flex container should be 1px high from the row-gap\n document.body.removeChild(flex);\n window['flexGapSupported'] = flexGapSupported;\n return flexGapSupported;\n};\n\nexport function isStyleNameSupport(styleName: string) {\n if (styleName === 'gap') {\n return detectFlexGapSupported();\n }\n return _isStyleNameSupport(styleName);\n}\n\nexport function isStyleValueSupport(styleName: string, value: unknown) {\n if (!isStyleNameSupport(styleName)) {\n return false;\n }\n const ele = document.createElement('div');\n const origin = ele.style[styleName];\n ele.style[styleName] = value;\n return ele.style[styleName] !== origin;\n}\n","import { cache } from '@dimjs/utils';\n\nconst zIndexFactory = cache('zIndex', 100);\n\nexport const getZIndex = () => {\n return Number(zIndexFactory().replace('zIndex', ''));\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport { bodyAppendDivElement } from '../utils';\nimport './style.less';\n\nexport type TDynamicNodeProps = {\n className?: string;\n getContainer?: HTMLElement | (() => HTMLElement) | string;\n content?: ReactElement;\n fixed?: boolean;\n style?: CSSProperties;\n};\n\n/**\n * 动态添加 element 元素\n * ```\n * 1. 默认添加到 body 下\n * 2. 可通过 getContainer 参数设置添加位置\n * ```\n */\nexport const dynamicNode = {\n append: (props: TDynamicNodeProps = {}) => {\n const container = (() => {\n let tempElement;\n if (typeof props.getContainer === 'string') {\n tempElement = document.querySelector(props.getContainer);\n } else if (typeof props.getContainer === 'function') {\n tempElement = props.getContainer();\n }\n return tempElement as Element | undefined;\n })();\n\n const className = classNames('v-dynamic-node', { 'v-dynamic-node-fixed': props.fixed }, props.className);\n let nodeElementId = `id_${Date.now()}`;\n if (container) {\n ReactDOM.render(\n <div className={className} id={nodeElementId}>\n {props.content}\n </div>,\n container,\n );\n } else {\n const { divElement, elementId } = bodyAppendDivElement();\n nodeElementId = elementId;\n ReactDOM.render(<div className={className}>{props.content}</div>, divElement);\n }\n window['_dynamic_node_element_id'] = nodeElementId;\n console.log('nodeElementId', nodeElementId);\n return {\n elementId: nodeElementId,\n };\n },\n remove: (elementId?: string) => {\n const dynamicElementId = elementId || window['_dynamic_node_element_id'];\n if (dynamicElementId) {\n try {\n document.querySelector(`#${dynamicElementId}`)?.remove();\n } catch (error) {\n //\n }\n }\n },\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, ReactNode, useLayoutEffect, useState } from 'react';\nimport { fabricViewport, px2rem } from '../utils';\nimport './style.less';\n\nexport interface IProgressProps {\n value: number;\n size?: number;\n gap?: number;\n className?: string;\n isRotate?: boolean;\n children?: ReactNode;\n}\n\nexport const Progress = (props: IProgressProps) => {\n const [wrapperStyle, setWrapperStyle] = useState<CSSProperties>({});\n const [pieStyle, setPieStyle] = useState<CSSProperties>({});\n const [barLeftStyle, setBarLeftStyle] = useState<CSSProperties>({});\n const [barRightStyle, setBarRightStyle] = useState<CSSProperties>({});\n const [shadowStyle, setShadowStyle] = useState<CSSProperties>({});\n const [isOver50, setIsOver50] = useState<boolean>(false);\n const [renderFlag, setRenderFlag] = useState<boolean>(false);\n\n const px2px = (value: number) => {\n return `${Math.ceil(Number(px2rem(value).split('rem')[0]) * fabricViewport().currRem)}px`;\n };\n useLayoutEffect(() => {\n const { value, size = 200, gap = 12 } = props;\n const rotate = value * 360;\n const pos = px2px(size);\n const wrapperStyle: CSSProperties = {\n width: pos,\n height: pos,\n padding: px2rem(gap),\n };\n const pieStyle: CSSProperties = {\n clip: `rect(0, ${px2px(size)},${px2px(size)}, ${px2px(size / 2)})`,\n };\n const barLeftStyle: CSSProperties = {\n WebkitTransform: `rotate(${rotate}deg)`,\n transform: `rotate(${rotate}deg)`,\n borderWidth: px2rem(gap),\n clip: `rect(0,${px2px(size / 2)},${px2px(size)},0)`,\n };\n const barRightStyle: CSSProperties = {\n borderWidth: px2rem(gap),\n clip: `rect(0,${px2px(size / 2)},${px2px(size)},0)`,\n };\n const shadowStyle: CSSProperties = {\n borderWidth: px2rem(gap),\n };\n const isOver50 = rotate > 180 ? true : false;\n setWrapperStyle(wrapperStyle);\n setPieStyle(pieStyle);\n setBarLeftStyle(barLeftStyle);\n setBarRightStyle(barRightStyle);\n setShadowStyle(shadowStyle);\n setIsOver50(isOver50);\n setRenderFlag(true);\n }, [props]);\n\n if (!renderFlag) {\n return null;\n }\n\n const className = classNames('v-progress', { 'v-progress-rotate': props.isRotate }, props.className);\n\n return (\n <div style={wrapperStyle} className={className}>\n {props.children}\n <div className={classNames({ pie: true, over50: isOver50 })} style={pieStyle}>\n <div className=\"half-circle left-side\" style={barLeftStyle}></div>\n <div className=\"half-circle right-side\" style={barRightStyle}></div>\n </div>\n <div className=\"track\" style={shadowStyle}></div>\n </div>\n );\n};\n","import { isArray, isUndefined } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, CSSProperties, useMemo } from 'react';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport { px2rem } from '../utils/pxrem';\nimport { isStyleNameSupport } from '../utils/style-checker';\nimport './style.less';\n\nexport type SpaceProps = {\n /**\n * 间距配置\n * 1.单数据配置:上下、左右设置相同\n * 2.数组配置:[上下, 左右]\n */\n gap?: number | [number, number];\n align?: CSSProperties['alignItems'];\n // 是否自动换行\n wrap?: boolean;\n justifyContent?: CSSProperties['justifyContent'];\n // 是否width:100%\n block?: boolean;\n onClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n /**\n * 布局方向\n */\n direction?: 'vertical' | 'horizontal';\n flexFullIndex?: number | number[];\n} & CommonPropsWithChildren<{ '--space-display': 'flex' | 'inline-flex' }>;\n\n/**\n * 间距,设置组件之间的间距。\n * ```\n * 1. wrap是否还款,默认值:true\n * 2. block是否width:100%\n * ```\n */\nexport const Space = (props: SpaceProps) => {\n const supportFlexGap = isStyleNameSupport('gap');\n // const supportFlexGap = false;\n const align = (props.align || 'center') as string;\n const direction = props.direction || 'horizontal';\n const flexFullIndexList = toArray<number>(props.flexFullIndex);\n const gap = isUndefined(props.gap) ? 30 : props.gap;\n const gapArray = (isArray(gap) ? gap : [gap]) as number[];\n const verticalSize = px2rem(gapArray[0]);\n const horizontalSize = px2rem(gapArray[1] || gapArray[0]);\n const verticalHalfSize = `${parseFloat(verticalSize) / 2}rem`;\n const horizontalHalfSize = `${parseFloat(horizontalSize) / 2}rem`;\n\n const wrapperStyle = useMemo(() => {\n const style: CSSProperties = {};\n if (supportFlexGap) {\n style['--space-gap'] = `${verticalSize} ${horizontalSize}`;\n } else {\n style['--space-margin'] = `-${verticalHalfSize} -${horizontalHalfSize}`;\n }\n\n if (props.justifyContent) {\n style['--space-justify-content'] = props.justifyContent;\n }\n\n if (align) {\n style['--space-align-items'] = align;\n }\n return style;\n }, [\n align,\n horizontalHalfSize,\n horizontalSize,\n props.justifyContent,\n supportFlexGap,\n verticalHalfSize,\n verticalSize,\n ]);\n\n const childrenList = Children.toArray(props.children);\n\n const className = classNames('v-space', `v-space-${direction}`, {\n 'v-space-wrap': props.wrap,\n 'v-space-block': props.block,\n 'v-space-not-support-flex-gap': !supportFlexGap,\n });\n\n return withNativeProps(\n props,\n <div onClick={props.onClick} className={className} style={wrapperStyle}>\n {childrenList.map((item, index) => {\n const childrenStyle: CSSProperties = {};\n if (props.direction === 'vertical') {\n childrenStyle.width = '100%';\n }\n if (!supportFlexGap) {\n childrenStyle['--space-item-padding'] = `${verticalHalfSize} ${horizontalHalfSize}`;\n }\n\n if (flexFullIndexList.includes(index)) {\n childrenStyle.flex = 1;\n }\n\n return (\n <div className=\"v-space-item\" style={childrenStyle} key={index}>\n {item}\n </div>\n );\n })}\n </div>,\n );\n};\n","import { isPromise } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, Fragment, ReactNode, useEffect, useRef, useState } from 'react';\nimport { dynamicNode } from '../dynamic-node';\nimport { Progress } from '../progress';\nimport { Space } from '../space';\nimport { CommonPropsWithChildren } from '../utils/native-props';\nimport './style.less';\n\n/**\n * Button内置Var Style\n * ```\n * 1. --button-color button主色系\n * 2. --button-full-solid-bg-color button在solid填充模式下的背景色,默认值:--button-color\n * 3. --button-full-solid-text-color button在solid填充模式下的文字颜色,默认值:#fff\n * 4. --button-full-solid-loading-color button在solid填充模式下loading颜色,默认值:solid模式默认为白色,其他模式下为--button-color\n * 5. --button-full-solid-box-shadow button在solid填充模式下阴影设置,无默认值\n *\n * 6. --button-full-outline-bg-color button在outline填充模式下背景色,默认值:#fff\n * 7. --button-full-outline-box-shadow button在outline填充模式下阴影设置,无默认值\n *\n * 8. --button-border-radius button button边框圆角数值,默认值:10px\n * 9. --button-border-color button边框颜色,solid、outline模式下有效果\n * ```\n */\nexport type ButtonVarStyle = {\n '--button-color': CSSProperties['color'];\n '--button-font-size': CSSProperties['fontSize'];\n '--button-padding': CSSProperties['padding'];\n '--button-full-solid-bg-color': CSSProperties['backgroundColor'];\n '--button-full-solid-text-color': CSSProperties['color'];\n '--button-full-solid-loading-color': CSSProperties['color'];\n '--button-full-solid-box-shadow': CSSProperties['boxShadow'];\n '--button-full-outline-bg-color': CSSProperties['backgroundColor'];\n '--button-full-outline-box-shadow': CSSProperties['boxShadow'];\n '--button-border-radius': CSSProperties['borderRadius'];\n '--button-border-color': CSSProperties['borderColor'];\n};\n\nexport type ButtonProps = CommonPropsWithChildren<ButtonVarStyle> & {\n type?: 'default' | 'primary' | 'secondary' | 'danger';\n // 填充模式\n fill?: 'solid' | 'outline' | 'none';\n size?: 'mini' | 'small' | 'middle' | 'large';\n onClick?: (e) => void | Promise<void>;\n disabled?: boolean;\n inline?: boolean;\n ellipsis?: boolean;\n beforeIcon?: ReactNode;\n afterIcon?: ReactNode;\n stopPropagation?: boolean;\n loading?: boolean;\n /** loading全局蒙层,默认值:false */\n loadingMask?: boolean;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n};\n\nconst ButtonContent = (buttonProps: ButtonProps) => {\n if (buttonProps.beforeIcon || buttonProps.afterIcon || buttonProps.loading) {\n const progressSize = {\n mini: 20,\n small: 24,\n middle: 26,\n large: 30,\n };\n return (\n <Space justifyContent=\"center\" gap={10}>\n {buttonProps.loading && (\n <Fragment>\n {<Progress value={0.2} gap={3} size={progressSize[buttonProps.size || 'middle']} />}\n </Fragment>\n )}\n {buttonProps.beforeIcon && <Fragment>{buttonProps.beforeIcon}</Fragment>}\n <span className=\"v-button-text\">{buttonProps.children}</span>\n {buttonProps.afterIcon && <Fragment>{buttonProps.afterIcon}</Fragment>}\n </Space>\n );\n }\n return <Fragment>{buttonProps.children}</Fragment>;\n};\n\nexport const Button = (props: ButtonProps) => {\n const lockRef = useRef(false);\n const {\n children,\n disabled,\n loading,\n type = 'default',\n inline = false,\n fill = 'solid',\n ellipsis = true,\n size = 'middle',\n debounceDuration = 500,\n } = props;\n const [innerLoading, setInnerLoading] = useState(false);\n\n const loadingRst = innerLoading || loading;\n const className = classNames(\n 'v-button',\n `v-button-${type}`,\n {\n 'v-button-loading': loadingRst,\n 'v-button-inline': inline,\n 'v-button-ellipsis': ellipsis,\n },\n `v-button-full-${fill}`,\n `v-button-${size}`,\n props.className,\n );\n\n const handleClick = hooks.useDebounceClick((e) => {\n if (props.stopPropagation) {\n e.stopPropagation();\n }\n if (lockRef.current) return;\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n lockRef.current = true;\n setInnerLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n lockRef.current = false;\n setInnerLoading(false);\n });\n }\n }, debounceDuration);\n\n useEffect(() => {\n if (props.loadingMask) {\n if (loadingRst) {\n dynamicNode.append({ fixed: true, className: 'v-button-loading-mask' });\n } else {\n dynamicNode.remove();\n }\n }\n }, [loadingRst, props.loadingMask]);\n\n return (\n <Fragment>\n <div className=\"v-button-full-spinner\"></div>\n <button\n type=\"button\"\n className={className}\n disabled={disabled || loadingRst}\n style={props.style}\n onClick={handleClick}\n >\n <ButtonContent {...props} loading={loadingRst}>\n {children}\n </ButtonContent>\n </button>\n </Fragment>\n );\n};\n","import { isArray, isUndefined } from '@dimjs/lang';\nimport { TPlainObject } from '@flatbiz/utils';\nimport { CSSProperties } from 'react';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport { px2rem } from '../utils/pxrem';\nimport './style.less';\n\nexport type GridProps = {\n columns: number;\n columnHeight?: number;\n gap?: number | [number, number];\n} & CommonPropsWithChildren;\n\n/**\n * 网格布局\n * ```\n * 1. columns 水平方向上网格格数\n * 2. columnHeight 单个网格高度,视觉稿高度,数值将被转换成rem\n * 3. gap 网格间隙,默认值:30\n * a. number:上下左右相同\n * b. [number, number]: [上下,左右]\n * ```\n */\nexport const Grid = (props: GridProps) => {\n const gap = isUndefined(props.gap) ? 30 : props.gap;\n const gapArray = (isArray(gap) ? gap : [gap]) as number[];\n const style: CSSProperties & TPlainObject<string> = {\n '--grid-template-columns': `repeat(${props.columns}, 1fr)`,\n gap: `${px2rem(gapArray[0])} ${px2rem(gapArray[1] || gapArray[0])}`,\n };\n\n if (props.columnHeight) {\n style.gridAutoRows = px2rem(props.columnHeight);\n }\n\n return withNativeProps(\n props,\n <div className=\"v-grid\" style={style}>\n {props.children}\n </div>,\n );\n};\n","import { TPlainObject } from '@flatbiz/utils';\nimport { CSSProperties, FC } from 'react';\nimport { NativeProps, withNativeProps } from '../utils/native-props';\n\nexport type GridItemProps = React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> & {\n xSpan?: number;\n ySpan?: number;\n} & NativeProps;\n\n/**\n * Grid单元格\n * ```\n * 1. xSpan: 单元格水平方向格数\n * 1. ySpan: 单元格竖直方向格数\n * ```\n */\nexport const GridItem: FC<GridItemProps> = (props) => {\n const { xSpan = 1, ySpan = 1, ...otherProps } = props;\n const style: CSSProperties & TPlainObject<string> = {};\n if (xSpan > 1) {\n style['--grid-column'] = `span ${xSpan || 1}`;\n }\n if (ySpan > 1) {\n style['--grid-row'] = `span ${ySpan || 1}`;\n }\n\n return withNativeProps(\n props,\n <div {...otherProps} className={'v-grid-item'} style={style}>\n {props.children}\n </div>,\n );\n};\n","let updateQueue = makeQueue();\nconst raf = fn => schedule(fn, updateQueue);\nlet writeQueue = makeQueue();\n\nraf.write = fn => schedule(fn, writeQueue);\n\nlet onStartQueue = makeQueue();\n\nraf.onStart = fn => schedule(fn, onStartQueue);\n\nlet onFrameQueue = makeQueue();\n\nraf.onFrame = fn => schedule(fn, onFrameQueue);\n\nlet onFinishQueue = makeQueue();\n\nraf.onFinish = fn => schedule(fn, onFinishQueue);\n\nlet timeouts = [];\n\nraf.setTimeout = (handler, ms) => {\n let time = raf.now() + ms;\n\n let cancel = () => {\n let i = timeouts.findIndex(t => t.cancel == cancel);\n if (~i) timeouts.splice(i, 1);\n pendingCount -= ~i ? 1 : 0;\n };\n\n let timeout = {\n time,\n handler,\n cancel\n };\n timeouts.splice(findTimeout(time), 0, timeout);\n pendingCount += 1;\n start();\n return timeout;\n};\n\nlet findTimeout = time => ~(~timeouts.findIndex(t => t.time > time) || ~timeouts.length);\n\nraf.cancel = fn => {\n onStartQueue.delete(fn);\n onFrameQueue.delete(fn);\n onFinishQueue.delete(fn);\n updateQueue.delete(fn);\n writeQueue.delete(fn);\n};\n\nraf.sync = fn => {\n sync = true;\n raf.batchedUpdates(fn);\n sync = false;\n};\n\nraf.throttle = fn => {\n let lastArgs;\n\n function queuedFn() {\n try {\n fn(...lastArgs);\n } finally {\n lastArgs = null;\n }\n }\n\n function throttled(...args) {\n lastArgs = args;\n raf.onStart(queuedFn);\n }\n\n throttled.handler = fn;\n\n throttled.cancel = () => {\n onStartQueue.delete(queuedFn);\n lastArgs = null;\n };\n\n return throttled;\n};\n\nlet nativeRaf = typeof window != 'undefined' ? window.requestAnimationFrame : () => {};\n\nraf.use = impl => nativeRaf = impl;\n\nraf.now = typeof performance != 'undefined' ? () => performance.now() : Date.now;\n\nraf.batchedUpdates = fn => fn();\n\nraf.catch = console.error;\nraf.frameLoop = 'always';\n\nraf.advance = () => {\n if (raf.frameLoop !== 'demand') {\n console.warn('Cannot call the manual advancement of rafz whilst frameLoop is not set as demand');\n } else {\n update();\n }\n};\n\nlet ts = -1;\nlet pendingCount = 0;\nlet sync = false;\n\nfunction schedule(fn, queue) {\n if (sync) {\n queue.delete(fn);\n fn(0);\n } else {\n queue.add(fn);\n start();\n }\n}\n\nfunction start() {\n if (ts < 0) {\n ts = 0;\n\n if (raf.frameLoop !== 'demand') {\n nativeRaf(loop);\n }\n }\n}\n\nfunction stop() {\n ts = -1;\n}\n\nfunction loop() {\n if (~ts) {\n nativeRaf(loop);\n raf.batchedUpdates(update);\n }\n}\n\nfunction update() {\n let prevTs = ts;\n ts = raf.now();\n let count = findTimeout(ts);\n\n if (count) {\n eachSafely(timeouts.splice(0, count), t => t.handler());\n pendingCount -= count;\n }\n\n if (!pendingCount) {\n stop();\n return;\n }\n\n onStartQueue.flush();\n updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);\n onFrameQueue.flush();\n writeQueue.flush();\n onFinishQueue.flush();\n}\n\nfunction makeQueue() {\n let next = new Set();\n let current = next;\n return {\n add(fn) {\n pendingCount += current == next && !next.has(fn) ? 1 : 0;\n next.add(fn);\n },\n\n delete(fn) {\n pendingCount -= current == next && next.has(fn) ? 1 : 0;\n return next.delete(fn);\n },\n\n flush(arg) {\n if (current.size) {\n next = new Set();\n pendingCount -= current.size;\n eachSafely(current, fn => fn(arg) && next.add(fn));\n pendingCount += next.size;\n current = next;\n }\n }\n\n };\n}\n\nfunction eachSafely(values, each) {\n values.forEach(value => {\n try {\n each(value);\n } catch (e) {\n raf.catch(e);\n }\n });\n}\n\nconst __raf = {\n count() {\n return pendingCount;\n },\n\n isRunning() {\n return ts >= 0;\n },\n\n clear() {\n ts = -1;\n timeouts = [];\n onStartQueue = makeQueue();\n updateQueue = makeQueue();\n onFrameQueue = makeQueue();\n writeQueue = makeQueue();\n onFinishQueue = makeQueue();\n pendingCount = 0;\n }\n\n};\n\nexport { __raf, raf };\n","import { raf } from '@react-spring/rafz';\nexport { raf } from '@react-spring/rafz';\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nfunction noop() {}\nconst defineHidden = (obj, key, value) => Object.defineProperty(obj, key, {\n value,\n writable: true,\n configurable: true\n});\nconst is = {\n arr: Array.isArray,\n obj: a => !!a && a.constructor.name === 'Object',\n fun: a => typeof a === 'function',\n str: a => typeof a === 'string',\n num: a => typeof a === 'number',\n und: a => a === undefined\n};\nfunction isEqual(a, b) {\n if (is.arr(a)) {\n if (!is.arr(b) || a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n }\n\n return a === b;\n}\nconst each = (obj, fn) => obj.forEach(fn);\nfunction eachProp(obj, fn, ctx) {\n if (is.arr(obj)) {\n for (let i = 0; i < obj.length; i++) {\n fn.call(ctx, obj[i], `${i}`);\n }\n\n return;\n }\n\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(ctx, obj[key], key);\n }\n }\n}\nconst toArray = a => is.und(a) ? [] : is.arr(a) ? a : [a];\nfunction flush(queue, iterator) {\n if (queue.size) {\n const items = Array.from(queue);\n queue.clear();\n each(items, iterator);\n }\n}\nconst flushCalls = (queue, ...args) => flush(queue, fn => fn(...args));\nconst isSSR = () => typeof window === 'undefined' || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\n\nlet createStringInterpolator$1;\nlet to;\nlet colors$1 = null;\nlet skipAnimation = false;\nlet willAdvance = noop;\nconst assign = globals => {\n if (globals.to) to = globals.to;\n if (globals.now) raf.now = globals.now;\n if (globals.colors !== undefined) colors$1 = globals.colors;\n if (globals.skipAnimation != null) skipAnimation = globals.skipAnimation;\n if (globals.createStringInterpolator) createStringInterpolator$1 = globals.createStringInterpolator;\n if (globals.requestAnimationFrame) raf.use(globals.requestAnimationFrame);\n if (globals.batchedUpdates) raf.batchedUpdates = globals.batchedUpdates;\n if (globals.willAdvance) willAdvance = globals.willAdvance;\n if (globals.frameLoop) raf.frameLoop = globals.frameLoop;\n};\n\nvar globals = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get createStringInterpolator () { return createStringInterpolator$1; },\n get to () { return to; },\n get colors () { return colors$1; },\n get skipAnimation () { return skipAnimation; },\n get willAdvance () { return willAdvance; },\n assign: assign\n});\n\nconst startQueue = new Set();\nlet currentFrame = [];\nlet prevFrame = [];\nlet priority = 0;\nconst frameLoop = {\n get idle() {\n return !startQueue.size && !currentFrame.length;\n },\n\n start(animation) {\n if (priority > animation.priority) {\n startQueue.add(animation);\n raf.onStart(flushStartQueue);\n } else {\n startSafely(animation);\n raf(advance);\n }\n },\n\n advance,\n\n sort(animation) {\n if (priority) {\n raf.onFrame(() => frameLoop.sort(animation));\n } else {\n const prevIndex = currentFrame.indexOf(animation);\n\n if (~prevIndex) {\n currentFrame.splice(prevIndex, 1);\n startUnsafely(animation);\n }\n }\n },\n\n clear() {\n currentFrame = [];\n startQueue.clear();\n }\n\n};\n\nfunction flushStartQueue() {\n startQueue.forEach(startSafely);\n startQueue.clear();\n raf(advance);\n}\n\nfunction startSafely(animation) {\n if (!currentFrame.includes(animation)) startUnsafely(animation);\n}\n\nfunction startUnsafely(animation) {\n currentFrame.splice(findIndex(currentFrame, other => other.priority > animation.priority), 0, animation);\n}\n\nfunction advance(dt) {\n const nextFrame = prevFrame;\n\n for (let i = 0; i < currentFrame.length; i++) {\n const animation = currentFrame[i];\n priority = animation.priority;\n\n if (!animation.idle) {\n willAdvance(animation);\n animation.advance(dt);\n\n if (!animation.idle) {\n nextFrame.push(animation);\n }\n }\n }\n\n priority = 0;\n prevFrame = currentFrame;\n prevFrame.length = 0;\n currentFrame = nextFrame;\n return currentFrame.length > 0;\n}\n\nfunction findIndex(arr, test) {\n const index = arr.findIndex(test);\n return index < 0 ? arr.length : index;\n}\n\nconst colors = {\n transparent: 0x00000000,\n aliceblue: 0xf0f8ffff,\n antiquewhite: 0xfaebd7ff,\n aqua: 0x00ffffff,\n aquamarine: 0x7fffd4ff,\n azure: 0xf0ffffff,\n beige: 0xf5f5dcff,\n bisque: 0xffe4c4ff,\n black: 0x000000ff,\n blanchedalmond: 0xffebcdff,\n blue: 0x0000ffff,\n blueviolet: 0x8a2be2ff,\n brown: 0xa52a2aff,\n burlywood: 0xdeb887ff,\n burntsienna: 0xea7e5dff,\n cadetblue: 0x5f9ea0ff,\n chartreuse: 0x7fff00ff,\n chocolate: 0xd2691eff,\n coral: 0xff7f50ff,\n cornflowerblue: 0x6495edff,\n cornsilk: 0xfff8dcff,\n crimson: 0xdc143cff,\n cyan: 0x00ffffff,\n darkblue: 0x00008bff,\n darkcyan: 0x008b8bff,\n darkgoldenrod: 0xb8860bff,\n darkgray: 0xa9a9a9ff,\n darkgreen: 0x006400ff,\n darkgrey: 0xa9a9a9ff,\n darkkhaki: 0xbdb76bff,\n darkmagenta: 0x8b008bff,\n darkolivegreen: 0x556b2fff,\n darkorange: 0xff8c00ff,\n darkorchid: 0x9932ccff,\n darkred: 0x8b0000ff,\n darksalmon: 0xe9967aff,\n darkseagreen: 0x8fbc8fff,\n darkslateblue: 0x483d8bff,\n darkslategray: 0x2f4f4fff,\n darkslategrey: 0x2f4f4fff,\n darkturquoise: 0x00ced1ff,\n darkviolet: 0x9400d3ff,\n deeppink: 0xff1493ff,\n deepskyblue: 0x00bfffff,\n dimgray: 0x696969ff,\n dimgrey: 0x696969ff,\n dodgerblue: 0x1e90ffff,\n firebrick: 0xb22222ff,\n floralwhite: 0xfffaf0ff,\n forestgreen: 0x228b22ff,\n fuchsia: 0xff00ffff,\n gainsboro: 0xdcdcdcff,\n ghostwhite: 0xf8f8ffff,\n gold: 0xffd700ff,\n goldenrod: 0xdaa520ff,\n gray: 0x808080ff,\n green: 0x008000ff,\n greenyellow: 0xadff2fff,\n grey: 0x808080ff,\n honeydew: 0xf0fff0ff,\n hotpink: 0xff69b4ff,\n indianred: 0xcd5c5cff,\n indigo: 0x4b0082ff,\n ivory: 0xfffff0ff,\n khaki: 0xf0e68cff,\n lavender: 0xe6e6faff,\n lavenderblush: 0xfff0f5ff,\n lawngreen: 0x7cfc00ff,\n lemonchiffon: 0xfffacdff,\n lightblue: 0xadd8e6ff,\n lightcoral: 0xf08080ff,\n lightcyan: 0xe0ffffff,\n lightgoldenrodyellow: 0xfafad2ff,\n lightgray: 0xd3d3d3ff,\n lightgreen: 0x90ee90ff,\n lightgrey: 0xd3d3d3ff,\n lightpink: 0xffb6c1ff,\n lightsalmon: 0xffa07aff,\n lightseagreen: 0x20b2aaff,\n lightskyblue: 0x87cefaff,\n lightslategray: 0x778899ff,\n lightslategrey: 0x778899ff,\n lightsteelblue: 0xb0c4deff,\n lightyellow: 0xffffe0ff,\n lime: 0x00ff00ff,\n limegreen: 0x32cd32ff,\n linen: 0xfaf0e6ff,\n magenta: 0xff00ffff,\n maroon: 0x800000ff,\n mediumaquamarine: 0x66cdaaff,\n mediumblue: 0x0000cdff,\n mediumorchid: 0xba55d3ff,\n mediumpurple: 0x9370dbff,\n mediumseagreen: 0x3cb371ff,\n mediumslateblue: 0x7b68eeff,\n mediumspringgreen: 0x00fa9aff,\n mediumturquoise: 0x48d1ccff,\n mediumvioletred: 0xc71585ff,\n midnightblue: 0x191970ff,\n mintcream: 0xf5fffaff,\n mistyrose: 0xffe4e1ff,\n moccasin: 0xffe4b5ff,\n navajowhite: 0xffdeadff,\n navy: 0x000080ff,\n oldlace: 0xfdf5e6ff,\n olive: 0x808000ff,\n olivedrab: 0x6b8e23ff,\n orange: 0xffa500ff,\n orangered: 0xff4500ff,\n orchid: 0xda70d6ff,\n palegoldenrod: 0xeee8aaff,\n palegreen: 0x98fb98ff,\n paleturquoise: 0xafeeeeff,\n palevioletred: 0xdb7093ff,\n papayawhip: 0xffefd5ff,\n peachpuff: 0xffdab9ff,\n peru: 0xcd853fff,\n pink: 0xffc0cbff,\n plum: 0xdda0ddff,\n powderblue: 0xb0e0e6ff,\n purple: 0x800080ff,\n rebeccapurple: 0x663399ff,\n red: 0xff0000ff,\n rosybrown: 0xbc8f8fff,\n royalblue: 0x4169e1ff,\n saddlebrown: 0x8b4513ff,\n salmon: 0xfa8072ff,\n sandybrown: 0xf4a460ff,\n seagreen: 0x2e8b57ff,\n seashell: 0xfff5eeff,\n sienna: 0xa0522dff,\n silver: 0xc0c0c0ff,\n skyblue: 0x87ceebff,\n slateblue: 0x6a5acdff,\n slategray: 0x708090ff,\n slategrey: 0x708090ff,\n snow: 0xfffafaff,\n springgreen: 0x00ff7fff,\n steelblue: 0x4682b4ff,\n tan: 0xd2b48cff,\n teal: 0x008080ff,\n thistle: 0xd8bfd8ff,\n tomato: 0xff6347ff,\n turquoise: 0x40e0d0ff,\n violet: 0xee82eeff,\n wheat: 0xf5deb3ff,\n white: 0xffffffff,\n whitesmoke: 0xf5f5f5ff,\n yellow: 0xffff00ff,\n yellowgreen: 0x9acd32ff\n};\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...parts) {\n return '\\\\(\\\\s*(' + parts.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nconst rgb = new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER));\nconst rgba = new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER));\nconst hsl = new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE));\nconst hsla = new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER));\nconst hex3 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex4 = /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/;\nconst hex6 = /^#([0-9a-fA-F]{6})$/;\nconst hex8 = /^#([0-9a-fA-F]{8})$/;\n\nfunction normalizeColor(color) {\n let match;\n\n if (typeof color === 'number') {\n return color >>> 0 === color && color >= 0 && color <= 0xffffffff ? color : null;\n }\n\n if (match = hex6.exec(color)) return parseInt(match[1] + 'ff', 16) >>> 0;\n\n if (colors$1 && colors$1[color] !== undefined) {\n return colors$1[color];\n }\n\n if (match = rgb.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | 0x000000ff) >>> 0;\n }\n\n if (match = rgba.exec(color)) {\n return (parse255(match[1]) << 24 | parse255(match[2]) << 16 | parse255(match[3]) << 8 | parse1(match[4])) >>> 0;\n }\n\n if (match = hex3.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + 'ff', 16) >>> 0;\n }\n\n if (match = hex8.exec(color)) return parseInt(match[1], 16) >>> 0;\n\n if (match = hex4.exec(color)) {\n return parseInt(match[1] + match[1] + match[2] + match[2] + match[3] + match[3] + match[4] + match[4], 16) >>> 0;\n }\n\n if (match = hsl.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | 0x000000ff) >>> 0;\n }\n\n if (match = hsla.exec(color)) {\n return (hslToRgb(parse360(match[1]), parsePercentage(match[2]), parsePercentage(match[3])) | parse1(match[4])) >>> 0;\n }\n\n return null;\n}\n\nfunction hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\nfunction hslToRgb(h, s, l) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n return Math.round(r * 255) << 24 | Math.round(g * 255) << 16 | Math.round(b * 255) << 8;\n}\n\nfunction parse255(str) {\n const int = parseInt(str, 10);\n if (int < 0) return 0;\n if (int > 255) return 255;\n return int;\n}\n\nfunction parse360(str) {\n const int = parseFloat(str);\n return (int % 360 + 360) % 360 / 360;\n}\n\nfunction parse1(str) {\n const num = parseFloat(str);\n if (num < 0) return 0;\n if (num > 1) return 255;\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n const int = parseFloat(str);\n if (int < 0) return 0;\n if (int > 100) return 1;\n return int / 100;\n}\n\nfunction colorToRgba(input) {\n let int32Color = normalizeColor(input);\n if (int32Color === null) return input;\n int32Color = int32Color || 0;\n let r = (int32Color & 0xff000000) >>> 24;\n let g = (int32Color & 0x00ff0000) >>> 16;\n let b = (int32Color & 0x0000ff00) >>> 8;\n let a = (int32Color & 0x000000ff) / 255;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n}\n\nconst createInterpolator = (range, output, extrapolate) => {\n if (is.fun(range)) {\n return range;\n }\n\n if (is.arr(range)) {\n return createInterpolator({\n range,\n output: output,\n extrapolate\n });\n }\n\n if (is.str(range.output[0])) {\n return createStringInterpolator$1(range);\n }\n\n const config = range;\n const outputRange = config.output;\n const inputRange = config.range || [0, 1];\n const extrapolateLeft = config.extrapolateLeft || config.extrapolate || 'extend';\n const extrapolateRight = config.extrapolateRight || config.extrapolate || 'extend';\n\n const easing = config.easing || (t => t);\n\n return input => {\n const range = findRange(input, inputRange);\n return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight, config.map);\n };\n};\n\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight, map) {\n let result = map ? map(input) : input;\n\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') return result;else if (extrapolateLeft === 'clamp') result = inputMin;\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') return result;else if (extrapolateRight === 'clamp') result = inputMax;\n }\n\n if (outputMin === outputMax) return outputMin;\n if (inputMin === inputMax) return input <= inputMin ? outputMin : outputMax;\n if (inputMin === -Infinity) result = -result;else if (inputMax === Infinity) result = result - inputMin;else result = (result - inputMin) / (inputMax - inputMin);\n result = easing(result);\n if (outputMin === -Infinity) result = -result;else if (outputMax === Infinity) result = result + outputMin;else result = result * (outputMax - outputMin) + outputMin;\n return result;\n}\n\nfunction findRange(input, inputRange) {\n for (var i = 1; i < inputRange.length - 1; ++i) if (inputRange[i] >= input) break;\n\n return i - 1;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst $get = Symbol.for('FluidValue.get');\nconst $observers = Symbol.for('FluidValue.observers');\n\nconst hasFluidValue = arg => Boolean(arg && arg[$get]);\n\nconst getFluidValue = arg => arg && arg[$get] ? arg[$get]() : arg;\n\nconst getFluidObservers = target => target[$observers] || null;\n\nfunction callFluidObserver(observer, event) {\n if (observer.eventObserved) {\n observer.eventObserved(event);\n } else {\n observer(event);\n }\n}\n\nfunction callFluidObservers(target, event) {\n let observers = target[$observers];\n\n if (observers) {\n observers.forEach(observer => {\n callFluidObserver(observer, event);\n });\n }\n}\n\nclass FluidValue {\n constructor(get) {\n this[$get] = void 0;\n this[$observers] = void 0;\n\n if (!get && !(get = this.get)) {\n throw Error('Unknown getter');\n }\n\n setFluidGetter(this, get);\n }\n\n}\n\nconst setFluidGetter = (target, get) => setHidden(target, $get, get);\n\nfunction addFluidObserver(target, observer) {\n if (target[$get]) {\n let observers = target[$observers];\n\n if (!observers) {\n setHidden(target, $observers, observers = new Set());\n }\n\n if (!observers.has(observer)) {\n observers.add(observer);\n\n if (target.observerAdded) {\n target.observerAdded(observers.size, observer);\n }\n }\n }\n\n return observer;\n}\n\nfunction removeFluidObserver(target, observer) {\n let observers = target[$observers];\n\n if (observers && observers.has(observer)) {\n const count = observers.size - 1;\n\n if (count) {\n observers.delete(observer);\n } else {\n target[$observers] = null;\n }\n\n if (target.observerRemoved) {\n target.observerRemoved(count, observer);\n }\n }\n}\n\nconst setHidden = (target, key, value) => Object.defineProperty(target, key, {\n value,\n writable: true,\n configurable: true\n});\n\nconst numberRegex = /[+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\nconst colorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d\\.]+%?\\))/gi;\nconst unitRegex = new RegExp(`(${numberRegex.source})(%|[a-z]+)`, 'i');\nconst rgbaRegex = /rgba\\(([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+), ([0-9\\.-]+)\\)/gi;\nconst cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\nconst variableToRgba = input => {\n const [token, fallback] = parseCSSVariable(input);\n\n if (!token || isSSR()) {\n return input;\n }\n\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(token);\n\n if (value) {\n return value.trim();\n } else if (fallback && fallback.startsWith('--')) {\n const _value = window.getComputedStyle(document.documentElement).getPropertyValue(fallback);\n\n if (_value) {\n return _value;\n } else {\n return input;\n }\n } else if (fallback && cssVariableRegex.test(fallback)) {\n return variableToRgba(fallback);\n } else if (fallback) {\n return fallback;\n }\n\n return input;\n};\n\nconst parseCSSVariable = current => {\n const match = cssVariableRegex.exec(current);\n if (!match) return [,];\n const [, token, fallback] = match;\n return [token, fallback];\n};\n\nlet namedColorRegex;\n\nconst rgbaRound = (_, p1, p2, p3, p4) => `rgba(${Math.round(p1)}, ${Math.round(p2)}, ${Math.round(p3)}, ${p4})`;\n\nconst createStringInterpolator = config => {\n if (!namedColorRegex) namedColorRegex = colors$1 ? new RegExp(`(${Object.keys(colors$1).join('|')})(?!\\\\w)`, 'g') : /^\\b$/;\n const output = config.output.map(value => {\n return getFluidValue(value).replace(cssVariableRegex, variableToRgba).replace(colorRegex, colorToRgba).replace(namedColorRegex, colorToRgba);\n });\n const keyframes = output.map(value => value.match(numberRegex).map(Number));\n const outputRanges = keyframes[0].map((_, i) => keyframes.map(values => {\n if (!(i in values)) {\n throw Error('The arity of each \"output\" value must be equal');\n }\n\n return values[i];\n }));\n const interpolators = outputRanges.map(output => createInterpolator(_extends({}, config, {\n output\n })));\n return input => {\n var _output$find;\n\n const missingUnit = !unitRegex.test(output[0]) && ((_output$find = output.find(value => unitRegex.test(value))) == null ? void 0 : _output$find.replace(numberRegex, ''));\n let i = 0;\n return output[0].replace(numberRegex, () => `${interpolators[i++](input)}${missingUnit || ''}`).replace(rgbaRegex, rgbaRound);\n };\n};\n\nconst prefix = 'react-spring: ';\n\nconst once = fn => {\n const func = fn;\n let called = false;\n\n if (typeof func != 'function') {\n throw new TypeError(`${prefix}once requires a function parameter`);\n }\n\n return (...args) => {\n if (!called) {\n func(...args);\n called = true;\n }\n };\n};\n\nconst warnInterpolate = once(console.warn);\nfunction deprecateInterpolate() {\n warnInterpolate(`${prefix}The \"interpolate\" function is deprecated in v9 (use \"to\" instead)`);\n}\nconst warnDirectCall = once(console.warn);\nfunction deprecateDirectCall() {\n warnDirectCall(`${prefix}Directly calling start instead of using the api object is deprecated in v9 (use \".start\" instead), this will be removed in later 0.X.0 versions`);\n}\n\nfunction isAnimatedString(value) {\n return is.str(value) && (value[0] == '#' || /\\d/.test(value) || !isSSR() && cssVariableRegex.test(value) || value in (colors$1 || {}));\n}\n\nconst useIsomorphicLayoutEffect = isSSR() ? useEffect : useLayoutEffect;\n\nconst useIsMounted = () => {\n const isMounted = useRef(false);\n useIsomorphicLayoutEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return isMounted;\n};\n\nfunction useForceUpdate() {\n const update = useState()[1];\n const isMounted = useIsMounted();\n return () => {\n if (isMounted.current) {\n update(Math.random());\n }\n };\n}\n\nfunction useMemoOne(getResult, inputs) {\n const [initial] = useState(() => ({\n inputs,\n result: getResult()\n }));\n const committed = useRef();\n const prevCache = committed.current;\n let cache = prevCache;\n\n if (cache) {\n const useCache = Boolean(inputs && cache.inputs && areInputsEqual(inputs, cache.inputs));\n\n if (!useCache) {\n cache = {\n inputs,\n result: getResult()\n };\n }\n } else {\n cache = initial;\n }\n\n useEffect(() => {\n committed.current = cache;\n\n if (prevCache == initial) {\n initial.inputs = initial.result = undefined;\n }\n }, [cache]);\n return cache.result;\n}\n\nfunction areInputsEqual(next, prev) {\n if (next.length !== prev.length) {\n return false;\n }\n\n for (let i = 0; i < next.length; i++) {\n if (next[i] !== prev[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nconst useOnce = effect => useEffect(effect, emptyDeps);\nconst emptyDeps = [];\n\nfunction usePrev(value) {\n const prevRef = useRef();\n useEffect(() => {\n prevRef.current = value;\n });\n return prevRef.current;\n}\n\nconst useReducedMotion = () => {\n const [reducedMotion, setReducedMotion] = useState(null);\n useIsomorphicLayoutEffect(() => {\n const mql = window.matchMedia('(prefers-reduced-motion)');\n\n const handleMediaChange = e => {\n setReducedMotion(e.matches);\n assign({\n skipAnimation: e.matches\n });\n };\n\n handleMediaChange(mql);\n mql.addEventListener('change', handleMediaChange);\n return () => {\n mql.removeEventListener('change', handleMediaChange);\n };\n }, []);\n return reducedMotion;\n};\n\nexport { FluidValue, globals as Globals, addFluidObserver, callFluidObserver, callFluidObservers, colorToRgba, colors, createInterpolator, createStringInterpolator, defineHidden, deprecateDirectCall, deprecateInterpolate, each, eachProp, flush, flushCalls, frameLoop, getFluidObservers, getFluidValue, hasFluidValue, hex3, hex4, hex6, hex8, hsl, hsla, is, isAnimatedString, isEqual, isSSR, noop, removeFluidObserver, rgb, rgba, setFluidGetter, toArray, useForceUpdate, useIsomorphicLayoutEffect, useMemoOne, useOnce, usePrev, useReducedMotion };\n","import { defineHidden, is, createInterpolator, eachProp, hasFluidValue, getFluidValue, each, isAnimatedString, useForceUpdate, useIsomorphicLayoutEffect, addFluidObserver, removeFluidObserver, raf, useOnce } from '@react-spring/shared';\nimport * as React from 'react';\nimport { forwardRef, useRef, useCallback, useEffect } from 'react';\n\nconst $node = Symbol.for('Animated:node');\nconst isAnimated = value => !!value && value[$node] === value;\nconst getAnimated = owner => owner && owner[$node];\nconst setAnimated = (owner, node) => defineHidden(owner, $node, node);\nconst getPayload = owner => owner && owner[$node] && owner[$node].getPayload();\nclass Animated {\n constructor() {\n this.payload = void 0;\n setAnimated(this, this);\n }\n\n getPayload() {\n return this.payload || [];\n }\n\n}\n\nclass AnimatedValue extends Animated {\n constructor(_value) {\n super();\n this.done = true;\n this.elapsedTime = void 0;\n this.lastPosition = void 0;\n this.lastVelocity = void 0;\n this.v0 = void 0;\n this.durationProgress = 0;\n this._value = _value;\n\n if (is.num(this._value)) {\n this.lastPosition = this._value;\n }\n }\n\n static create(value) {\n return new AnimatedValue(value);\n }\n\n getPayload() {\n return [this];\n }\n\n getValue() {\n return this._value;\n }\n\n setValue(value, step) {\n if (is.num(value)) {\n this.lastPosition = value;\n\n if (step) {\n value = Math.round(value / step) * step;\n\n if (this.done) {\n this.lastPosition = value;\n }\n }\n }\n\n if (this._value === value) {\n return false;\n }\n\n this._value = value;\n return true;\n }\n\n reset() {\n const {\n done\n } = this;\n this.done = false;\n\n if (is.num(this._value)) {\n this.elapsedTime = 0;\n this.durationProgress = 0;\n this.lastPosition = this._value;\n if (done) this.lastVelocity = null;\n this.v0 = null;\n }\n }\n\n}\n\nclass AnimatedString extends AnimatedValue {\n constructor(value) {\n super(0);\n this._string = null;\n this._toString = void 0;\n this._toString = createInterpolator({\n output: [value, value]\n });\n }\n\n static create(value) {\n return new AnimatedString(value);\n }\n\n getValue() {\n let value = this._string;\n return value == null ? this._string = this._toString(this._value) : value;\n }\n\n setValue(value) {\n if (is.str(value)) {\n if (value == this._string) {\n return false;\n }\n\n this._string = value;\n this._value = 1;\n } else if (super.setValue(value)) {\n this._string = null;\n } else {\n return false;\n }\n\n return true;\n }\n\n reset(goal) {\n if (goal) {\n this._toString = createInterpolator({\n output: [this.getValue(), goal]\n });\n }\n\n this._value = 0;\n super.reset();\n }\n\n}\n\nconst TreeContext = {\n dependencies: null\n};\n\nclass AnimatedObject extends Animated {\n constructor(source) {\n super();\n this.source = source;\n this.setValue(source);\n }\n\n getValue(animated) {\n const values = {};\n eachProp(this.source, (source, key) => {\n if (isAnimated(source)) {\n values[key] = source.getValue(animated);\n } else if (hasFluidValue(source)) {\n values[key] = getFluidValue(source);\n } else if (!animated) {\n values[key] = source;\n }\n });\n return values;\n }\n\n setValue(source) {\n this.source = source;\n this.payload = this._makePayload(source);\n }\n\n reset() {\n if (this.payload) {\n each(this.payload, node => node.reset());\n }\n }\n\n _makePayload(source) {\n if (source) {\n const payload = new Set();\n eachProp(source, this._addToPayload, payload);\n return Array.from(payload);\n }\n }\n\n _addToPayload(source) {\n if (TreeContext.dependencies && hasFluidValue(source)) {\n TreeContext.dependencies.add(source);\n }\n\n const payload = getPayload(source);\n\n if (payload) {\n each(payload, node => this.add(node));\n }\n }\n\n}\n\nclass AnimatedArray extends AnimatedObject {\n constructor(source) {\n super(source);\n }\n\n static create(source) {\n return new AnimatedArray(source);\n }\n\n getValue() {\n return this.source.map(node => node.getValue());\n }\n\n setValue(source) {\n const payload = this.getPayload();\n\n if (source.length == payload.length) {\n return payload.map((node, i) => node.setValue(source[i])).some(Boolean);\n }\n\n super.setValue(source.map(makeAnimated));\n return true;\n }\n\n}\n\nfunction makeAnimated(value) {\n const nodeType = isAnimatedString(value) ? AnimatedString : AnimatedValue;\n return nodeType.create(value);\n}\n\nfunction getAnimatedType(value) {\n const parentNode = getAnimated(value);\n return parentNode ? parentNode.constructor : is.arr(value) ? AnimatedArray : isAnimatedString(value) ? AnimatedString : AnimatedValue;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst withAnimated = (Component, host) => {\n const hasInstance = !is.fun(Component) || Component.prototype && Component.prototype.isReactComponent;\n return forwardRef((givenProps, givenRef) => {\n const instanceRef = useRef(null);\n const ref = hasInstance && useCallback(value => {\n instanceRef.current = updateRef(givenRef, value);\n }, [givenRef]);\n const [props, deps] = getAnimatedState(givenProps, host);\n const forceUpdate = useForceUpdate();\n\n const callback = () => {\n const instance = instanceRef.current;\n\n if (hasInstance && !instance) {\n return;\n }\n\n const didUpdate = instance ? host.applyAnimatedValues(instance, props.getValue(true)) : false;\n\n if (didUpdate === false) {\n forceUpdate();\n }\n };\n\n const observer = new PropsObserver(callback, deps);\n const observerRef = useRef();\n useIsomorphicLayoutEffect(() => {\n observerRef.current = observer;\n each(deps, dep => addFluidObserver(dep, observer));\n return () => {\n if (observerRef.current) {\n each(observerRef.current.deps, dep => removeFluidObserver(dep, observerRef.current));\n raf.cancel(observerRef.current.update);\n }\n };\n });\n useEffect(callback, []);\n useOnce(() => () => {\n const observer = observerRef.current;\n each(observer.deps, dep => removeFluidObserver(dep, observer));\n });\n const usedProps = host.getComponentProps(props.getValue());\n return React.createElement(Component, _extends({}, usedProps, {\n ref: ref\n }));\n });\n};\n\nclass PropsObserver {\n constructor(update, deps) {\n this.update = update;\n this.deps = deps;\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n raf.write(this.update);\n }\n }\n\n}\n\nfunction getAnimatedState(props, host) {\n const dependencies = new Set();\n TreeContext.dependencies = dependencies;\n if (props.style) props = _extends({}, props, {\n style: host.createAnimatedStyle(props.style)\n });\n props = new AnimatedObject(props);\n TreeContext.dependencies = null;\n return [props, dependencies];\n}\n\nfunction updateRef(ref, value) {\n if (ref) {\n if (is.fun(ref)) ref(value);else ref.current = value;\n }\n\n return value;\n}\n\nconst cacheKey = Symbol.for('AnimatedComponent');\nconst createHost = (components, {\n applyAnimatedValues: _applyAnimatedValues = () => false,\n createAnimatedStyle: _createAnimatedStyle = style => new AnimatedObject(style),\n getComponentProps: _getComponentProps = props => props\n} = {}) => {\n const hostConfig = {\n applyAnimatedValues: _applyAnimatedValues,\n createAnimatedStyle: _createAnimatedStyle,\n getComponentProps: _getComponentProps\n };\n\n const animated = Component => {\n const displayName = getDisplayName(Component) || 'Anonymous';\n\n if (is.str(Component)) {\n Component = animated[Component] || (animated[Component] = withAnimated(Component, hostConfig));\n } else {\n Component = Component[cacheKey] || (Component[cacheKey] = withAnimated(Component, hostConfig));\n }\n\n Component.displayName = `Animated(${displayName})`;\n return Component;\n };\n\n eachProp(components, (Component, key) => {\n if (is.arr(components)) {\n key = getDisplayName(Component);\n }\n\n animated[key] = animated(Component);\n });\n return {\n animated\n };\n};\n\nconst getDisplayName = arg => is.str(arg) ? arg : arg && is.str(arg.displayName) ? arg.displayName : is.fun(arg) && arg.name || null;\n\nexport { Animated, AnimatedArray, AnimatedObject, AnimatedString, AnimatedValue, createHost, getAnimated, getAnimatedType, getPayload, isAnimated, setAnimated };\n","import { eachProp, is, toArray, getFluidValue, isAnimatedString, Globals, useIsomorphicLayoutEffect, each, raf, flush, FluidValue, deprecateInterpolate, callFluidObservers, frameLoop, hasFluidValue, flushCalls, isEqual, getFluidObservers, addFluidObserver, removeFluidObserver, noop, useMemoOne, deprecateDirectCall, useForceUpdate, usePrev, useOnce, createInterpolator, createStringInterpolator } from '@react-spring/shared';\nexport { Globals, createInterpolator, useIsomorphicLayoutEffect, useReducedMotion } from '@react-spring/shared';\nimport * as React from 'react';\nimport { useContext, useMemo, useRef, useState } from 'react';\nimport { getAnimated, AnimatedValue, getPayload, AnimatedString, getAnimatedType, setAnimated } from '@react-spring/animated';\nexport * from '@react-spring/types/animated';\nexport * from '@react-spring/types/interpolation';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction callProp(value, ...args) {\n return is.fun(value) ? value(...args) : value;\n}\nconst matchProp = (value, key) => value === true || !!(key && value && (is.fun(value) ? value(key) : toArray(value).includes(key)));\nconst resolveProp = (prop, key) => is.obj(prop) ? key && prop[key] : prop;\nconst getDefaultProp = (props, key) => props.default === true ? props[key] : props.default ? props.default[key] : undefined;\n\nconst noopTransform = value => value;\n\nconst getDefaultProps = (props, transform = noopTransform) => {\n let keys = DEFAULT_PROPS;\n\n if (props.default && props.default !== true) {\n props = props.default;\n keys = Object.keys(props);\n }\n\n const defaults = {};\n\n for (const key of keys) {\n const value = transform(props[key], key);\n\n if (!is.und(value)) {\n defaults[key] = value;\n }\n }\n\n return defaults;\n};\nconst DEFAULT_PROPS = ['config', 'onProps', 'onStart', 'onChange', 'onPause', 'onResume', 'onRest'];\nconst RESERVED_PROPS = {\n config: 1,\n from: 1,\n to: 1,\n ref: 1,\n loop: 1,\n reset: 1,\n pause: 1,\n cancel: 1,\n reverse: 1,\n immediate: 1,\n default: 1,\n delay: 1,\n onProps: 1,\n onStart: 1,\n onChange: 1,\n onPause: 1,\n onResume: 1,\n onRest: 1,\n onResolve: 1,\n items: 1,\n trail: 1,\n sort: 1,\n expires: 1,\n initial: 1,\n enter: 1,\n update: 1,\n leave: 1,\n children: 1,\n onDestroyed: 1,\n keys: 1,\n callId: 1,\n parentId: 1\n};\n\nfunction getForwardProps(props) {\n const forward = {};\n let count = 0;\n eachProp(props, (value, prop) => {\n if (!RESERVED_PROPS[prop]) {\n forward[prop] = value;\n count++;\n }\n });\n\n if (count) {\n return forward;\n }\n}\n\nfunction inferTo(props) {\n const to = getForwardProps(props);\n\n if (to) {\n const out = {\n to\n };\n eachProp(props, (val, key) => key in to || (out[key] = val));\n return out;\n }\n\n return _extends({}, props);\n}\nfunction computeGoal(value) {\n value = getFluidValue(value);\n return is.arr(value) ? value.map(computeGoal) : isAnimatedString(value) ? Globals.createStringInterpolator({\n range: [0, 1],\n output: [value, value]\n })(1) : value;\n}\nfunction hasProps(props) {\n for (const _ in props) return true;\n\n return false;\n}\nfunction isAsyncTo(to) {\n return is.fun(to) || is.arr(to) && is.obj(to[0]);\n}\nfunction detachRefs(ctrl, ref) {\n var _ctrl$ref;\n\n (_ctrl$ref = ctrl.ref) == null ? void 0 : _ctrl$ref.delete(ctrl);\n ref == null ? void 0 : ref.delete(ctrl);\n}\nfunction replaceRef(ctrl, ref) {\n if (ref && ctrl.ref !== ref) {\n var _ctrl$ref2;\n\n (_ctrl$ref2 = ctrl.ref) == null ? void 0 : _ctrl$ref2.delete(ctrl);\n ref.add(ctrl);\n ctrl.ref = ref;\n }\n}\n\nfunction useChain(refs, timeSteps, timeFrame = 1000) {\n useIsomorphicLayoutEffect(() => {\n if (timeSteps) {\n let prevDelay = 0;\n each(refs, (ref, i) => {\n const controllers = ref.current;\n\n if (controllers.length) {\n let delay = timeFrame * timeSteps[i];\n if (isNaN(delay)) delay = prevDelay;else prevDelay = delay;\n each(controllers, ctrl => {\n each(ctrl.queue, props => {\n const memoizedDelayProp = props.delay;\n\n props.delay = key => delay + callProp(memoizedDelayProp || 0, key);\n });\n });\n ref.start();\n }\n });\n } else {\n let p = Promise.resolve();\n each(refs, ref => {\n const controllers = ref.current;\n\n if (controllers.length) {\n const queues = controllers.map(ctrl => {\n const q = ctrl.queue;\n ctrl.queue = [];\n return q;\n });\n p = p.then(() => {\n each(controllers, (ctrl, i) => each(queues[i] || [], update => ctrl.queue.push(update)));\n return Promise.all(ref.start());\n });\n }\n });\n }\n });\n}\n\nconst config = {\n default: {\n tension: 170,\n friction: 26\n },\n gentle: {\n tension: 120,\n friction: 14\n },\n wobbly: {\n tension: 180,\n friction: 12\n },\n stiff: {\n tension: 210,\n friction: 20\n },\n slow: {\n tension: 280,\n friction: 60\n },\n molasses: {\n tension: 280,\n friction: 120\n }\n};\nconst c1 = 1.70158;\nconst c2 = c1 * 1.525;\nconst c3 = c1 + 1;\nconst c4 = 2 * Math.PI / 3;\nconst c5 = 2 * Math.PI / 4.5;\n\nconst bounceOut = x => {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1) {\n return n1 * x * x;\n } else if (x < 2 / d1) {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n } else if (x < 2.5 / d1) {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n } else {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n};\n\nconst easings = {\n linear: x => x,\n easeInQuad: x => x * x,\n easeOutQuad: x => 1 - (1 - x) * (1 - x),\n easeInOutQuad: x => x < 0.5 ? 2 * x * x : 1 - Math.pow(-2 * x + 2, 2) / 2,\n easeInCubic: x => x * x * x,\n easeOutCubic: x => 1 - Math.pow(1 - x, 3),\n easeInOutCubic: x => x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2,\n easeInQuart: x => x * x * x * x,\n easeOutQuart: x => 1 - Math.pow(1 - x, 4),\n easeInOutQuart: x => x < 0.5 ? 8 * x * x * x * x : 1 - Math.pow(-2 * x + 2, 4) / 2,\n easeInQuint: x => x * x * x * x * x,\n easeOutQuint: x => 1 - Math.pow(1 - x, 5),\n easeInOutQuint: x => x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2,\n easeInSine: x => 1 - Math.cos(x * Math.PI / 2),\n easeOutSine: x => Math.sin(x * Math.PI / 2),\n easeInOutSine: x => -(Math.cos(Math.PI * x) - 1) / 2,\n easeInExpo: x => x === 0 ? 0 : Math.pow(2, 10 * x - 10),\n easeOutExpo: x => x === 1 ? 1 : 1 - Math.pow(2, -10 * x),\n easeInOutExpo: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2,\n easeInCirc: x => 1 - Math.sqrt(1 - Math.pow(x, 2)),\n easeOutCirc: x => Math.sqrt(1 - Math.pow(x - 1, 2)),\n easeInOutCirc: x => x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2,\n easeInBack: x => c3 * x * x * x - c1 * x * x,\n easeOutBack: x => 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2),\n easeInOutBack: x => x < 0.5 ? Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2) / 2 : (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2,\n easeInElastic: x => x === 0 ? 0 : x === 1 ? 1 : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4),\n easeOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * c4) + 1,\n easeInOutElastic: x => x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2 : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5) / 2 + 1,\n easeInBounce: x => 1 - bounceOut(1 - x),\n easeOutBounce: bounceOut,\n easeInOutBounce: x => x < 0.5 ? (1 - bounceOut(1 - 2 * x)) / 2 : (1 + bounceOut(2 * x - 1)) / 2\n};\n\nconst defaults = _extends({}, config.default, {\n mass: 1,\n damping: 1,\n easing: easings.linear,\n clamp: false\n});\n\nclass AnimationConfig {\n constructor() {\n this.tension = void 0;\n this.friction = void 0;\n this.frequency = void 0;\n this.damping = void 0;\n this.mass = void 0;\n this.velocity = 0;\n this.restVelocity = void 0;\n this.precision = void 0;\n this.progress = void 0;\n this.duration = void 0;\n this.easing = void 0;\n this.clamp = void 0;\n this.bounce = void 0;\n this.decay = void 0;\n this.round = void 0;\n Object.assign(this, defaults);\n }\n\n}\nfunction mergeConfig(config, newConfig, defaultConfig) {\n if (defaultConfig) {\n defaultConfig = _extends({}, defaultConfig);\n sanitizeConfig(defaultConfig, newConfig);\n newConfig = _extends({}, defaultConfig, newConfig);\n }\n\n sanitizeConfig(config, newConfig);\n Object.assign(config, newConfig);\n\n for (const key in defaults) {\n if (config[key] == null) {\n config[key] = defaults[key];\n }\n }\n\n let {\n mass,\n frequency,\n damping\n } = config;\n\n if (!is.und(frequency)) {\n if (frequency < 0.01) frequency = 0.01;\n if (damping < 0) damping = 0;\n config.tension = Math.pow(2 * Math.PI / frequency, 2) * mass;\n config.friction = 4 * Math.PI * damping * mass / frequency;\n }\n\n return config;\n}\n\nfunction sanitizeConfig(config, props) {\n if (!is.und(props.decay)) {\n config.duration = undefined;\n } else {\n const isTensionConfig = !is.und(props.tension) || !is.und(props.friction);\n\n if (isTensionConfig || !is.und(props.frequency) || !is.und(props.damping) || !is.und(props.mass)) {\n config.duration = undefined;\n config.decay = undefined;\n }\n\n if (isTensionConfig) {\n config.frequency = undefined;\n }\n }\n}\n\nconst emptyArray = [];\nclass Animation {\n constructor() {\n this.changed = false;\n this.values = emptyArray;\n this.toValues = null;\n this.fromValues = emptyArray;\n this.to = void 0;\n this.from = void 0;\n this.config = new AnimationConfig();\n this.immediate = false;\n }\n\n}\n\nfunction scheduleProps(callId, {\n key,\n props,\n defaultProps,\n state,\n actions\n}) {\n return new Promise((resolve, reject) => {\n var _props$cancel;\n\n let delay;\n let timeout;\n let cancel = matchProp((_props$cancel = props.cancel) != null ? _props$cancel : defaultProps == null ? void 0 : defaultProps.cancel, key);\n\n if (cancel) {\n onStart();\n } else {\n if (!is.und(props.pause)) {\n state.paused = matchProp(props.pause, key);\n }\n\n let pause = defaultProps == null ? void 0 : defaultProps.pause;\n\n if (pause !== true) {\n pause = state.paused || matchProp(pause, key);\n }\n\n delay = callProp(props.delay || 0, key);\n\n if (pause) {\n state.resumeQueue.add(onResume);\n actions.pause();\n } else {\n actions.resume();\n onResume();\n }\n }\n\n function onPause() {\n state.resumeQueue.add(onResume);\n state.timeouts.delete(timeout);\n timeout.cancel();\n delay = timeout.time - raf.now();\n }\n\n function onResume() {\n if (delay > 0 && !Globals.skipAnimation) {\n state.delayed = true;\n timeout = raf.setTimeout(onStart, delay);\n state.pauseQueue.add(onPause);\n state.timeouts.add(timeout);\n } else {\n onStart();\n }\n }\n\n function onStart() {\n if (state.delayed) {\n state.delayed = false;\n }\n\n state.pauseQueue.delete(onPause);\n state.timeouts.delete(timeout);\n\n if (callId <= (state.cancelId || 0)) {\n cancel = true;\n }\n\n try {\n actions.start(_extends({}, props, {\n callId,\n cancel\n }), resolve);\n } catch (err) {\n reject(err);\n }\n }\n });\n}\n\nconst getCombinedResult = (target, results) => results.length == 1 ? results[0] : results.some(result => result.cancelled) ? getCancelledResult(target.get()) : results.every(result => result.noop) ? getNoopResult(target.get()) : getFinishedResult(target.get(), results.every(result => result.finished));\nconst getNoopResult = value => ({\n value,\n noop: true,\n finished: true,\n cancelled: false\n});\nconst getFinishedResult = (value, finished, cancelled = false) => ({\n value,\n finished,\n cancelled\n});\nconst getCancelledResult = value => ({\n value,\n cancelled: true,\n finished: false\n});\n\nfunction runAsync(to, props, state, target) {\n const {\n callId,\n parentId,\n onRest\n } = props;\n const {\n asyncTo: prevTo,\n promise: prevPromise\n } = state;\n\n if (!parentId && to === prevTo && !props.reset) {\n return prevPromise;\n }\n\n return state.promise = (async () => {\n state.asyncId = callId;\n state.asyncTo = to;\n const defaultProps = getDefaultProps(props, (value, key) => key === 'onRest' ? undefined : value);\n let preventBail;\n let bail;\n const bailPromise = new Promise((resolve, reject) => (preventBail = resolve, bail = reject));\n\n const bailIfEnded = bailSignal => {\n const bailResult = callId <= (state.cancelId || 0) && getCancelledResult(target) || callId !== state.asyncId && getFinishedResult(target, false);\n\n if (bailResult) {\n bailSignal.result = bailResult;\n bail(bailSignal);\n throw bailSignal;\n }\n };\n\n const animate = (arg1, arg2) => {\n const bailSignal = new BailSignal();\n const skipAnimationSignal = new SkipAniamtionSignal();\n return (async () => {\n if (Globals.skipAnimation) {\n stopAsync(state);\n skipAnimationSignal.result = getFinishedResult(target, false);\n bail(skipAnimationSignal);\n throw skipAnimationSignal;\n }\n\n bailIfEnded(bailSignal);\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n to: arg1\n });\n props.parentId = callId;\n eachProp(defaultProps, (value, key) => {\n if (is.und(props[key])) {\n props[key] = value;\n }\n });\n const result = await target.start(props);\n bailIfEnded(bailSignal);\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n return result;\n })();\n };\n\n let result;\n\n if (Globals.skipAnimation) {\n stopAsync(state);\n return getFinishedResult(target, false);\n }\n\n try {\n let animating;\n\n if (is.arr(to)) {\n animating = (async queue => {\n for (const props of queue) {\n await animate(props);\n }\n })(to);\n } else {\n animating = Promise.resolve(to(animate, target.stop.bind(target)));\n }\n\n await Promise.all([animating.then(preventBail), bailPromise]);\n result = getFinishedResult(target.get(), true, false);\n } catch (err) {\n if (err instanceof BailSignal) {\n result = err.result;\n } else if (err instanceof SkipAniamtionSignal) {\n result = err.result;\n } else {\n throw err;\n }\n } finally {\n if (callId == state.asyncId) {\n state.asyncId = parentId;\n state.asyncTo = parentId ? prevTo : undefined;\n state.promise = parentId ? prevPromise : undefined;\n }\n }\n\n if (is.fun(onRest)) {\n raf.batchedUpdates(() => {\n onRest(result, target, target.item);\n });\n }\n\n return result;\n })();\n}\nfunction stopAsync(state, cancelId) {\n flush(state.timeouts, t => t.cancel());\n state.pauseQueue.clear();\n state.resumeQueue.clear();\n state.asyncId = state.asyncTo = state.promise = undefined;\n if (cancelId) state.cancelId = cancelId;\n}\nclass BailSignal extends Error {\n constructor() {\n super('An async animation has been interrupted. You see this error because you ' + 'forgot to use `await` or `.catch(...)` on its returned promise.');\n this.result = void 0;\n }\n\n}\nclass SkipAniamtionSignal extends Error {\n constructor() {\n super('SkipAnimationSignal');\n this.result = void 0;\n }\n\n}\n\nconst isFrameValue = value => value instanceof FrameValue;\nlet nextId$1 = 1;\nclass FrameValue extends FluidValue {\n constructor(...args) {\n super(...args);\n this.id = nextId$1++;\n this.key = void 0;\n this._priority = 0;\n }\n\n get priority() {\n return this._priority;\n }\n\n set priority(priority) {\n if (this._priority != priority) {\n this._priority = priority;\n\n this._onPriorityChange(priority);\n }\n }\n\n get() {\n const node = getAnimated(this);\n return node && node.getValue();\n }\n\n to(...args) {\n return Globals.to(this, args);\n }\n\n interpolate(...args) {\n deprecateInterpolate();\n return Globals.to(this, args);\n }\n\n toJSON() {\n return this.get();\n }\n\n observerAdded(count) {\n if (count == 1) this._attach();\n }\n\n observerRemoved(count) {\n if (count == 0) this._detach();\n }\n\n _attach() {}\n\n _detach() {}\n\n _onChange(value, idle = false) {\n callFluidObservers(this, {\n type: 'change',\n parent: this,\n value,\n idle\n });\n }\n\n _onPriorityChange(priority) {\n if (!this.idle) {\n frameLoop.sort(this);\n }\n\n callFluidObservers(this, {\n type: 'priority',\n parent: this,\n priority\n });\n }\n\n}\n\nconst $P = Symbol.for('SpringPhase');\nconst HAS_ANIMATED = 1;\nconst IS_ANIMATING = 2;\nconst IS_PAUSED = 4;\nconst hasAnimated = target => (target[$P] & HAS_ANIMATED) > 0;\nconst isAnimating = target => (target[$P] & IS_ANIMATING) > 0;\nconst isPaused = target => (target[$P] & IS_PAUSED) > 0;\nconst setActiveBit = (target, active) => active ? target[$P] |= IS_ANIMATING | HAS_ANIMATED : target[$P] &= ~IS_ANIMATING;\nconst setPausedBit = (target, paused) => paused ? target[$P] |= IS_PAUSED : target[$P] &= ~IS_PAUSED;\n\nclass SpringValue extends FrameValue {\n constructor(arg1, arg2) {\n super();\n this.key = void 0;\n this.animation = new Animation();\n this.queue = void 0;\n this.defaultProps = {};\n this._state = {\n paused: false,\n delayed: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._pendingCalls = new Set();\n this._lastCallId = 0;\n this._lastToId = 0;\n this._memoizedDuration = 0;\n\n if (!is.und(arg1) || !is.und(arg2)) {\n const props = is.obj(arg1) ? _extends({}, arg1) : _extends({}, arg2, {\n from: arg1\n });\n\n if (is.und(props.default)) {\n props.default = true;\n }\n\n this.start(props);\n }\n }\n\n get idle() {\n return !(isAnimating(this) || this._state.asyncTo) || isPaused(this);\n }\n\n get goal() {\n return getFluidValue(this.animation.to);\n }\n\n get velocity() {\n const node = getAnimated(this);\n return node instanceof AnimatedValue ? node.lastVelocity || 0 : node.getPayload().map(node => node.lastVelocity || 0);\n }\n\n get hasAnimated() {\n return hasAnimated(this);\n }\n\n get isAnimating() {\n return isAnimating(this);\n }\n\n get isPaused() {\n return isPaused(this);\n }\n\n get isDelayed() {\n return this._state.delayed;\n }\n\n advance(dt) {\n let idle = true;\n let changed = false;\n const anim = this.animation;\n let {\n config,\n toValues\n } = anim;\n const payload = getPayload(anim.to);\n\n if (!payload && hasFluidValue(anim.to)) {\n toValues = toArray(getFluidValue(anim.to));\n }\n\n anim.values.forEach((node, i) => {\n if (node.done) return;\n const to = node.constructor == AnimatedString ? 1 : payload ? payload[i].lastPosition : toValues[i];\n let finished = anim.immediate;\n let position = to;\n\n if (!finished) {\n position = node.lastPosition;\n\n if (config.tension <= 0) {\n node.done = true;\n return;\n }\n\n let elapsed = node.elapsedTime += dt;\n const from = anim.fromValues[i];\n const v0 = node.v0 != null ? node.v0 : node.v0 = is.arr(config.velocity) ? config.velocity[i] : config.velocity;\n let velocity;\n const precision = config.precision || (from == to ? 0.005 : Math.min(1, Math.abs(to - from) * 0.001));\n\n if (!is.und(config.duration)) {\n let p = 1;\n\n if (config.duration > 0) {\n if (this._memoizedDuration !== config.duration) {\n this._memoizedDuration = config.duration;\n\n if (node.durationProgress > 0) {\n node.elapsedTime = config.duration * node.durationProgress;\n elapsed = node.elapsedTime += dt;\n }\n }\n\n p = (config.progress || 0) + elapsed / this._memoizedDuration;\n p = p > 1 ? 1 : p < 0 ? 0 : p;\n node.durationProgress = p;\n }\n\n position = from + config.easing(p) * (to - from);\n velocity = (position - node.lastPosition) / dt;\n finished = p == 1;\n } else if (config.decay) {\n const decay = config.decay === true ? 0.998 : config.decay;\n const e = Math.exp(-(1 - decay) * elapsed);\n position = from + v0 / (1 - decay) * (1 - e);\n finished = Math.abs(node.lastPosition - position) <= precision;\n velocity = v0 * e;\n } else {\n velocity = node.lastVelocity == null ? v0 : node.lastVelocity;\n const restVelocity = config.restVelocity || precision / 10;\n const bounceFactor = config.clamp ? 0 : config.bounce;\n const canBounce = !is.und(bounceFactor);\n const isGrowing = from == to ? node.v0 > 0 : from < to;\n let isMoving;\n let isBouncing = false;\n const step = 1;\n const numSteps = Math.ceil(dt / step);\n\n for (let n = 0; n < numSteps; ++n) {\n isMoving = Math.abs(velocity) > restVelocity;\n\n if (!isMoving) {\n finished = Math.abs(to - position) <= precision;\n\n if (finished) {\n break;\n }\n }\n\n if (canBounce) {\n isBouncing = position == to || position > to == isGrowing;\n\n if (isBouncing) {\n velocity = -velocity * bounceFactor;\n position = to;\n }\n }\n\n const springForce = -config.tension * 0.000001 * (position - to);\n const dampingForce = -config.friction * 0.001 * velocity;\n const acceleration = (springForce + dampingForce) / config.mass;\n velocity = velocity + acceleration * step;\n position = position + velocity * step;\n }\n }\n\n node.lastVelocity = velocity;\n\n if (Number.isNaN(position)) {\n console.warn(`Got NaN while animating:`, this);\n finished = true;\n }\n }\n\n if (payload && !payload[i].done) {\n finished = false;\n }\n\n if (finished) {\n node.done = true;\n } else {\n idle = false;\n }\n\n if (node.setValue(position, config.round)) {\n changed = true;\n }\n });\n const node = getAnimated(this);\n const currVal = node.getValue();\n\n if (idle) {\n const finalVal = getFluidValue(anim.to);\n\n if ((currVal !== finalVal || changed) && !config.decay) {\n node.setValue(finalVal);\n\n this._onChange(finalVal);\n } else if (changed && config.decay) {\n this._onChange(currVal);\n }\n\n this._stop();\n } else if (changed) {\n this._onChange(currVal);\n }\n }\n\n set(value) {\n raf.batchedUpdates(() => {\n this._stop();\n\n this._focus(value);\n\n this._set(value);\n });\n return this;\n }\n\n pause() {\n this._update({\n pause: true\n });\n }\n\n resume() {\n this._update({\n pause: false\n });\n }\n\n finish() {\n if (isAnimating(this)) {\n const {\n to,\n config\n } = this.animation;\n raf.batchedUpdates(() => {\n this._onStart();\n\n if (!config.decay) {\n this._set(to, false);\n }\n\n this._stop();\n });\n }\n\n return this;\n }\n\n update(props) {\n const queue = this.queue || (this.queue = []);\n queue.push(props);\n return this;\n }\n\n start(to, arg2) {\n let queue;\n\n if (!is.und(to)) {\n queue = [is.obj(to) ? to : _extends({}, arg2, {\n to\n })];\n } else {\n queue = this.queue || [];\n this.queue = [];\n }\n\n return Promise.all(queue.map(props => {\n const up = this._update(props);\n\n return up;\n })).then(results => getCombinedResult(this, results));\n }\n\n stop(cancel) {\n const {\n to\n } = this.animation;\n\n this._focus(this.get());\n\n stopAsync(this._state, cancel && this._lastCallId);\n raf.batchedUpdates(() => this._stop(to, cancel));\n return this;\n }\n\n reset() {\n this._update({\n reset: true\n });\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._start();\n } else if (event.type == 'priority') {\n this.priority = event.priority + 1;\n }\n }\n\n _prepareNode(props) {\n const key = this.key || '';\n let {\n to,\n from\n } = props;\n to = is.obj(to) ? to[key] : to;\n\n if (to == null || isAsyncTo(to)) {\n to = undefined;\n }\n\n from = is.obj(from) ? from[key] : from;\n\n if (from == null) {\n from = undefined;\n }\n\n const range = {\n to,\n from\n };\n\n if (!hasAnimated(this)) {\n if (props.reverse) [to, from] = [from, to];\n from = getFluidValue(from);\n\n if (!is.und(from)) {\n this._set(from);\n } else if (!getAnimated(this)) {\n this._set(to);\n }\n }\n\n return range;\n }\n\n _update(_ref, isLoop) {\n let props = _extends({}, _ref);\n\n const {\n key,\n defaultProps\n } = this;\n if (props.default) Object.assign(defaultProps, getDefaultProps(props, (value, prop) => /^on/.test(prop) ? resolveProp(value, key) : value));\n mergeActiveFn(this, props, 'onProps');\n sendEvent(this, 'onProps', props, this);\n\n const range = this._prepareNode(props);\n\n if (Object.isFrozen(this)) {\n throw Error('Cannot animate a `SpringValue` object that is frozen. ' + 'Did you forget to pass your component to `animated(...)` before animating its props?');\n }\n\n const state = this._state;\n return scheduleProps(++this._lastCallId, {\n key,\n props,\n defaultProps,\n state,\n actions: {\n pause: () => {\n if (!isPaused(this)) {\n setPausedBit(this, true);\n flushCalls(state.pauseQueue);\n sendEvent(this, 'onPause', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n resume: () => {\n if (isPaused(this)) {\n setPausedBit(this, false);\n\n if (isAnimating(this)) {\n this._resume();\n }\n\n flushCalls(state.resumeQueue);\n sendEvent(this, 'onResume', getFinishedResult(this, checkFinished(this, this.animation.to)), this);\n }\n },\n start: this._merge.bind(this, range)\n }\n }).then(result => {\n if (props.loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props);\n\n if (nextProps) {\n return this._update(nextProps, true);\n }\n }\n\n return result;\n });\n }\n\n _merge(range, props, resolve) {\n if (props.cancel) {\n this.stop(true);\n return resolve(getCancelledResult(this));\n }\n\n const hasToProp = !is.und(range.to);\n const hasFromProp = !is.und(range.from);\n\n if (hasToProp || hasFromProp) {\n if (props.callId > this._lastToId) {\n this._lastToId = props.callId;\n } else {\n return resolve(getCancelledResult(this));\n }\n }\n\n const {\n key,\n defaultProps,\n animation: anim\n } = this;\n const {\n to: prevTo,\n from: prevFrom\n } = anim;\n let {\n to = prevTo,\n from = prevFrom\n } = range;\n\n if (hasFromProp && !hasToProp && (!props.default || is.und(to))) {\n to = from;\n }\n\n if (props.reverse) [to, from] = [from, to];\n const hasFromChanged = !isEqual(from, prevFrom);\n\n if (hasFromChanged) {\n anim.from = from;\n }\n\n from = getFluidValue(from);\n const hasToChanged = !isEqual(to, prevTo);\n\n if (hasToChanged) {\n this._focus(to);\n }\n\n const hasAsyncTo = isAsyncTo(props.to);\n const {\n config\n } = anim;\n const {\n decay,\n velocity\n } = config;\n\n if (hasToProp || hasFromProp) {\n config.velocity = 0;\n }\n\n if (props.config && !hasAsyncTo) {\n mergeConfig(config, callProp(props.config, key), props.config !== defaultProps.config ? callProp(defaultProps.config, key) : void 0);\n }\n\n let node = getAnimated(this);\n\n if (!node || is.und(to)) {\n return resolve(getFinishedResult(this, true));\n }\n\n const reset = is.und(props.reset) ? hasFromProp && !props.default : !is.und(from) && matchProp(props.reset, key);\n const value = reset ? from : this.get();\n const goal = computeGoal(to);\n const isAnimatable = is.num(goal) || is.arr(goal) || isAnimatedString(goal);\n const immediate = !hasAsyncTo && (!isAnimatable || matchProp(defaultProps.immediate || props.immediate, key));\n\n if (hasToChanged) {\n const nodeType = getAnimatedType(to);\n\n if (nodeType !== node.constructor) {\n if (immediate) {\n node = this._set(goal);\n } else throw Error(`Cannot animate between ${node.constructor.name} and ${nodeType.name}, as the \"to\" prop suggests`);\n }\n }\n\n const goalType = node.constructor;\n let started = hasFluidValue(to);\n let finished = false;\n\n if (!started) {\n const hasValueChanged = reset || !hasAnimated(this) && hasFromChanged;\n\n if (hasToChanged || hasValueChanged) {\n finished = isEqual(computeGoal(value), goal);\n started = !finished;\n }\n\n if (!isEqual(anim.immediate, immediate) && !immediate || !isEqual(config.decay, decay) || !isEqual(config.velocity, velocity)) {\n started = true;\n }\n }\n\n if (finished && isAnimating(this)) {\n if (anim.changed && !reset) {\n started = true;\n } else if (!started) {\n this._stop(prevTo);\n }\n }\n\n if (!hasAsyncTo) {\n if (started || hasFluidValue(prevTo)) {\n anim.values = node.getPayload();\n anim.toValues = hasFluidValue(to) ? null : goalType == AnimatedString ? [1] : toArray(goal);\n }\n\n if (anim.immediate != immediate) {\n anim.immediate = immediate;\n\n if (!immediate && !reset) {\n this._set(prevTo);\n }\n }\n\n if (started) {\n const {\n onRest\n } = anim;\n each(ACTIVE_EVENTS, type => mergeActiveFn(this, props, type));\n const result = getFinishedResult(this, checkFinished(this, prevTo));\n flushCalls(this._pendingCalls, result);\n\n this._pendingCalls.add(resolve);\n\n if (anim.changed) raf.batchedUpdates(() => {\n anim.changed = !reset;\n onRest == null ? void 0 : onRest(result, this);\n\n if (reset) {\n callProp(defaultProps.onRest, result);\n } else {\n anim.onStart == null ? void 0 : anim.onStart(result, this);\n }\n });\n }\n }\n\n if (reset) {\n this._set(value);\n }\n\n if (hasAsyncTo) {\n resolve(runAsync(props.to, props, this._state, this));\n } else if (started) {\n this._start();\n } else if (isAnimating(this) && !hasToChanged) {\n this._pendingCalls.add(resolve);\n } else {\n resolve(getNoopResult(value));\n }\n }\n\n _focus(value) {\n const anim = this.animation;\n\n if (value !== anim.to) {\n if (getFluidObservers(this)) {\n this._detach();\n }\n\n anim.to = value;\n\n if (getFluidObservers(this)) {\n this._attach();\n }\n }\n }\n\n _attach() {\n let priority = 0;\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n addFluidObserver(to, this);\n\n if (isFrameValue(to)) {\n priority = to.priority + 1;\n }\n }\n\n this.priority = priority;\n }\n\n _detach() {\n const {\n to\n } = this.animation;\n\n if (hasFluidValue(to)) {\n removeFluidObserver(to, this);\n }\n }\n\n _set(arg, idle = true) {\n const value = getFluidValue(arg);\n\n if (!is.und(value)) {\n const oldNode = getAnimated(this);\n\n if (!oldNode || !isEqual(value, oldNode.getValue())) {\n const nodeType = getAnimatedType(value);\n\n if (!oldNode || oldNode.constructor != nodeType) {\n setAnimated(this, nodeType.create(value));\n } else {\n oldNode.setValue(value);\n }\n\n if (oldNode) {\n raf.batchedUpdates(() => {\n this._onChange(value, idle);\n });\n }\n }\n }\n\n return getAnimated(this);\n }\n\n _onStart() {\n const anim = this.animation;\n\n if (!anim.changed) {\n anim.changed = true;\n sendEvent(this, 'onStart', getFinishedResult(this, checkFinished(this, anim.to)), this);\n }\n }\n\n _onChange(value, idle) {\n if (!idle) {\n this._onStart();\n\n callProp(this.animation.onChange, value, this);\n }\n\n callProp(this.defaultProps.onChange, value, this);\n\n super._onChange(value, idle);\n }\n\n _start() {\n const anim = this.animation;\n getAnimated(this).reset(getFluidValue(anim.to));\n\n if (!anim.immediate) {\n anim.fromValues = anim.values.map(node => node.lastPosition);\n }\n\n if (!isAnimating(this)) {\n setActiveBit(this, true);\n\n if (!isPaused(this)) {\n this._resume();\n }\n }\n }\n\n _resume() {\n if (Globals.skipAnimation) {\n this.finish();\n } else {\n frameLoop.start(this);\n }\n }\n\n _stop(goal, cancel) {\n if (isAnimating(this)) {\n setActiveBit(this, false);\n const anim = this.animation;\n each(anim.values, node => {\n node.done = true;\n });\n\n if (anim.toValues) {\n anim.onChange = anim.onPause = anim.onResume = undefined;\n }\n\n callFluidObservers(this, {\n type: 'idle',\n parent: this\n });\n const result = cancel ? getCancelledResult(this.get()) : getFinishedResult(this.get(), checkFinished(this, goal != null ? goal : anim.to));\n flushCalls(this._pendingCalls, result);\n\n if (anim.changed) {\n anim.changed = false;\n sendEvent(this, 'onRest', result, this);\n }\n }\n }\n\n}\n\nfunction checkFinished(target, to) {\n const goal = computeGoal(to);\n const value = computeGoal(target.get());\n return isEqual(value, goal);\n}\n\nfunction createLoopUpdate(props, loop = props.loop, to = props.to) {\n let loopRet = callProp(loop);\n\n if (loopRet) {\n const overrides = loopRet !== true && inferTo(loopRet);\n const reverse = (overrides || props).reverse;\n const reset = !overrides || overrides.reset;\n return createUpdate(_extends({}, props, {\n loop,\n default: false,\n pause: undefined,\n to: !reverse || isAsyncTo(to) ? to : undefined,\n from: reset ? props.from : undefined,\n reset\n }, overrides));\n }\n}\nfunction createUpdate(props) {\n const {\n to,\n from\n } = props = inferTo(props);\n const keys = new Set();\n if (is.obj(to)) findDefined(to, keys);\n if (is.obj(from)) findDefined(from, keys);\n props.keys = keys.size ? Array.from(keys) : null;\n return props;\n}\nfunction declareUpdate(props) {\n const update = createUpdate(props);\n\n if (is.und(update.default)) {\n update.default = getDefaultProps(update);\n }\n\n return update;\n}\n\nfunction findDefined(values, keys) {\n eachProp(values, (value, key) => value != null && keys.add(key));\n}\n\nconst ACTIVE_EVENTS = ['onStart', 'onRest', 'onChange', 'onPause', 'onResume'];\n\nfunction mergeActiveFn(target, props, type) {\n target.animation[type] = props[type] !== getDefaultProp(props, type) ? resolveProp(props[type], target.key) : undefined;\n}\n\nfunction sendEvent(target, type, ...args) {\n var _target$animation$typ, _target$animation, _target$defaultProps$, _target$defaultProps;\n\n (_target$animation$typ = (_target$animation = target.animation)[type]) == null ? void 0 : _target$animation$typ.call(_target$animation, ...args);\n (_target$defaultProps$ = (_target$defaultProps = target.defaultProps)[type]) == null ? void 0 : _target$defaultProps$.call(_target$defaultProps, ...args);\n}\n\nconst BATCHED_EVENTS = ['onStart', 'onChange', 'onRest'];\nlet nextId = 1;\nclass Controller {\n constructor(props, flush) {\n this.id = nextId++;\n this.springs = {};\n this.queue = [];\n this.ref = void 0;\n this._flush = void 0;\n this._initialProps = void 0;\n this._lastAsyncId = 0;\n this._active = new Set();\n this._changed = new Set();\n this._started = false;\n this._item = void 0;\n this._state = {\n paused: false,\n pauseQueue: new Set(),\n resumeQueue: new Set(),\n timeouts: new Set()\n };\n this._events = {\n onStart: new Map(),\n onChange: new Map(),\n onRest: new Map()\n };\n this._onFrame = this._onFrame.bind(this);\n\n if (flush) {\n this._flush = flush;\n }\n\n if (props) {\n this.start(_extends({\n default: true\n }, props));\n }\n }\n\n get idle() {\n return !this._state.asyncTo && Object.values(this.springs).every(spring => {\n return spring.idle && !spring.isDelayed && !spring.isPaused;\n });\n }\n\n get item() {\n return this._item;\n }\n\n set item(item) {\n this._item = item;\n }\n\n get() {\n const values = {};\n this.each((spring, key) => values[key] = spring.get());\n return values;\n }\n\n set(values) {\n for (const key in values) {\n const value = values[key];\n\n if (!is.und(value)) {\n this.springs[key].set(value);\n }\n }\n }\n\n update(props) {\n if (props) {\n this.queue.push(createUpdate(props));\n }\n\n return this;\n }\n\n start(props) {\n let {\n queue\n } = this;\n\n if (props) {\n queue = toArray(props).map(createUpdate);\n } else {\n this.queue = [];\n }\n\n if (this._flush) {\n return this._flush(this, queue);\n }\n\n prepareKeys(this, queue);\n return flushUpdateQueue(this, queue);\n }\n\n stop(arg, keys) {\n if (arg !== !!arg) {\n keys = arg;\n }\n\n if (keys) {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].stop(!!arg));\n } else {\n stopAsync(this._state, this._lastAsyncId);\n this.each(spring => spring.stop(!!arg));\n }\n\n return this;\n }\n\n pause(keys) {\n if (is.und(keys)) {\n this.start({\n pause: true\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].pause());\n }\n\n return this;\n }\n\n resume(keys) {\n if (is.und(keys)) {\n this.start({\n pause: false\n });\n } else {\n const springs = this.springs;\n each(toArray(keys), key => springs[key].resume());\n }\n\n return this;\n }\n\n each(iterator) {\n eachProp(this.springs, iterator);\n }\n\n _onFrame() {\n const {\n onStart,\n onChange,\n onRest\n } = this._events;\n const active = this._active.size > 0;\n const changed = this._changed.size > 0;\n\n if (active && !this._started || changed && !this._started) {\n this._started = true;\n flush(onStart, ([onStart, result]) => {\n result.value = this.get();\n onStart(result, this, this._item);\n });\n }\n\n const idle = !active && this._started;\n const values = changed || idle && onRest.size ? this.get() : null;\n\n if (changed && onChange.size) {\n flush(onChange, ([onChange, result]) => {\n result.value = values;\n onChange(result, this, this._item);\n });\n }\n\n if (idle) {\n this._started = false;\n flush(onRest, ([onRest, result]) => {\n result.value = values;\n onRest(result, this, this._item);\n });\n }\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._changed.add(event.parent);\n\n if (!event.idle) {\n this._active.add(event.parent);\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else return;\n\n raf.onFrame(this._onFrame);\n }\n\n}\nfunction flushUpdateQueue(ctrl, queue) {\n return Promise.all(queue.map(props => flushUpdate(ctrl, props))).then(results => getCombinedResult(ctrl, results));\n}\nasync function flushUpdate(ctrl, props, isLoop) {\n const {\n keys,\n to,\n from,\n loop,\n onRest,\n onResolve\n } = props;\n const defaults = is.obj(props.default) && props.default;\n\n if (loop) {\n props.loop = false;\n }\n\n if (to === false) props.to = null;\n if (from === false) props.from = null;\n const asyncTo = is.arr(to) || is.fun(to) ? to : undefined;\n\n if (asyncTo) {\n props.to = undefined;\n props.onRest = undefined;\n\n if (defaults) {\n defaults.onRest = undefined;\n }\n } else {\n each(BATCHED_EVENTS, key => {\n const handler = props[key];\n\n if (is.fun(handler)) {\n const queue = ctrl['_events'][key];\n\n props[key] = ({\n finished,\n cancelled\n }) => {\n const result = queue.get(handler);\n\n if (result) {\n if (!finished) result.finished = false;\n if (cancelled) result.cancelled = true;\n } else {\n queue.set(handler, {\n value: null,\n finished: finished || false,\n cancelled: cancelled || false\n });\n }\n };\n\n if (defaults) {\n defaults[key] = props[key];\n }\n }\n });\n }\n\n const state = ctrl['_state'];\n\n if (props.pause === !state.paused) {\n state.paused = props.pause;\n flushCalls(props.pause ? state.pauseQueue : state.resumeQueue);\n } else if (state.paused) {\n props.pause = true;\n }\n\n const promises = (keys || Object.keys(ctrl.springs)).map(key => ctrl.springs[key].start(props));\n const cancel = props.cancel === true || getDefaultProp(props, 'cancel') === true;\n\n if (asyncTo || cancel && state.asyncId) {\n promises.push(scheduleProps(++ctrl['_lastAsyncId'], {\n props,\n state,\n actions: {\n pause: noop,\n resume: noop,\n\n start(props, resolve) {\n if (cancel) {\n stopAsync(state, ctrl['_lastAsyncId']);\n resolve(getCancelledResult(ctrl));\n } else {\n props.onRest = onRest;\n resolve(runAsync(asyncTo, props, state, ctrl));\n }\n }\n\n }\n }));\n }\n\n if (state.paused) {\n await new Promise(resume => {\n state.resumeQueue.add(resume);\n });\n }\n\n const result = getCombinedResult(ctrl, await Promise.all(promises));\n\n if (loop && result.finished && !(isLoop && result.noop)) {\n const nextProps = createLoopUpdate(props, loop, to);\n\n if (nextProps) {\n prepareKeys(ctrl, [nextProps]);\n return flushUpdate(ctrl, nextProps, true);\n }\n }\n\n if (onResolve) {\n raf.batchedUpdates(() => onResolve(result, ctrl, ctrl.item));\n }\n\n return result;\n}\nfunction getSprings(ctrl, props) {\n const springs = _extends({}, ctrl.springs);\n\n if (props) {\n each(toArray(props), props => {\n if (is.und(props.keys)) {\n props = createUpdate(props);\n }\n\n if (!is.obj(props.to)) {\n props = _extends({}, props, {\n to: undefined\n });\n }\n\n prepareSprings(springs, props, key => {\n return createSpring(key);\n });\n });\n }\n\n setSprings(ctrl, springs);\n return springs;\n}\nfunction setSprings(ctrl, springs) {\n eachProp(springs, (spring, key) => {\n if (!ctrl.springs[key]) {\n ctrl.springs[key] = spring;\n addFluidObserver(spring, ctrl);\n }\n });\n}\n\nfunction createSpring(key, observer) {\n const spring = new SpringValue();\n spring.key = key;\n\n if (observer) {\n addFluidObserver(spring, observer);\n }\n\n return spring;\n}\n\nfunction prepareSprings(springs, props, create) {\n if (props.keys) {\n each(props.keys, key => {\n const spring = springs[key] || (springs[key] = create(key));\n spring['_prepareNode'](props);\n });\n }\n}\n\nfunction prepareKeys(ctrl, queue) {\n each(queue, props => {\n prepareSprings(ctrl.springs, props, key => {\n return createSpring(key, ctrl);\n });\n });\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst _excluded$3 = [\"children\"];\nconst SpringContext = _ref => {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$3);\n\n const inherited = useContext(ctx);\n const pause = props.pause || !!inherited.pause,\n immediate = props.immediate || !!inherited.immediate;\n props = useMemoOne(() => ({\n pause,\n immediate\n }), [pause, immediate]);\n const {\n Provider\n } = ctx;\n return React.createElement(Provider, {\n value: props\n }, children);\n};\nconst ctx = makeContext(SpringContext, {});\nSpringContext.Provider = ctx.Provider;\nSpringContext.Consumer = ctx.Consumer;\n\nfunction makeContext(target, init) {\n Object.assign(target, React.createContext(init));\n target.Provider._context = target;\n target.Consumer._context = target;\n return target;\n}\n\nconst SpringRef = () => {\n const current = [];\n\n const SpringRef = function SpringRef(props) {\n deprecateDirectCall();\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = _getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.current = current;\n\n SpringRef.add = function (ctrl) {\n if (!current.includes(ctrl)) {\n current.push(ctrl);\n }\n };\n\n SpringRef.delete = function (ctrl) {\n const i = current.indexOf(ctrl);\n if (~i) current.splice(i, 1);\n };\n\n SpringRef.pause = function () {\n each(current, ctrl => ctrl.pause(...arguments));\n return this;\n };\n\n SpringRef.resume = function () {\n each(current, ctrl => ctrl.resume(...arguments));\n return this;\n };\n\n SpringRef.set = function (values) {\n each(current, ctrl => ctrl.set(values));\n };\n\n SpringRef.start = function (props) {\n const results = [];\n each(current, (ctrl, i) => {\n if (is.und(props)) {\n results.push(ctrl.start());\n } else {\n const update = this._getProps(props, ctrl, i);\n\n if (update) {\n results.push(ctrl.start(update));\n }\n }\n });\n return results;\n };\n\n SpringRef.stop = function () {\n each(current, ctrl => ctrl.stop(...arguments));\n return this;\n };\n\n SpringRef.update = function (props) {\n each(current, (ctrl, i) => ctrl.update(this._getProps(props, ctrl, i)));\n return this;\n };\n\n const _getProps = function _getProps(arg, ctrl, index) {\n return is.fun(arg) ? arg(index, ctrl) : arg;\n };\n\n SpringRef._getProps = _getProps;\n return SpringRef;\n};\n\nfunction useSprings(length, props, deps) {\n const propsFn = is.fun(props) && props;\n if (propsFn && !deps) deps = [];\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const layoutId = useRef(0);\n const forceUpdate = useForceUpdate();\n const state = useMemo(() => ({\n ctrls: [],\n queue: [],\n\n flush(ctrl, updates) {\n const springs = getSprings(ctrl, updates);\n const canFlushSync = layoutId.current > 0 && !state.queue.length && !Object.keys(springs).some(key => !ctrl.springs[key]);\n return canFlushSync ? flushUpdateQueue(ctrl, updates) : new Promise(resolve => {\n setSprings(ctrl, springs);\n state.queue.push(() => {\n resolve(flushUpdateQueue(ctrl, updates));\n });\n forceUpdate();\n });\n }\n\n }), []);\n const ctrls = useRef([...state.ctrls]);\n const updates = [];\n const prevLength = usePrev(length) || 0;\n useMemo(() => {\n each(ctrls.current.slice(length, prevLength), ctrl => {\n detachRefs(ctrl, ref);\n ctrl.stop(true);\n });\n ctrls.current.length = length;\n declareUpdates(prevLength, length);\n }, [length]);\n useMemo(() => {\n declareUpdates(0, Math.min(prevLength, length));\n }, deps);\n\n function declareUpdates(startIndex, endIndex) {\n for (let i = startIndex; i < endIndex; i++) {\n const ctrl = ctrls.current[i] || (ctrls.current[i] = new Controller(null, state.flush));\n const update = propsFn ? propsFn(i, ctrl) : props[i];\n\n if (update) {\n updates[i] = declareUpdate(update);\n }\n }\n }\n\n const springs = ctrls.current.map((ctrl, i) => getSprings(ctrl, updates[i]));\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useIsomorphicLayoutEffect(() => {\n layoutId.current++;\n state.ctrls = ctrls.current;\n const {\n queue\n } = state;\n\n if (queue.length) {\n state.queue = [];\n each(queue, cb => cb());\n }\n\n each(ctrls.current, (ctrl, i) => {\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext) {\n ctrl.start({\n default: context\n });\n }\n\n const update = updates[i];\n\n if (update) {\n replaceRef(ctrl, update.ref);\n\n if (ctrl.ref) {\n ctrl.queue.push(update);\n } else {\n ctrl.start(update);\n }\n }\n });\n });\n useOnce(() => () => {\n each(state.ctrls, ctrl => ctrl.stop(true));\n });\n const values = springs.map(x => _extends({}, x));\n return ref ? [values, ref] : values;\n}\n\nfunction useSpring(props, deps) {\n const isFn = is.fun(props);\n const [[values], ref] = useSprings(1, isFn ? props : [props], isFn ? deps || [] : deps);\n return isFn || arguments.length == 2 ? [values, ref] : values;\n}\n\nconst initSpringRef = () => SpringRef();\n\nconst useSpringRef = () => useState(initSpringRef)[0];\n\nfunction useTrail(length, propsArg, deps) {\n var _passedRef;\n\n const propsFn = is.fun(propsArg) && propsArg;\n if (propsFn && !deps) deps = [];\n let reverse = true;\n let passedRef = undefined;\n const result = useSprings(length, (i, ctrl) => {\n const props = propsFn ? propsFn(i, ctrl) : propsArg;\n passedRef = props.ref;\n reverse = reverse && props.reverse;\n return props;\n }, deps || [{}]);\n const ref = (_passedRef = passedRef) != null ? _passedRef : result[1];\n useIsomorphicLayoutEffect(() => {\n each(ref.current, (ctrl, i) => {\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n ctrl.start({\n to: parent.springs\n });\n } else {\n ctrl.start();\n }\n });\n }, deps);\n\n if (propsFn || arguments.length == 3) {\n ref['_getProps'] = (propsArg, ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n\n if (props) {\n const parent = ref.current[i + (props.reverse ? 1 : -1)];\n if (parent) props.to = parent.springs;\n return props;\n }\n };\n\n return result;\n }\n\n ref['start'] = propsArg => {\n const results = [];\n each(ref.current, (ctrl, i) => {\n const props = is.fun(propsArg) ? propsArg(i, ctrl) : propsArg;\n const parent = ref.current[i + (reverse ? 1 : -1)];\n\n if (parent) {\n results.push(ctrl.start(_extends({}, props, {\n to: parent.springs\n })));\n } else {\n results.push(ctrl.start(_extends({}, props)));\n }\n });\n return results;\n };\n\n return result[0];\n}\n\nlet TransitionPhase;\n\n(function (TransitionPhase) {\n TransitionPhase[\"MOUNT\"] = \"mount\";\n TransitionPhase[\"ENTER\"] = \"enter\";\n TransitionPhase[\"UPDATE\"] = \"update\";\n TransitionPhase[\"LEAVE\"] = \"leave\";\n})(TransitionPhase || (TransitionPhase = {}));\n\nfunction useTransition(data, props, deps) {\n const propsFn = is.fun(props) && props;\n const {\n reset,\n sort,\n trail = 0,\n expires = true,\n exitBeforeEnter = false,\n onDestroyed,\n ref: propsRef,\n config: propsConfig\n } = propsFn ? propsFn() : props;\n const ref = useMemo(() => propsFn || arguments.length == 3 ? SpringRef() : void 0, []);\n const items = toArray(data);\n const transitions = [];\n const usedTransitions = useRef(null);\n const prevTransitions = reset ? null : usedTransitions.current;\n useIsomorphicLayoutEffect(() => {\n usedTransitions.current = transitions;\n });\n useOnce(() => {\n each(transitions, t => {\n ref == null ? void 0 : ref.add(t.ctrl);\n t.ctrl.ref = ref;\n });\n return () => {\n each(usedTransitions.current, t => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n }\n\n detachRefs(t.ctrl, ref);\n t.ctrl.stop(true);\n });\n };\n });\n const keys = getKeys(items, propsFn ? propsFn() : props, prevTransitions);\n const expired = reset && usedTransitions.current || [];\n useIsomorphicLayoutEffect(() => each(expired, ({\n ctrl,\n item,\n key\n }) => {\n detachRefs(ctrl, ref);\n callProp(onDestroyed, item, key);\n }));\n const reused = [];\n if (prevTransitions) each(prevTransitions, (t, i) => {\n if (t.expired) {\n clearTimeout(t.expirationId);\n expired.push(t);\n } else {\n i = reused[i] = keys.indexOf(t.key);\n if (~i) transitions[i] = t;\n }\n });\n each(items, (item, i) => {\n if (!transitions[i]) {\n transitions[i] = {\n key: keys[i],\n item,\n phase: TransitionPhase.MOUNT,\n ctrl: new Controller()\n };\n transitions[i].ctrl.item = item;\n }\n });\n\n if (reused.length) {\n let i = -1;\n const {\n leave\n } = propsFn ? propsFn() : props;\n each(reused, (keyIndex, prevIndex) => {\n const t = prevTransitions[prevIndex];\n\n if (~keyIndex) {\n i = transitions.indexOf(t);\n transitions[i] = _extends({}, t, {\n item: items[keyIndex]\n });\n } else if (leave) {\n transitions.splice(++i, 0, t);\n }\n });\n }\n\n if (is.fun(sort)) {\n transitions.sort((a, b) => sort(a.item, b.item));\n }\n\n let delay = -trail;\n const forceUpdate = useForceUpdate();\n const defaultProps = getDefaultProps(props);\n const changes = new Map();\n const exitingTransitions = useRef(new Map());\n const forceChange = useRef(false);\n each(transitions, (t, i) => {\n const key = t.key;\n const prevPhase = t.phase;\n const p = propsFn ? propsFn() : props;\n let to;\n let phase;\n let propsDelay = callProp(p.delay || 0, key);\n\n if (prevPhase == TransitionPhase.MOUNT) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else {\n const isLeave = keys.indexOf(key) < 0;\n\n if (prevPhase != TransitionPhase.LEAVE) {\n if (isLeave) {\n to = p.leave;\n phase = TransitionPhase.LEAVE;\n } else if (to = p.update) {\n phase = TransitionPhase.UPDATE;\n } else return;\n } else if (!isLeave) {\n to = p.enter;\n phase = TransitionPhase.ENTER;\n } else return;\n }\n\n to = callProp(to, t.item, i);\n to = is.obj(to) ? inferTo(to) : {\n to\n };\n\n if (!to.config) {\n const config = propsConfig || defaultProps.config;\n to.config = callProp(config, t.item, i, phase);\n }\n\n delay += trail;\n\n const payload = _extends({}, defaultProps, {\n delay: propsDelay + delay,\n ref: propsRef,\n immediate: p.immediate,\n reset: false\n }, to);\n\n if (phase == TransitionPhase.ENTER && is.und(payload.from)) {\n const _p = propsFn ? propsFn() : props;\n\n const from = is.und(_p.initial) || prevTransitions ? _p.from : _p.initial;\n payload.from = callProp(from, t.item, i);\n }\n\n const {\n onResolve\n } = payload;\n\n payload.onResolve = result => {\n callProp(onResolve, result);\n const transitions = usedTransitions.current;\n const t = transitions.find(t => t.key === key);\n if (!t) return;\n\n if (result.cancelled && t.phase != TransitionPhase.UPDATE) {\n return;\n }\n\n if (t.ctrl.idle) {\n const idle = transitions.every(t => t.ctrl.idle);\n\n if (t.phase == TransitionPhase.LEAVE) {\n const expiry = callProp(expires, t.item);\n\n if (expiry !== false) {\n const expiryMs = expiry === true ? 0 : expiry;\n t.expired = true;\n\n if (!idle && expiryMs > 0) {\n if (expiryMs <= 0x7fffffff) t.expirationId = setTimeout(forceUpdate, expiryMs);\n return;\n }\n }\n }\n\n if (idle && transitions.some(t => t.expired)) {\n exitingTransitions.current.delete(t);\n\n if (exitBeforeEnter) {\n forceChange.current = true;\n }\n\n forceUpdate();\n }\n }\n };\n\n const springs = getSprings(t.ctrl, payload);\n\n if (phase === TransitionPhase.LEAVE && exitBeforeEnter) {\n exitingTransitions.current.set(t, {\n phase,\n springs,\n payload\n });\n } else {\n changes.set(t, {\n phase,\n springs,\n payload\n });\n }\n });\n const context = useContext(SpringContext);\n const prevContext = usePrev(context);\n const hasContext = context !== prevContext && hasProps(context);\n useIsomorphicLayoutEffect(() => {\n if (hasContext) {\n each(transitions, t => {\n t.ctrl.start({\n default: context\n });\n });\n }\n }, [context]);\n each(changes, (_, t) => {\n if (exitingTransitions.current.size) {\n const ind = transitions.findIndex(state => state.key === t.key);\n transitions.splice(ind, 1);\n }\n });\n useIsomorphicLayoutEffect(() => {\n each(exitingTransitions.current.size ? exitingTransitions.current : changes, ({\n phase,\n payload\n }, t) => {\n const {\n ctrl\n } = t;\n t.phase = phase;\n ref == null ? void 0 : ref.add(ctrl);\n\n if (hasContext && phase == TransitionPhase.ENTER) {\n ctrl.start({\n default: context\n });\n }\n\n if (payload) {\n replaceRef(ctrl, payload.ref);\n\n if ((ctrl.ref || ref) && !forceChange.current) {\n ctrl.update(payload);\n } else {\n ctrl.start(payload);\n\n if (forceChange.current) {\n forceChange.current = false;\n }\n }\n }\n });\n }, reset ? void 0 : deps);\n\n const renderTransitions = render => React.createElement(React.Fragment, null, transitions.map((t, i) => {\n const {\n springs\n } = changes.get(t) || t.ctrl;\n const elem = render(_extends({}, springs), t.item, t, i);\n return elem && elem.type ? React.createElement(elem.type, _extends({}, elem.props, {\n key: is.str(t.key) || is.num(t.key) ? t.key : t.ctrl.id,\n ref: elem.ref\n })) : elem;\n }));\n\n return ref ? [renderTransitions, ref] : renderTransitions;\n}\nlet nextKey = 1;\n\nfunction getKeys(items, {\n key,\n keys = key\n}, prevTransitions) {\n if (keys === null) {\n const reused = new Set();\n return items.map(item => {\n const t = prevTransitions && prevTransitions.find(t => t.item === item && t.phase !== TransitionPhase.LEAVE && !reused.has(t));\n\n if (t) {\n reused.add(t);\n return t.key;\n }\n\n return nextKey++;\n });\n }\n\n return is.und(keys) ? items : is.fun(keys) ? items.map(keys) : toArray(keys);\n}\n\nconst _excluded$2 = [\"children\"];\nfunction Spring(_ref) {\n let {\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n\n return children(useSpring(props));\n}\n\nconst _excluded$1 = [\"items\", \"children\"];\nfunction Trail(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n\n const trails = useTrail(items.length, props);\n return items.map((item, index) => {\n const result = children(item, index);\n return is.fun(result) ? result(trails[index]) : result;\n });\n}\n\nconst _excluded = [\"items\", \"children\"];\nfunction Transition(_ref) {\n let {\n items,\n children\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return useTransition(items, props)(children);\n}\n\nclass Interpolation extends FrameValue {\n constructor(source, args) {\n super();\n this.key = void 0;\n this.idle = true;\n this.calc = void 0;\n this._active = new Set();\n this.source = source;\n this.calc = createInterpolator(...args);\n\n const value = this._get();\n\n const nodeType = getAnimatedType(value);\n setAnimated(this, nodeType.create(value));\n }\n\n advance(_dt) {\n const value = this._get();\n\n const oldValue = this.get();\n\n if (!isEqual(value, oldValue)) {\n getAnimated(this).setValue(value);\n\n this._onChange(value, this.idle);\n }\n\n if (!this.idle && checkIdle(this._active)) {\n becomeIdle(this);\n }\n }\n\n _get() {\n const inputs = is.arr(this.source) ? this.source.map(getFluidValue) : toArray(getFluidValue(this.source));\n return this.calc(...inputs);\n }\n\n _start() {\n if (this.idle && !checkIdle(this._active)) {\n this.idle = false;\n each(getPayload(this), node => {\n node.done = false;\n });\n\n if (Globals.skipAnimation) {\n raf.batchedUpdates(() => this.advance());\n becomeIdle(this);\n } else {\n frameLoop.start(this);\n }\n }\n }\n\n _attach() {\n let priority = 1;\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n addFluidObserver(source, this);\n }\n\n if (isFrameValue(source)) {\n if (!source.idle) {\n this._active.add(source);\n }\n\n priority = Math.max(priority, source.priority + 1);\n }\n });\n this.priority = priority;\n\n this._start();\n }\n\n _detach() {\n each(toArray(this.source), source => {\n if (hasFluidValue(source)) {\n removeFluidObserver(source, this);\n }\n });\n\n this._active.clear();\n\n becomeIdle(this);\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n if (event.idle) {\n this.advance();\n } else {\n this._active.add(event.parent);\n\n this._start();\n }\n } else if (event.type == 'idle') {\n this._active.delete(event.parent);\n } else if (event.type == 'priority') {\n this.priority = toArray(this.source).reduce((highest, parent) => Math.max(highest, (isFrameValue(parent) ? parent.priority : 0) + 1), 0);\n }\n }\n\n}\n\nfunction isIdle(source) {\n return source.idle !== false;\n}\n\nfunction checkIdle(active) {\n return !active.size || Array.from(active).every(isIdle);\n}\n\nfunction becomeIdle(self) {\n if (!self.idle) {\n self.idle = true;\n each(getPayload(self), node => {\n node.done = true;\n });\n callFluidObservers(self, {\n type: 'idle',\n parent: self\n });\n }\n}\n\nconst to = (source, ...args) => new Interpolation(source, args);\nconst interpolate = (source, ...args) => (deprecateInterpolate(), new Interpolation(source, args));\n\nGlobals.assign({\n createStringInterpolator,\n to: (source, args) => new Interpolation(source, args)\n});\nconst update = frameLoop.advance;\n\nexport { BailSignal, Controller, FrameValue, Interpolation, Spring, SpringContext, SpringRef, SpringValue, Trail, Transition, config, easings, inferTo, interpolate, to, update, useChain, useSpring, useSpringRef, useSprings, useTrail, useTransition };\n","import { Globals } from '@react-spring/core';\nexport * from '@react-spring/core';\nimport { unstable_batchedUpdates } from 'react-dom';\nimport { eachProp, is, toArray, FluidValue, each, getFluidValue, hasFluidValue, addFluidObserver, removeFluidObserver, callFluidObservers, createStringInterpolator, colors } from '@react-spring/shared';\nimport { AnimatedObject, createHost } from '@react-spring/animated';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst _excluded$2 = [\"style\", \"children\", \"scrollTop\", \"scrollLeft\"];\nconst isCustomPropRE = /^--/;\n\nfunction dangerousStyleValue(name, value) {\n if (value == null || typeof value === 'boolean' || value === '') return '';\n if (typeof value === 'number' && value !== 0 && !isCustomPropRE.test(name) && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) return value + 'px';\n return ('' + value).trim();\n}\n\nconst attributeCache = {};\nfunction applyAnimatedValues(instance, props) {\n if (!instance.nodeType || !instance.setAttribute) {\n return false;\n }\n\n const isFilterElement = instance.nodeName === 'filter' || instance.parentNode && instance.parentNode.nodeName === 'filter';\n\n const _ref = props,\n {\n style,\n children,\n scrollTop,\n scrollLeft\n } = _ref,\n attributes = _objectWithoutPropertiesLoose(_ref, _excluded$2);\n\n const values = Object.values(attributes);\n const names = Object.keys(attributes).map(name => isFilterElement || instance.hasAttribute(name) ? name : attributeCache[name] || (attributeCache[name] = name.replace(/([A-Z])/g, n => '-' + n.toLowerCase())));\n\n if (children !== void 0) {\n instance.textContent = children;\n }\n\n for (let name in style) {\n if (style.hasOwnProperty(name)) {\n const value = dangerousStyleValue(name, style[name]);\n\n if (isCustomPropRE.test(name)) {\n instance.style.setProperty(name, value);\n } else {\n instance.style[name] = value;\n }\n }\n }\n\n names.forEach((name, i) => {\n instance.setAttribute(name, values[i]);\n });\n\n if (scrollTop !== void 0) {\n instance.scrollTop = scrollTop;\n }\n\n if (scrollLeft !== void 0) {\n instance.scrollLeft = scrollLeft;\n }\n}\nlet isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n\nconst prefixKey = (prefix, key) => prefix + key.charAt(0).toUpperCase() + key.substring(1);\n\nconst prefixes = ['Webkit', 'Ms', 'Moz', 'O'];\nisUnitlessNumber = Object.keys(isUnitlessNumber).reduce((acc, prop) => {\n prefixes.forEach(prefix => acc[prefixKey(prefix, prop)] = acc[prop]);\n return acc;\n}, isUnitlessNumber);\n\nconst _excluded$1 = [\"x\", \"y\", \"z\"];\nconst domTransforms = /^(matrix|translate|scale|rotate|skew)/;\nconst pxTransforms = /^(translate)/;\nconst degTransforms = /^(rotate|skew)/;\n\nconst addUnit = (value, unit) => is.num(value) && value !== 0 ? value + unit : value;\n\nconst isValueIdentity = (value, id) => is.arr(value) ? value.every(v => isValueIdentity(v, id)) : is.num(value) ? value === id : parseFloat(value) === id;\n\nclass AnimatedStyle extends AnimatedObject {\n constructor(_ref) {\n let {\n x,\n y,\n z\n } = _ref,\n style = _objectWithoutPropertiesLoose(_ref, _excluded$1);\n\n const inputs = [];\n const transforms = [];\n\n if (x || y || z) {\n inputs.push([x || 0, y || 0, z || 0]);\n transforms.push(xyz => [`translate3d(${xyz.map(v => addUnit(v, 'px')).join(',')})`, isValueIdentity(xyz, 0)]);\n }\n\n eachProp(style, (value, key) => {\n if (key === 'transform') {\n inputs.push([value || '']);\n transforms.push(transform => [transform, transform === '']);\n } else if (domTransforms.test(key)) {\n delete style[key];\n if (is.und(value)) return;\n const unit = pxTransforms.test(key) ? 'px' : degTransforms.test(key) ? 'deg' : '';\n inputs.push(toArray(value));\n transforms.push(key === 'rotate3d' ? ([x, y, z, deg]) => [`rotate3d(${x},${y},${z},${addUnit(deg, unit)})`, isValueIdentity(deg, 0)] : input => [`${key}(${input.map(v => addUnit(v, unit)).join(',')})`, isValueIdentity(input, key.startsWith('scale') ? 1 : 0)]);\n }\n });\n\n if (inputs.length) {\n style.transform = new FluidTransform(inputs, transforms);\n }\n\n super(style);\n }\n\n}\n\nclass FluidTransform extends FluidValue {\n constructor(inputs, transforms) {\n super();\n this._value = null;\n this.inputs = inputs;\n this.transforms = transforms;\n }\n\n get() {\n return this._value || (this._value = this._get());\n }\n\n _get() {\n let transform = '';\n let identity = true;\n each(this.inputs, (input, i) => {\n const arg1 = getFluidValue(input[0]);\n const [t, id] = this.transforms[i](is.arr(arg1) ? arg1 : input.map(getFluidValue));\n transform += ' ' + t;\n identity = identity && id;\n });\n return identity ? 'none' : transform;\n }\n\n observerAdded(count) {\n if (count == 1) each(this.inputs, input => each(input, value => hasFluidValue(value) && addFluidObserver(value, this)));\n }\n\n observerRemoved(count) {\n if (count == 0) each(this.inputs, input => each(input, value => hasFluidValue(value) && removeFluidObserver(value, this)));\n }\n\n eventObserved(event) {\n if (event.type == 'change') {\n this._value = null;\n }\n\n callFluidObservers(this, event);\n }\n\n}\n\nconst primitives = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', 'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nconst _excluded = [\"scrollTop\", \"scrollLeft\"];\nGlobals.assign({\n batchedUpdates: unstable_batchedUpdates,\n createStringInterpolator,\n colors\n});\nconst host = createHost(primitives, {\n applyAnimatedValues,\n createAnimatedStyle: style => new AnimatedStyle(style),\n getComponentProps: _ref => {\n let props = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return props;\n }\n});\nconst animated = host.animated;\n\nexport { animated as a, animated };\n","// 获取当前浏览器私有属性\nexport const browserPrefix = () => {\n const vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'];\n let transform;\n const elementStyle = document.createElement('div').style;\n // tslint:disable-next-line:prefer-for-of\n for (let i = 0; i < vendors.length; i++) {\n transform = vendors[i] + 'ransform';\n if (transform in elementStyle) {\n return vendors[i].substr(0, vendors[i].length - 1);\n }\n }\n return false;\n};\n// 添加style浏览器私有属性\nexport const addPrefixStyle = (styleName: string) => {\n const vendor = browserPrefix();\n if (vendor === false) {\n return '';\n }\n if (vendor === '') {\n return styleName;\n }\n return vendor + styleName.charAt(0).toUpperCase() + styleName.substr(1);\n};\n\nexport const getTouchAction = (eventPassthrough, addPinch) => {\n let touchAction = 'none';\n if (eventPassthrough === 'vertical') {\n touchAction = 'pan-y';\n } else if (eventPassthrough === 'horizontal') {\n touchAction = 'pan-x';\n }\n if (addPinch && touchAction !== 'none') {\n // add pinch-zoom support if the browser supports it, but if not (eg. Chrome <55) do nothing\n touchAction += ' pinch-zoom';\n }\n return touchAction;\n};\n\nexport class TouchableService {\n private deltaX = 0;\n private deltaY = 0;\n private pointX = 0;\n private pointY = 0;\n private distX = 0;\n private distY = 0;\n private directionLocked = '';\n private directionLockThreshold = 5;\n private disableTouchMove = true;\n\n public handleTouchStart = (e) => {\n if (this.multiTouchDisable(e)) {\n const point = e.touches ? e.touches[0] : e;\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n this.distX = 0;\n this.distY = 0;\n this.directionLocked = '';\n }\n };\n\n public handleTouchMove = (e) => {\n if (this.multiTouchDisable(e)) {\n const point = e.touches ? e.touches[0] : event;\n this.deltaX = point.pageX - this.pointX;\n this.deltaY = point.pageY - this.pointY;\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n this.distX += this.deltaX;\n this.distY += this.deltaY;\n\n const absDistX = Math.abs(this.distX);\n const absDistY = Math.abs(this.distY);\n if (!this.directionLocked) {\n if (absDistX > absDistY + this.directionLockThreshold) {\n this.directionLocked = 'h'; // lock horizontally\n } else if (absDistY >= absDistX + this.directionLockThreshold) {\n this.directionLocked = 'v'; // lock vertically\n } else {\n this.directionLocked = 'n'; // no lock\n }\n }\n // console.log('unTouchable service touch move direction: `', this.directionLocked, '`');\n if (this.directionLocked === 'h') {\n // return;\n }\n if (this.disableTouchMove) {\n console.log('native-lock-scroll', 'preventDefault');\n e.preventDefault();\n }\n }\n };\n\n private multiTouchDisable(e) {\n if (e.touches.length > 1 || e.targetTouches.length > 1) {\n console.log('multi touch found!');\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n return false;\n } else {\n return true;\n }\n }\n\n public changeTouchAction(element) {\n if (!element) {\n return;\n }\n if (this.disableTouchMove) {\n element.style[addPrefixStyle('touchAction')] = getTouchAction('horizontal', true);\n } else {\n element.style[addPrefixStyle('touchAction')] = 'initial';\n }\n }\n\n public changeDisableTouchMove(disableTouchMove: boolean, element) {\n this.disableTouchMove = disableTouchMove;\n this.changeTouchAction(element);\n }\n}\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { FC, useRef } from 'react';\nimport { TouchableService } from './touchable-service';\n\nexport type NativeLockScrollProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const NativeLockScroll: FC<NativeLockScrollProps> = (props) => {\n const rootRef = useRef<HTMLDivElement>();\n const touchService = useRef(new TouchableService());\n\n const lock = hooks.useCallbackRef(() => {\n touchService.current.changeDisableTouchMove(true, rootRef.current);\n rootRef.current?.addEventListener('touchstart', touchService.current.handleTouchStart);\n rootRef.current?.addEventListener('touchmove', touchService.current.handleTouchMove);\n });\n\n const unlock = hooks.useCallbackRef(() => {\n touchService.current.changeDisableTouchMove(false, rootRef.current);\n rootRef.current?.removeEventListener('touchstart', touchService.current.handleTouchStart);\n rootRef.current?.removeEventListener('touchmove', touchService.current.handleTouchMove);\n });\n\n const rootRefHandle = hooks.useCallbackRef((node) => {\n if (node) {\n rootRef.current = node;\n lock();\n }\n });\n\n hooks.useUnmountEffect(() => {\n unlock();\n });\n\n return (\n <div {...props} ref={rootRefHandle} className={classNames('v-native-lock-scroll', props.className)}>\n {props.children}\n </div>\n );\n};\n","import { animated, useSpring } from '@react-spring/web';\nimport { hooks } from '@wove/react';\nimport { FC, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { NativeLockScroll } from '../native-lock-scroll';\nimport { GetContainer, resolveContainer } from '../utils/get-container';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport './style.less';\n\nconst classPrefix = `v-mask`;\n\nconst opacityRecord = {\n default: 0.55,\n thin: 0.35,\n thick: 0.75,\n};\n\nexport type MaskProps = {\n visible?: boolean;\n onMaskClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n color?: 'black' | 'white';\n opacity?: 'default' | 'thin' | 'thick' | number;\n getContainer?: GetContainer;\n afterShow?: () => void;\n afterClose?: () => void;\n stopPropagation?: boolean;\n} & CommonPropsWithChildren;\n\nexport const Mask: FC<MaskProps> = (props) => {\n const ref = useRef<HTMLDivElement>(null);\n\n const background = useMemo(() => {\n const opacity = opacityRecord[props.opacity || 'default'] ?? props.opacity;\n const rgb = props.color === 'white' ? '255, 255, 255' : '0, 0, 0';\n return `rgba(${rgb}, ${opacity})`;\n }, [props.color, props.opacity]);\n\n const [active, setActive] = useState(props.visible);\n\n const { opacity } = useSpring({\n opacity: props.visible ? 1 : 0,\n config: {\n precision: 0.01,\n mass: 1,\n tension: 200,\n friction: 30,\n },\n onStart: () => {\n setActive(true);\n },\n onRest: () => {\n setActive(props.visible);\n if (props.visible) {\n props.afterShow?.();\n } else {\n props.afterClose?.();\n }\n },\n });\n\n const onMaskClick = hooks.useCallbackRef((event) => {\n if (props.stopPropagation) {\n event.stopPropagation();\n }\n props.onMaskClick?.(event as React.MouseEvent<HTMLDivElement, MouseEvent>);\n });\n\n const node = withNativeProps(\n props,\n <NativeLockScroll>\n <animated.div\n className={classPrefix}\n ref={ref}\n style={{\n ...props.style,\n background,\n opacity,\n display: active ? 'unset' : 'none',\n }}\n onClick={onMaskClick}\n >\n {props.children && <div className={`${classPrefix}-content`}>{props.children}</div>}\n </animated.div>\n </NativeLockScroll>,\n );\n\n if (props.getContainer) {\n const container = resolveContainer(props.getContainer);\n return createPortal(node, container);\n } else {\n return node;\n }\n};\n\nMask.defaultProps = {\n visible: true,\n color: 'black',\n opacity: 'default',\n getContainer: null,\n stopPropagation: true,\n};\n","import { useRef } from 'react';\n\nfunction useInitialized(check?: boolean) {\n const initializedRef = useRef(check);\n if (check) {\n initializedRef.current = true;\n }\n return !!initializedRef.current;\n}\n\nexport function useShouldRender(active: boolean, forceRender?: boolean, destroyOnClose?: boolean) {\n const initialized = useInitialized(active);\n if (forceRender) return true;\n if (active) return true;\n if (!initialized) return false;\n return !destroyOnClose;\n}\n","import { classNames } from '@dimjs/utils';\nimport { animated, useSpring } from '@react-spring/web';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, FC, Fragment, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Mask } from '../mask';\nimport { GetContainer, resolveContainer } from '../utils/get-container';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport { getZIndex } from '../utils/z-index';\nimport './style.less';\nimport { useShouldRender } from './utils/use-should-render';\n\nconst classPrefix = `v-modal`;\nexport type ModalProps = {\n visible?: boolean;\n mask?: boolean;\n onMaskClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n destroyOnClose?: boolean;\n forceRender?: boolean;\n getContainer?: GetContainer;\n onBeforeOpen?: () => void;\n onAfterOpen?: () => void;\n onBeforeClose?: () => void;\n onAfterClose?: () => void;\n bodyClassName?: string;\n bodyStyle?: CSSProperties;\n maskClassName?: string;\n maskStyle?: CSSProperties;\n onClose?: (operate?: 'mask' | 'closeIcon') => void;\n closeByMask?: boolean;\n closeIcon?: boolean;\n title?: string | JSX.Element;\n duration?: number;\n clickStopPropagation?: boolean;\n} & CommonPropsWithChildren<{ '--modal-border-radius': CSSProperties['borderRadius'] }>;\n\nconst ModalContent: FC<ModalProps> = (props) => {\n return (\n <Fragment>\n {props.closeIcon && (\n <div className={`${classPrefix}-body-close`} onClick={props.onClose?.bind(null, 'closeIcon')}></div>\n )}\n {props.title && <div className={`${classPrefix}-body-title`}>{props.title}</div>}\n {props.children}\n </Fragment>\n );\n};\n\nexport const Modal: FC<ModalProps> = (props) => {\n const maskZIndex = useRef<number>();\n const bodyZIndex = useRef<number>();\n const ref = useRef<HTMLDivElement>(null);\n\n const updateZindex = hooks.useCallbackRef(() => {\n maskZIndex.current = getZIndex();\n bodyZIndex.current = getZIndex();\n });\n\n const [visible, setVisible] = useState(() => {\n if (props.visible) {\n updateZindex();\n }\n return props.visible || false;\n });\n\n const shouldRender = useShouldRender(visible, props.forceRender, props.destroyOnClose);\n\n const onBeforeOpenHandle = hooks.useCallbackRef(() => {\n updateZindex();\n props.onBeforeOpen?.();\n setVisible(true);\n });\n\n const onAfterOpenHandle = hooks.useCallbackRef(() => {\n props.onAfterOpen?.();\n });\n\n const onBeforeCloseHandle = hooks.useCallbackRef(() => {\n props.onBeforeClose?.();\n });\n\n const onAfterCloseHandle = hooks.useCallbackRef(() => {\n setVisible(false);\n props.onAfterClose?.();\n });\n\n const style = useSpring({\n scale: props.visible ? 1 : 0.8,\n opacity: props.visible ? 1 : 0,\n config: {\n mass: 1,\n tension: 250,\n friction: 20,\n clamp: true,\n duration: props.duration,\n },\n onStart: () => {\n if (!visible) {\n onBeforeOpenHandle();\n } else {\n onBeforeCloseHandle();\n }\n },\n onRest: () => {\n if (props.visible) {\n onAfterOpenHandle();\n } else {\n onAfterCloseHandle();\n }\n },\n });\n\n const onClick = hooks.useCallbackRef((event) => {\n if (props.clickStopPropagation) {\n event.stopPropagation();\n }\n });\n\n const onMaskClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n if (props.onMaskClick) {\n props.onMaskClick(event as React.MouseEvent<HTMLDivElement, MouseEvent>);\n } else {\n if (props.closeByMask) {\n props.onClose?.('mask');\n }\n }\n });\n\n if (!visible) {\n document.body.classList.remove('overflow-hidden');\n } else {\n document.body.classList.add('overflow-hidden');\n }\n\n const node = withNativeProps(\n props,\n <div className={classPrefix} onClick={onClick} style={{ display: visible ? 'unset' : 'none' }}>\n {props.mask && (\n <Mask\n visible={props.visible}\n onMaskClick={onMaskClick}\n className={props.maskClassName}\n style={{ zIndex: maskZIndex.current, ...props.maskStyle }}\n />\n )}\n <div\n className={classNames(`${classPrefix}-body`, props.bodyClassName)}\n style={{ zIndex: bodyZIndex.current, ...props.bodyStyle }}\n >\n <animated.div className={`${classPrefix}-body-content`} style={style} ref={ref}>\n {shouldRender && <ModalContent {...props} />}\n </animated.div>\n </div>\n </div>,\n );\n if (props.getContainer) {\n const container = resolveContainer(props.getContainer);\n return createPortal(node, container);\n } else {\n return node;\n }\n};\n\nModal.defaultProps = {\n visible: false,\n getContainer: () => document.body,\n mask: true,\n closeByMask: true,\n clickStopPropagation: true,\n};\n","import { useRef } from 'react';\n\nfunction useInitialized(check?: boolean) {\n const initializedRef = useRef(check);\n if (check) {\n initializedRef.current = true;\n }\n return !!initializedRef.current;\n}\n\nexport function useShouldRender(active: boolean, forceRender?: boolean, destroyOnClose?: boolean) {\n const initialized = useInitialized(active);\n if (forceRender) return true;\n if (active) return true;\n if (!initialized) return false;\n return !destroyOnClose;\n}\n","import { classNames } from '@dimjs/utils';\nimport { animated, useSpring } from '@react-spring/web';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, FC, Fragment, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Mask } from '../mask';\nimport { GetContainer, resolveContainer } from '../utils/get-container';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport { getZIndex } from '../utils/z-index';\nimport './style.less';\nimport { useShouldRender } from './utils/use-should-render';\n\nconst classPrefix = `v-modal-drawer`;\nexport type ModalDrawerProps = {\n visible?: boolean;\n mask?: boolean;\n onMaskClick?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n destroyOnClose?: boolean;\n forceRender?: boolean;\n getContainer?: GetContainer;\n onBeforeOpen?: () => void;\n onAfterOpen?: () => void;\n onBeforeClose?: () => void;\n onAfterClose?: () => void;\n position?: 'bottom' | 'top' | 'left' | 'right';\n bodyClassName?: string;\n bodyStyle?: CSSProperties;\n maskClassName?: string;\n maskStyle?: CSSProperties;\n closeByMask?: boolean;\n onClose?: (operate?: 'mask' | 'closeIcon') => void;\n inline?: boolean;\n closeIcon?: boolean;\n title?: string | JSX.Element;\n bodyRef?: (node: HTMLDivElement) => void;\n duration?: number;\n} & CommonPropsWithChildren<{ '--modal-border-radius': CSSProperties['borderRadius'] }>;\n\nconst ModalDrawerContent: FC<ModalDrawerProps> = (props) => {\n return (\n <Fragment>\n {props.closeIcon && (\n <div className={`${classPrefix}-body-close`} onClick={props.onClose?.bind(null, 'closeIcon')}></div>\n )}\n {props.title && <div className={`${classPrefix}-body-title`}>{props.title}</div>}\n {props.children}\n </Fragment>\n );\n};\n\nexport const ModalDrawer: FC<ModalDrawerProps> = (props) => {\n const getContainer = props.inline ? null : props.getContainer;\n const maskZIndex = useRef<number>();\n const bodyZIndex = useRef<number>();\n const bodyCls = classNames(\n `${classPrefix}-body`,\n props.bodyClassName,\n `${classPrefix}-body-${props.position}`,\n );\n const updateZindex = hooks.useCallbackRef(() => {\n maskZIndex.current = getZIndex();\n bodyZIndex.current = getZIndex();\n });\n\n const [visible, setVisible] = useState(() => {\n if (props.visible) {\n updateZindex();\n }\n return props.visible || false;\n });\n const shouldRender = useShouldRender(visible, props.forceRender, props.destroyOnClose);\n\n const onBeforeOpenHandle = hooks.useCallbackRef(() => {\n updateZindex();\n props.onBeforeOpen?.();\n setVisible(true);\n });\n\n const onAfterOpenHandle = hooks.useCallbackRef(() => {\n props.onAfterOpen?.();\n });\n\n const onBeforeCloseHandle = hooks.useCallbackRef(() => {\n props.onBeforeClose?.();\n });\n\n const onAfterCloseHandle = hooks.useCallbackRef(() => {\n setVisible(false);\n props.onAfterClose?.();\n });\n\n const { percent } = useSpring({\n percent: props.visible ? 0 : 100,\n config: {\n precision: 0.1,\n mass: 0.4,\n tension: 300,\n friction: 30,\n duration: props.duration,\n },\n onStart: () => {\n if (!visible) {\n onBeforeOpenHandle();\n } else {\n onBeforeCloseHandle();\n }\n },\n onRest: () => {\n if (props.visible) {\n onAfterOpenHandle();\n } else {\n onAfterCloseHandle();\n }\n },\n });\n\n const onClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n });\n\n const onMaskClick = hooks.useCallbackRef((event) => {\n event.stopPropagation();\n if (props.onMaskClick) {\n props.onMaskClick(event as React.MouseEvent<HTMLDivElement, MouseEvent>);\n } else {\n if (props.closeByMask) {\n props.onClose?.('mask');\n }\n }\n });\n\n if (!visible) {\n document.body.classList.remove('overflow-hidden');\n } else {\n document.body.classList.add('overflow-hidden');\n }\n\n const node = withNativeProps(\n props,\n <div\n className={classNames(classPrefix, {\n [`${classPrefix}-inline`]: props.inline,\n [`${classPrefix}-open`]: visible,\n })}\n onClick={onClick}\n style={{ display: visible ? 'unset' : 'none' }}\n >\n <div>\n {props.mask && (\n <Mask\n visible={props.visible}\n onMaskClick={onMaskClick}\n className={props.maskClassName}\n style={{ zIndex: maskZIndex.current, ...props.maskStyle }}\n />\n )}\n <animated.div\n className={bodyCls}\n style={{\n ...props.bodyStyle,\n transform: percent.to((v) => {\n if (props.position === 'bottom') {\n return `translate(0, ${v}%)`;\n }\n if (props.position === 'top') {\n return `translate(0, -${v}%)`;\n }\n if (props.position === 'left') {\n return `translate(-${v}%, 0)`;\n }\n if (props.position === 'right') {\n return `translate(${v}%, 0)`;\n }\n return 'none';\n }),\n zIndex: bodyZIndex.current,\n }}\n ref={props.bodyRef}\n >\n {shouldRender && <ModalDrawerContent {...props} />}\n </animated.div>\n </div>\n </div>,\n );\n if (getContainer) {\n const container = resolveContainer(getContainer);\n return createPortal(node, container);\n } else {\n return node;\n }\n};\n\nModalDrawer.defaultProps = {\n position: 'bottom',\n visible: false,\n getContainer: () => document.body,\n mask: true,\n closeByMask: true,\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 { getZIndex } from '../utils/z-index';\nimport './style.less';\nexport const LoadingAnimation = () => {\n return (\n <div className=\"v-spinner-animation\" style={{ zIndex: getZIndex() }}>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { CommonPropsWithChildren } from '../utils';\nimport { getZIndex } from '../utils/z-index';\nimport { LoadingAnimation } from './animation';\n\nexport type SpinnerProps = CommonPropsWithChildren & {\n spinning: boolean;\n indicator?: JSX.Element;\n};\n\nconst Animation = (props: SpinnerProps) => {\n return <>{props.indicator ? props.indicator : <LoadingAnimation />}</>;\n};\n\nexport const Spinner = (props: SpinnerProps) => {\n return (\n <>\n {props.spinning ? (\n <div\n className={classNames('v-full-loading', props.className)}\n style={{ zIndex: getZIndex(), ...props.style }}\n >\n <Animation {...props} />\n </div>\n ) : null}\n {props.children}\n </>\n );\n};\n","import { useCallback, useRef } from 'react';\n\nexport const useLockFn = <P extends unknown[] = unknown[], V = unknown>(fn: (...args: P) => Promise<V>) => {\n const lockRef = useRef(false);\n\n return useCallback(\n async (...args: P) => {\n if (lockRef.current) return;\n lockRef.current = true;\n try {\n const ret = await fn(...args);\n lockRef.current = false;\n return ret;\n } catch (e) {\n lockRef.current = false;\n throw e;\n }\n },\n [fn],\n );\n};\n","import { hooks } from '@wove/react';\nimport { BasicDomTarget, getTargetElement } from '../utils';\nimport { useEffectCustom } from './use-effect-custom';\n\n/**\n * 原生api中用来监听node节点变化\n * @param effect\n * @param targetRef\n * @param options\n */\nexport function useMutationEffect(\n effect: () => void,\n target: BasicDomTarget<Element | Document>,\n options: MutationObserverInit,\n) {\n const fn = hooks.useCallbackRef(effect);\n useEffectCustom(() => {\n const observer = new MutationObserver(() => {\n fn();\n });\n const element = getTargetElement(target);\n if (element) {\n observer.observe(element, options);\n }\n return () => {\n observer.disconnect();\n };\n }, [fn, target]);\n}\n","import { noop } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { RefObject, useLayoutEffect } from 'react';\n\n/**\n * 监听元素的大小更改\n * @param effect\n * @param targetRef\n */\nexport function useResizeEffect(effect: () => void, targetRef: RefObject<HTMLElement>) {\n const fn = hooks.useCallbackRef(effect);\n useLayoutEffect(() => {\n const target = targetRef.current;\n if (target) {\n if (window.ResizeObserver) {\n const observer = new ResizeObserver(() => {\n fn();\n });\n observer.observe(target);\n return () => {\n observer.disconnect();\n };\n } else {\n fn();\n }\n }\n return noop;\n }, [fn, targetRef]);\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n/**\n * Returns the embedding frame element, if any.\n * @param {!Document} doc\n * @return {!Element}\n */\nfunction getFrameElement(doc) {\n try {\n return doc.defaultView && doc.defaultView.frameElement || null;\n } catch (e) {\n // Ignore the error.\n return null;\n }\n}\n\n/**\n * A local reference to the root document.\n */\nvar document = (function(startDoc) {\n var doc = startDoc;\n var frame = getFrameElement(doc);\n while (frame) {\n doc = frame.ownerDocument;\n frame = getFrameElement(doc);\n }\n return doc;\n})(window.document);\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n/**\n * The signal updater for cross-origin intersection. When not null, it means\n * that the polyfill is configured to work in a cross-origin mode.\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nvar crossOriginUpdater = null;\n\n/**\n * The current cross-origin intersection. Only used in the cross-origin mode.\n * @type {DOMRect|ClientRect}\n */\nvar crossOriginRect = null;\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = ensureDOMRect(entry.rootBounds);\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\n this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (\n options.root &&\n options.root.nodeType != 1 &&\n options.root.nodeType != 9\n ) {\n throw new Error('root must be a Document or Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n\n /** @private @const {!Array<!Document>} */\n this._monitoringDocuments = [];\n /** @private @const {!Array<function()>} */\n this._monitoringUnsubscribes = [];\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Sets up the polyfill in the cross-origin mode. The result is the\n * updater function that accepts two arguments: `boundingClientRect` and\n * `intersectionRect` - just as these fields would be available to the\n * parent via `IntersectionObserverEntry`. This function should be called\n * each time the iframe receives intersection information from the parent\n * window, e.g. via messaging.\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nIntersectionObserver._setupCrossOriginUpdater = function() {\n if (!crossOriginUpdater) {\n /**\n * @param {DOMRect|ClientRect} boundingClientRect\n * @param {DOMRect|ClientRect} intersectionRect\n */\n crossOriginUpdater = function(boundingClientRect, intersectionRect) {\n if (!boundingClientRect || !intersectionRect) {\n crossOriginRect = getEmptyRect();\n } else {\n crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);\n }\n registry.forEach(function(observer) {\n observer._checkForIntersections();\n });\n };\n }\n return crossOriginUpdater;\n};\n\n\n/**\n * Resets the cross-origin mode.\n */\nIntersectionObserver._resetCrossOriginUpdater = function() {\n crossOriginUpdater = null;\n crossOriginRect = null;\n};\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections(target.ownerDocument);\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n return item.element != target;\n });\n this._unmonitorIntersections(target.ownerDocument);\n if (this._observationTargets.length == 0) {\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorAllIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function(doc) {\n var win = doc.defaultView;\n if (!win) {\n // Already destroyed.\n return;\n }\n if (this._monitoringDocuments.indexOf(doc) != -1) {\n // Already monitoring.\n return;\n }\n\n // Private state for monitoring.\n var callback = this._checkForIntersections;\n var monitoringInterval = null;\n var domObserver = null;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\n } else {\n addEvent(win, 'resize', callback, true);\n addEvent(doc, 'scroll', callback, true);\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {\n domObserver = new win.MutationObserver(callback);\n domObserver.observe(doc, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n\n this._monitoringDocuments.push(doc);\n this._monitoringUnsubscribes.push(function() {\n // Get the window object again. When a friendly iframe is destroyed, it\n // will be null.\n var win = doc.defaultView;\n\n if (win) {\n if (monitoringInterval) {\n win.clearInterval(monitoringInterval);\n }\n removeEvent(win, 'resize', callback, true);\n }\n\n removeEvent(doc, 'scroll', callback, true);\n if (domObserver) {\n domObserver.disconnect();\n }\n });\n\n // Also monitor the parent.\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._monitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function(doc) {\n var index = this._monitoringDocuments.indexOf(doc);\n if (index == -1) {\n return;\n }\n\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n\n // Check if any dependent targets are still remaining.\n var hasDependentTargets =\n this._observationTargets.some(function(item) {\n var itemDoc = item.element.ownerDocument;\n // Target is in this context.\n if (itemDoc == doc) {\n return true;\n }\n // Target is nested in this context.\n while (itemDoc && itemDoc != rootDoc) {\n var frame = getFrameElement(itemDoc);\n itemDoc = frame && frame.ownerDocument;\n if (itemDoc == doc) {\n return true;\n }\n }\n return false;\n });\n if (hasDependentTargets) {\n return;\n }\n\n // Unsubscribe.\n var unsubscribe = this._monitoringUnsubscribes[index];\n this._monitoringDocuments.splice(index, 1);\n this._monitoringUnsubscribes.splice(index, 1);\n unsubscribe();\n\n // Also unmonitor the parent.\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._unmonitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorAllIntersections = function() {\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\n this._monitoringDocuments.length = 0;\n this._monitoringUnsubscribes.length = 0;\n for (var i = 0; i < unsubscribes.length; i++) {\n unsubscribes[i]();\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\n // Cross origin monitoring, but no initial data available yet.\n return;\n }\n\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, targetRect, rootRect);\n\n var rootBounds = null;\n if (!this._rootContainsTarget(target)) {\n rootBounds = getEmptyRect();\n } else if (!crossOriginUpdater || this.root) {\n rootBounds = rootRect;\n }\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: rootBounds,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} targetRect The bounding rect of the target.\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, targetRect, rootRect) {\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot && parent) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return null;\n\n if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {\n atRoot = true;\n if (parent == this.root || parent == document) {\n if (crossOriginUpdater && !this.root) {\n if (!crossOriginRect ||\n crossOriginRect.width == 0 && crossOriginRect.height == 0) {\n // A 0-size cross-origin intersection means no-intersection.\n parent = null;\n parentRect = null;\n intersectionRect = null;\n } else {\n parentRect = crossOriginRect;\n }\n } else {\n parentRect = rootRect;\n }\n } else {\n // Check if there's a frame that can be navigated to.\n var frame = getParentNode(parent);\n var frameRect = frame && getBoundingClientRect(frame);\n var frameIntersect =\n frame &&\n this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\n if (frameRect && frameIntersect) {\n parent = frame;\n parentRect = convertFromParentRect(frameRect, frameIntersect);\n } else {\n parent = null;\n intersectionRect = null;\n }\n }\n } else {\n // If the element has a non-visible overflow, and it's not the <body>\n // or <html> element, update the intersection rect.\n // Note: <body> and <html> cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n var doc = parent.ownerDocument;\n if (parent != doc.body &&\n parent != doc.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n }\n if (!intersectionRect) break;\n parent = parent && getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {ClientRect} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root && !isDoc(this.root)) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use <html>/<body> instead of window since scroll bars affect size.\n var doc = isDoc(this.root) ? this.root : document;\n var html = doc.documentElement;\n var body = doc.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {DOMRect|ClientRect} rect The rect object to expand.\n * @return {ClientRect} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n var rootDoc =\n (this.root && (this.root.ownerDocument || this.root)) || document;\n return (\n containsDeep(rootDoc, target) &&\n (!this.root || rootDoc == target.ownerDocument)\n );\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detachEvent == 'function') {\n node.detachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\n * intersection is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n } || null;\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {ClientRect} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n\n/**\n * Ensure that the result has all of the necessary fields of the DOMRect.\n * Specifically this ensures that `x` and `y` fields are set.\n *\n * @param {?DOMRect|?ClientRect} rect\n * @return {?DOMRect}\n */\nfunction ensureDOMRect(rect) {\n // A `DOMRect` object has `x` and `y` fields.\n if (!rect || 'x' in rect) {\n return rect;\n }\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\n // for internally calculated Rect objects. For the purposes of\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\n // for these fields.\n return {\n top: rect.top,\n y: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n}\n\n\n/**\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\n * the local BCR space.\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\n * @return {ClientRect} The local root bounding rect for the parent's children.\n */\nfunction convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\n var top = parentIntersectionRect.top - parentBoundingRect.top;\n var left = parentIntersectionRect.left - parentBoundingRect.left;\n return {\n top: top,\n left: left,\n height: parentIntersectionRect.height,\n width: parentIntersectionRect.width,\n bottom: top + parentIntersectionRect.height,\n right: left + parentIntersectionRect.width\n };\n}\n\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (node.nodeType == /* DOCUMENT */ 9 && node != document) {\n // If this node is a document node, look for the embedding frame.\n return getFrameElement(node);\n }\n\n // If the parent has element that is assigned through shadow root slot\n if (parent && parent.assignedSlot) {\n parent = parent.assignedSlot.parentNode\n }\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n return parent;\n}\n\n/**\n * Returns true if `node` is a Document.\n * @param {!Node} node\n * @returns {boolean}\n */\nfunction isDoc(node) {\n return node && node.nodeType === 9;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n","import 'intersection-observer';\nimport { useState } from 'react';\nimport { useInViewEffect } from 'react-hook-inview';\nimport { getScrollParent } from '../utils/get-scroll-parent';\n\nexport type LazyDetectorProps = {\n className?: string;\n onChange: (inView: boolean) => void;\n unobserve?: boolean;\n // 格式'0px 0px 0px 0px'\n rootMargin?: string;\n};\n\n/**\n * 判断是否进出最近一个原生滚动条父节点可视区域\n * ```\n * 1. unobserve表示触发监听后,是否销毁监听功能\n * ```\n */\nexport const InVisibleView = (props: LazyDetectorProps) => {\n const [scrollParentNode, setScrollParentNode] = useState<HTMLDivElement>();\n const inViewCallback = useInViewEffect(\n ([entry], observer) => {\n if (entry.isIntersecting) {\n if (props.unobserve) {\n observer.unobserve(entry.target);\n }\n }\n props.onChange(entry.isIntersecting);\n },\n {\n // 设置了root属性后,rootMargin才会有效果,rootMagin可以理解为,懒加载的预加载距离【https://zhuanlan.zhihu.com/p/391152610】\n rootMargin: props.rootMargin,\n // root属性指定目标元素所在的滚动容器节点\n root: scrollParentNode,\n },\n );\n\n return (\n <div\n className=\"v-in-visible-view\"\n style={{ width: '100%' }}\n ref={(node) => {\n if (node) {\n setScrollParentNode(getScrollParent(node as Element, document) as HTMLDivElement);\n inViewCallback(node);\n }\n }}\n />\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { forwardRef, ReactNode } from 'react';\nimport { NativeProps } from '../utils/native-props';\nimport { px2rem } from '../utils/pxrem';\nimport './style.less';\n\nexport type NativeScrollType = 'x' | 'y' | 'xy' | 'hidden';\n\nexport type NativeScrollProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n scroll?: NativeScrollType;\n // height中 number 值为视觉稿高度\n height?: string | number;\n children: ReactNode | ReactNode[];\n} & NativeProps;\n\n/**\n * Html原生滚动条\n * ```\n * 当父节点存在高度时,滚动条才会生效,滚动条事件才会生效\n * ```\n */\nexport const NativeScroll = forwardRef<HTMLDivElement, NativeScrollProps>((props, ref) => {\n const { height, scroll, children, className, style, ...otherProps } = props;\n const dpiHeight = typeof height === 'number' ? px2rem(height) : height;\n const newStyle = { height: dpiHeight || '100%', ...style };\n\n const clsName = classNames(\n 'v-native-scroll',\n {\n 'v-native-scroll-x': scroll === 'x',\n 'v-native-scroll-y': scroll === 'y',\n 'v-native-scroll-hidden': scroll === 'hidden',\n },\n className,\n );\n\n return (\n <div className={clsName} style={newStyle} ref={ref} {...otherProps}>\n {children}\n </div>\n );\n});\n\nNativeScroll.defaultProps = {\n scroll: 'y',\n};\n","import { FC } from 'react';\nimport './style.less';\n\nexport type IphoneBottomAdaptiveProps = {\n bgColor?: string;\n};\n\nexport const IphoneBottomAdaptive: FC<IphoneBottomAdaptiveProps> = (props) => {\n return (\n <div\n className=\"safe-area-inset-bottom\"\n style={props.bgColor ? { backgroundColor: props.bgColor } : {}}\n ></div>\n );\n};\n","import 'keen-slider/keen-slider.min.css';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport './style.less';\n\nexport type SwiperItemProps = {} & CommonPropsWithChildren;\n\nexport const SwiperItem = (props: SwiperItemProps) => {\n return withNativeProps(props, <div className=\"keen-slider__slide\">{props.children}</div>);\n};\n","type SwiperAutoSwitchPluginParam = {\n duration: number;\n};\nexport const swiperAutoSwitchPlugin = (param?: SwiperAutoSwitchPluginParam) => {\n return (slider) => {\n let timeout: ReturnType<typeof setTimeout>;\n let mouseOver = false;\n function clearNextTimeout() {\n clearTimeout(timeout);\n }\n function nextTimeout() {\n clearTimeout(timeout);\n if (mouseOver) return;\n timeout = setTimeout(() => {\n slider.next();\n }, param?.duration || 2000);\n }\n slider.on('created', () => {\n slider.container.addEventListener('mouseover', () => {\n mouseOver = true;\n clearNextTimeout();\n });\n slider.container.addEventListener('mouseout', () => {\n mouseOver = false;\n nextTimeout();\n });\n nextTimeout();\n });\n slider.on('dragStarted', clearNextTimeout);\n slider.on('animationEnded', nextTimeout);\n slider.on('updated', nextTimeout);\n };\n};\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var n=require(\"react\");function t(n){return Array.prototype.slice.call(n)}function e(n,t){var e=Math.floor(n);return e===t||e+1===t?n:t}function i(){return Date.now()}function r(n,t,e){if(t=\"data-keen-slider-\"+t,null===e)return n.removeAttribute(t);n.setAttribute(t,e||\"\")}function a(n,e){return e=e||document,\"function\"==typeof n&&(n=n(e)),Array.isArray(n)?n:\"string\"==typeof n?t(e.querySelectorAll(n)):n instanceof HTMLElement?[n]:n instanceof NodeList?t(n):[]}function o(n){n.raw&&(n=n.raw),n.cancelable&&!n.defaultPrevented&&n.preventDefault()}function u(n){n.raw&&(n=n.raw),n.stopPropagation&&n.stopPropagation()}function c(){var n=[];return{add:function(t,e,i,r){t.addListener?t.addListener(i):t.addEventListener(e,i,r),n.push([t,e,i,r])},input:function(n,t,e,i){this.add(n,t,function(n){return function(t){t.nativeEvent&&(t=t.nativeEvent);var e=t.changedTouches||[],i=t.targetTouches||[],r=t.detail&&t.detail.x?t.detail:null;return n({id:r?r.identifier?r.identifier:\"i\":i[0]?i[0]?i[0].identifier:\"e\":\"d\",idChanged:r?r.identifier?r.identifier:\"i\":e[0]?e[0]?e[0].identifier:\"e\":\"d\",raw:t,x:r&&r.x?r.x:i[0]?i[0].screenX:r?r.x:t.pageX,y:r&&r.y?r.y:i[0]?i[0].screenY:r?r.y:t.pageY})}}(e),i)},purge:function(){n.forEach((function(n){n[0].removeListener?n[0].removeListener(n[2]):n[0].removeEventListener(n[1],n[2],n[3])})),n=[]}}}function s(n,t,e){return Math.min(Math.max(n,t),e)}function d(n){return(n>0?1:0)-(n<0?1:0)||+n}function l(n){var t=n.getBoundingClientRect();return{height:e(t.height,n.offsetHeight),width:e(t.width,n.offsetWidth)}}function f(n,t,e,i){var r=n&&n[t];return null==r?e:i&&\"function\"==typeof r?r():r}function p(n){return Math.round(1e6*n)/1e6}function v(n,t){if(n===t)return!0;var e=typeof n;if(e!==typeof t)return!1;if(\"object\"!==e||null===n||null===t)return\"function\"===e&&n.toString()===t.toString();if(n.length!==t.length||Object.getOwnPropertyNames(n).length!==Object.getOwnPropertyNames(t).length)return!1;for(var i in n)if(!v(n[i],t[i]))return!1;return!0}var h=function(){return h=Object.assign||function(n){for(var t,e=1,i=arguments.length;e<i;e++)for(var r in t=arguments[e])Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n},h.apply(this,arguments)};function m(n,t,e){if(e||2===arguments.length)for(var i,r=0,a=t.length;r<a;r++)!i&&r in t||(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return n.concat(i||Array.prototype.slice.call(t))}function g(n){var t,e,i,r,a,o;function u(t){o||(o=t),c(!0);var a=t-o;a>i&&(a=i);var l=r[e];if(l[3]<a)return e++,u(t);var f=l[2],p=l[4],v=l[0],h=l[1]*(0,l[5])(0===p?1:(a-f)/p);if(h&&n.track.to(v+h),a<i)return d();o=null,c(!1),s(null),n.emit(\"animationEnded\")}function c(n){t.active=n}function s(n){t.targetIdx=n}function d(){var n;n=u,a=window.requestAnimationFrame(n)}function l(){var t;t=a,window.cancelAnimationFrame(t),c(!1),s(null),o&&n.emit(\"animationStopped\"),o=null}return t={active:!1,start:function(t){if(l(),n.track.details){var a=0,o=n.track.details.position;e=0,i=0,r=t.map((function(n){var t,e=o,r=null!==(t=n.earlyExit)&&void 0!==t?t:n.duration,u=n.easing,c=n.distance*u(r/n.duration)||0;o+=c;var s=i;return i+=r,a+=c,[e,n.distance,s,i,n.duration,u]})),s(n.track.distToIdx(a)),d(),n.emit(\"animationStarted\")}},stop:l,targetIdx:null}}function b(n){var t,e,r,a,o,u,c,l,v,h,g,b,y,x,k=1/0,w=[],M=null,T=0;function C(n){P(T+n)}function E(n){var t=z(T+n).abs;return O(t)?t:null}function z(n){var t=Math.floor(Math.abs(p(n/e))),i=p((n%e+e)%e);i===e&&(i=0);var r=d(n),a=c.indexOf(m([],c,!0).reduce((function(n,t){return Math.abs(t-i)<Math.abs(n-i)?t:n}))),o=a;return r<0&&t++,a===u&&(o=0,t+=r>0?1:-1),{abs:o+t*u*r,origin:a,rel:o}}function I(n,t,e){var i;if(t||!S())return A(n,e);if(!O(n))return null;var r=z(null!=e?e:T),a=r.abs,o=n-r.rel,c=a+o;i=A(c);var s=A(c-u*d(o));return(null!==s&&Math.abs(s)<Math.abs(i)||null===i)&&(i=s),p(i)}function A(n,t){if(null==t&&(t=p(T)),!O(n)||null===n)return null;n=Math.round(n);var i=z(t),r=i.abs,a=i.rel,o=i.origin,s=L(n),d=(t%e+e)%e,l=c[o],f=Math.floor((n-(r-a))/u)*e;return p(l-d-l+c[s]+f+(o===u?e:0))}function O(n){return D(n)===n}function D(n){return s(n,v,h)}function S(){return a.loop}function L(n){return(n%u+u)%u}function P(t){var e;e=t-T,w.push({distance:e,timestamp:i()}),w.length>6&&(w=w.slice(-6)),T=p(t);var r=_().abs;if(r!==M){var a=null!==M;M=r,a&&n.emit(\"slideChanged\")}}function _(i){var c=i?null:function(){if(u){var n=S(),t=n?(T%e+e)%e:T,i=(n?T%e:T)-o[0][2],c=0-(i<0&&n?e-Math.abs(i):i),s=0,l=z(T),f=l.abs,p=l.rel,m=o[p][2],k=o.map((function(t,i){var r=c+s;(r<0-t[0]||r>1)&&(r+=(Math.abs(r)>e-1&&n?e:0)*d(-r));var o=i-p,l=d(o),v=o+f;n&&(-1===l&&r>m&&(v+=u),1===l&&r<m&&(v-=u),null!==g&&v<g&&(r+=e),null!==b&&v>b&&(r-=e));var h=r+t[0]+t[1],y=Math.max(r>=0&&h<=1?1:h<0||r>1?0:r<0?Math.min(1,(t[0]+r)/t[0]):(1-r)/t[0],0);return s+=t[0]+t[1],{abs:v,distance:a.rtl?-1*r+1-t[0]:r,portion:y,size:t[0]}}));return f=D(f),p=L(f),{abs:D(f),length:r,max:x,maxIdx:h,min:y,minIdx:v,position:T,progress:n?t/e:T/r,rel:p,slides:k,slidesLength:e}}}();return t.details=c,n.emit(\"detailsChanged\"),c}return t={absToRel:L,add:C,details:null,distToIdx:E,idxToDist:I,init:function(t){if(function(){if(a=n.options,o=(a.trackConfig||[]).map((function(n){return[f(n,\"size\",1),f(n,\"spacing\",0),f(n,\"origin\",0)]})),u=o.length){e=p(o.reduce((function(n,t){return n+t[0]+t[1]}),0));var t,i=u-1;r=p(e+o[0][2]-o[i][0]-o[i][2]-o[i][1]),c=o.reduce((function(n,e){if(!n)return[0];var i=o[n.length-1],r=n[n.length-1]+(i[0]+i[2])+i[1];return r-=e[2],n[n.length-1]>r&&(r=n[n.length-1]),r=p(r),n.push(r),(!t||t<r)&&(l=n.length-1),t=r,n}),null),0===r&&(l=0),c.push(p(e))}}(),!u)return _(!0);var i;!function(){var t=n.options.range,e=n.options.loop;g=v=e?f(e,\"min\",-1/0):0,b=h=e?f(e,\"max\",k):l;var i=f(t,\"min\",null),r=f(t,\"max\",null);i&&(v=i),r&&(h=r),y=v===-1/0?v:n.track.idxToDist(v||0,!0,0),x=h===k?h:I(h,!0,0),null===r&&(b=h),f(t,\"align\",!1)&&h!==k&&0===o[L(h)][2]&&(x-=1-o[L(h)][0],h=E(x-T)),y=p(y),x=p(x)}(),i=t,Number(i)===i?C(A(D(t))):_()},to:P,velocity:function(){var n=i(),t=w.reduce((function(t,e){var i=e.distance,r=e.timestamp;return n-r>200||(d(i)!==d(t.distance)&&t.distance&&(t={distance:0,lastTimestamp:0,time:0}),t.time&&(t.distance+=i),t.lastTimestamp&&(t.time+=r-t.lastTimestamp),t.lastTimestamp=r),t}),{distance:0,lastTimestamp:0,time:0});return t.distance/t.time||0}}}function y(n){var t,e,i,r,a,o,u;function c(n){return 2*n}function l(n){return s(n,o,u)}function f(n){return 1-Math.pow(1-n,3)}function p(){m();var t=\"free-snap\"===n.options.mode,e=n.track,o=e.velocity();i=d(o);var u=n.track.details,s=[];if(o||!t){var p=v(o),h=p.dist,g=p.dur;if(g=c(g),h*=i,t){var b=e.idxToDist(e.distToIdx(h),!0);b&&(h=b)}s.push({distance:h,duration:g,easing:f});var y=u.position,x=y+h;if(x<r||x>a){var k=x<r?r-y:a-y,w=0,M=o;if(d(k)===i){var T=Math.min(Math.abs(k)/Math.abs(h),1),C=function(n){return 1-Math.pow(1-n,1/3)}(T)*g;s[0].earlyExit=C,M=o*(1-T)}else s[0].earlyExit=0,w+=k;var E=v(M,100),z=E.dist*i;n.options.rubberband&&(s.push({distance:z,duration:c(E.dur),easing:f}),s.push({distance:-z+w,duration:500,easing:f}))}n.animator.start(s)}else n.moveToIdx(l(u.abs),!0,{duration:500,easing:function(n){return 1+--n*n*n*n*n}})}function v(n,t){void 0===t&&(t=1e3);var e=147e-9+(n=Math.abs(n))/t;return{dist:Math.pow(n,2)/e,dur:n/e}}function h(){var t=n.track.details;t&&(r=t.min,a=t.max,o=t.minIdx,u=t.maxIdx)}function m(){n.animator.stop()}n.on(\"updated\",h),n.on(\"optionsChanged\",h),n.on(\"created\",h),n.on(\"dragStarted\",(function(){m(),t=e=n.track.details.abs})),n.on(\"dragEnded\",(function(){var i=n.options.mode;\"snap\"===i&&function(){var i=n.track,o=n.track.details,u=o.position,c=d(i.velocity());(u>a||u<r)&&(c=0);var s=t+c;0===o.slides[i.absToRel(s)].portion&&(s-=c),t!==e&&(s=e),d(i.idxToDist(s,!0))!==c&&(s+=c),s=l(s);var f=i.idxToDist(s,!0);n.animator.start([{distance:f,duration:500,easing:function(n){return 1+--n*n*n*n*n}}])}(),\"free\"!==i&&\"free-snap\"!==i||p()})),n.on(\"dragged\",(function(){e=n.track.details.abs}))}function x(n){var t,e,i,r,l,f,p,v,h,m,g,b,y,x,k,w,M,T,C=c();function E(t){if(f&&v===t.id){var a=O(t);if(h){if(!A(t))return I(t);m=a,h=!1,n.emit(\"dragChecked\")}if(w)return m=a;o(t);var c=function(t){if(M===-1/0&&T===1/0)return t;var i=n.track.details,a=i.length,o=i.position,u=s(t,M-o,T-o);if(0===a)return 0;if(!n.options.rubberband)return u;if(o<=T&&o>=M)return t;if(o<M&&e>0||o>T&&e<0)return t;var c=(o<M?o-M:o-T)/a,d=r*a,f=Math.abs(c*d),p=Math.max(0,1-f/l*2);return p*p*t}(p(m-a)/r*i);e=d(c);var y=n.track.details.position;(y>M&&y<T||y===M&&e>0||y===T&&e<0)&&u(t),g+=c,!b&&Math.abs(g*r)>5&&(b=!0),n.track.add(c),m=a,n.emit(\"dragged\")}}function z(t){!f&&n.track.details&&n.track.details.length&&(g=0,f=!0,b=!1,h=!0,v=t.id,A(t),m=O(t),n.emit(\"dragStarted\"))}function I(t){f&&v===t.idChanged&&(f=!1,n.emit(\"dragEnded\"))}function A(n){var t=D(),e=t?n.y:n.x,i=t?n.x:n.y,r=void 0!==y&&void 0!==x&&Math.abs(x-i)<=Math.abs(y-e);return y=e,x=i,r}function O(n){return D()?n.y:n.x}function D(){return n.options.vertical}function S(){r=n.size,l=D()?window.innerHeight:window.innerWidth;var t=n.track.details;t&&(M=t.min,T=t.max)}function L(n){b&&(u(n),o(n))}function P(){if(C.purge(),n.options.drag&&!n.options.disabled){var e;e=n.options.dragSpeed||1,p=\"function\"==typeof e?e:function(n){return n*e},i=n.options.rtl?-1:1,S(),t=n.container,function(){var n=\"data-keen-slider-clickable\";a(\"[\".concat(n,\"]:not([\").concat(n,\"=false])\"),t).map((function(n){C.add(n,\"mousedown\",u),C.add(n,\"touchstart\",u)}))}(),C.add(t,\"dragstart\",(function(n){o(n)})),C.add(t,\"click\",L,{capture:!0}),C.input(t,\"ksDragStart\",z),C.input(t,\"ksDrag\",E),C.input(t,\"ksDragEnd\",I),C.input(t,\"mousedown\",z),C.input(t,\"mousemove\",E),C.input(t,\"mouseleave\",I),C.input(t,\"mouseup\",I),C.input(t,\"touchstart\",z,{passive:!0}),C.input(t,\"touchmove\",E,{passive:!1}),C.input(t,\"touchend\",I),C.input(t,\"touchcancel\",I),C.add(window,\"wheel\",(function(n){f&&o(n)}));var r=\"data-keen-slider-scrollable\";a(\"[\".concat(r,\"]:not([\").concat(r,\"=false])\"),n.container).map((function(n){return function(n){var t;C.input(n,\"touchstart\",(function(n){t=O(n),w=!0,k=!0}),{passive:!0}),C.input(n,\"touchmove\",(function(e){var i=D(),r=i?n.scrollHeight-n.clientHeight:n.scrollWidth-n.clientWidth,a=t-O(e),u=i?n.scrollTop:n.scrollLeft,c=i&&\"scroll\"===n.style.overflowY||!i&&\"scroll\"===n.style.overflowX;if(t=O(e),(a<0&&u>0||a>0&&u<r)&&k&&c)return w=!0;k=!1,o(e),w=!1})),C.input(n,\"touchend\",(function(){w=!1}))}(n)}))}}n.on(\"updated\",S),n.on(\"optionsChanged\",P),n.on(\"created\",P),n.on(\"destroyed\",C.purge)}function k(n){var t,e,i=null;function r(t,e,i){n.animator.active?o(t,e,i):requestAnimationFrame((function(){return o(t,e,i)}))}function a(){r(!1,!1,e)}function o(e,r,a){var o=0,u=n.size,d=n.track.details;if(d&&t){var l=d.slides;t.forEach((function(n,t){if(e)!i&&r&&c(n,null,a),s(n,null,a);else{if(!l[t])return;var d=l[t].size*u;!i&&r&&c(n,d,a),s(n,l[t].distance*u-o,a),o+=d}}))}}function u(t){return\"performance\"===n.options.renderMode?Math.round(t):t}function c(n,t,e){var i=e?\"height\":\"width\";null!==t&&(t=u(t)+\"px\"),n.style[\"min-\"+i]=t,n.style[\"max-\"+i]=t}function s(n,t,e){if(null!==t){t=u(t);var i=e?t:0;t=\"translate3d(\".concat(e?0:t,\"px, \").concat(i,\"px, 0)\")}n.style.transform=t,n.style[\"-webkit-transform\"]=t}function d(){t&&(o(!0,!0,e),t=null),n.on(\"detailsChanged\",a,!0)}function l(){r(!1,!0,e)}function p(){d(),e=n.options.vertical,n.options.disabled||\"custom\"===n.options.renderMode||(i=\"auto\"===f(n.options.slides,\"perView\",null),n.on(\"detailsChanged\",a),(t=n.slides).length&&l())}n.on(\"created\",p),n.on(\"optionsChanged\",p),n.on(\"beforeOptionsChanged\",(function(){d()})),n.on(\"updated\",l),n.on(\"destroyed\",d)}function w(n,t){return function(e){var i,o,u,s,d,p,v=c();function m(n){var t;r(e.container,\"reverse\",\"rtl\"!==(t=e.container,window.getComputedStyle(t,null).getPropertyValue(\"direction\"))||n?null:\"\"),r(e.container,\"v\",e.options.vertical&&!n?\"\":null),r(e.container,\"disabled\",e.options.disabled&&!n?\"\":null)}function g(){b()&&M()}function b(){var n=null;if(s.forEach((function(t){t.matches&&(n=t.__media)})),n===i)return!1;i||e.emit(\"beforeOptionsChanged\"),i=n;var t=n?u.breakpoints[n]:u;return e.options=h(h({},u),t),m(),I(),A(),C(),!0}function y(n){var t=l(n);return(e.options.vertical?t.height:t.width)/e.size||1}function x(){return e.options.trackConfig.length}function k(n){for(var r in i=!1,u=h(h({},t),n),v.purge(),o=e.size,s=[],u.breakpoints||[]){var a=window.matchMedia(r);a.__media=r,s.push(a),v.add(a,\"change\",g)}v.add(window,\"orientationchange\",z),v.add(window,\"resize\",E),b()}function w(n){e.animator.stop();var t=e.track.details;e.track.init(null!=n?n:t?t.abs:0)}function M(n){w(n),e.emit(\"optionsChanged\")}function T(n,t){if(n)return k(n),void M(t);I(),A();var i=x();C(),x()!==i?M(t):w(t),e.emit(\"updated\")}function C(){var n=e.options.slides;if(\"function\"==typeof n)return e.options.trackConfig=n(e.size,e.slides);for(var t=e.slides,i=t.length,r=\"number\"==typeof n?n:f(n,\"number\",i,!0),a=[],o=f(n,\"perView\",1,!0),u=f(n,\"spacing\",0,!0)/e.size||0,c=\"auto\"===o?u:u/o,s=f(n,\"origin\",\"auto\"),d=0,l=0;l<r;l++){var p=\"auto\"===o?y(t[l]):1/o-u+c,v=\"center\"===s?.5-p/2:\"auto\"===s?0:s;a.push({origin:v,size:p,spacing:u}),d+=p}if(d+=u*(r-1),\"auto\"===s&&!e.options.loop&&1!==o){var h=0;a.map((function(n){var t=d-h;return h+=n.size+u,t>=1||(n.origin=1-t-(d>1?0:1-d)),n}))}e.options.trackConfig=a}function E(){I();var n=e.size;e.options.disabled||n===o||(o=n,T())}function z(){E(),setTimeout(E,500),setTimeout(E,2e3)}function I(){var n=l(e.container);e.size=(e.options.vertical?n.height:n.width)||1}function A(){e.slides=a(e.options.selector,e.container)}e.container=(p=a(n,d||document)).length?p[0]:null,e.destroy=function(){v.purge(),e.emit(\"destroyed\"),m(!0)},e.prev=function(){e.moveToIdx(e.track.details.abs-1,!0)},e.next=function(){e.moveToIdx(e.track.details.abs+1,!0)},e.update=T,k(e.options)}}var M=function(n,t,e){try{return function(n,t){var e,i={};return e={emit:function(n){i[n]&&i[n].forEach((function(n){n(e)}));var t=e.options&&e.options[n];t&&t(e)},moveToIdx:function(n,t,i){var r=e.track.idxToDist(n,t);if(r){var a=e.options.defaultAnimation;e.animator.start([{distance:r,duration:f(i||a,\"duration\",500),easing:f(i||a,\"easing\",(function(n){return 1+--n*n*n*n*n}))}])}},on:function(n,t,e){void 0===e&&(e=!1),i[n]||(i[n]=[]);var r=i[n].indexOf(t);r>-1?e&&delete i[n][r]:e||i[n].push(t)},options:n},function(){if(e.track=b(e),e.animator=g(e),t)for(var n=0,i=t;n<i.length;n++)(0,i[n])(e);e.track.init(e.options.initial||0),e.emit(\"created\")}(),e}(t,m([w(n,{drag:!0,mode:\"snap\",renderMode:\"precision\",rubberband:!0,selector:\".keen-slider__slide\"}),k,x,y],e||[],!0))}catch(n){console.error(n)}};exports.useKeenSlider=function(t,e){var i=n.useRef(null),r=n.useRef(!1),a=n.useRef(t),o=n.useCallback((function(n){n?(a.current=t,i.current=new M(n,t,e),r.current=!1):(i.current&&i.current.destroy&&i.current.destroy(),i.current=null)}),[]);return n.useEffect((function(){v(a.current,t)||(a.current=t,i.current&&i.current.update(a.current))}),[t]),[o,i]};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { useKeenSlider } from 'keen-slider/react';\nimport { forwardRef, ReactNode, useImperativeHandle, useState } from 'react';\nimport { useMutationEffect } from '../hooks/use-mutation-effect';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport { KeenSliderInstance, KeenSliderOptions, KeenSliderPlugin } from './keen-slider/keen-slider';\nimport './keen-slider/keen-slider.css';\nimport { swiperAutoSwitchPlugin } from './plugin/auto-switch';\nimport './style.less';\n\nexport type SwiperProps = {\n option?: { autoPlay?: boolean | { duration: number } } & KeenSliderOptions;\n plugins?: KeenSliderPlugin[];\n dot?: false | ((slider: KeenSliderInstance) => ReactNode);\n} & CommonPropsWithChildren;\n\nexport type SwiperRefApi = {\n onNext: () => void;\n onPrev: () => void;\n moveToIdx: (idx: number, animation?: boolean) => void;\n};\n\n/**\n * 滑块组件\n * ```\n * 1. 当swiper处于modal弹窗中\n * 由于swiper渲染受到modal弹窗缩放过程影响,导致swiper宽度计算错误,所以要在onAfterOpen后渲染swiper组件\n * 例如:ImageViewer组件\n *\n * 2. 获取Swiper实例,可通过option中created生命周期\n *\n * 文档:\n * https://keen-slider.io/docs\n * https://keen-slider.io/examples\n * ```\n */\nexport const Swiper = forwardRef<SwiperRefApi, SwiperProps>((props, ref) => {\n const [currentSlide, setCurrentSlide] = useState(0);\n const [instance, setInstance] = useState<any>();\n const childrens = isArray(props.children)\n ? props.children.filter(Boolean)\n : [props.children].filter(Boolean);\n\n const getOption = hooks.useCallbackRef(() => {\n const option: SwiperProps['option'] = {\n initial: 0,\n ...props.option,\n slideChanged(slider) {\n setCurrentSlide(slider.track.details.rel);\n props.option?.slideChanged?.(slider);\n },\n created(slider) {\n setInstance(slider);\n props.option?.created?.(slider);\n },\n };\n\n if (childrens.length <= 1) {\n option.loop = false;\n }\n if (childrens.length <= 1) {\n option.autoPlay = false;\n }\n return option;\n });\n\n const option = getOption();\n\n const getPlugins = hooks.useCallbackRef(() => {\n const plugins =\n option.autoPlay && childrens.length > 1\n ? [swiperAutoSwitchPlugin(option.autoPlay === true ? undefined : option.autoPlay)].concat(\n props.plugins || [],\n )\n : props.plugins;\n return plugins || [];\n });\n\n const [sliderRef] = useKeenSlider<HTMLDivElement>(option, getPlugins() as any);\n\n /**\n * 监听 Swiper DOM树变化\n * 例如:Swiper中滑块的增删改查\n * @returns\n */\n useMutationEffect(\n () => {\n instance?.update();\n },\n instance?.container,\n { childList: true },\n );\n\n const dotRender = props.dot !== false && childrens.length > 1 && (\n <div className=\"v-swiper-dot\">\n {childrens.map((_, index) => {\n return (\n <div\n key={index}\n className={classNames('v-swiper-dot-item', {\n 'v-swiper-dot-item-active': currentSlide === index,\n })}\n onClick={(event) => {\n event.stopPropagation();\n instance?.moveToIdx(index);\n }}\n ></div>\n );\n })}\n </div>\n );\n\n useImperativeHandle(ref, () => {\n return {\n onPrev: () => {\n instance?.prev();\n },\n onNext: () => {\n instance?.next();\n },\n moveToIdx: (idx, animation) => {\n instance?.moveToIdx(idx, false, animation === false ? { duration: 0 } : undefined);\n },\n instanceRef: () => {\n return instance;\n },\n };\n });\n\n return withNativeProps(\n props,\n <div className=\"v-swiper\">\n <div ref={sliderRef} className=\"keen-slider\">\n {props.children}\n </div>\n {typeof props.dot === 'function' ? props.dot(instance) : dotRender}\n </div>,\n );\n});\n","import { classNames } from '@dimjs/utils';\nimport { NativeProps, withNativeProps } from '../../utils/native-props';\nimport { px2rem } from '../../utils/pxrem';\nimport './style.less';\n\nexport type ArrowIconVarStyle = '--arrow-color';\n\nexport type ArrowDirection = 'top' | 'right' | 'bottom' | 'left';\nexport type ArrowIconProps = {\n direction?: ArrowDirection;\n // 填充模式\n fill?: 'solid' | 'outline' | 'none';\n disabled?: boolean;\n size?: number;\n} & NativeProps<ArrowIconVarStyle>;\n\nconst getMoveSize = (moveSize: number, direction: ArrowDirection) => {\n if (direction === 'bottom' || direction === 'right') {\n return `-${moveSize}rem`;\n }\n return `${moveSize}rem`;\n};\n\nconst getDefaultSize = (fill: ArrowIconProps['fill']) => {\n return fill === 'outline' ? 30 : 20;\n};\n\nexport const ArrowIcon = (props: ArrowIconProps) => {\n const fill = props.fill || 'none';\n const size = props.size || getDefaultSize(fill);\n const direction = props.direction || 'right';\n\n const className = classNames('v-arrow', `v-arrow-${fill}`, `v-arrow-${direction}`, {\n 'v-arrow-disabled': props.disabled,\n });\n const dpiSize = px2rem(size);\n const moveSize = px2rem(Math.sqrt(2 * size * size) / 4);\n return withNativeProps(\n {\n className: props.className,\n style: {\n ...props.style,\n '--arrow-size': dpiSize,\n '--arrow-move-size': getMoveSize(parseFloat(moveSize), direction),\n },\n },\n <div className={className}>\n <div className=\"v-arrow-rotate\" style={{ height: dpiSize, width: dpiSize }}>\n <div className=\"v-arrow-icon\"></div>\n </div>\n </div>,\n );\n};\n","import { isObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { ReactElement } from 'react';\nimport { ArrowIcon, ArrowIconProps } from '../icon';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport './style.less';\nimport { ListItemVarStyle } from './type';\n\nexport type ListItemProps = {\n // 列表项左侧区域\n prefix?: string | ReactElement;\n // 列表项右侧区域\n extra?: string | ReactElement;\n onClick?: (e: React.MouseEvent) => void;\n title?: string | ReactElement;\n description?: string | ReactElement;\n arrow?: true | ArrowIconProps;\n icon?: ReactElement;\n} & CommonPropsWithChildren<ListItemVarStyle>;\n\nconst classPrefix = 'v-list-item';\n\n/**\n * @param props\n * @returns\n * ```\n * 1. 自定义icon 在未设置arrow情况下有效\n * ```\n */\nexport const ListItem = (props: ListItemProps) => {\n const showArrowIcon = !!props.arrow;\n const arrowIconPorps = extend({}, isObject(props.arrow) ? props.arrow : {}, {\n className: classNames(`${classPrefix}-arrow`, isObject(props.arrow) ? props.arrow?.['className'] : ''),\n });\n\n return withNativeProps(\n props,\n <div className={classNames(classPrefix, { clickable: props.onClick })} onClick={props.onClick}>\n {props.prefix ? <div className={`${classPrefix}-prefix`}>{props.prefix}</div> : null}\n <div className={`${classPrefix}-main`}>\n {props.title ? <div className={`${classPrefix}-title`}>{props.title}</div> : null}\n {props.children ? <div className={`${classPrefix}-content`}>{props.children}</div> : null}\n {props.description ? <div className={`${classPrefix}-description`}>{props.description}</div> : null}\n </div>\n {props.extra && <div className={`${classPrefix}-extra`}>{props.extra}</div>}\n {showArrowIcon ? <ArrowIcon {...arrowIconPorps} /> : props.icon}\n </div>,\n );\n};\n","function clamp(v, min, max) {\n return Math.max(min, Math.min(v, max));\n}\nconst V = {\n toVector(v, fallback) {\n if (v === undefined) v = fallback;\n return Array.isArray(v) ? v : [v, v];\n },\n\n add(v1, v2) {\n return [v1[0] + v2[0], v1[1] + v2[1]];\n },\n\n sub(v1, v2) {\n return [v1[0] - v2[0], v1[1] - v2[1]];\n },\n\n addTo(v1, v2) {\n v1[0] += v2[0];\n v1[1] += v2[1];\n },\n\n subTo(v1, v2) {\n v1[0] -= v2[0];\n v1[1] -= v2[1];\n }\n\n};\n\nfunction rubberband(distance, dimension, constant) {\n if (dimension === 0 || Math.abs(dimension) === Infinity) return Math.pow(distance, constant * 5);\n return distance * dimension * constant / (dimension + constant * distance);\n}\n\nfunction rubberbandIfOutOfBounds(position, min, max, constant = 0.15) {\n if (constant === 0) return clamp(position, min, max);\n if (position < min) return -rubberband(min - position, max - min, constant) + min;\n if (position > max) return +rubberband(position - max, max - min, constant) + max;\n return position;\n}\nfunction computeRubberband(bounds, [Vx, Vy], [Rx, Ry]) {\n const [[X0, X1], [Y0, Y1]] = bounds;\n return [rubberbandIfOutOfBounds(Vx, X0, X1, Rx), rubberbandIfOutOfBounds(Vy, Y0, Y1, Ry)];\n}\n\nexport { V, computeRubberband as c, rubberbandIfOutOfBounds as r };\n","import { V, c as computeRubberband } from './maths-b2a210f4.esm.js';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nconst EVENT_TYPE_MAP = {\n pointer: {\n start: 'down',\n change: 'move',\n end: 'up'\n },\n mouse: {\n start: 'down',\n change: 'move',\n end: 'up'\n },\n touch: {\n start: 'start',\n change: 'move',\n end: 'end'\n },\n gesture: {\n start: 'start',\n change: 'change',\n end: 'end'\n }\n};\n\nfunction capitalize(string) {\n if (!string) return '';\n return string[0].toUpperCase() + string.slice(1);\n}\n\nconst actionsWithoutCaptureSupported = ['enter', 'leave'];\n\nfunction hasCapture(capture = false, actionKey) {\n return capture && !actionsWithoutCaptureSupported.includes(actionKey);\n}\n\nfunction toHandlerProp(device, action = '', capture = false) {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return 'on' + capitalize(device) + capitalize(actionKey) + (hasCapture(capture, actionKey) ? 'Capture' : '');\n}\nconst pointerCaptureEvents = ['gotpointercapture', 'lostpointercapture'];\nfunction parseProp(prop) {\n let eventKey = prop.substring(2).toLowerCase();\n const passive = !!~eventKey.indexOf('passive');\n if (passive) eventKey = eventKey.replace('passive', '');\n const captureKey = pointerCaptureEvents.includes(eventKey) ? 'capturecapture' : 'capture';\n const capture = !!~eventKey.indexOf(captureKey);\n if (capture) eventKey = eventKey.replace('capture', '');\n return {\n device: eventKey,\n capture,\n passive\n };\n}\nfunction toDomEventType(device, action = '') {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return device + actionKey;\n}\nfunction isTouch(event) {\n return 'touches' in event;\n}\nfunction getPointerType(event) {\n if (isTouch(event)) return 'touch';\n if ('pointerType' in event) return event.pointerType;\n return 'mouse';\n}\n\nfunction getCurrentTargetTouchList(event) {\n return Array.from(event.touches).filter(e => {\n var _event$currentTarget, _event$currentTarget$;\n\n return e.target === event.currentTarget || ((_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 ? void 0 : (_event$currentTarget$ = _event$currentTarget.contains) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.call(_event$currentTarget, e.target));\n });\n}\n\nfunction getTouchList(event) {\n return event.type === 'touchend' || event.type === 'touchcancel' ? event.changedTouches : event.targetTouches;\n}\n\nfunction getValueEvent(event) {\n return isTouch(event) ? getTouchList(event)[0] : event;\n}\n\nfunction distanceAngle(P1, P2) {\n const dx = P2.clientX - P1.clientX;\n const dy = P2.clientY - P1.clientY;\n const cx = (P2.clientX + P1.clientX) / 2;\n const cy = (P2.clientY + P1.clientY) / 2;\n const distance = Math.hypot(dx, dy);\n const angle = -(Math.atan2(dx, dy) * 180) / Math.PI;\n const origin = [cx, cy];\n return {\n angle,\n distance,\n origin\n };\n}\nfunction touchIds(event) {\n return getCurrentTargetTouchList(event).map(touch => touch.identifier);\n}\nfunction touchDistanceAngle(event, ids) {\n const [P1, P2] = Array.from(event.touches).filter(touch => ids.includes(touch.identifier));\n return distanceAngle(P1, P2);\n}\nfunction pointerId(event) {\n const valueEvent = getValueEvent(event);\n return isTouch(event) ? valueEvent.identifier : valueEvent.pointerId;\n}\nfunction pointerValues(event) {\n const valueEvent = getValueEvent(event);\n return [valueEvent.clientX, valueEvent.clientY];\n}\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\nfunction wheelValues(event) {\n let {\n deltaX,\n deltaY,\n deltaMode\n } = event;\n\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n\n return [deltaX, deltaY];\n}\nfunction scrollValues(event) {\n var _ref, _ref2;\n\n const {\n scrollX,\n scrollY,\n scrollLeft,\n scrollTop\n } = event.currentTarget;\n return [(_ref = scrollX !== null && scrollX !== void 0 ? scrollX : scrollLeft) !== null && _ref !== void 0 ? _ref : 0, (_ref2 = scrollY !== null && scrollY !== void 0 ? scrollY : scrollTop) !== null && _ref2 !== void 0 ? _ref2 : 0];\n}\nfunction getEventDetails(event) {\n const payload = {};\n if ('buttons' in event) payload.buttons = event.buttons;\n\n if ('shiftKey' in event) {\n const {\n shiftKey,\n altKey,\n metaKey,\n ctrlKey\n } = event;\n Object.assign(payload, {\n shiftKey,\n altKey,\n metaKey,\n ctrlKey\n });\n }\n\n return payload;\n}\n\nfunction call(v, ...args) {\n if (typeof v === 'function') {\n return v(...args);\n } else {\n return v;\n }\n}\nfunction noop() {}\nfunction chain(...fns) {\n if (fns.length === 0) return noop;\n if (fns.length === 1) return fns[0];\n return function () {\n let result;\n\n for (const fn of fns) {\n result = fn.apply(this, arguments) || result;\n }\n\n return result;\n };\n}\nfunction assignDefault(value, fallback) {\n return Object.assign({}, fallback, value || {});\n}\n\nconst BEFORE_LAST_KINEMATICS_DELAY = 32;\nclass Engine {\n constructor(ctrl, args, key) {\n this.ctrl = ctrl;\n this.args = args;\n this.key = key;\n\n if (!this.state) {\n this.state = {};\n this.computeValues([0, 0]);\n this.computeInitial();\n if (this.init) this.init();\n this.reset();\n }\n }\n\n get state() {\n return this.ctrl.state[this.key];\n }\n\n set state(state) {\n this.ctrl.state[this.key] = state;\n }\n\n get shared() {\n return this.ctrl.state.shared;\n }\n\n get eventStore() {\n return this.ctrl.gestureEventStores[this.key];\n }\n\n get timeoutStore() {\n return this.ctrl.gestureTimeoutStores[this.key];\n }\n\n get config() {\n return this.ctrl.config[this.key];\n }\n\n get sharedConfig() {\n return this.ctrl.config.shared;\n }\n\n get handler() {\n return this.ctrl.handlers[this.key];\n }\n\n reset() {\n const {\n state,\n shared,\n ingKey,\n args\n } = this;\n shared[ingKey] = state._active = state.active = state._blocked = state._force = false;\n state._step = [false, false];\n state.intentional = false;\n state._movement = [0, 0];\n state._distance = [0, 0];\n state._direction = [0, 0];\n state._delta = [0, 0];\n state._bounds = [[-Infinity, Infinity], [-Infinity, Infinity]];\n state.args = args;\n state.axis = undefined;\n state.memo = undefined;\n state.elapsedTime = 0;\n state.direction = [0, 0];\n state.distance = [0, 0];\n state.overflow = [0, 0];\n state._movementBound = [false, false];\n state.velocity = [0, 0];\n state.movement = [0, 0];\n state.delta = [0, 0];\n state.timeStamp = 0;\n }\n\n start(event) {\n const state = this.state;\n const config = this.config;\n\n if (!state._active) {\n this.reset();\n this.computeInitial();\n state._active = true;\n state.target = event.target;\n state.currentTarget = event.currentTarget;\n state.lastOffset = config.from ? call(config.from, state) : state.offset;\n state.offset = state.lastOffset;\n }\n\n state.startTime = state.timeStamp = event.timeStamp;\n }\n\n computeValues(values) {\n const state = this.state;\n state._values = values;\n state.values = this.config.transform(values);\n }\n\n computeInitial() {\n const state = this.state;\n state._initial = state._values;\n state.initial = state.values;\n }\n\n compute(event) {\n const {\n state,\n config,\n shared\n } = this;\n state.args = this.args;\n let dt = 0;\n\n if (event) {\n state.event = event;\n if (config.preventDefault && event.cancelable) state.event.preventDefault();\n state.type = event.type;\n shared.touches = this.ctrl.pointerIds.size || this.ctrl.touchIds.size;\n shared.locked = !!document.pointerLockElement;\n Object.assign(shared, getEventDetails(event));\n shared.down = shared.pressed = shared.buttons % 2 === 1 || shared.touches > 0;\n dt = event.timeStamp - state.timeStamp;\n state.timeStamp = event.timeStamp;\n state.elapsedTime = state.timeStamp - state.startTime;\n }\n\n if (state._active) {\n const _absoluteDelta = state._delta.map(Math.abs);\n\n V.addTo(state._distance, _absoluteDelta);\n }\n\n if (this.axisIntent) this.axisIntent(event);\n const [_m0, _m1] = state._movement;\n const [t0, t1] = config.threshold;\n const {\n _step,\n values\n } = state;\n\n if (config.hasCustomTransform) {\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && values[0];\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && values[1];\n } else {\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && Math.sign(_m0) * t0;\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && Math.sign(_m1) * t1;\n }\n\n state.intentional = _step[0] !== false || _step[1] !== false;\n if (!state.intentional) return;\n const movement = [0, 0];\n\n if (config.hasCustomTransform) {\n const [v0, v1] = values;\n movement[0] = _step[0] !== false ? v0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? v1 - _step[1] : 0;\n } else {\n movement[0] = _step[0] !== false ? _m0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? _m1 - _step[1] : 0;\n }\n\n if (this.restrictToAxis && !state._blocked) this.restrictToAxis(movement);\n const previousOffset = state.offset;\n const gestureIsActive = state._active && !state._blocked || state.active;\n\n if (gestureIsActive) {\n state.first = state._active && !state.active;\n state.last = !state._active && state.active;\n state.active = shared[this.ingKey] = state._active;\n\n if (event) {\n if (state.first) {\n if ('bounds' in config) state._bounds = call(config.bounds, state);\n if (this.setup) this.setup();\n }\n\n state.movement = movement;\n this.computeOffset();\n }\n }\n\n const [ox, oy] = state.offset;\n const [[x0, x1], [y0, y1]] = state._bounds;\n state.overflow = [ox < x0 ? -1 : ox > x1 ? 1 : 0, oy < y0 ? -1 : oy > y1 ? 1 : 0];\n state._movementBound[0] = state.overflow[0] ? state._movementBound[0] === false ? state._movement[0] : state._movementBound[0] : false;\n state._movementBound[1] = state.overflow[1] ? state._movementBound[1] === false ? state._movement[1] : state._movementBound[1] : false;\n const rubberband = state._active ? config.rubberband || [0, 0] : [0, 0];\n state.offset = computeRubberband(state._bounds, state.offset, rubberband);\n state.delta = V.sub(state.offset, previousOffset);\n this.computeMovement();\n\n if (gestureIsActive && (!state.last || dt > BEFORE_LAST_KINEMATICS_DELAY)) {\n state.delta = V.sub(state.offset, previousOffset);\n const absoluteDelta = state.delta.map(Math.abs);\n V.addTo(state.distance, absoluteDelta);\n state.direction = state.delta.map(Math.sign);\n state._direction = state._delta.map(Math.sign);\n\n if (!state.first && dt > 0) {\n state.velocity = [absoluteDelta[0] / dt, absoluteDelta[1] / dt];\n }\n }\n }\n\n emit() {\n const state = this.state;\n const shared = this.shared;\n const config = this.config;\n if (!state._active) this.clean();\n if ((state._blocked || !state.intentional) && !state._force && !config.triggerAllEvents) return;\n const memo = this.handler(_objectSpread2(_objectSpread2(_objectSpread2({}, shared), state), {}, {\n [this.aliasKey]: state.values\n }));\n if (memo !== undefined) state.memo = memo;\n }\n\n clean() {\n this.eventStore.clean();\n this.timeoutStore.clean();\n }\n\n}\n\nfunction selectAxis([dx, dy], threshold) {\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n\n if (absDx > absDy && absDx > threshold) {\n return 'x';\n }\n\n if (absDy > absDx && absDy > threshold) {\n return 'y';\n }\n\n return undefined;\n}\n\nclass CoordinatesEngine extends Engine {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"aliasKey\", 'xy');\n }\n\n reset() {\n super.reset();\n this.state.axis = undefined;\n }\n\n init() {\n this.state.offset = [0, 0];\n this.state.lastOffset = [0, 0];\n }\n\n computeOffset() {\n this.state.offset = V.add(this.state.lastOffset, this.state.movement);\n }\n\n computeMovement() {\n this.state.movement = V.sub(this.state.offset, this.state.lastOffset);\n }\n\n axisIntent(event) {\n const state = this.state;\n const config = this.config;\n\n if (!state.axis && event) {\n const threshold = typeof config.axisThreshold === 'object' ? config.axisThreshold[getPointerType(event)] : config.axisThreshold;\n state.axis = selectAxis(state._movement, threshold);\n }\n\n state._blocked = (config.lockDirection || !!config.axis) && !state.axis || !!config.axis && config.axis !== state.axis;\n }\n\n restrictToAxis(v) {\n if (this.config.axis || this.config.lockDirection) {\n switch (this.state.axis) {\n case 'x':\n v[1] = 0;\n break;\n\n case 'y':\n v[0] = 0;\n break;\n }\n }\n }\n\n}\n\nconst identity = v => v;\nconst DEFAULT_RUBBERBAND = 0.15;\nconst commonConfigResolver = {\n enabled(value = true) {\n return value;\n },\n\n eventOptions(value, _k, config) {\n return _objectSpread2(_objectSpread2({}, config.shared.eventOptions), value);\n },\n\n preventDefault(value = false) {\n return value;\n },\n\n triggerAllEvents(value = false) {\n return value;\n },\n\n rubberband(value = 0) {\n switch (value) {\n case true:\n return [DEFAULT_RUBBERBAND, DEFAULT_RUBBERBAND];\n\n case false:\n return [0, 0];\n\n default:\n return V.toVector(value);\n }\n },\n\n from(value) {\n if (typeof value === 'function') return value;\n if (value != null) return V.toVector(value);\n },\n\n transform(value, _k, config) {\n const transform = value || config.shared.transform;\n this.hasCustomTransform = !!transform;\n\n if (process.env.NODE_ENV === 'development') {\n const originalTransform = transform || identity;\n return v => {\n const r = originalTransform(v);\n\n if (!isFinite(r[0]) || !isFinite(r[1])) {\n console.warn(`[@use-gesture]: config.transform() must produce a valid result, but it was: [${r[0]},${[1]}]`);\n }\n\n return r;\n };\n }\n\n return transform || identity;\n },\n\n threshold(value) {\n return V.toVector(value, 0);\n }\n\n};\n\nif (process.env.NODE_ENV === 'development') {\n Object.assign(commonConfigResolver, {\n domTarget(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`);\n }\n\n return NaN;\n },\n\n lockDirection(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`lockDirection\\` option has been merged with \\`axis\\`. Use it as in \\`{ axis: 'lock' }\\``);\n }\n\n return NaN;\n },\n\n initial(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`initial\\` option has been renamed to \\`from\\`.`);\n }\n\n return NaN;\n }\n\n });\n}\n\nconst DEFAULT_AXIS_THRESHOLD = 0;\nconst coordinatesConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {\n axis(_v, _k, {\n axis\n }) {\n this.lockDirection = axis === 'lock';\n if (!this.lockDirection) return axis;\n },\n\n axisThreshold(value = DEFAULT_AXIS_THRESHOLD) {\n return value;\n },\n\n bounds(value = {}) {\n if (typeof value === 'function') {\n return state => coordinatesConfigResolver.bounds(value(state));\n }\n\n if ('current' in value) {\n return () => value.current;\n }\n\n if (typeof HTMLElement === 'function' && value instanceof HTMLElement) {\n return value;\n }\n\n const {\n left = -Infinity,\n right = Infinity,\n top = -Infinity,\n bottom = Infinity\n } = value;\n return [[left, right], [top, bottom]];\n }\n\n});\n\nconst DISPLACEMENT = 10;\nconst KEYS_DELTA_MAP = {\n ArrowRight: (factor = 1) => [DISPLACEMENT * factor, 0],\n ArrowLeft: (factor = 1) => [-DISPLACEMENT * factor, 0],\n ArrowUp: (factor = 1) => [0, -DISPLACEMENT * factor],\n ArrowDown: (factor = 1) => [0, DISPLACEMENT * factor]\n};\nclass DragEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"ingKey\", 'dragging');\n }\n\n reset() {\n super.reset();\n const state = this.state;\n state._pointerId = undefined;\n state._pointerActive = false;\n state._keyboardActive = false;\n state._preventScroll = false;\n state._delayed = false;\n state.swipe = [0, 0];\n state.tap = false;\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n }\n\n setup() {\n const state = this.state;\n\n if (state._bounds instanceof HTMLElement) {\n const boundRect = state._bounds.getBoundingClientRect();\n\n const targetRect = state.currentTarget.getBoundingClientRect();\n const _bounds = {\n left: boundRect.left - targetRect.left + state.offset[0],\n right: boundRect.right - targetRect.right + state.offset[0],\n top: boundRect.top - targetRect.top + state.offset[1],\n bottom: boundRect.bottom - targetRect.bottom + state.offset[1]\n };\n state._bounds = coordinatesConfigResolver.bounds(_bounds);\n }\n }\n\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n state.canceled = true;\n state._active = false;\n setTimeout(() => {\n this.compute();\n this.emit();\n }, 0);\n }\n\n setActive() {\n this.state._active = this.state._pointerActive || this.state._keyboardActive;\n }\n\n clean() {\n this.pointerClean();\n this.state._pointerActive = false;\n this.state._keyboardActive = false;\n super.clean();\n }\n\n pointerDown(event) {\n const config = this.config;\n const state = this.state;\n if (event.buttons != null && (Array.isArray(config.pointerButtons) ? !config.pointerButtons.includes(event.buttons) : config.pointerButtons !== -1 && config.pointerButtons !== event.buttons)) return;\n const ctrlIds = this.ctrl.setEventIds(event);\n\n if (config.pointerCapture) {\n event.target.setPointerCapture(event.pointerId);\n }\n\n if (ctrlIds && ctrlIds.size > 1 && state._pointerActive) return;\n this.start(event);\n this.setupPointer(event);\n state._pointerId = pointerId(event);\n state._pointerActive = true;\n this.computeValues(pointerValues(event));\n this.computeInitial();\n\n if (config.preventScrollAxis && getPointerType(event) !== 'mouse') {\n state._active = false;\n this.setupScrollPrevention(event);\n } else if (config.delay > 0) {\n this.setupDelayTrigger(event);\n\n if (config.triggerAllEvents) {\n this.compute(event);\n this.emit();\n }\n } else {\n this.startPointerDrag(event);\n }\n }\n\n startPointerDrag(event) {\n const state = this.state;\n state._active = true;\n state._preventScroll = true;\n state._delayed = false;\n this.compute(event);\n this.emit();\n }\n\n pointerMove(event) {\n const state = this.state;\n const config = this.config;\n if (!state._pointerActive) return;\n if (state.type === event.type && event.timeStamp === state.timeStamp) return;\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n\n const _values = pointerValues(event);\n\n if (document.pointerLockElement === event.target) {\n state._delta = [event.movementX, event.movementY];\n } else {\n state._delta = V.sub(_values, state._values);\n this.computeValues(_values);\n }\n\n V.addTo(state._movement, state._delta);\n this.compute(event);\n\n if (state._delayed && state.intentional) {\n this.timeoutStore.remove('dragDelay');\n state.active = false;\n this.startPointerDrag(event);\n return;\n }\n\n if (config.preventScrollAxis && !state._preventScroll) {\n if (state.axis) {\n if (state.axis === config.preventScrollAxis || config.preventScrollAxis === 'xy') {\n state._active = false;\n this.clean();\n return;\n } else {\n this.timeoutStore.remove('startPointerDrag');\n this.startPointerDrag(event);\n return;\n }\n } else {\n return;\n }\n }\n\n this.emit();\n }\n\n pointerUp(event) {\n this.ctrl.setEventIds(event);\n\n try {\n if (this.config.pointerCapture && event.target.hasPointerCapture(event.pointerId)) {\n ;\n event.target.releasePointerCapture(event.pointerId);\n }\n } catch (_unused) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[@use-gesture]: If you see this message, it's likely that you're using an outdated version of \\`@react-three/fiber\\`. \\n\\nPlease upgrade to the latest version.`);\n }\n }\n\n const state = this.state;\n const config = this.config;\n if (!state._active || !state._pointerActive) return;\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n this.state._pointerActive = false;\n this.setActive();\n this.compute(event);\n const [dx, dy] = state._distance;\n state.tap = dx <= config.tapsThreshold && dy <= config.tapsThreshold;\n\n if (state.tap && config.filterTaps) {\n state._force = true;\n } else {\n const [dirx, diry] = state.direction;\n const [vx, vy] = state.velocity;\n const [mx, my] = state.movement;\n const [svx, svy] = config.swipe.velocity;\n const [sx, sy] = config.swipe.distance;\n const sdt = config.swipe.duration;\n\n if (state.elapsedTime < sdt) {\n if (Math.abs(vx) > svx && Math.abs(mx) > sx) state.swipe[0] = dirx;\n if (Math.abs(vy) > svy && Math.abs(my) > sy) state.swipe[1] = diry;\n }\n }\n\n this.emit();\n }\n\n pointerClick(event) {\n if (!this.state.tap && event.detail > 0) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n setupPointer(event) {\n const config = this.config;\n const device = config.device;\n\n if (process.env.NODE_ENV === 'development') {\n try {\n if (device === 'pointer' && config.preventScrollDelay === undefined) {\n const currentTarget = 'uv' in event ? event.sourceEvent.currentTarget : event.currentTarget;\n const style = window.getComputedStyle(currentTarget);\n\n if (style.touchAction === 'auto') {\n console.warn(`[@use-gesture]: The drag target has its \\`touch-action\\` style property set to \\`auto\\`. It is recommended to add \\`touch-action: 'none'\\` so that the drag gesture behaves correctly on touch-enabled devices. For more information read this: https://use-gesture.netlify.app/docs/extras/#touch-action.\\n\\nThis message will only show in development mode. It won't appear in production. If this is intended, you can ignore it.`, currentTarget);\n }\n }\n } catch (_unused2) {}\n }\n\n if (config.pointerLock) {\n event.currentTarget.requestPointerLock();\n }\n\n if (!config.pointerCapture) {\n this.eventStore.add(this.sharedConfig.window, device, 'change', this.pointerMove.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'end', this.pointerUp.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'cancel', this.pointerUp.bind(this));\n }\n }\n\n pointerClean() {\n if (this.config.pointerLock && document.pointerLockElement === this.state.currentTarget) {\n document.exitPointerLock();\n }\n }\n\n preventScroll(event) {\n if (this.state._preventScroll && event.cancelable) {\n event.preventDefault();\n }\n }\n\n setupScrollPrevention(event) {\n this.state._preventScroll = false;\n persistEvent(event);\n const remove = this.eventStore.add(this.sharedConfig.window, 'touch', 'change', this.preventScroll.bind(this), {\n passive: false\n });\n this.eventStore.add(this.sharedConfig.window, 'touch', 'end', remove);\n this.eventStore.add(this.sharedConfig.window, 'touch', 'cancel', remove);\n this.timeoutStore.add('startPointerDrag', this.startPointerDrag.bind(this), this.config.preventScrollDelay, event);\n }\n\n setupDelayTrigger(event) {\n this.state._delayed = true;\n this.timeoutStore.add('dragDelay', () => {\n this.state._step = [0, 0];\n this.startPointerDrag(event);\n }, this.config.delay);\n }\n\n keyDown(event) {\n const deltaFn = KEYS_DELTA_MAP[event.key];\n\n if (deltaFn) {\n const state = this.state;\n const factor = event.shiftKey ? 10 : event.altKey ? 0.1 : 1;\n this.start(event);\n state._delta = deltaFn(factor);\n state._keyboardActive = true;\n V.addTo(state._movement, state._delta);\n this.compute(event);\n this.emit();\n }\n }\n\n keyUp(event) {\n if (!(event.key in KEYS_DELTA_MAP)) return;\n this.state._keyboardActive = false;\n this.setActive();\n this.compute(event);\n this.emit();\n }\n\n bind(bindFunction) {\n const device = this.config.device;\n bindFunction(device, 'start', this.pointerDown.bind(this));\n\n if (this.config.pointerCapture) {\n bindFunction(device, 'change', this.pointerMove.bind(this));\n bindFunction(device, 'end', this.pointerUp.bind(this));\n bindFunction(device, 'cancel', this.pointerUp.bind(this));\n bindFunction('lostPointerCapture', '', this.pointerUp.bind(this));\n }\n\n if (this.config.keys) {\n bindFunction('key', 'down', this.keyDown.bind(this));\n bindFunction('key', 'up', this.keyUp.bind(this));\n }\n\n if (this.config.filterTaps) {\n bindFunction('click', '', this.pointerClick.bind(this), {\n capture: true,\n passive: false\n });\n }\n }\n\n}\n\nfunction persistEvent(event) {\n 'persist' in event && typeof event.persist === 'function' && event.persist();\n}\n\nconst isBrowser = typeof window !== 'undefined' && window.document && window.document.createElement;\n\nfunction supportsTouchEvents() {\n return isBrowser && 'ontouchstart' in window;\n}\n\nfunction isTouchScreen() {\n return supportsTouchEvents() || isBrowser && window.navigator.maxTouchPoints > 1;\n}\n\nfunction supportsPointerEvents() {\n return isBrowser && 'onpointerdown' in window;\n}\n\nfunction supportsPointerLock() {\n return isBrowser && 'exitPointerLock' in window.document;\n}\n\nfunction supportsGestureEvents() {\n try {\n return 'constructor' in GestureEvent;\n } catch (e) {\n return false;\n }\n}\n\nconst SUPPORT = {\n isBrowser,\n gesture: supportsGestureEvents(),\n touch: isTouchScreen(),\n touchscreen: isTouchScreen(),\n pointer: supportsPointerEvents(),\n pointerLock: supportsPointerLock()\n};\n\nconst DEFAULT_PREVENT_SCROLL_DELAY = 250;\nconst DEFAULT_DRAG_DELAY = 180;\nconst DEFAULT_SWIPE_VELOCITY = 0.5;\nconst DEFAULT_SWIPE_DISTANCE = 50;\nconst DEFAULT_SWIPE_DURATION = 250;\nconst DEFAULT_DRAG_AXIS_THRESHOLD = {\n mouse: 0,\n touch: 0,\n pen: 8\n};\nconst dragConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n device(_v, _k, {\n pointer: {\n touch = false,\n lock = false,\n mouse = false\n } = {}\n }) {\n this.pointerLock = lock && SUPPORT.pointerLock;\n if (SUPPORT.touch && touch) return 'touch';\n if (this.pointerLock) return 'mouse';\n if (SUPPORT.pointer && !mouse) return 'pointer';\n if (SUPPORT.touch) return 'touch';\n return 'mouse';\n },\n\n preventScrollAxis(value, _k, {\n preventScroll\n }) {\n this.preventScrollDelay = typeof preventScroll === 'number' ? preventScroll : preventScroll || preventScroll === undefined && value ? DEFAULT_PREVENT_SCROLL_DELAY : undefined;\n if (!SUPPORT.touchscreen || preventScroll === false) return undefined;\n return value ? value : preventScroll !== undefined ? 'y' : undefined;\n },\n\n pointerCapture(_v, _k, {\n pointer: {\n capture = true,\n buttons = 1\n } = {}\n }) {\n this.pointerButtons = buttons;\n return !this.pointerLock && this.device === 'pointer' && capture;\n },\n\n keys(value = true) {\n return value;\n },\n\n threshold(value, _k, {\n filterTaps = false,\n tapsThreshold = 3,\n axis = undefined\n }) {\n const threshold = V.toVector(value, filterTaps ? tapsThreshold : axis ? 1 : 0);\n this.filterTaps = filterTaps;\n this.tapsThreshold = tapsThreshold;\n return threshold;\n },\n\n swipe({\n velocity = DEFAULT_SWIPE_VELOCITY,\n distance = DEFAULT_SWIPE_DISTANCE,\n duration = DEFAULT_SWIPE_DURATION\n } = {}) {\n return {\n velocity: this.transform(V.toVector(velocity)),\n distance: this.transform(V.toVector(distance)),\n duration\n };\n },\n\n delay(value = 0) {\n switch (value) {\n case true:\n return DEFAULT_DRAG_DELAY;\n\n case false:\n return 0;\n\n default:\n return value;\n }\n },\n\n axisThreshold(value) {\n if (!value) return DEFAULT_DRAG_AXIS_THRESHOLD;\n return _objectSpread2(_objectSpread2({}, DEFAULT_DRAG_AXIS_THRESHOLD), value);\n }\n\n});\n\nif (process.env.NODE_ENV === 'development') {\n Object.assign(dragConfigResolver, {\n useTouch(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`useTouch\\` option has been renamed to \\`pointer.touch\\`. Use it as in \\`{ pointer: { touch: true } }\\`.`);\n }\n\n return NaN;\n },\n\n experimental_preventWindowScrollY(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`experimental_preventWindowScrollY\\` option has been renamed to \\`preventScroll\\`.`);\n }\n\n return NaN;\n },\n\n swipeVelocity(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeVelocity\\` option has been renamed to \\`swipe.velocity\\`. Use it as in \\`{ swipe: { velocity: 0.5 } }\\`.`);\n }\n\n return NaN;\n },\n\n swipeDistance(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeDistance\\` option has been renamed to \\`swipe.distance\\`. Use it as in \\`{ swipe: { distance: 50 } }\\`.`);\n }\n\n return NaN;\n },\n\n swipeDuration(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeDuration\\` option has been renamed to \\`swipe.duration\\`. Use it as in \\`{ swipe: { duration: 250 } }\\`.`);\n }\n\n return NaN;\n }\n\n });\n}\n\nconst SCALE_ANGLE_RATIO_INTENT_DEG = 30;\nconst PINCH_WHEEL_RATIO = 100;\nclass PinchEngine extends Engine {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"ingKey\", 'pinching');\n\n _defineProperty(this, \"aliasKey\", 'da');\n }\n\n init() {\n this.state.offset = [1, 0];\n this.state.lastOffset = [1, 0];\n this.state._pointerEvents = new Map();\n }\n\n reset() {\n super.reset();\n const state = this.state;\n state._touchIds = [];\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n state.turns = 0;\n }\n\n computeOffset() {\n const {\n type,\n movement,\n lastOffset\n } = this.state;\n\n if (type === 'wheel') {\n this.state.offset = V.add(movement, lastOffset);\n } else {\n this.state.offset = [(1 + movement[0]) * lastOffset[0], movement[1] + lastOffset[1]];\n }\n }\n\n computeMovement() {\n const {\n offset,\n lastOffset\n } = this.state;\n this.state.movement = [offset[0] / lastOffset[0], offset[1] - lastOffset[1]];\n }\n\n axisIntent() {\n const state = this.state;\n const [_m0, _m1] = state._movement;\n\n if (!state.axis) {\n const axisMovementDifference = Math.abs(_m0) * SCALE_ANGLE_RATIO_INTENT_DEG - Math.abs(_m1);\n if (axisMovementDifference < 0) state.axis = 'angle';else if (axisMovementDifference > 0) state.axis = 'scale';\n }\n }\n\n restrictToAxis(v) {\n if (this.config.lockDirection) {\n if (this.state.axis === 'scale') v[1] = 0;else if (this.state.axis === 'angle') v[0] = 0;\n }\n }\n\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n setTimeout(() => {\n state.canceled = true;\n state._active = false;\n this.compute();\n this.emit();\n }, 0);\n }\n\n touchStart(event) {\n this.ctrl.setEventIds(event);\n const state = this.state;\n const ctrlTouchIds = this.ctrl.touchIds;\n\n if (state._active) {\n if (state._touchIds.every(id => ctrlTouchIds.has(id))) return;\n }\n\n if (ctrlTouchIds.size < 2) return;\n this.start(event);\n state._touchIds = Array.from(ctrlTouchIds).slice(0, 2);\n const payload = touchDistanceAngle(event, state._touchIds);\n this.pinchStart(event, payload);\n }\n\n pointerStart(event) {\n if (event.buttons != null && event.buttons % 2 !== 1) return;\n this.ctrl.setEventIds(event);\n event.target.setPointerCapture(event.pointerId);\n const state = this.state;\n const _pointerEvents = state._pointerEvents;\n const ctrlPointerIds = this.ctrl.pointerIds;\n\n if (state._active) {\n if (Array.from(_pointerEvents.keys()).every(id => ctrlPointerIds.has(id))) return;\n }\n\n if (_pointerEvents.size < 2) {\n _pointerEvents.set(event.pointerId, event);\n }\n\n if (state._pointerEvents.size < 2) return;\n this.start(event);\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n this.pinchStart(event, payload);\n }\n\n pinchStart(event, payload) {\n const state = this.state;\n state.origin = payload.origin;\n this.computeValues([payload.distance, payload.angle]);\n this.computeInitial();\n this.compute(event);\n this.emit();\n }\n\n touchMove(event) {\n if (!this.state._active) return;\n const payload = touchDistanceAngle(event, this.state._touchIds);\n this.pinchMove(event, payload);\n }\n\n pointerMove(event) {\n const _pointerEvents = this.state._pointerEvents;\n\n if (_pointerEvents.has(event.pointerId)) {\n _pointerEvents.set(event.pointerId, event);\n }\n\n if (!this.state._active) return;\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n this.pinchMove(event, payload);\n }\n\n pinchMove(event, payload) {\n const state = this.state;\n const prev_a = state._values[1];\n const delta_a = payload.angle - prev_a;\n let delta_turns = 0;\n if (Math.abs(delta_a) > 270) delta_turns += Math.sign(delta_a);\n this.computeValues([payload.distance, payload.angle - 360 * delta_turns]);\n state.origin = payload.origin;\n state.turns = delta_turns;\n state._movement = [state._values[0] / state._initial[0] - 1, state._values[1] - state._initial[1]];\n this.compute(event);\n this.emit();\n }\n\n touchEnd(event) {\n this.ctrl.setEventIds(event);\n if (!this.state._active) return;\n\n if (this.state._touchIds.some(id => !this.ctrl.touchIds.has(id))) {\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n }\n\n pointerEnd(event) {\n const state = this.state;\n this.ctrl.setEventIds(event);\n\n try {\n event.target.releasePointerCapture(event.pointerId);\n } catch (_unused) {}\n\n if (state._pointerEvents.has(event.pointerId)) {\n state._pointerEvents.delete(event.pointerId);\n }\n\n if (!state._active) return;\n\n if (state._pointerEvents.size < 2) {\n state._active = false;\n this.compute(event);\n this.emit();\n }\n }\n\n gestureStart(event) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n if (state._active) return;\n this.start(event);\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n this.compute(event);\n this.emit();\n }\n\n gestureMove(event) {\n if (event.cancelable) event.preventDefault();\n if (!this.state._active) return;\n const state = this.state;\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n const _previousMovement = state._movement;\n state._movement = [event.scale - 1, event.rotation];\n state._delta = V.sub(state._movement, _previousMovement);\n this.compute(event);\n this.emit();\n }\n\n gestureEnd(event) {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n\n wheel(event) {\n const modifierKey = this.config.modifierKey;\n if (modifierKey && !event[modifierKey]) return;\n if (!this.state._active) this.wheelStart(event);else this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n\n wheelStart(event) {\n this.start(event);\n this.wheelChange(event);\n }\n\n wheelChange(event) {\n const isR3f = ('uv' in event);\n\n if (!isR3f) {\n if (event.cancelable) {\n event.preventDefault();\n }\n\n if (process.env.NODE_ENV === 'development' && !event.defaultPrevented) {\n console.warn(`[@use-gesture]: To properly support zoom on trackpads, try using the \\`target\\` option.\\n\\nThis message will only appear in development mode.`);\n }\n }\n\n const state = this.state;\n state._delta = [-wheelValues(event)[1] / PINCH_WHEEL_RATIO * state.offset[0], 0];\n V.addTo(state._movement, state._delta);\n this.state.origin = [event.clientX, event.clientY];\n this.compute(event);\n this.emit();\n }\n\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n\n bind(bindFunction) {\n const device = this.config.device;\n\n if (!!device) {\n bindFunction(device, 'start', this[device + 'Start'].bind(this));\n bindFunction(device, 'change', this[device + 'Move'].bind(this));\n bindFunction(device, 'end', this[device + 'End'].bind(this));\n bindFunction(device, 'cancel', this[device + 'End'].bind(this));\n }\n\n bindFunction('wheel', '', this.wheel.bind(this), {\n passive: false\n });\n }\n\n}\n\nconst pinchConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {\n device(_v, _k, {\n shared,\n pointer: {\n touch = false\n } = {}\n }) {\n const sharedConfig = shared;\n if (sharedConfig.target && !SUPPORT.touch && SUPPORT.gesture) return 'gesture';\n if (SUPPORT.touch && touch) return 'touch';\n\n if (SUPPORT.touchscreen) {\n if (SUPPORT.pointer) return 'pointer';\n if (SUPPORT.touch) return 'touch';\n }\n },\n\n bounds(_v, _k, {\n scaleBounds = {},\n angleBounds = {}\n }) {\n const _scaleBounds = state => {\n const D = assignDefault(call(scaleBounds, state), {\n min: -Infinity,\n max: Infinity\n });\n return [D.min, D.max];\n };\n\n const _angleBounds = state => {\n const A = assignDefault(call(angleBounds, state), {\n min: -Infinity,\n max: Infinity\n });\n return [A.min, A.max];\n };\n\n if (typeof scaleBounds !== 'function' && typeof angleBounds !== 'function') return [_scaleBounds(), _angleBounds()];\n return state => [_scaleBounds(state), _angleBounds(state)];\n },\n\n threshold(value, _k, config) {\n this.lockDirection = config.axis === 'lock';\n const threshold = V.toVector(value, this.lockDirection ? [0.1, 3] : 0);\n return threshold;\n },\n\n modifierKey(value) {\n if (value === undefined) return 'ctrlKey';\n return value;\n }\n\n});\n\nclass MoveEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"ingKey\", 'moving');\n }\n\n move(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n if (!this.state._active) this.moveStart(event);else this.moveChange(event);\n this.timeoutStore.add('moveEnd', this.moveEnd.bind(this));\n }\n\n moveStart(event) {\n this.start(event);\n this.computeValues(pointerValues(event));\n this.compute(event);\n this.computeInitial();\n this.emit();\n }\n\n moveChange(event) {\n if (!this.state._active) return;\n const values = pointerValues(event);\n const state = this.state;\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n this.computeValues(values);\n this.compute(event);\n this.emit();\n }\n\n moveEnd(event) {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n\n bind(bindFunction) {\n bindFunction('pointer', 'change', this.move.bind(this));\n bindFunction('pointer', 'leave', this.moveEnd.bind(this));\n }\n\n}\n\nconst moveConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n mouseOnly: (value = true) => value\n});\n\nclass ScrollEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"ingKey\", 'scrolling');\n }\n\n scroll(event) {\n if (!this.state._active) this.start(event);\n this.scrollChange(event);\n this.timeoutStore.add('scrollEnd', this.scrollEnd.bind(this));\n }\n\n scrollChange(event) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n const values = scrollValues(event);\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n this.computeValues(values);\n this.compute(event);\n this.emit();\n }\n\n scrollEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n\n bind(bindFunction) {\n bindFunction('scroll', '', this.scroll.bind(this));\n }\n\n}\n\nconst scrollConfigResolver = coordinatesConfigResolver;\n\nclass WheelEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"ingKey\", 'wheeling');\n }\n\n wheel(event) {\n if (!this.state._active) this.start(event);\n this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n\n wheelChange(event) {\n const state = this.state;\n state._delta = wheelValues(event);\n V.addTo(state._movement, state._delta);\n const [ox, oy] = state.overflow;\n const [dx, dy] = state._delta;\n const [dirx, diry] = state._direction;\n\n if (ox < 0 && dx > 0 && dirx < 0 || ox > 0 && dx < 0 && dirx > 0) {\n state._movement[0] = state._movementBound[0];\n }\n\n if (oy < 0 && dy > 0 && diry < 0 || oy > 0 && dy < 0 && diry > 0) {\n state._movement[1] = state._movementBound[1];\n }\n\n this.compute(event);\n this.emit();\n }\n\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n\n bind(bindFunction) {\n bindFunction('wheel', '', this.wheel.bind(this));\n }\n\n}\n\nconst wheelConfigResolver = coordinatesConfigResolver;\n\nclass HoverEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"ingKey\", 'hovering');\n }\n\n enter(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n this.start(event);\n this.computeValues(pointerValues(event));\n this.compute(event);\n this.emit();\n }\n\n leave(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n const state = this.state;\n if (!state._active) return;\n state._active = false;\n const values = pointerValues(event);\n state._movement = state._delta = V.sub(values, state._values);\n this.computeValues(values);\n this.compute(event);\n state.delta = state.movement;\n this.emit();\n }\n\n bind(bindFunction) {\n bindFunction('pointer', 'enter', this.enter.bind(this));\n bindFunction('pointer', 'leave', this.leave.bind(this));\n }\n\n}\n\nconst hoverConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n mouseOnly: (value = true) => value\n});\n\nconst EngineMap = new Map();\nconst ConfigResolverMap = new Map();\nfunction registerAction(action) {\n EngineMap.set(action.key, action.engine);\n ConfigResolverMap.set(action.key, action.resolver);\n}\nconst dragAction = {\n key: 'drag',\n engine: DragEngine,\n resolver: dragConfigResolver\n};\nconst hoverAction = {\n key: 'hover',\n engine: HoverEngine,\n resolver: hoverConfigResolver\n};\nconst moveAction = {\n key: 'move',\n engine: MoveEngine,\n resolver: moveConfigResolver\n};\nconst pinchAction = {\n key: 'pinch',\n engine: PinchEngine,\n resolver: pinchConfigResolver\n};\nconst scrollAction = {\n key: 'scroll',\n engine: ScrollEngine,\n resolver: scrollConfigResolver\n};\nconst wheelAction = {\n key: 'wheel',\n engine: WheelEngine,\n resolver: wheelConfigResolver\n};\n\nexport { ConfigResolverMap as C, EngineMap as E, SUPPORT as S, _objectSpread2 as _, _defineProperty as a, touchIds as b, chain as c, toHandlerProp as d, dragAction as e, pinchAction as f, hoverAction as h, isTouch as i, moveAction as m, parseProp as p, registerAction as r, scrollAction as s, toDomEventType as t, wheelAction as w };\n","import { S as SUPPORT, C as ConfigResolverMap, _ as _objectSpread2, a as _defineProperty, t as toDomEventType, i as isTouch, b as touchIds, E as EngineMap, c as chain, p as parseProp, d as toHandlerProp } from './actions-aeda4790.esm.js';\nimport './maths-b2a210f4.esm.js';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nconst sharedConfigResolver = {\n target(value) {\n if (value) {\n return () => 'current' in value ? value.current : value;\n }\n\n return undefined;\n },\n\n enabled(value = true) {\n return value;\n },\n\n window(value = SUPPORT.isBrowser ? window : undefined) {\n return value;\n },\n\n eventOptions({\n passive = true,\n capture = false\n } = {}) {\n return {\n passive,\n capture\n };\n },\n\n transform(value) {\n return value;\n }\n\n};\n\nconst _excluded = [\"target\", \"eventOptions\", \"window\", \"enabled\", \"transform\"];\nfunction resolveWith(config = {}, resolvers) {\n const result = {};\n\n for (const [key, resolver] of Object.entries(resolvers)) {\n switch (typeof resolver) {\n case 'function':\n if (process.env.NODE_ENV === 'development') {\n const r = resolver.call(result, config[key], key, config);\n if (!Number.isNaN(r)) result[key] = r;\n } else {\n result[key] = resolver.call(result, config[key], key, config);\n }\n\n break;\n\n case 'object':\n result[key] = resolveWith(config[key], resolver);\n break;\n\n case 'boolean':\n if (resolver) result[key] = config[key];\n break;\n }\n }\n\n return result;\n}\nfunction parse(newConfig, gestureKey, _config = {}) {\n const _ref = newConfig,\n {\n target,\n eventOptions,\n window,\n enabled,\n transform\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n _config.shared = resolveWith({\n target,\n eventOptions,\n window,\n enabled,\n transform\n }, sharedConfigResolver);\n\n if (gestureKey) {\n const resolver = ConfigResolverMap.get(gestureKey);\n _config[gestureKey] = resolveWith(_objectSpread2({\n shared: _config.shared\n }, rest), resolver);\n } else {\n for (const key in rest) {\n const resolver = ConfigResolverMap.get(key);\n\n if (resolver) {\n _config[key] = resolveWith(_objectSpread2({\n shared: _config.shared\n }, rest[key]), resolver);\n } else if (process.env.NODE_ENV === 'development') {\n if (!['drag', 'pinch', 'scroll', 'wheel', 'move', 'hover'].includes(key)) {\n if (key === 'domTarget') {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`);\n }\n\n console.warn(`[@use-gesture]: Unknown config key \\`${key}\\` was used. Please read the documentation for further information.`);\n }\n }\n }\n }\n\n return _config;\n}\n\nclass EventStore {\n constructor(ctrl, gestureKey) {\n _defineProperty(this, \"_listeners\", new Set());\n\n this._ctrl = ctrl;\n this._gestureKey = gestureKey;\n }\n\n add(element, device, action, handler, options) {\n const listeners = this._listeners;\n const type = toDomEventType(device, action);\n\n const _options = this._gestureKey ? this._ctrl.config[this._gestureKey].eventOptions : {};\n\n const eventOptions = _objectSpread2(_objectSpread2({}, _options), options);\n\n element.addEventListener(type, handler, eventOptions);\n\n const remove = () => {\n element.removeEventListener(type, handler, eventOptions);\n listeners.delete(remove);\n };\n\n listeners.add(remove);\n return remove;\n }\n\n clean() {\n this._listeners.forEach(remove => remove());\n\n this._listeners.clear();\n }\n\n}\n\nclass TimeoutStore {\n constructor() {\n _defineProperty(this, \"_timeouts\", new Map());\n }\n\n add(key, callback, ms = 140, ...args) {\n this.remove(key);\n\n this._timeouts.set(key, window.setTimeout(callback, ms, ...args));\n }\n\n remove(key) {\n const timeout = this._timeouts.get(key);\n\n if (timeout) window.clearTimeout(timeout);\n }\n\n clean() {\n this._timeouts.forEach(timeout => void window.clearTimeout(timeout));\n\n this._timeouts.clear();\n }\n\n}\n\nclass Controller {\n constructor(handlers) {\n _defineProperty(this, \"gestures\", new Set());\n\n _defineProperty(this, \"_targetEventStore\", new EventStore(this));\n\n _defineProperty(this, \"gestureEventStores\", {});\n\n _defineProperty(this, \"gestureTimeoutStores\", {});\n\n _defineProperty(this, \"handlers\", {});\n\n _defineProperty(this, \"config\", {});\n\n _defineProperty(this, \"pointerIds\", new Set());\n\n _defineProperty(this, \"touchIds\", new Set());\n\n _defineProperty(this, \"state\", {\n shared: {\n shiftKey: false,\n metaKey: false,\n ctrlKey: false,\n altKey: false\n }\n });\n\n resolveGestures(this, handlers);\n }\n\n setEventIds(event) {\n if (isTouch(event)) {\n this.touchIds = new Set(touchIds(event));\n return this.touchIds;\n } else if ('pointerId' in event) {\n if (event.type === 'pointerup' || event.type === 'pointercancel') this.pointerIds.delete(event.pointerId);else if (event.type === 'pointerdown') this.pointerIds.add(event.pointerId);\n return this.pointerIds;\n }\n }\n\n applyHandlers(handlers, nativeHandlers) {\n this.handlers = handlers;\n this.nativeHandlers = nativeHandlers;\n }\n\n applyConfig(config, gestureKey) {\n this.config = parse(config, gestureKey, this.config);\n }\n\n clean() {\n this._targetEventStore.clean();\n\n for (const key of this.gestures) {\n this.gestureEventStores[key].clean();\n this.gestureTimeoutStores[key].clean();\n }\n }\n\n effect() {\n if (this.config.shared.target) this.bind();\n return () => this._targetEventStore.clean();\n }\n\n bind(...args) {\n const sharedConfig = this.config.shared;\n const props = {};\n let target;\n\n if (sharedConfig.target) {\n target = sharedConfig.target();\n if (!target) return;\n }\n\n if (sharedConfig.enabled) {\n for (const gestureKey of this.gestures) {\n const gestureConfig = this.config[gestureKey];\n const bindFunction = bindToProps(props, gestureConfig.eventOptions, !!target);\n\n if (gestureConfig.enabled) {\n const Engine = EngineMap.get(gestureKey);\n new Engine(this, args, gestureKey).bind(bindFunction);\n }\n }\n\n const nativeBindFunction = bindToProps(props, sharedConfig.eventOptions, !!target);\n\n for (const eventKey in this.nativeHandlers) {\n nativeBindFunction(eventKey, '', event => this.nativeHandlers[eventKey](_objectSpread2(_objectSpread2({}, this.state.shared), {}, {\n event,\n args\n })), undefined, true);\n }\n }\n\n for (const handlerProp in props) {\n props[handlerProp] = chain(...props[handlerProp]);\n }\n\n if (!target) return props;\n\n for (const handlerProp in props) {\n const {\n device,\n capture,\n passive\n } = parseProp(handlerProp);\n\n this._targetEventStore.add(target, device, '', props[handlerProp], {\n capture,\n passive\n });\n }\n }\n\n}\n\nfunction setupGesture(ctrl, gestureKey) {\n ctrl.gestures.add(gestureKey);\n ctrl.gestureEventStores[gestureKey] = new EventStore(ctrl, gestureKey);\n ctrl.gestureTimeoutStores[gestureKey] = new TimeoutStore();\n}\n\nfunction resolveGestures(ctrl, internalHandlers) {\n if (internalHandlers.drag) setupGesture(ctrl, 'drag');\n if (internalHandlers.wheel) setupGesture(ctrl, 'wheel');\n if (internalHandlers.scroll) setupGesture(ctrl, 'scroll');\n if (internalHandlers.move) setupGesture(ctrl, 'move');\n if (internalHandlers.pinch) setupGesture(ctrl, 'pinch');\n if (internalHandlers.hover) setupGesture(ctrl, 'hover');\n}\n\nconst bindToProps = (props, eventOptions, withPassiveOption) => (device, action, handler, options = {}, isNative = false) => {\n var _options$capture, _options$passive;\n\n const capture = (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : eventOptions.capture;\n const passive = (_options$passive = options.passive) !== null && _options$passive !== void 0 ? _options$passive : eventOptions.passive;\n let handlerProp = isNative ? device : toHandlerProp(device, action, capture);\n if (withPassiveOption && passive) handlerProp += 'Passive';\n props[handlerProp] = props[handlerProp] || [];\n props[handlerProp].push(handler);\n};\n\nconst RE_NOT_NATIVE = /^on(Drag|Wheel|Scroll|Move|Pinch|Hover)/;\n\nfunction sortHandlers(_handlers) {\n const native = {};\n const handlers = {};\n const actions = new Set();\n\n for (let key in _handlers) {\n if (RE_NOT_NATIVE.test(key)) {\n actions.add(RegExp.lastMatch);\n handlers[key] = _handlers[key];\n } else {\n native[key] = _handlers[key];\n }\n }\n\n return [handlers, native, actions];\n}\n\nfunction registerGesture(actions, handlers, handlerKey, key, internalHandlers, config) {\n if (!actions.has(handlerKey)) return;\n\n if (!EngineMap.has(key)) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[@use-gesture]: You've created a custom handler that that uses the \\`${key}\\` gesture but isn't properly configured.\\n\\nPlease add \\`${key}Action\\` when creating your handler.`);\n }\n\n return;\n }\n\n const startKey = handlerKey + 'Start';\n const endKey = handlerKey + 'End';\n\n const fn = state => {\n let memo = undefined;\n if (state.first && startKey in handlers) handlers[startKey](state);\n if (handlerKey in handlers) memo = handlers[handlerKey](state);\n if (state.last && endKey in handlers) handlers[endKey](state);\n return memo;\n };\n\n internalHandlers[key] = fn;\n config[key] = config[key] || {};\n}\n\nfunction parseMergedHandlers(mergedHandlers, mergedConfig) {\n const [handlers, nativeHandlers, actions] = sortHandlers(mergedHandlers);\n const internalHandlers = {};\n registerGesture(actions, handlers, 'onDrag', 'drag', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onWheel', 'wheel', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onScroll', 'scroll', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onPinch', 'pinch', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onMove', 'move', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onHover', 'hover', internalHandlers, mergedConfig);\n return {\n handlers: internalHandlers,\n config: mergedConfig,\n nativeHandlers\n };\n}\n\nexport { Controller, parseMergedHandlers };\n","import { registerAction, dragAction, pinchAction, wheelAction, scrollAction, moveAction, hoverAction } from '@use-gesture/core/actions';\nexport * from '@use-gesture/core/actions';\nimport React from 'react';\nimport { Controller, parseMergedHandlers } from '@use-gesture/core';\nexport * from '@use-gesture/core/utils';\nexport * from '@use-gesture/core/types';\n\nfunction useRecognizers(handlers, config = {}, gestureKey, nativeHandlers) {\n const ctrl = React.useMemo(() => new Controller(handlers), []);\n ctrl.applyHandlers(handlers, nativeHandlers);\n ctrl.applyConfig(config, gestureKey);\n React.useEffect(ctrl.effect.bind(ctrl));\n React.useEffect(() => {\n return ctrl.clean.bind(ctrl);\n }, []);\n\n if (config.target === undefined) {\n return ctrl.bind.bind(ctrl);\n }\n\n return undefined;\n}\n\nfunction useDrag(handler, config) {\n registerAction(dragAction);\n return useRecognizers({\n drag: handler\n }, config || {}, 'drag');\n}\n\nfunction usePinch(handler, config) {\n registerAction(pinchAction);\n return useRecognizers({\n pinch: handler\n }, config || {}, 'pinch');\n}\n\nfunction useWheel(handler, config) {\n registerAction(wheelAction);\n return useRecognizers({\n wheel: handler\n }, config || {}, 'wheel');\n}\n\nfunction useScroll(handler, config) {\n registerAction(scrollAction);\n return useRecognizers({\n scroll: handler\n }, config || {}, 'scroll');\n}\n\nfunction useMove(handler, config) {\n registerAction(moveAction);\n return useRecognizers({\n move: handler\n }, config || {}, 'move');\n}\n\nfunction useHover(handler, config) {\n registerAction(hoverAction);\n return useRecognizers({\n hover: handler\n }, config || {}, 'hover');\n}\n\nfunction createUseGesture(actions) {\n actions.forEach(registerAction);\n return function useGesture(_handlers, _config) {\n const {\n handlers,\n nativeHandlers,\n config\n } = parseMergedHandlers(_handlers, _config || {});\n return useRecognizers(handlers, config, undefined, nativeHandlers);\n };\n}\n\nfunction useGesture(handlers, config) {\n const hook = createUseGesture([dragAction, pinchAction, scrollAction, wheelAction, moveAction, hoverAction]);\n return hook(handlers, config || {});\n}\n\nexport { createUseGesture, useDrag, useGesture, useHover, useMove, usePinch, useScroll, useWheel };\n","export function bound(position: number, min: number | undefined, max: number | undefined) {\n let ret = position;\n if (min !== undefined) {\n ret = Math.max(position, min);\n }\n if (max !== undefined) {\n ret = Math.min(ret, max);\n }\n return ret;\n}\n\nexport function rubberband(distance: number, dimension: number, constant: number) {\n return (distance * dimension * constant) / (dimension + constant * distance);\n}\n\nexport function rubberbandIfOutOfBounds(\n position: number,\n min: number,\n max: number,\n dimension: number,\n constant = 0.15,\n) {\n if (constant === 0) return bound(position, min, max);\n if (position < min) return -rubberband(min - position, dimension, constant) + min;\n if (position > max) return +rubberband(position - max, dimension, constant) + max;\n return position;\n}\n","import { animated, useSpring } from '@react-spring/web';\nimport { useDrag } from '@use-gesture/react';\nimport { useLayoutEffect, useRef } from 'react';\nimport { px2DPIpx } from '../utils';\nimport { PickerColumnItem, PickerColumnValue } from './types';\nimport { bound, rubberbandIfOutOfBounds } from './utils';\n\nconst classPrefix = `v-picker`;\n\ninterface ColumnProps {\n pickerDataList: PickerColumnItem[];\n value?: PickerColumnValue;\n onChange?: (pickerColumnItem: PickerColumnItem) => void;\n itemHeight: number;\n}\n\nexport const Column = (props: ColumnProps) => {\n const itemHeight = parseFloat(px2DPIpx(props.itemHeight));\n const { value, onChange, pickerDataList } = props;\n const [{ y }, api] = useSpring(() => ({\n from: { y: 0 },\n config: {\n tension: 400,\n mass: 0.4,\n },\n }));\n\n const draggingRef = useRef(false);\n\n useLayoutEffect(() => {\n if (draggingRef.current) return;\n const targetIndex = pickerDataList.findIndex((item) => item.value === value);\n if (targetIndex < 0) return;\n const finalPosition = targetIndex * -itemHeight;\n // api.start({ y: finalPosition, immediate: y.idle });\n api.start({ y: finalPosition });\n }, [value, pickerDataList, itemHeight, api]);\n\n function scrollSelect(index: number) {\n const finalPosition = index * -itemHeight;\n api.start({ y: finalPosition });\n onChange?.(pickerDataList[Math.abs(index)]);\n }\n\n const bind = useDrag(\n (state) => {\n draggingRef.current = true;\n const min = -((pickerDataList.length - 1) * itemHeight);\n const max = 0;\n if (state.last) {\n draggingRef.current = false;\n const position = state.offset[1] + state.velocity[1] * state.direction[1] * 50;\n const targetIndex = -Math.round(bound(position, min, max) / itemHeight);\n scrollSelect(targetIndex);\n } else {\n const position = state.offset[1];\n api.start({\n y: rubberbandIfOutOfBounds(position, min, max, itemHeight * 50, 0.2),\n });\n }\n },\n {\n axis: 'y',\n from: () => [0, y.get()],\n filterTaps: true,\n pointer: { touch: true },\n },\n );\n\n return (\n <div className={`${classPrefix}-column`} {...bind()}>\n <animated.div style={{ y }} className={`${classPrefix}-column-wheel`}>\n {pickerDataList.map((item, index) => {\n function handleClick() {\n draggingRef.current = false;\n scrollSelect(index);\n }\n return (\n <div key={item.value} className={`${classPrefix}-column-item`} onClick={handleClick}>\n <div className={`${classPrefix}-column-item-label`}>{item.label}</div>\n </div>\n );\n })}\n </animated.div>\n </div>\n );\n};\n","import { CSSProperties } from 'react';\nimport { px2DPIpx } from '../utils';\nimport { CommonProps, withNativeProps } from '../utils/native-props';\nimport { Column } from './column';\nimport './style.less';\nimport { PickerColumnItem, PickerColumnValue } from './types';\nexport * from './types';\n\nconst classPrefix = `v-picker`;\n\nexport type PickerProps = {\n pickerDataList: PickerColumnItem[];\n value?: PickerColumnValue;\n onChange?: (pickerColumnItem: PickerColumnItem) => void;\n itemHeight?: number;\n} & CommonProps<{ '--height': CSSProperties['height'] }>;\n\nexport const Picker = (props: PickerProps) => {\n const pickerDataList = props.pickerDataList || [];\n const itemHeight = props.itemHeight || 100;\n\n return withNativeProps(\n { className: props.className, style: { ...props.style, '--item-height': px2DPIpx(itemHeight) } },\n <div className={`${classPrefix}`}>\n <Column\n pickerDataList={pickerDataList}\n value={props.value}\n onChange={props.onChange}\n itemHeight={itemHeight}\n />\n <div className={`${classPrefix}-mask ${classPrefix}-mask-top`}>\n <div className={`${classPrefix}-mask-inner`}></div>\n </div>\n <div className={`${classPrefix}-mask ${classPrefix}-mask-bottom`}>\n <div className={`${classPrefix}-mask-inner`}></div>\n </div>\n </div>,\n );\n};\n","import { flatbizDate } from '@flatbiz/utils';\nimport { PickerColumnItem, PickerColumnValue } from '../picker/types';\n\nexport const getYearList = (props: { minDate: string; maxDate: string }) => {\n const { y: minDateYear } = flatbizDate.detail(props.minDate);\n const { y: maxDateYear } = flatbizDate.detail(props.maxDate);\n\n const result = [] as PickerColumnItem[];\n for (let i = minDateYear; i <= maxDateYear; i++) {\n result.push({\n value: i,\n label: `${i}年`,\n });\n }\n return result;\n};\n\nexport const getMonthList = (year: number, props: { minDate: string; maxDate: string }) => {\n const minDateInfo = flatbizDate.detail(props.minDate);\n const maxDateInfo = flatbizDate.detail(props.maxDate);\n const result = [] as PickerColumnItem[];\n let minMonth = 1;\n let maxMonth = 12;\n if (year === minDateInfo.y && year === maxDateInfo.y) {\n minMonth = minDateInfo.m;\n maxMonth = maxDateInfo.m;\n } else if (year === minDateInfo.y) {\n minMonth = minDateInfo.m;\n } else if (year === maxDateInfo.y) {\n maxMonth = maxDateInfo.m;\n }\n for (let i = minMonth; i <= maxMonth; i++) {\n result.push({\n value: i,\n label: `${i}月`,\n });\n }\n return result;\n};\n\nexport const getDayList = (year: number, month: number, props: { minDate: string; maxDate: string }) => {\n const minDateInfo = flatbizDate.detail(props.minDate);\n const maxDateInfo = flatbizDate.detail(props.maxDate);\n const result = [] as PickerColumnItem[];\n let maxDay = new Date(year, month, 0).getDate();\n let minDay = 1;\n if (year === maxDateInfo.y && month === maxDateInfo.m) {\n maxDay = maxDateInfo.d;\n }\n\n if (year === minDateInfo.y && month === minDateInfo.m) {\n minDay = minDateInfo.d;\n }\n\n for (let i = minDay; i <= maxDay; i++) {\n result.push({\n value: i,\n label: `${i}日`,\n });\n }\n return result;\n};\n\nexport const targetValueInDateItemList = (\n dateItemList: PickerColumnItem<PickerColumnValue>[],\n targetValue: number,\n) => {\n return (\n targetValue >= Number(dateItemList[0].value) &&\n targetValue <= Number(dateItemList[dateItemList.length - 1].value)\n );\n};\n\nexport const latelyDateItemValue = (\n dateItemList: PickerColumnItem<PickerColumnValue>[],\n targetValue: number,\n) => {\n const maxValue = dateItemList[dateItemList.length - 1].value as number;\n const minValue = dateItemList[0].value as number;\n return Math.abs(targetValue - minValue) - Math.abs(targetValue - maxValue) > 0 ? maxValue : minValue;\n};\n","import { classNames } from '@dimjs/utils';\nimport { flatbizDate } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { Picker, PickerColumnItem, PickerColumnValue } from '../picker';\nimport './styles/date-view.less';\nimport {\n getDayList,\n getMonthList,\n getYearList,\n latelyDateItemValue,\n targetValueInDateItemList,\n} from './utils';\n\nexport interface DateViewProps {\n minDate: string;\n maxDate: string;\n defaultDate: string;\n value?: string;\n onChange?: (pickerColumnItem: PickerColumnItem<string>) => void;\n itemHeight?: number;\n className?: string;\n}\n\n/**\n * 选择日期\n * 1. 如果minDate、maxDate数据有异常,则系统为minDate、maxDate重新赋值,赋值规则为currentDate的前后两年\n *\n * https://stackoverflow.com/questions/4310953/invalid-date-in-safari\n */\nexport const DateView = (props: DateViewProps) => {\n const currentDateRef = useRef('');\n const minDateRef = useRef('');\n const maxDateRef = useRef('');\n\n const [yearList, setYearList] = useState<PickerColumnItem[]>([]);\n const [monthList, setMonthList] = useState<PickerColumnItem[]>([]);\n const [dayList, setDyList] = useState<PickerColumnItem[]>([]);\n const [selectedValueList, setSelectedValueList] = useState<PickerColumnValue[]>([]);\n\n const getMinMaxDate = hooks.useCallbackRef(() => {\n return { minDate: minDateRef.current, maxDate: maxDateRef.current };\n });\n\n useEffectCustom(() => {\n let currentDate = props.value || props.defaultDate;\n let minDate = props.minDate;\n let maxDate = props.maxDate;\n if (!flatbizDate.isDate(currentDate)) {\n currentDate = flatbizDate.format(new Date(), 'YYYY-MM-DD');\n } else {\n currentDate = flatbizDate.format(currentDate, 'YYYY-MM-DD');\n }\n // 如果minDate、maxDate数据有异常,则系统为minDate、maxDate重新赋值,赋值规则为currentDate的前后两年\n if (!flatbizDate.isDate(minDate)) {\n minDate = flatbizDate.format(flatbizDate.update(currentDate, 'y', 2), 'YYYY-MM-DD');\n } else {\n minDate = flatbizDate.format(minDate, 'YYYY-MM-DD');\n }\n if (!flatbizDate.isDate(maxDate)) {\n maxDate = flatbizDate.format(flatbizDate.update(currentDate, 'y', -2), 'YYYY-MM-DD');\n } else {\n maxDate = flatbizDate.format(maxDate, 'YYYY-MM-DD');\n }\n if (flatbizDate.gt(currentDate, maxDate)) {\n console.warn(`当前指定时间【${currentDate}】大于最大设置时间【${maxDate}】`);\n currentDate = maxDate;\n }\n if (flatbizDate.gt(minDate, currentDate)) {\n console.warn(`当前指定时间【${currentDate}】小于最小设置时间【${minDate}】`);\n currentDate = minDate;\n }\n currentDateRef.current = currentDate;\n minDateRef.current = minDate;\n maxDateRef.current = maxDate;\n const yearList = getYearList(getMinMaxDate());\n setYearList(yearList);\n const { y, m, d } = flatbizDate.detail(currentDateRef.current);\n const monthList = getMonthList(y, getMinMaxDate());\n setMonthList(monthList);\n const dayList = getDayList(y, m, getMinMaxDate());\n setDyList(dayList);\n setSelectedValueList([y, m, d]);\n\n return () => {\n setYearList([]);\n setMonthList([]);\n setDyList([]);\n setSelectedValueList([]);\n };\n }, [props.value, props.maxDate, props.minDate]);\n\n const onYearChange = hooks.useCallbackRef((pickerItem: PickerColumnItem) => {\n const nextYearValue = Number(pickerItem.value);\n if (nextYearValue === selectedValueList[0]) {\n return;\n }\n const monthList = getMonthList(nextYearValue, getMinMaxDate());\n const currentMonthValue = Number(selectedValueList[1]);\n const nextMonthValue = targetValueInDateItemList(monthList, currentMonthValue)\n ? currentMonthValue\n : latelyDateItemValue(monthList, currentMonthValue);\n\n const dayList = getDayList(nextYearValue, nextMonthValue, getMinMaxDate());\n const currentDayValue = Number(selectedValueList[2]);\n const nextDayValue = targetValueInDateItemList(dayList, currentDayValue)\n ? currentDayValue\n : latelyDateItemValue(dayList, currentDayValue);\n\n const selectedDateItemList = [nextYearValue, nextMonthValue, nextDayValue];\n setMonthList(monthList);\n setDyList(dayList);\n setSelectedValueList(selectedDateItemList);\n const selectedDate = flatbizDate.format(selectedDateItemList.join('-'), 'YYYY-MM-DD');\n props.onChange?.({\n label: selectedDate,\n value: selectedDate,\n });\n });\n\n const onMonthChange = hooks.useCallbackRef((pickerItem: PickerColumnItem) => {\n const nextMonthValue = pickerItem.value as number;\n if (nextMonthValue === selectedValueList[1]) {\n return;\n }\n const dayList = getDayList(selectedValueList[0] as number, nextMonthValue, getMinMaxDate());\n const currentDayValue = Number(selectedValueList[2]);\n const nextDayValue = targetValueInDateItemList(dayList, currentDayValue)\n ? currentDayValue\n : latelyDateItemValue(dayList, currentDayValue);\n\n setDyList(dayList);\n const selectedDateItemList = [selectedValueList[0], nextMonthValue, nextDayValue];\n setSelectedValueList(selectedDateItemList);\n const selectedDate = flatbizDate.format(selectedDateItemList.join('-'), 'YYYY-MM-DD');\n props.onChange?.({\n label: selectedDate,\n value: selectedDate,\n });\n });\n\n const onDayChange = hooks.useCallbackRef((pickerItem: PickerColumnItem) => {\n const value = pickerItem.value;\n const selectedDateItemList = [selectedValueList[0], selectedValueList[1], value];\n setSelectedValueList(selectedDateItemList);\n const selectedDate = flatbizDate.format(selectedDateItemList.join('-'), 'YYYY-MM-DD');\n props.onChange?.({\n label: selectedDate,\n value: selectedDate,\n });\n });\n\n if (!currentDateRef.current || !minDateRef.current || !maxDateRef.current) {\n return null;\n }\n\n return (\n <div className={classNames('v-date-view', props.className)}>\n <Picker\n pickerDataList={yearList}\n onChange={onYearChange}\n value={selectedValueList[0]}\n itemHeight={props.itemHeight}\n />\n <Picker\n pickerDataList={monthList}\n onChange={onMonthChange}\n value={selectedValueList[1]}\n itemHeight={props.itemHeight}\n />\n <Picker\n pickerDataList={dayList}\n onChange={onDayChange}\n value={selectedValueList[2]}\n itemHeight={props.itemHeight}\n />\n </div>\n );\n};\n","import { FC, ReactNode } from 'react';\n\nexport type TabPaneProps = {\n title: ReactNode;\n disabled?: boolean;\n children?: ReactNode;\n};\n\nexport const TabPane: FC<TabPaneProps> = () => {\n return null;\n};\n","import { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\ntype Options<T> = {\n value?: T;\n defaultValue?: T;\n onChange?: (v: T) => void;\n valueList: T[];\n};\n\nexport function usePropsListActiveValueChange<T>(option: Options<T>) {\n const { onChange, valueList } = option;\n const forceUpdate = hooks.useForceUpdate();\n const value = option.value !== undefined && valueList.includes(option.value) ? option.value : undefined;\n const defaultValue =\n option.defaultValue !== undefined && valueList.includes(option.defaultValue)\n ? option.defaultValue\n : valueList[0];\n const stateRef = useRef<T>(value !== undefined ? value : defaultValue);\n\n if (value !== undefined) {\n stateRef.current = value;\n }\n\n if (!valueList.includes(stateRef.current)) {\n stateRef.current = valueList[0];\n }\n\n const setState = hooks.useCallbackRef((v: T) => {\n if (value === undefined) {\n stateRef.current = v;\n forceUpdate();\n }\n onChange?.(v);\n });\n return [stateRef.current, setState] as const;\n}\n","import { Fragment, ReactNode } from 'react';\n\nexport interface IfProps {\n isTrue: boolean;\n children?: ReactNode;\n}\n\nexport const If = (props: IfProps) => {\n if (!props.isTrue) return null;\n return <Fragment>{props.children}</Fragment>;\n};\n","export function bound(position: number, min: number | undefined, max: number | undefined) {\n let ret = position;\n if (min !== undefined) {\n ret = Math.max(position, min);\n }\n if (max !== undefined) {\n ret = Math.min(ret, max);\n }\n return ret;\n}\n","import { ComponentProps, CSSProperties, ReactElement } from 'react';\nimport { TabPane } from './tab-pane';\n\nexport type TabContentProps = {\n panes: ReactElement<ComponentProps<typeof TabPane>>[];\n activeKey: string;\n activatedKeyList: string[];\n tabsType?: 'freedom' | 'fixed';\n lazyLoad?: boolean;\n};\nconst classPrefix = `v-tabs`;\n\nexport const TabContent = (props: TabContentProps) => {\n const isFixed = props.tabsType === 'fixed';\n\n return (\n <div className={`${classPrefix}-content`}>\n {props.panes.map((pane) => {\n if (pane.props.children === undefined) {\n return null;\n }\n const isActive = pane.key === props.activeKey;\n if (props.lazyLoad && !props.activatedKeyList.includes(pane.key as string)) {\n return null;\n }\n let contentItemStyle = {} as CSSProperties;\n\n if (isActive) {\n if (isFixed) {\n contentItemStyle = {\n ...contentItemStyle,\n transform: 'translateX(0%)',\n WebkitTransform: 'translateX(0%)',\n };\n }\n } else {\n if (!isFixed) {\n contentItemStyle.display = 'none';\n }\n }\n\n return (\n <div key={pane.key} className={`${classPrefix}-content-item`} style={contentItemStyle}>\n {pane.props.children}\n </div>\n );\n })}\n </div>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { animated, useSpring } from '@react-spring/web';\nimport { hooks } from '@wove/react';\nimport { ComponentProps, CSSProperties, FC, ReactElement, useRef } from 'react';\nimport { useEffectCustom, useMutationEffect, useResizeEffect } from '../hooks';\nimport { usePropsListActiveValueChange } from '../hooks/use-props-list-active-value-change';\nimport { If } from '../if';\nimport { IphoneBottomAdaptive } from '../iphone-bottom-adaptive';\nimport { CommonPropsWithChildren, withNativeProps } from '../utils/native-props';\nimport { px2DPIpx } from '../utils/pxrem';\nimport { bound } from './helper/bound';\nimport './style.less';\nimport { TabContent } from './tab-content';\nimport { TabPane } from './tab-pane';\n\nconst classPrefix = `v-tabs`;\n\nexport type TabsProps = {\n activeKey?: string;\n defaultActiveKey?: string;\n onPreChange?: (key: string) => Promise<void>;\n onChange?: (key: string) => void;\n onTabClick?: (key: string) => void;\n position?: 'top' | 'bottom';\n tabsType?: 'freedom' | 'fixed';\n height?: number | string;\n lazyLoad?: boolean;\n hideActiveLine?: boolean;\n activeLineWidth?: number;\n hideTabsHeader?: boolean;\n hideTabsContent?: boolean;\n adaptiveIphone?: boolean;\n /** 是否显示左右mask,默认值:true */\n leftRightMask?: boolean;\n tabBarExtraContent?: true | ReactElement;\n /** leftRightMask=true 有效 */\n onTabBarExtraClick?: (event) => void;\n} & CommonPropsWithChildren;\n\nexport type TabsStaticMethods = {\n Pane: typeof TabPane;\n};\n\n/**\n * Tabs\n * ```\n * position: headerbar方向\n * tabsType:内容类型\n * freedom:自由模式\n * fixed:固定高度模式\n * ```\n * @param props\n * @returns\n */\nexport const Tabs: FC<TabsProps> & TabsStaticMethods = (props) => {\n const tabListContainerRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const position = props.position || 'bottom';\n const tabsType = props.tabsType || 'fixed';\n const activeLineWidth = parseFloat(px2DPIpx(props.activeLineWidth || 0));\n const activatedKeyList = useRef<string[]>([]);\n\n const onPushActivatedKeyList = hooks.useCallbackRef((key: string) => {\n if (key && !activatedKeyList.current.includes(key)) {\n activatedKeyList.current.push(key);\n }\n });\n const childrenList = isArray(props.children) ? props.children : [props.children];\n const panes = childrenList.filter(Boolean) as ReactElement<ComponentProps<typeof TabPane>>[];\n\n const [activeKey, setActiveKey] = usePropsListActiveValueChange<string>({\n value: props.activeKey,\n defaultValue: props.defaultActiveKey,\n onChange: props.onChange,\n valueList: panes.map((item) => item.key) as string[],\n });\n if (activeKey) {\n onPushActivatedKeyList(activeKey);\n }\n\n const [{ x, width }, api] = useSpring(() => ({\n x: 0,\n width: 0,\n config: {\n tension: 300,\n clamp: true,\n },\n }));\n\n const [{ scrollLeft }, scrollApi] = useSpring(() => ({\n scrollLeft: 0,\n config: {\n tension: 300,\n clamp: true,\n },\n }));\n\n const [{ leftMaskOpacity, rightMaskOpacity }, maskApi] = useSpring(() => ({\n leftMaskOpacity: 0,\n rightMaskOpacity: 0,\n config: {\n clamp: true,\n },\n }));\n\n const animate = hooks.useCallbackRef((immediate = false) => {\n const container = tabListContainerRef.current;\n if (!container) return;\n const activeIndex = panes.findIndex((item) => item.key === activeKey);\n if (activeIndex === -1) return;\n const activeTabWrapper = container.children.item(activeIndex) as HTMLDivElement;\n const activeTab = activeTabWrapper.children.item(0) as HTMLDivElement;\n const activeTabLeft = activeTab.offsetLeft;\n const activeTabWidth = activeTab.offsetWidth;\n\n const containerWidth = container.offsetWidth;\n const containerScrollWidth = container.scrollWidth;\n\n const containerScrollLeft = container.scrollLeft;\n\n const x = activeTabLeft;\n\n const newActiveLineWidth =\n activeLineWidth > 0 && activeLineWidth > activeTabWidth ? activeTabWidth : activeLineWidth;\n\n api.start({\n x: newActiveLineWidth > 0 ? x + (activeTabWidth - newActiveLineWidth) / 2 : x,\n width: newActiveLineWidth > 0 ? newActiveLineWidth : activeTabWidth,\n immediate,\n });\n\n const maxScrollDistance = containerScrollWidth - containerWidth;\n if (maxScrollDistance <= 0) return;\n\n const nextScrollLeft = bound(\n activeTabLeft - (containerWidth - activeTabWidth) / 2,\n 0,\n containerScrollWidth - containerWidth,\n );\n\n scrollApi.start({\n scrollLeft: nextScrollLeft,\n from: { scrollLeft: containerScrollLeft },\n immediate,\n });\n });\n\n useEffectCustom(() => {\n animate(true);\n }, []);\n\n hooks.useUpdateEffect(() => {\n animate();\n }, [activeKey]);\n\n useResizeEffect(() => {\n animate(true);\n }, rootRef);\n\n useMutationEffect(\n () => {\n animate(true);\n },\n tabListContainerRef,\n {\n subtree: true,\n childList: true,\n characterData: true,\n },\n );\n\n const updateMask = hooks.useThrottleCallback((immediate = false) => {\n const container = tabListContainerRef.current;\n if (!container) return;\n const scrollLeft = container.scrollLeft;\n const showLeftMask = scrollLeft > 0;\n const showRightMask = scrollLeft + container.offsetWidth < container.scrollWidth;\n\n maskApi.start({\n leftMaskOpacity: showLeftMask ? 1 : 0,\n rightMaskOpacity: showRightMask ? 1 : 0,\n immediate,\n });\n });\n\n const onTabHeaderScroll = hooks.useCallbackRef(() => {\n updateMask();\n });\n\n useEffectCustom(() => {\n updateMask(true);\n }, []);\n\n const height = tabsType === 'fixed' ? props.height || '100%' : props.height;\n const dpiHeight = typeof height === 'number' ? px2DPIpx(height) : height;\n const style = {} as CSSProperties;\n if (dpiHeight) {\n style.height = dpiHeight;\n }\n\n const onTabClick = hooks.useCallbackRef(async (pane) => {\n const { key } = pane;\n if (pane.props.disabled) return;\n if (key === undefined || key === null) {\n return;\n }\n if (key === activeKey) {\n props.onTabClick?.(key);\n return;\n }\n if (props.onPreChange) {\n await props.onPreChange(key.toString());\n }\n onPushActivatedKeyList(key.toString());\n setActiveKey(key.toString());\n props.onTabClick?.(key);\n });\n\n return withNativeProps(\n props,\n <div\n className={classNames(classPrefix, `${classPrefix}-${tabsType}`, `${classPrefix}-${position}`)}\n ref={rootRef}\n style={style}\n >\n <If isTrue={position === 'bottom' && !props.hideTabsContent}>\n <TabContent\n panes={panes}\n activeKey={activeKey}\n tabsType={tabsType}\n lazyLoad={props.lazyLoad}\n activatedKeyList={activatedKeyList.current}\n />\n </If>\n <If isTrue={!props.hideTabsHeader}>\n <div className={`${classPrefix}-header-wrapper`}>\n <div className={`${classPrefix}-header`}>\n <animated.div\n className={`${classPrefix}-list`}\n ref={tabListContainerRef}\n scrollLeft={scrollLeft}\n onScroll={onTabHeaderScroll}\n >\n {panes.map((pane) =>\n withNativeProps(\n pane.props,\n <div key={pane.key} className={`${classPrefix}-tab-wrapper`}>\n <div\n onClick={onTabClick.bind(null, pane)}\n className={classNames(`${classPrefix}-tab`, {\n [`${classPrefix}-tab-active`]: pane.key === activeKey,\n [`${classPrefix}-tab-disabled`]: pane.props.disabled,\n })}\n >\n {pane.props.title}\n </div>\n </div>,\n ),\n )}\n\n {!props.hideActiveLine ? (\n <animated.div\n className={`${classPrefix}-tab-line`}\n style={{\n width,\n x,\n }}\n />\n ) : null}\n </animated.div>\n {props.leftRightMask && (\n <animated.div\n className={classNames(`${classPrefix}-header-mask`, `${classPrefix}-header-mask-left`)}\n style={{\n opacity: leftMaskOpacity,\n }}\n />\n )}\n {props.leftRightMask && (\n <animated.div\n className={classNames(`${classPrefix}-header-mask`, `${classPrefix}-header-mask-right`)}\n style={{\n opacity: rightMaskOpacity,\n }}\n />\n )}\n </div>\n {props.tabBarExtraContent === true ? (\n <div className={`${classPrefix}-tabbar-extra`} onClick={props.onTabBarExtraClick}></div>\n ) : (\n props.tabBarExtraContent\n )}\n {props.adaptiveIphone ? <IphoneBottomAdaptive /> : null}\n </div>\n </If>\n <If isTrue={position === 'top' && !props.hideTabsContent}>\n <TabContent\n panes={panes}\n activeKey={activeKey}\n tabsType={tabsType}\n lazyLoad={props.lazyLoad}\n activatedKeyList={activatedKeyList.current}\n />\n </If>\n </div>,\n );\n};\nTabs.Pane = TabPane;\n\nTabs.defaultProps = {\n lazyLoad: false,\n position: 'bottom',\n tabsType: 'fixed',\n leftRightMask: true,\n};\n","import { isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { flatbizDate, isUndefinedOrNull, noop } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { Button } from '../button';\nimport { IphoneBottomAdaptive } from '../iphone-bottom-adaptive';\nimport { ModalDrawer, ModalDrawerProps } from '../modal-drawer';\nimport { PickerColumnItem } from '../picker/types';\nimport { Tabs } from '../tabs';\nimport { DateView, DateViewProps } from './date-view';\nimport './styles/date-range-picker.less';\n\nexport type DateRangePickerChangeParam = {\n label: string;\n value: Array<PickerColumnItem<string> | null>;\n};\n\nexport interface DateRangePickerProps {\n title?: string | JSX.Element;\n closeIcon?: boolean;\n visible?: boolean;\n value?: [string | PickerColumnItem<string> | null, string | PickerColumnItem<string> | null];\n onChange?: (value?: DateRangePickerChangeParam) => void;\n modalProps?: Omit<ModalDrawerProps, 'visible' | 'className' | 'title' | 'closeIcon'>;\n onClose?: () => void;\n // 开始时间、结束时间选择时,是否联动\n isUnite?: boolean;\n dateViewProps: { minDate: string; maxDate: string };\n className?: string;\n leftOperateBtn?: {\n btnName: string;\n onClick?: () => void;\n };\n header?: JSX.Element;\n startDateIsRequired?: boolean;\n}\n\nexport type DateRangePickerRefApi = {\n onChangeTab: (tab: 'left' | 'right') => void;\n};\n\n/**\n * 选择日期区间\n * ```\n * 1. value可设置开始时间和结束时间,['2022-01-01', '2022-02-02']\n *\n * 2. 如果minDate、maxDate数据有异常,则系统为minDate、maxDate重新赋值,赋值规则为value设置的前后两年\n * ```\n */\n\nexport const DateRangePicker = forwardRef<DateRangePickerRefApi, DateRangePickerProps>((props, ref) => {\n const currentStartDateRef = useRef('');\n const currentEndDateRef = useRef('');\n const minDateRef = useRef('');\n const maxDateRef = useRef('');\n\n const [activeKey, setActiveIndex] = useState('1');\n // 操作切换的时间\n const [startDate, setStartDate] = useState('');\n const [endDate, setEndDate] = useState('');\n // 已选择显示时间\n const [initiativeStartDate, setInitiativeStartDate] = useState('');\n const [initiativeEndDate, setInitiativeEndDate] = useState('');\n\n const value = useMemo(() => {\n const v = props.value || [];\n return v.map((temp) => {\n temp = isUndefinedOrNull(temp)\n ? null\n : isString(temp)\n ? temp\n : (temp as PickerColumnItem<string>).value;\n return temp as string | null;\n }) as [string | null, string | null];\n }, [props.value]);\n\n hooks.useDeepCompareEffect(() => {\n let defaultStartDate = value?.[0];\n let defaultEndDate = value?.[1];\n let currentStartDate = defaultStartDate;\n let currentEndDate = defaultEndDate;\n let { minDate, maxDate } = props.dateViewProps;\n if (!currentStartDate || !flatbizDate.isDate(currentStartDate)) {\n defaultStartDate = null;\n currentStartDate = flatbizDate.format(new Date(), 'YYYY-MM-DD');\n }\n if (!currentEndDate || !flatbizDate.isDate(currentEndDate)) {\n defaultEndDate = null;\n currentEndDate = flatbizDate.format(new Date(), 'YYYY-MM-DD');\n }\n if (flatbizDate.gt(currentStartDate, currentEndDate)) {\n const temp = currentStartDate;\n currentStartDate = currentEndDate;\n currentEndDate = temp;\n }\n currentStartDate = flatbizDate.format(currentStartDate, 'YYYY-MM-DD');\n currentEndDate = flatbizDate.format(currentEndDate, 'YYYY-MM-DD');\n // 如果minDate、maxDate数据有异常,则系统为minDate、maxDate重新赋值,赋值规则为currentDate的前后两年\n if (!flatbizDate.isDate(minDate)) {\n minDate = flatbizDate.format(flatbizDate.update(currentStartDate, 'y', 2), 'YYYY-MM-DD');\n } else {\n minDate = flatbizDate.format(minDate, 'YYYY-MM-DD');\n }\n if (!flatbizDate.isDate(maxDate)) {\n maxDate = flatbizDate.format(flatbizDate.update(currentStartDate, 'y', -2), 'YYYY-MM-DD');\n } else {\n maxDate = flatbizDate.format(maxDate, 'YYYY-MM-DD');\n }\n if (flatbizDate.gt(currentEndDate, maxDate)) {\n console.warn(`当前指定时间【${currentEndDate}】大于最大设置时间【${maxDate}】`);\n currentEndDate = maxDate;\n }\n if (flatbizDate.gt(minDate, currentStartDate)) {\n console.warn(`当前指定时间【${currentStartDate}】小于最小设置时间【${minDate}】`);\n currentStartDate = minDate;\n }\n\n currentStartDateRef.current = currentStartDate;\n currentEndDateRef.current = currentEndDate;\n\n minDateRef.current = minDate;\n maxDateRef.current = maxDate;\n\n setStartDate(currentStartDateRef.current);\n setEndDate(currentEndDateRef.current);\n if (props.startDateIsRequired) {\n setInitiativeStartDate(currentStartDateRef.current);\n } else {\n if (defaultStartDate) {\n setInitiativeStartDate(flatbizDate.format(defaultStartDate, 'YYYY-MM-DD'));\n } else {\n setInitiativeStartDate('');\n }\n }\n if (defaultEndDate) {\n setInitiativeEndDate(flatbizDate.format(defaultEndDate, 'YYYY-MM-DD'));\n } else {\n setInitiativeEndDate('');\n }\n }, [props.value, props.dateViewProps]);\n\n useImperativeHandle(ref, () => {\n return {\n onChangeTab: (param) => {\n if (param === 'left') {\n onTabChange('1');\n } else {\n onTabChange('2');\n }\n },\n };\n });\n\n const onTabChange = hooks.useCallbackRef((key: string) => {\n setActiveIndex(key);\n if (key === '2' && !initiativeEndDate) {\n setInitiativeEndDate(endDate);\n } else if (key === '1' && !initiativeStartDate) {\n setInitiativeStartDate(startDate);\n }\n });\n\n const onStartDateChange = hooks.useCallbackRef((startDateItem: PickerColumnItem) => {\n const startDate = startDateItem.value as string;\n setStartDate(startDate);\n setInitiativeStartDate(startDate);\n if (props.isUnite) {\n if (flatbizDate.gt(startDate, endDate)) {\n setEndDate(startDate);\n setInitiativeEndDate(startDate);\n }\n }\n });\n const onEndDateChange = hooks.useCallbackRef((endDateItem: PickerColumnItem) => {\n const endDate = endDateItem.value as string;\n setEndDate(endDate);\n setInitiativeEndDate(endDate);\n });\n\n const onLeftOperateBtn = hooks.useCallbackRef(() => {\n if (props.leftOperateBtn?.onClick) {\n props.leftOperateBtn.onClick();\n return;\n }\n setStartDate(currentStartDateRef.current);\n setEndDate(currentEndDateRef.current);\n setInitiativeStartDate('');\n setInitiativeEndDate('');\n });\n\n const onConfirm = hooks.useCallbackRef(() => {\n let selectedStartDate = initiativeStartDate;\n let selectedEndDate = initiativeEndDate;\n if (initiativeStartDate && initiativeEndDate) {\n if (flatbizDate.gt(initiativeStartDate, initiativeEndDate)) {\n setStartDate(initiativeEndDate);\n setEndDate(initiativeStartDate);\n\n setInitiativeStartDate(initiativeEndDate);\n setInitiativeEndDate(initiativeStartDate);\n\n selectedStartDate = initiativeEndDate;\n selectedEndDate = initiativeStartDate;\n }\n }\n if (selectedStartDate && selectedEndDate) {\n props.onChange?.({\n label: `${selectedStartDate}~${selectedEndDate}`,\n value: [\n { label: selectedStartDate, value: selectedStartDate },\n { label: selectedEndDate, value: selectedEndDate },\n ],\n });\n } else if (selectedStartDate) {\n props.onChange?.({\n label: selectedStartDate,\n value: [{ label: selectedStartDate, value: selectedStartDate }],\n });\n } else if (selectedEndDate) {\n props.onChange?.({\n label: selectedEndDate,\n value: [null, { label: selectedEndDate, value: selectedEndDate }],\n });\n } else {\n props.onChange?.(undefined);\n }\n });\n\n const startDateProps: DateViewProps = {\n minDate: minDateRef.current,\n maxDate: maxDateRef.current,\n onChange: onStartDateChange,\n defaultDate: currentStartDateRef.current,\n value: startDate,\n };\n\n const endDateProps: DateViewProps = {\n minDate: props.isUnite ? startDate : minDateRef.current,\n maxDate: maxDateRef.current,\n onChange: onEndDateChange,\n defaultDate: currentEndDateRef.current,\n value: endDate,\n };\n\n if (\n !currentStartDateRef.current ||\n !currentEndDateRef.current ||\n !minDateRef.current ||\n !maxDateRef.current\n ) {\n return null;\n }\n\n return (\n <ModalDrawer\n closeIcon={props.closeIcon}\n onClose={props.onClose}\n {...props.modalProps}\n visible={props.visible || false}\n className={classNames('date-range-picker', props.className)}\n title={props.title}\n >\n {props.header}\n <div className=\"date-range-content\">\n <div className={classNames('show-range-date', `show-range-${activeKey}`)}>\n <div onClick={onTabChange.bind(null, '1')}>{initiativeStartDate || '--'}</div>\n <div>至</div>\n <div onClick={onTabChange.bind(null, '2')}>{initiativeEndDate || '--'}</div>\n </div>\n <div className=\"date-picker-tabs\">\n <Tabs onChange={noop} activeKey={activeKey} height={500} hideTabsHeader={true} tabsType=\"fixed\">\n <Tabs.Pane title=\"\" key=\"1\">\n <DateView {...startDateProps} />\n </Tabs.Pane>\n <Tabs.Pane title=\"\" key=\"2\">\n <DateView {...endDateProps} />\n </Tabs.Pane>\n </Tabs>\n </div>\n <div className=\"date-range-operate\">\n <Button onClick={onLeftOperateBtn} fill=\"outline\">\n {props.leftOperateBtn?.btnName || '清空'}\n </Button>\n <Button type=\"primary\" onClick={onConfirm}>\n 确定\n </Button>\n </div>\n <IphoneBottomAdaptive />\n </div>\n </ModalDrawer>\n );\n});\n\nDateRangePicker.defaultProps = {\n closeIcon: true,\n};\n\nDateRangePicker['domTypeName'] = 'DateRangePicker';\n","export function attachPropertiesToComponent<C, P extends Record<string, unknown>>(\n component: C,\n properties: P,\n): C & P {\n const ret = component as Record<string, unknown>;\n for (const key in properties) {\n if (properties.hasOwnProperty(key)) {\n ret[key] = properties[key];\n }\n }\n return ret as C & P;\n}\n","import { createContext, RefObject } from 'react';\nimport { FormMethodsInner } from './helps/form-store';\nimport { FormProps } from './types';\nexport type FormContextApi = {\n form: FormMethodsInner;\n onValuesChange?: FormProps['onValuesChange'];\n formRef: RefObject<HTMLDivElement>;\n scrollIntoView?: boolean;\n showErrorMessage?: boolean;\n};\nexport const FormContext = createContext<FormContextApi>({} as FormContextApi);\n","import { isArray, isNumber, isObject, isPlainObject, isString } from '@dimjs/lang';\nimport { isUndefinedOrNull, TPlainObject } from '@flatbiz/utils';\n\nexport const omit = (target: Record<string, any>, keys: string[]) => {\n const newTarget = {} as Record<string, any>;\n Object.keys(target).map((key) => {\n if (!keys.includes(key)) {\n newTarget[key] = target[key];\n }\n });\n return newTarget;\n};\n\nexport const getFormModalPickerValue = <T extends string | number>(value: any) => {\n if (isUndefinedOrNull(value)) return undefined;\n if (isString(value) || isNumber(value)) {\n return value as T;\n }\n if (isArray(value)) {\n return value.map((temp) => {\n if (isPlainObject(temp)) {\n return temp.value as T;\n }\n return temp as T;\n });\n }\n const pickerValue = value.value;\n if (isUndefinedOrNull(pickerValue)) return undefined;\n if (isArray(pickerValue)) {\n return pickerValue.map((temp) => {\n if (isPlainObject(temp)) {\n return temp.value as T;\n }\n return temp as T;\n });\n }\n if (isPlainObject(pickerValue)) {\n return (pickerValue.value || pickerValue) as T;\n }\n return pickerValue as T;\n};\n\nexport const getFormModalPickerLabel = (value: any) => {\n if (isUndefinedOrNull(value)) return undefined;\n if (isString(value) || isNumber(value)) {\n return `${value}`;\n }\n if (isArray(value)) {\n return value\n .filter(Boolean)\n .map((temp) => {\n if (isPlainObject(temp)) {\n return `${temp.label || temp.value}`;\n }\n return `${temp}`;\n })\n .join('');\n }\n const pickerValue = value.value;\n if (isUndefinedOrNull(pickerValue)) return undefined;\n if (isArray(pickerValue)) {\n return pickerValue\n .filter(Boolean)\n .map((temp) => {\n if (isPlainObject(temp)) {\n return `${temp.label || temp.value}`;\n }\n return `${temp}`;\n })\n .join('');\n }\n if (isPlainObject(pickerValue)) {\n return `${pickerValue.value}`;\n }\n return `${pickerValue}`;\n};\n\nexport const getFormModalValue = (value: any) => {\n if (isUndefinedOrNull(value)) return undefined;\n if (isPlainObject(value)) {\n return value.value as unknown;\n }\n return value as unknown;\n};\n\nexport const toLabelValue = (value: TPlainObject | string | number) => {\n if (isUndefinedOrNull(value)) return undefined;\n if (isObject(value)) {\n return { label: (value['label'] || value['value']) as string, value: value['value'] as string | number };\n }\n return { label: `${value}`, value: value as string | number };\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { stringFormat, trim } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ChangeEvent, useContext, useRef } from 'react';\nimport { useEffectCustom } from '../../../hooks';\nimport { FormContext } from '../../context';\nimport { omit } from '../../helps/utils';\nimport './style.less';\nimport { InputProps, InputPropsInner } from './type';\n\n/**\n * input组件的 value、defaultValue 属性,不提供给Form外部使用\n * 如果需要设置value和defaultValue属性,请使用form方法设置\n * @param props\n * @returns\n */\nexport const Input = (props: InputProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const newProps = props as unknown as InputPropsInner;\n const { form } = useContext(FormContext);\n const fieldValue = form.getFieldValue(newProps.name);\n const cpLockRef = useRef(false);\n\n const onInputChange = hooks.useCallbackRef((event: ChangeEvent) => {\n if (!cpLockRef.current) {\n const value = event.target['value'] as string;\n if (newProps.format) {\n newProps.onChange(trim(value), event);\n } else {\n newProps.onChange(value, event);\n }\n }\n });\n\n useEffectCustom(() => {\n if (inputRef.current) {\n const value = String(fieldValue || '');\n if (typeof newProps.format === 'function') {\n inputRef.current.value = newProps.format(value);\n } else if (isArray(newProps.format)) {\n inputRef.current.value = stringFormat(value, newProps.format).join(' ');\n } else {\n inputRef.current.value = value;\n }\n }\n }, [fieldValue]);\n\n const compositionstartHandle = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n\n const compositionendHandle = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onInputChange(event as ChangeEvent);\n });\n\n useEffectCustom(() => {\n if (inputRef.current) {\n inputRef.current.addEventListener('compositionstart', compositionstartHandle);\n inputRef.current.addEventListener('compositionend', compositionendHandle);\n }\n }, []);\n\n const convertProps = omit(newProps, ['value', 'suffix', 'format']);\n\n return (\n <input\n {...convertProps}\n className={classNames('v-input', newProps.className)}\n onChange={onInputChange}\n ref={inputRef}\n />\n );\n};\n\nInput.domTypeName = 'Input';\n","import { isArray, isPlainObject, isString } from '@dimjs/lang';\nimport { isNumber, isUndefinedOrNull, LabelValueItem, toArray, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { dequal } from 'dequal';\nimport {\n cloneElement,\n forwardRef,\n Fragment,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ListItem } from '../../../list/list-item';\nimport { Progress } from '../../../progress';\nimport { getFormModalPickerValue, toLabelValue } from '../../helps/utils';\nimport { FormModalColumnItem, FormModalRefApi } from '../../types';\nimport './style.less';\n\nexport type FormModalProps = {\n className?: string;\n placeholder?: string;\n adapter?: (value?: FormModalColumnItem) => string | JSX.Element;\n children: ReactElement;\n loading?: boolean;\n /**\n * 是否自定义modal\n */\n isCustom?: boolean;\n};\n\ntype FormModalPropsInner = FormModalProps & {\n value?: FormModalColumnItem;\n onChange: (value?: FormModalColumnItem) => void;\n disabled?: boolean;\n suffix?: JSX.Element | string;\n};\n\n/**\n * 自定义FormItem,用于弹框结构\n * ```\n * 弹窗类结构包括两类\n * picker类\n * 1. 包括:DatePicker、DateRangePicker、ModalUpPicker、TabSelect、ModalSelector等选择器弹窗组件\n * a. 此类组件在取值时,使用form.getFormModalPickerValue()可直接获取value值\n * b. 赋值结构必须时 value\n * 2. 自定义弹框(设置isCustom=true)\n * a. 自定义弹框响应数据中,不要存在label、value的定义字段\n * b. 回填结构必须是 { label、value }结构,其中label用于页面Form.Item中展示\n * ```\n */\nexport const FormModal = forwardRef<FormModalRefApi, FormModalProps>((props, ref) => {\n const newProps = props as FormModalPropsInner;\n const [visible, visibleChange] = useState(false);\n const selectedDataRef = useRef<LabelValueItem[] | LabelValueItem>([]);\n const domTypeName = newProps?.children?.type['domTypeName'];\n\n /**\n * props.value格式\n * 1. value\n * 2. { label、value }\n * 3. { label、value: [value1, value2] }\n * 4. { label、value: [{ label、value }, { label、value }] }\n * 5. [ value1, value2 ]\n * 6. [ { label、value }, { label、value } ]\n */\n const labelValue = useMemo(() => {\n if (props.isCustom) {\n return newProps.value;\n }\n if (\n newProps.value === undefined ||\n newProps.value === null ||\n (isArray(newProps.value) && newProps.value.length == 0) ||\n (isPlainObject(newProps.value) && isUndefinedOrNull(newProps.value['value']))\n ) {\n return undefined;\n }\n\n const baseValue = getFormModalPickerValue(newProps.value);\n\n if (isUndefinedOrNull(baseValue)) {\n return undefined;\n }\n\n if (domTypeName === 'DatePicker') {\n return { label: `${baseValue}`, value: baseValue };\n }\n\n if (domTypeName === 'DateRangePicker' || domTypeName === 'CalendarDrawer') {\n const dateRangeList = toArray<string>(baseValue);\n const dateRangeValue = [{ label: dateRangeList[0], value: dateRangeList[0] }];\n if (dateRangeList.length > 1) {\n dateRangeValue.push({ label: dateRangeList[1], value: dateRangeList[1] });\n }\n return { label: dateRangeList.join('~'), value: dateRangeValue };\n }\n\n if (isPlainObject(newProps.value) && newProps.value.value && newProps.value.label) {\n return newProps.value as LabelValueItem;\n }\n\n const selectedDataList = toArray<LabelValueItem>(selectedDataRef.current);\n if (selectedDataList && selectedDataList.length > 0) {\n // 回填数据操作下\n const baseValueList = toArray<string>(baseValue);\n const isDequal = dequal(\n baseValueList,\n selectedDataList.map((item) => item.value),\n );\n if (isDequal) {\n if (isArray(selectedDataRef.current)) {\n return {\n label: selectedDataList.map((item) => item.label).join(''),\n value: selectedDataList,\n };\n } else {\n return selectedDataRef.current;\n }\n } else {\n return {\n label: (isPlainObject(newProps.value) && newProps.value?.label) || baseValueList.join(''),\n value: baseValue,\n };\n }\n }\n\n if (isString(newProps.value) || isNumber(newProps.value as unknown as number)) {\n return { label: newProps.value, value: newProps.value };\n }\n if (isArray(newProps.value)) {\n /**\n * ['2', '3'] => { label: '23', value: [{ label: '2', value: '2' },{ label: '3', value: '3' }] }\n */\n const labelValueGroup = newProps.value\n .map((item) => {\n return toLabelValue(item as TPlainObject);\n })\n .filter(Boolean) as LabelValueItem[];\n return { label: labelValueGroup.map((item) => item.value).join(''), value: labelValueGroup };\n }\n\n return { label: newProps.value['value'], value: newProps.value['value'] };\n }, [domTypeName, newProps.value, props.isCustom]);\n\n const onClose = hooks.useCallbackRef(() => {\n visibleChange(false);\n });\n\n const onChange = hooks.useCallbackRef((pickItem: FormModalColumnItem) => {\n newProps.onChange?.(pickItem);\n onClose();\n });\n\n const onClick = hooks.useCallbackRef(() => {\n if (!newProps.disabled) {\n visibleChange(true);\n }\n });\n\n useImperativeHandle(ref, () => {\n return { onClose };\n });\n\n const onValueChange = hooks.useCallbackRef((selectedData: LabelValueItem[] | LabelValueItem) => {\n if (props.isCustom) return;\n selectedDataRef.current = selectedData;\n\n if (isUndefinedOrNull(selectedData)) return;\n /**\n * 回填数据完善 label、value\n * 1. value必须有值\n * 2. value不是完整数据(同时存在label、value为完整数据)\n */\n if (\n isUndefinedOrNull(newProps.value) ||\n (isPlainObject(newProps.value) &&\n !isUndefinedOrNull(newProps.value?.value) &&\n !isUndefinedOrNull(newProps.value?.label))\n ) {\n return;\n } else {\n if (isArray(selectedData) && selectedData.length > 0) {\n newProps.onChange({ label: selectedData.map((item) => item.label).join(''), value: selectedData });\n } else if (isPlainObject(selectedData)) {\n newProps.onChange(selectedData as FormModalColumnItem);\n }\n }\n });\n\n return (\n <Fragment>\n <ListItem\n arrow={!props.loading ? true : undefined}\n prefix={!labelValue ? newProps.placeholder : ''}\n onClick={onClick}\n className={newProps.className}\n extra={newProps.suffix}\n icon={<Progress value={0.1} gap={3} size={30} isRotate={true} />}\n >\n {newProps.adapter ? newProps.adapter(labelValue) : labelValue?.label}\n </ListItem>\n <Fragment>\n {cloneElement(newProps.children as JSX.Element, {\n visible,\n value: getFormModalPickerValue(labelValue?.value),\n onChange: onChange,\n onClose: onClose,\n onValueChange,\n })}\n </Fragment>\n </Fragment>\n );\n});\n\nFormModal['domTypeName'] = 'Modal';\n","import { hooks } from '@wove/react';\nimport { cloneElement, Fragment, ReactElement, useState } from 'react';\nimport { ListItem, ListItemProps } from '../../../list/list-item';\nimport { FormTextColumnItem } from '../../types';\nimport './style.less';\n\nexport type FormTextProps = {\n className?: string;\n placeholder?: string;\n arrow?: ListItemProps['arrow'];\n children?: ReactElement;\n};\n\ntype FormTextPropsInner = {\n value?: FormTextColumnItem;\n onChange: (value?: FormTextColumnItem) => void;\n disabled?: boolean;\n readOnly?: boolean;\n suffix?: JSX.Element | string;\n} & FormTextProps;\n\n/**\n * 自定义FormItem,可用于跳转页面取值交互\n * ```\n * 比普通自定义FormItem,多了一个clickTigger属性,用于触发click事件通知\n * ```\n */\nexport const FormText = (props: FormTextProps) => {\n const newProps = props as FormTextPropsInner;\n const [clickTigger, setClickTigger] = useState<number>();\n\n const onClick = hooks.useCallbackRef(() => {\n if (newProps.disabled || newProps.readOnly) return;\n setClickTigger(Date.now());\n });\n\n return (\n <ListItem\n arrow={newProps.arrow}\n prefix={!newProps.value ? props.placeholder : ''}\n className={props.className}\n onClick={onClick}\n extra={newProps.suffix}\n >\n <Fragment>\n {cloneElement(props.children as JSX.Element, {\n value: newProps.value,\n onChange: newProps.onChange,\n clickTigger,\n })}\n </Fragment>\n </ListItem>\n );\n};\n\nFormText['domTypeName'] = 'Text';\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { stringFormat, trim } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ChangeEvent, TextareaHTMLAttributes, useContext, useRef } from 'react';\nimport { useEffectCustom } from '../../../hooks';\nimport { FormContext } from '../../context';\nimport { omit } from '../../helps/utils';\nimport './style.less';\ntype TextareaProps = Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'value' | 'defaultValue' | 'onChange'\n> & {\n onChange?: (value: string, event: ChangeEvent) => void;\n showCount?: boolean;\n};\n\ntype TextareaPropsInner = TextareaHTMLAttributes<HTMLTextAreaElement> & {\n value: string;\n onChange: (value: string) => void;\n name: string;\n format?: number[] | ((data?: string) => string);\n};\n\n/**\n * textarea组件的 value、defaultValue 属性,不提供给Form外部使用\n * 如果需要设置value和defaultValue属性,请使用form方法设置\n * @param props\n * @returns\n */\nexport const Textarea = (props: TextareaProps) => {\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n const newProps = props as unknown as TextareaPropsInner;\n const { form } = useContext(FormContext);\n const fieldValue = form.getFieldValue(newProps.name);\n const cpLockRef = useRef(false);\n\n const onInputChange = hooks.useCallbackRef((event) => {\n if (!cpLockRef.current) {\n let value = event.target['value'] as string;\n if (newProps.format) {\n value = trim(value);\n }\n newProps.onChange(value);\n }\n });\n\n useEffectCustom(() => {\n if (inputRef.current) {\n const value = String(fieldValue || '');\n if (typeof newProps.format === 'function') {\n inputRef.current.value = newProps.format(value);\n } else if (isArray(newProps.format)) {\n inputRef.current.value = stringFormat(value, newProps.format).join(' ');\n } else {\n inputRef.current.value = value;\n }\n }\n }, [fieldValue]);\n\n const compositionstartHandle = hooks.useCallbackRef(() => {\n cpLockRef.current = true;\n });\n const compositionendHandle = hooks.useCallbackRef((event) => {\n cpLockRef.current = false;\n onInputChange(event as ChangeEvent);\n });\n\n useEffectCustom(() => {\n if (inputRef.current) {\n inputRef.current.addEventListener('compositionstart', compositionstartHandle);\n inputRef.current.addEventListener('compositionend', compositionendHandle);\n }\n }, []);\n\n const convertProps = omit(newProps, ['value', 'suffix', 'showCount', 'format']);\n const showCount = props.showCount && props.maxLength && props.maxLength > 0;\n\n return (\n <div className=\"v-textarea-wrapper\">\n <textarea\n {...convertProps}\n className={classNames('v-textarea', newProps.className)}\n onChange={onInputChange}\n ref={inputRef}\n />\n {showCount ? (\n <div className=\"v-textarea-min-max\">\n {newProps.value?.length || 0}/{props.maxLength}\n </div>\n ) : null}\n </div>\n );\n};\n\nTextarea.domTypeName = 'Textarea';\n","import { arrayRandomSort } from '@flatbiz/utils';\nimport { KeyboardKeyItem } from './types';\n\nexport const getKeyboardKeyList = (param: {\n randomOrder?: boolean;\n customKey?: string | null;\n showOkButton?: boolean;\n}) => {\n let numberKeys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] as KeyboardKeyItem[];\n if (param.randomOrder) {\n numberKeys = arrayRandomSort(numberKeys);\n }\n const customKey = param.customKey || '';\n const number9Keys =\n typeof numberKeys[9] === 'string' ? { key: numberKeys[9], name: numberKeys[9] } : numberKeys[9];\n if (param.showOkButton) {\n return numberKeys\n .slice(0, 3)\n .concat({ key: 'back', name: '' })\n .concat(numberKeys.slice(3, 6))\n .concat({ key: 'ok', name: '确定', ySpan: 3 })\n .concat(numberKeys.slice(6, 9))\n .concat({ key: number9Keys.key, name: number9Keys.name, xSpan: 2 })\n .concat({ key: customKey ? 'custom' : 'empty-custom', name: customKey });\n }\n return numberKeys\n .slice(0, 9)\n .concat({ key: customKey ? 'custom' : 'empty-custom', name: customKey })\n .concat({ key: number9Keys.key, name: number9Keys.name })\n .concat({ key: 'back', name: '' });\n};\n","// import { isUndefinedOrNull } from '@flatbiz/utils';\nimport { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, FC, memo, useMemo, useRef } from 'react';\nimport { Grid, GridItem } from '../grid';\nimport { NativeProps } from '../utils/native-props';\nimport './styles/view.less';\nimport { KeyboardKeyItem } from './types';\nimport { getKeyboardKeyList } from './utils';\n\nexport type KeyboardProps = {\n type?: 'pure_number' | 'number' | 'idcard';\n customKey?: '-' | '.' | 'X' | null;\n customKeyboardKeyList?: KeyboardKeyItem[];\n showOkButton?: boolean;\n randomOrder?: boolean;\n gridColumns?: number;\n onConfirm?: () => void;\n onBackSpace?: () => void;\n onInput: (key: string) => void;\n} & NativeProps;\n\n/**\n * 自定义键盘【可自定义键值】\n * @param props\n * @returns\n *```\n * 1. customKey:默认键盘自定义键格\n * 2. 未设置customKeyboardKeyList,gridColumns属性无效\n * 3. 当设置customKeyboardKeyList后,customKey、showOkButton、randomOrder配置将失效\n * 4. 当设置type属性后,customKey失效\n *```\n */\nconst KeyboardInner: FC<KeyboardProps> = (props) => {\n const timeoutRef = useRef(-1);\n const intervalRef = useRef(-1);\n const customKey = useMemo(() => {\n if (props.type && props.type === 'pure_number') {\n return null;\n }\n if (props.type && props.type === 'idcard') {\n return 'X';\n }\n if (props.type && props.type === 'number') {\n return '.';\n }\n return props.customKey;\n }, [props.customKey, props.type]);\n\n const onBackSpace = hooks.useCallbackRef(() => {\n props.onBackSpace?.();\n });\n\n const onMouseUp = hooks.useCallbackRef((key: string) => {\n // event.preventDefault();\n if (!key || key === 'empty-custom') return;\n if (key === 'back') {\n props.onBackSpace?.();\n return;\n } else if (key === 'ok') {\n props.onConfirm?.();\n return;\n } else if (key === 'custom') {\n props.onInput?.(customKey || '');\n return;\n }\n props.onInput?.(key);\n });\n const onTouchStart = hooks.useCallbackRef((key: string) => {\n // event.preventDefault();\n if (key === 'back') {\n timeoutRef.current = window.setTimeout(() => {\n onBackSpace();\n intervalRef.current = window.setInterval(onBackSpace, 100);\n }, 700);\n }\n });\n const onTouchEnd = hooks.useCallbackRef(() => {\n // event.preventDefault();\n clearTimeout(timeoutRef.current);\n clearInterval(intervalRef.current);\n });\n\n const keyboardKeyList = useMemo(() => {\n if (props.customKeyboardKeyList) {\n return props.customKeyboardKeyList;\n }\n return getKeyboardKeyList({\n showOkButton: props.showOkButton,\n randomOrder: props.randomOrder,\n customKey: customKey,\n });\n }, [customKey, props.randomOrder, props.showOkButton, props.customKeyboardKeyList]);\n\n const columns = props.gridColumns && props.gridColumns > 0 ? props.gridColumns : props.showOkButton ? 4 : 3;\n return (\n <div\n className={classNames('v-keyboard', props.className)}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n style={props.style}\n >\n <Grid columns={columns} className=\"v-keyboard-grid\" gap={0}>\n {keyboardKeyList.map((item, index) => {\n let keyInfo = {} as { key: string; name: string };\n const style = {} as CSSProperties;\n let className = '';\n if (typeof item !== 'string') {\n if (item.xSpan && item.xSpan > 0) {\n style.gridColumn = `span ${item.xSpan}`;\n }\n if (item.ySpan && item.ySpan > 0) {\n style.gridRow = `span ${item.ySpan}`;\n }\n className = `v-keyboard-grid-item-${item.key}`;\n keyInfo = { key: item.key, name: item.name };\n } else {\n keyInfo = { key: item, name: item };\n // className = 'v-keyboard-grid-item-key';\n }\n return (\n <GridItem\n key={index}\n style={style}\n className={className}\n onMouseUp={onMouseUp.bind(null, keyInfo.key)}\n onTouchStart={onTouchStart.bind(null, keyInfo.key)}\n onTouchEnd={onTouchEnd}\n >\n {keyInfo.name}\n </GridItem>\n );\n })}\n </Grid>\n </div>\n );\n};\n\nKeyboardInner.defaultProps = {\n showOkButton: true,\n customKey: '.',\n randomOrder: false,\n};\n\nexport const Keyboard = memo(KeyboardInner, () => {\n return true;\n});\n","import { classNames } from '@dimjs/utils';\nimport { FC, memo } from 'react';\nimport { ArrowIcon } from '../icon';\nimport { IphoneBottomAdaptive } from '../iphone-bottom-adaptive';\nimport { ModalDrawer, ModalDrawerProps } from '../modal-drawer';\nimport { Space } from '../space';\nimport { NativeProps } from '../utils/native-props';\nimport './styles/modal.less';\nimport { Keyboard, KeyboardProps } from './view';\n\nexport type KeyboardModalProps = {\n title?: string | JSX.Element;\n visible?: boolean;\n keyboardProps: KeyboardProps;\n modalProps?: Omit<ModalDrawerProps, 'visible' | 'className' | 'title' | 'closeIcon' | 'onClose'>;\n closeIcon?: boolean;\n onClose: () => void;\n} & NativeProps;\n\nexport const KeyboardModalInner: FC<KeyboardModalProps> = (props) => {\n const renderHeader = () => {\n if (!props.title && !props.closeIcon) {\n return null;\n }\n if (!props.closeIcon) {\n return <div className=\"v-keyboard-modal-title\">{props.title}</div>;\n }\n return (\n <Space\n justifyContent={props.title ? 'space-between' : 'center'}\n className=\"v-keyboard-modal-head\"\n onClick={props.onClose}\n >\n <span>{props.title}</span>\n {props.closeIcon && <ArrowIcon direction=\"bottom\" size={25} />}\n </Space>\n );\n };\n\n return (\n <ModalDrawer\n mask={false}\n {...props.modalProps}\n visible={props.visible}\n className={classNames('v-keyboard-modal', props.className)}\n onClose={props.onClose}\n forceRender={true}\n duration={200}\n closeIcon={false}\n >\n {renderHeader()}\n <Keyboard {...props.keyboardProps} />\n <IphoneBottomAdaptive />\n </ModalDrawer>\n );\n};\n\nKeyboardModalInner.defaultProps = {\n closeIcon: true,\n};\n\nexport const KeyboardModal = memo(KeyboardModalInner, (prevProps, nextProps) => {\n if (prevProps.visible !== nextProps.visible || prevProps.title !== nextProps.title) {\n return false;\n }\n return true;\n});\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { stringFormat } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, useRef, useState } from 'react';\nimport { useEffectCustom } from '../../../hooks/use-effect-custom';\nimport { KeyboardModal, KeyboardProps } from '../../../keyboard';\nimport { ModalDrawerProps } from '../../../modal-drawer';\nimport { getScrollParent } from '../../../utils/get-scroll-parent';\nimport { NativeProps } from '../../../utils/native-props';\nimport { getScrollPosition } from '../../../utils/scroll-position';\nimport './style.less';\n\nexport type VirtualInputProps = {\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n onFocus?: () => void;\n onBlur?: () => void;\n onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n keyboardProps?: Omit<KeyboardProps, 'onInput' | 'onBackSpace' | 'onConfirm'>;\n modalProps?: Omit<ModalDrawerProps, 'visible' | 'className' | 'onClose' | 'bodyRef'>;\n maxLength?: number;\n autoConfirm?: boolean;\n value?: string;\n onChange?: (value: string, key?: string) => void;\n} & NativeProps;\n\ntype VirtualInputPropsInner = VirtualInputProps & {\n name: string;\n format?: number[] | ((data?: string) => string);\n};\n\n/**\n * 文本框+数字键盘\n * 1. 内置键盘包括:纯数字键盘、金额键盘、身份证键盘\n * 2. 可自定义键盘键值,例如自定义车牌省份键盘\n * 3. 结合form使用最佳,结合form使用后value、onChange由form代理,单独设置无效\n *\n *\n * @param props\n * @returns\n */\nexport const VirtualInput = (props: VirtualInputProps) => {\n const newProps = props as VirtualInputPropsInner;\n const [visible, setVisible] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const keysRef = useRef<string[]>([]);\n const windowSize = hooks.useWindowSize();\n const scrollRef = useRef<Element | Window>();\n const scrollPaddingBottomRef = useRef<string>('');\n\n useEffectCustom(() => {\n keysRef.current = (newProps.value || '').split('');\n }, [newProps.value]);\n\n const onFocus = hooks.useCallbackRef(() => {\n setVisible(true);\n newProps.onFocus?.();\n });\n\n const onBlur = hooks.useCallbackRef(() => {\n setVisible(false);\n changeScrollStyle('close');\n newProps.onBlur?.();\n });\n\n const onClose = hooks.useCallbackRef(() => {\n rootRef.current?.blur();\n });\n\n const onInput = hooks.useCallbackRef((key: string) => {\n if (props.autoConfirm) {\n newProps.onChange?.(key);\n onClose();\n return;\n }\n const maxLength = props.maxLength;\n if (maxLength && maxLength > 0) {\n const currentValue = keysRef.current.join('');\n let formatValue = currentValue;\n if (typeof newProps.format === 'function') {\n formatValue = newProps.format(currentValue);\n } else if (isArray(newProps.format)) {\n formatValue = stringFormat(currentValue, newProps.format).join(' ');\n }\n\n if (formatValue.length >= maxLength) return;\n }\n keysRef.current.push(key);\n newProps.onChange?.(keysRef.current.join(''), key);\n });\n\n const onBackSpace = hooks.useCallbackRef(() => {\n const target = keysRef.current.pop();\n if (target) {\n newProps.onChange?.(keysRef.current.join(''));\n }\n });\n\n const onConfirm = hooks.useCallbackRef(() => {\n onClose();\n });\n\n const bodyRef = useRef<HTMLDivElement>();\n\n const bodyRefHandle = hooks.useCallbackRef((node) => {\n bodyRef.current = node;\n });\n\n const changeScrollStyle = (type: 'open' | 'close', style?: CSSProperties) => {\n if (type === 'open' && style) {\n if (scrollRef.current === window) {\n document.body.style.paddingBottom = style.paddingBottom as string;\n } else {\n (scrollRef.current as HTMLElement).style.paddingBottom = style.paddingBottom as string;\n }\n } else {\n if (scrollRef.current === window) {\n document.body.style.paddingBottom = scrollPaddingBottomRef.current;\n } else {\n (scrollRef.current as HTMLElement).style.paddingBottom = scrollPaddingBottomRef.current;\n }\n }\n };\n\n const onAfterOpen = hooks.useCallbackRef(() => {\n scrollRef.current = getScrollParent(rootRef.current as Element, window) as Element;\n const scrollTarget = scrollRef.current as HTMLElement | Window;\n\n const keyboardHeight = bodyRef.current?.offsetHeight || 0;\n const clientRect = rootRef.current?.getBoundingClientRect();\n const domClientBottom = (windowSize?.height || 0) - (clientRect?.bottom || 0);\n const diff = domClientBottom - keyboardHeight;\n const { top } = getScrollPosition(scrollTarget as Element);\n if (diff < 0) {\n if (scrollTarget === window) {\n scrollPaddingBottomRef.current = document.body.style.paddingBottom;\n } else {\n scrollPaddingBottomRef.current = (scrollTarget as HTMLElement).style.paddingBottom || '';\n }\n changeScrollStyle('open', { paddingBottom: `${keyboardHeight}px` });\n scrollTarget.scrollTo({\n top: top + Math.abs(diff) + (clientRect?.height || 0) + 60,\n behavior: 'smooth',\n });\n }\n props.modalProps?.onAfterOpen?.();\n });\n // const showValue =\n // formatArray.length > 0 ? stringFormat(newProps.value || '', formatArray).join(' ') : newProps.value;\n\n let showValue = newProps.value || '';\n if (typeof newProps.format === 'function') {\n showValue = newProps.format(showValue);\n } else if (isArray(newProps.format)) {\n showValue = stringFormat(showValue, newProps.format).join(' ');\n }\n\n const mainClassName = classNames(\n 'v-virtual-input',\n { 'v-virtual-disabled': newProps.disabled },\n { 'v-virtual-readonly': newProps.readOnly },\n props.className,\n );\n return (\n <div\n ref={rootRef}\n className={mainClassName}\n tabIndex={newProps.disabled || newProps.readOnly ? undefined : 0}\n onClick={newProps.onClick}\n onBlur={onBlur}\n onFocus={onFocus}\n style={props.style}\n >\n {!newProps.value ? (\n <span className=\"v-virtual-input-placeholder\">{newProps.placeholder}</span>\n ) : (\n <span className=\"v-virtual-input-value\">{showValue}</span>\n )}\n {visible && <span className=\"v-virtual-input-beat\"></span>}\n <KeyboardModal\n keyboardProps={{\n ...props.keyboardProps,\n onInput,\n onBackSpace,\n onConfirm,\n }}\n visible={visible}\n onClose={onClose}\n title={props.modalProps?.title}\n closeIcon={props.modalProps?.closeIcon}\n modalProps={{\n ...props.modalProps,\n bodyRef: bodyRefHandle,\n onAfterOpen,\n }}\n />\n </div>\n );\n};\nVirtualInput.domTypeName = 'VirtualInput';\n","export type FormItemClearProps = {\n onClear?: () => void;\n};\n\nexport const FormItemClear = (props: FormItemClearProps) => {\n return (\n <div\n className=\"v-form-item-clear\"\n onClick={props.onClear}\n onMouseDown={(e) => {\n e.preventDefault();\n }}\n />\n );\n};\n","import { Fragment, ReactElement } from 'react';\n\nexport type FormItemLabelProps = {\n label?: string | ReactElement;\n showTips?: boolean;\n onTips?: () => void;\n};\n\nexport const FormItemLabel = (props: FormItemLabelProps) => {\n return (\n <Fragment>\n {props.label && (\n <label>\n {props.label}\n {props.showTips && <span className=\"v-form-item-label-tips\" onClick={props.onTips}></span>}\n </label>\n )}\n </Fragment>\n );\n};\n","import { Fragment } from 'react';\nimport { Space } from '../../space';\nimport { FormErrorItem } from '../types';\n\nexport type ValidateErrorProps = {\n errorList: FormErrorItem[];\n showErrorMessage?: boolean;\n};\n\nexport const ValidateError = (props: ValidateErrorProps) => {\n return (\n <Fragment>\n {props.errorList.length > 0 && props.showErrorMessage && (\n <Space className=\"v-form-item-error-content\" gap={10}>\n <span className=\"v-form-item-error-content-icon\"></span>\n <span>{props.errorList[0]?.message}</span>\n </Space>\n )}\n </Fragment>\n );\n};\n","import { isArray } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject, trim } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { cloneElement, FC, useContext, useMemo, useRef, useState } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { FormItemClear } from './compts/form-item-clear';\nimport { FormItemLabel } from './compts/form-item-label';\nimport { ValidateError } from './compts/validate-error';\nimport { FormContext } from './context';\nimport { FieldItemProps, FieldRequiredRule, FieldValue, FormErrorItem } from './types';\n\n/**\n * 说明\n *```\n * 1. 输入类型:input、textarea、virtualinput\n * 2. 参数format 只对输入类型有效\n * 2. 参数removeSpace 只对输入类型有效,枚举值:false、before-after、all\n * 1). 失去焦点时触发\n * 2). before-after(默认值): 移除前后空格\n * 3). all: 移除所有空格\n * 4). false: 不移除空格\n *```\n */\nexport const FormItem: FC<FieldItemProps> = (props) => {\n const { form, onValuesChange, formRef, scrollIntoView, showErrorMessage } = useContext(FormContext);\n const {\n registerField,\n setFieldsValueInner,\n getFieldValue,\n getValidateErrorList,\n getFieldsValue,\n setFieldNameList,\n dependenciesFormItemValidate,\n } = form;\n\n const formItemRef = useRef<HTMLDivElement>(null);\n const forceUpdate = hooks.useForceUpdate();\n const [errorList, setErrorList] = useState<FormErrorItem[]>([]);\n const format = props.format || [];\n const dependencies = props.dependencies || [];\n\n const suffix = props.suffix;\n const prefix = props.prefix;\n const disabled = props.disabled;\n const readOnly = props.readOnly;\n\n const childrenTypeName = ((props.children.type['domTypeName'] || '') as string).toLocaleLowerCase();\n const isInput = ['input', 'textarea', 'virtualinput'].includes(childrenTypeName);\n const validateTriggerRef = useRef<'onChange' | 'onBlur' | null>(null);\n\n /**\n * 获取formItem顺序,用于验证字段顺序\n */\n const fieldSortHandle = hooks.useCallbackRef(() => {\n const nodes = formRef.current?.querySelectorAll('.v-form-item');\n const names = [] as string[];\n if (nodes) {\n nodes.forEach((item) => {\n names.push(item['dataset'].name as string);\n });\n }\n setFieldNameList(names);\n });\n\n const onScrollIntoView = hooks.useCallbackRef((name: string) => {\n if (scrollIntoView) {\n document.querySelector(`[data-name=${name}]`)?.scrollIntoView();\n props.onScrollIntoView?.();\n }\n });\n\n const clearValidateMessage = hooks.useCallbackRef(() => {\n props.onValidateResponse?.([]);\n setErrorList([]);\n });\n\n const changeClearStatus = hooks.useCallbackRef((status) => {\n if (!formItemRef.current) return;\n const clearNode = formItemRef.current.querySelector('.v-form-item-clear') as HTMLElement;\n if (clearNode) {\n clearNode.style.display = status ? 'block' : 'none';\n }\n });\n\n const formItemValidate = hooks.useCallbackRef((errorList?: FormErrorItem[]) => {\n if (isArray(errorList)) {\n props.onValidateResponse?.(errorList);\n setErrorList(errorList);\n } else {\n const trigger = validateTriggerRef.current;\n const validateTrigger = props.validateTrigger || [];\n if (trigger && !validateTrigger.includes(trigger)) return;\n errorList = getValidateErrorList([props.name]);\n props.onValidateResponse?.(errorList);\n setErrorList(errorList);\n }\n });\n\n /**\n * value 变化后处理\n * @param name\n * @param value\n * @param isControlled\n */\n const formItemValueChangeHandle = (name: string, value: FieldValue) => {\n setFieldsValueInner({ [name]: value });\n onValueChangeCallback();\n };\n\n /**\n * 外部通过form.setFieldsValue()赋值处理逻辑\n */\n const onStoreValueChange = hooks.useCallbackRef(() => {\n validateTriggerRef.current = null;\n onValueChangeCallback();\n });\n\n const onValueChangeCallback = hooks.useCallbackRef(() => {\n const allValues = getFieldsValue();\n const value = allValues[props.name];\n props.onItemValueChange?.(value, allValues);\n onValuesChange?.({ [props.name]: value }, allValues);\n formItemValidate();\n if (dependencies.length > 0) {\n dependencies.forEach((name) => {\n dependenciesFormItemValidate(name);\n });\n }\n forceUpdate();\n });\n\n const onInputClear = hooks.useCallbackRef(() => {\n validateTriggerRef.current = null;\n formItemValueChangeHandle(props.name, undefined);\n changeClearStatus(false);\n props.onClear?.();\n });\n\n /**\n * 输入框获取焦点操作\n */\n const onInputFocus = hooks.useCallbackRef((event) => {\n if (readOnly || disabled) return;\n const value = getFieldValue(props.name);\n changeClearStatus(value ? true : false);\n props.children?.props?.onFocus?.(event);\n });\n\n /**\n * 输入框失去焦点操作\n */\n const onInputBlur = hooks.useCallbackRef((event) => {\n if (readOnly || disabled) return;\n const value = getFieldValue(props.name);\n // 判断是否需要清除空格\n const trimValue = !!props.removeSpace\n ? trim(value as string, props.removeSpace === 'before-after')\n : value;\n if (trimValue !== (value as string)) {\n validateTriggerRef.current = 'onChange';\n formItemValueChangeHandle(props.name, trimValue);\n }\n validateTriggerRef.current = 'onBlur';\n formItemValidate();\n changeClearStatus(false);\n props.children?.props?.onBlur?.(event);\n validateTriggerRef.current = null;\n });\n\n /**\n * onChange 操作\n */\n const formItemChangeOperate = hooks.useCallbackRef((value: FieldValue, event) => {\n validateTriggerRef.current = isInput ? 'onChange' : null;\n const newValue = value === '' || value === null ? undefined : value;\n formItemValueChangeHandle(props.name, newValue);\n props.children?.props?.onChange?.(newValue, event);\n changeClearStatus(!!newValue);\n });\n\n // TODO 待研究 不要删除\n // const getChildrenProps = hooks.useCallbackRef(() => {\n // const controledProps = {\n // onChange: formItemChangeOperate,\n // value: getFieldValue(props.name),\n // key: props.name,\n // name: props.name,\n // readOnly,\n // disabled,\n // } as Record<string, unknown>;\n\n // if (isInput) {\n // controledProps.onFocus = onInputFocus;\n // controledProps.onBlur = onInputBlur;\n // controledProps.format = format;\n // }\n // return controledProps;\n // });\n\n const isRequired = useMemo(() => {\n if (props.rules && props.rules.length > 0) {\n const target = props.rules.find((ruleItem) => (ruleItem as FieldRequiredRule).required === true);\n return target ? true : false;\n }\n return false;\n }, [props.rules]);\n\n useEffectCustom(() => {\n fieldSortHandle();\n console.log(`Form RegisterField【${props.name}】`);\n const cancelRegister = registerField({\n props,\n onStoreValueChange,\n formItemValidate,\n onScrollIntoView,\n clearValidateMessage,\n });\n return () => {\n console.log(`Form DestroyField【${props.name}】 `);\n if (cancelRegister) cancelRegister();\n };\n }, []);\n\n const className = classNames(\n 'v-form-item',\n `v-form-item-${props.layout}`,\n {\n 'v-form-item-value-right': props.valueAlign === 'right',\n 'v-form-item-required': isRequired && props.hideRequiredMark != true,\n 'v-form-item-error': errorList.length > 0,\n 'v-form-item-disabled': disabled,\n },\n props.className,\n );\n\n const childrenProps: TPlainObject = {\n onChange: formItemChangeOperate,\n value: getFieldValue(props.name),\n key: props.name,\n name: props.name,\n readOnly,\n disabled,\n };\n\n if (isInput) {\n childrenProps.onFocus = onInputFocus;\n childrenProps.onBlur = onInputBlur;\n childrenProps.format = format;\n } else {\n childrenProps.suffix = suffix;\n }\n\n if (props.isCustom) {\n return (\n <div\n className={className}\n ref={formItemRef}\n data-name={props.name}\n data-type={childrenTypeName}\n style={props.style}\n >\n {cloneElement(props.children, childrenProps)}\n </div>\n );\n }\n\n return (\n <div\n className={className}\n ref={formItemRef}\n data-name={props.name}\n data-type={childrenTypeName}\n style={props.style}\n >\n <div className=\"v-form-item-content\">\n <FormItemLabel label={props.label} showTips={props.showTips} onTips={props.onTips} />\n <div className=\"v-form-item-value\">\n {prefix ? <span className=\"v-form-item-value-prefix\">{prefix}</span> : null}\n {/** 此处使用 getChildrenProps 时,函数中无法获取最新的变量,例如disabled,需要研究*/}\n {/* {cloneElement(props.children, getChildrenProps())} */}\n {cloneElement(props.children, childrenProps)}\n {isInput && <FormItemClear onClear={onInputClear} />}\n {isInput && suffix}\n </div>\n </div>\n <ValidateError\n errorList={errorList}\n showErrorMessage={!isUndefinedOrNull(showErrorMessage) ? showErrorMessage : props.showErrorMessage}\n />\n </div>\n );\n};\n\nFormItem.defaultProps = {\n validateTrigger: ['onChange'],\n removeSpace: 'before-after',\n showErrorMessage: true,\n layout: 'horizontal',\n valueAlign: 'left',\n};\n","import { isArray, isString } from '@dimjs/lang';\nimport { extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, trim } from '@flatbiz/utils';\nimport { utils } from '@wove/react';\nimport {\n FieldItemProps,\n FieldRegExpRule,\n FieldRequiredRule,\n FieldsData,\n FieldValue,\n FormErrorItem,\n FormMethods,\n RuleItem,\n} from '../types';\nimport { getFormModalPickerValue, getFormModalValue } from './utils';\n\ntype RegisterFieldItem = {\n props: FieldItemProps;\n formItemValidate: (errorList?: FormErrorItem[]) => void;\n onStoreValueChange: () => void;\n onScrollIntoView: (name: string) => void;\n clearValidateMessage: () => void;\n // deleteFormItemValue: () => void;\n};\n\nexport interface FormMethodsInner extends FormMethods {\n registerField: (field: RegisterFieldItem) => () => void;\n setFieldsValueInner: (data: FieldsData) => void;\n getValidateErrorList: (names?: string[]) => FormErrorItem[];\n setFieldNameList: (name: string[]) => void;\n setInitialValues: (initialValues?: FieldsData) => void;\n dependenciesFormItemValidate: (name: string) => void;\n}\n\nexport class FormStore {\n private store = {} as Record<string, FieldValue>;\n private fieldNameList = [] as string[];\n private fieldsMap = {} as Record<string, RegisterFieldItem>;\n private initialValues?: FieldsData;\n\n private getFieldValue = (name: string) => {\n return this.store[name];\n };\n\n private getFieldsValue = () => {\n return this.store;\n };\n\n private setFieldNameList = (names: string[]) => {\n this.fieldNameList = names;\n };\n\n // 注册组件实例,返回一个回调函数,用于删除组件实例\n private registerField = (field: RegisterFieldItem) => {\n const name = field.props.name;\n this.fieldsMap[name] = field;\n return () => {\n this.fieldNameList = this.fieldNameList.filter((item) => item !== name);\n delete this.store[name];\n delete this.fieldsMap[name];\n };\n };\n\n /**\n * 使用此方法后,输入框将通过受控的方式修改值\n * 使用场景(非输入框输入场景)\n * 1.外部主动设置值\n * 2.点击删除按钮\n * @param newStore\n */\n private setFieldsValue = (newStore: FieldsData) => {\n const newStoreValues = {} as Record<string, FieldValue>;\n Object.keys(newStore).forEach((key) => {\n const value = newStore[key] === '' || newStore[key] === null ? undefined : newStore[key];\n newStoreValues[key] = value;\n });\n\n const previous = { ...this.store };\n this.store = {\n ...this.store,\n ...newStoreValues,\n };\n\n // store已经更新,但是我们希望组件也跟着更新\n Object.keys(newStoreValues).forEach((key) => {\n // 如果上一组数据和最新数据都是相等,则不做任何操作\n if (!utils.deepEqual(previous[key], this.store[key])) {\n this.fieldsMap[key]?.onStoreValueChange();\n }\n });\n };\n\n private setFieldsValueInner = (newStore: FieldsData) => {\n this.store = {\n ...this.store,\n ...newStore,\n };\n };\n\n private parseRule = (ruleItem: RuleItem, name: string, value: FieldValue): FormErrorItem | null => {\n const FieldRequiredrule = ruleItem as FieldRequiredRule;\n if (FieldRequiredrule.required && (value === undefined || value === '' || value === null)) {\n return { message: FieldRequiredrule.message, name, value, type: 'required' };\n }\n if (typeof ruleItem === 'function') {\n const result = ruleItem(this.store);\n if (!result.status) {\n return { message: result.message, name, value, type: 'custom' };\n }\n } else {\n if (typeof value === 'string') {\n const FieldRegExprule = ruleItem as FieldRegExpRule;\n const regexpDf = FieldRegExprule.reg;\n if (!regexpDf) return null;\n const result = regexpDf.test(value);\n if (!result) {\n return { message: FieldRegExprule.message, name, value, type: 'regExp' };\n }\n }\n }\n return null;\n };\n\n // 表单所有字段校验\n private validateAllFields = (names: string[]): FormErrorItem[] => {\n const err = [] as FormErrorItem[];\n names.forEach((key) => {\n const { name, rules } = this.fieldsMap[key]?.props || {};\n if (!name) return;\n const storeItemValue = this.getFieldValue(name);\n const value = isString(storeItemValue) ? trim(storeItemValue as string, true) : storeItemValue;\n\n if (rules && isArray(rules)) {\n const requiredTarget = rules.find((ruleItem) => ruleItem['required'] === true);\n if (!requiredTarget && (value === undefined || value === '' || value === null)) {\n return;\n }\n for (let index = 0; index < rules.length; index++) {\n const ruleItem = rules[index];\n const temp = this.parseRule(ruleItem, name, value);\n if (temp) err.push(temp);\n }\n }\n });\n return err;\n };\n private getValidateErrorList = (names?: string[]) => {\n return this.validateAllFields(names || this.fieldNameList);\n };\n\n private validateFields = (names?: string[]): FormErrorItem[] => {\n const allErrorList = this.validateAllFields(names || this.fieldNameList);\n allErrorList.forEach((item) => {\n this.fieldsMap[item.name]?.formItemValidate?.();\n });\n if (allErrorList.length > 0) {\n const scrollName = allErrorList[0].name;\n this.fieldsMap[scrollName]?.onScrollIntoView?.(scrollName);\n }\n return allErrorList;\n };\n private validateFieldsRequired = (names?: string[]): boolean => {\n const allErrorList = this.validateAllFields(names || this.fieldNameList);\n for (let index = 0; index < allErrorList.length; index++) {\n const element = allErrorList[index];\n if (element.type === 'required') {\n return true;\n }\n }\n return false;\n };\n\n private validateField = (name: string): FormErrorItem[] => {\n return this.validateFields([name]);\n };\n\n private clearValidateMessage = (names?: string[]) => {\n const nameList = names || this.fieldNameList;\n nameList?.map((name) => {\n this.fieldsMap[name]?.clearValidateMessage();\n });\n };\n private onReset = (values?: FieldsData) => {\n Object.keys(this.store).forEach((name) => {\n this.setFieldsValue({ [name]: undefined });\n });\n this.store = {};\n this.setFieldsValue(extend({}, this.initialValues, values));\n };\n private setInitialValues = (initialValues) => {\n this.initialValues = initialValues;\n };\n\n /**\n * dependencies校验,不触发required校验\n * @param name\n */\n private dependenciesFormItemValidate = (name: string) => {\n try {\n if (this.fieldsMap[name]) {\n const storeItemValue = this.getFieldValue(name);\n const value = isString(storeItemValue) ? trim(storeItemValue as string, true) : storeItemValue;\n const err = [] as FormErrorItem[];\n const rules = this.fieldsMap[name]?.props?.rules || [];\n for (let index = 0; index < rules.length; index++) {\n if (!isUndefinedOrNull(rules[index]['required'])) {\n continue;\n }\n const temp = this.parseRule(rules[index], name, value);\n if (temp) err.push(temp);\n }\n this.fieldsMap[name]?.formItemValidate?.(err);\n }\n } catch (error) {\n console.error(`form item name:${name} 不存在`);\n }\n };\n\n public getForm(): FormMethods {\n return {\n getFieldValue: this.getFieldValue,\n getFieldsValue: this.getFieldsValue,\n setFieldsValue: this.setFieldsValue,\n validateFields: this.validateFields,\n validateField: this.validateField,\n validateFieldsRequired: this.validateFieldsRequired,\n clearValidateMessage: this.clearValidateMessage,\n onReset: this.onReset,\n getFormModalPickerValue: getFormModalPickerValue,\n getFormModalValue: getFormModalValue,\n _this: this,\n };\n }\n\n public getFormInner(): FormMethodsInner {\n return {\n registerField: this.registerField,\n getFieldValue: this.getFieldValue,\n getFieldsValue: this.getFieldsValue,\n setFieldsValue: this.setFieldsValue,\n validateFields: this.validateFields,\n validateField: this.validateField,\n setFieldsValueInner: this.setFieldsValueInner,\n getValidateErrorList: this.getValidateErrorList,\n validateFieldsRequired: this.validateFieldsRequired,\n setFieldNameList: this.setFieldNameList,\n clearValidateMessage: this.clearValidateMessage,\n onReset: this.onReset,\n setInitialValues: this.setInitialValues,\n getFormModalPickerValue: getFormModalPickerValue,\n getFormModalValue: getFormModalValue,\n dependenciesFormItemValidate: this.dependenciesFormItemValidate,\n _this: this,\n };\n }\n}\n","import { useRef } from 'react';\nimport { FormMethods } from '../types';\nimport { FormStore } from './form-store';\n\nexport const useForm = (form?: FormMethods) => {\n const formRef = useRef<FormMethods>();\n if (!formRef.current) {\n if (form) {\n formRef.current = form;\n } else {\n const formStore = new FormStore();\n formRef.current = formStore.getForm();\n }\n }\n return [formRef.current] as [FormMethods];\n};\n","import { useContext } from 'react';\nimport { FormContext } from '../context';\nimport { FormMethods } from '../types';\n\nexport const useFormInstance = () => {\n const { form } = useContext(FormContext);\n return form as FormMethods;\n};\n","import { classNames } from '@dimjs/utils';\nimport { useRef } from 'react';\nimport { useEffectCustom } from '../hooks/use-effect-custom';\nimport { attachPropertiesToComponent } from '../utils/inner-use/attach-properties-to-component';\nimport { FormContext } from './context';\nimport { Input } from './form-input/input';\nimport { FormModal } from './form-input/modal';\nimport { FormText } from './form-input/text';\nimport { Textarea } from './form-input/textarea';\nimport { VirtualInput } from './form-input/virtual-input';\nimport { FormItem } from './form-item';\nimport { FormStore } from './helps/form-store';\nimport { useForm } from './helps/use-form';\nimport { useFormInstance } from './helps/use-form-instance';\nimport './style.less';\nimport { FormProps } from './types';\n\nexport type FormStaticMethods = {\n Input: typeof Input;\n Item: typeof FormItem;\n Textarea: typeof Textarea;\n useForm: typeof useForm;\n VirtualInput: typeof VirtualInput;\n /**\n * 自定义FormItem,可用于跳转页面取值交互\n * ```\n * 比普通自定义FormItem,多了一个clickTigger属性,用于触发click事件通知\n * ```\n */\n Text: typeof FormText;\n /**\n * 自定义FormItem,用于非Picker类的弹框结构\n * 1. 如果为Picker选择器类型的,使用Form.Picker最合适\n * 2. 用于非Picker类的弹框结构\n */\n Modal: typeof FormModal;\n};\n\nconst FormInner = (props: FormProps) => {\n const [formInstance] = useForm(props.form);\n const formInstanceInner = (formInstance._this as FormStore).getFormInner();\n const formRef = useRef<HTMLDivElement>(null);\n useEffectCustom(() => {\n if (props.initialValues) {\n formInstanceInner.setInitialValues(props.initialValues);\n formInstanceInner.setFieldsValue(props.initialValues);\n }\n }, []);\n\n return (\n <div className={classNames('v-form', props.className)} style={props.style} ref={formRef}>\n <FormContext.Provider\n value={{\n form: formInstanceInner,\n onValuesChange: props.onValuesChange,\n formRef,\n showErrorMessage: props.showErrorMessage,\n scrollIntoView: props.scrollIntoView,\n }}\n >\n {props.children}\n </FormContext.Provider>\n </div>\n );\n};\n\n/**\n * Form组件\n * ```\n * 1. disabled只有设置在Form.item才能起到作用\n * ```\n */\nexport const Form = attachPropertiesToComponent(FormInner, {\n useForm: useForm,\n useFormInstance: useFormInstance,\n Item: FormItem,\n Input: Input,\n Textarea: Textarea,\n /**\n * 虚拟键盘\n * ```\n * 1. 内置键盘包括:纯数字键盘、金额键盘、身份证键盘\n * 2. 可自定义键盘键值,例如自定义车牌省份键盘\n * ```\n */\n VirtualInput: VirtualInput,\n /**\n * 自定义FormItem,可用于跳转页面取值交互\n * ```\n * 1. 比普通自定义FormItem,多了一个clickTigger属性,用于触发click事件通知\n * 2. Form.Text的children props可继承FormTextItemCustomComptProps获取隐藏自定义组件属性\n * ```\n */\n Text: FormText,\n /**\n * 自定义FormItem,用于弹框结构\n * ```\n * 弹窗类结构包括两类\n * picker类\n * 1. 包括:DatePicker、DateRangePicker、ModalUpPicker、TabSelect、ModalSelector等选择器弹窗组件\n * a. 此类组件在取值时,使用form.getFormModalPickerValue()可直接获取value值\n * b. 赋值结构必须时 value\n * 2. 自定义弹框(设置isCustom=true)\n * a. 自定义弹框响应数据中,不要存在label、value的定义字段\n * b. 回填结构必须是 { label、value }结构,其中label用于页面Form.Item中展示\n * ```\n */\n Modal: FormModal,\n});\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport 'intersection-observer';\nimport {\n CSSProperties,\n DetailedHTMLProps,\n FC,\n Fragment,\n ImgHTMLAttributes,\n ReactNode,\n SyntheticEvent,\n useState,\n} from 'react';\nimport { InVisibleView } from '../in-visible-view';\nimport { Spinner } from '../spinner/spinner';\nimport { NativeProps } from '../utils/native-props';\nimport { numberPx2DPIpx, numberPx2rem } from '../utils/pxrem';\nimport './style.less';\n\nexport type ImageProps = {\n src: string;\n lazy?: boolean;\n threshold?: number;\n imgProps?: Omit<\n DetailedHTMLProps<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>,\n 'src' | 'width' | 'height' | 'onClick' | 'onError' | 'onLoad'\n >;\n width?: string | number;\n height?: string | number;\n loading?: ReactNode;\n onClick?: (event: React.MouseEvent<HTMLDivElement, Event>) => void;\n onError?: (event: SyntheticEvent<HTMLImageElement, Event>) => void;\n // 图片填充模式\n fit?: CSSProperties['objectFit'];\n} & NativeProps;\n\nexport const Image: FC<ImageProps> = (props) => {\n const [showImage, setShowImage] = useState(!props.lazy);\n const [loaded, setLoaded] = useState(false);\n const [failed, setFailed] = useState(false);\n const [placeholder, setPlaceholder] = useState(true);\n\n const onChange = hooks.useCallbackRef((inView) => {\n if (inView) {\n setShowImage(true);\n }\n });\n\n const style: ImageProps['style'] = {};\n style['--width'] = numberPx2rem(props.width);\n style['--height'] = numberPx2rem(props.height);\n\n const imgStyle = { objectFit: props.fit };\n\n const className = classNames(\n 'v-image',\n {\n 'v-image-placeholder': placeholder,\n 'v-image-error': failed,\n },\n props.className,\n );\n\n // threshold只支持px格式\n const threshold = numberPx2DPIpx(props.threshold, '0px');\n\n return (\n <Fragment>\n {!showImage && (\n <InVisibleView onChange={onChange} unobserve={true} rootMargin={`0px 0px ${threshold} 0px`} />\n )}\n <div className={className} onClick={props.onClick} style={{ ...style, ...props.style }}>\n {failed && <div className=\"v-image-error-content\" />}\n {showImage && (\n <img\n {...props.imgProps}\n style={{ ...imgStyle, ...props.imgProps?.style }}\n src={props.src}\n onLoad={() => {\n setPlaceholder(false);\n setLoaded(true);\n }}\n onError={(event) => {\n setPlaceholder(false);\n setLoaded(true);\n setFailed(true);\n props.onError?.(event);\n }}\n />\n )}\n {!placeholder && !loaded && props.loading}\n </div>\n </Fragment>\n );\n};\n\nImage.defaultProps = {\n lazy: false,\n threshold: 50,\n loading: <Spinner spinning={true} />,\n};\n","import { classNames } from '@dimjs/utils';\nimport { FC } from 'react';\nimport { Modal, ModalProps } from '../modal';\nimport './style.less';\n\nexport type ModalFullProps = ModalProps;\n\nexport const ModalFull: FC<ModalFullProps> = (props) => {\n return (\n <Modal {...props} className={classNames('v-modal-full', props.className)}>\n {props.children}\n </Modal>\n );\n};\n","import { animated, useSpring } from '@react-spring/web';\nimport { useGesture } from '@use-gesture/react';\nimport { FC, ReactNode, useRef } from 'react';\nimport './style.less';\n\nexport type ZoomProps = {\n maxZoom?: number;\n onTap?: () => void;\n onZoomChange?: (zoom: number) => void;\n children?: ReactNode;\n};\n\nexport const Zoom: FC<ZoomProps> = (props) => {\n const classPrefix = `v-zoom`;\n const controlRef = useRef<HTMLDivElement>(null);\n const [{ zoom, x, y }, api] = useSpring(() => ({\n zoom: 1,\n x: 0,\n y: 0,\n config: { tension: 300 },\n }));\n\n const pinchLockRef = useRef(false);\n\n useGesture(\n {\n onDrag: (state) => {\n if (state.tap && state.elapsedTime > 0) {\n // 判断点击时间>0是为了过滤掉非正常操作,例如用户长按选择图片之后的取消操作(也是一次点击)\n props.onTap?.();\n return;\n }\n if (pinchLockRef.current) return;\n const currentZoom = zoom.get();\n if (currentZoom <= 1) {\n api.start({\n x: 0,\n y: 0,\n });\n } else {\n const [x, y] = state.offset;\n api.start({\n x,\n y,\n immediate: true,\n });\n }\n },\n onPinch: (state) => {\n pinchLockRef.current = !state.last;\n const [d] = state.offset;\n if (d < 0) return;\n // pinch的rubberband不会自动弹回bound,这里手动实现了\n const zoom = state.last ? Math.max(Math.min(d, props.maxZoom as number), 1) : d;\n api.start({\n zoom,\n immediate: !state.last,\n });\n props.onZoomChange?.(zoom);\n if (state.last && zoom <= 1) {\n api.start({\n x: 0,\n y: 0,\n });\n }\n },\n },\n {\n target: controlRef,\n drag: {\n // filterTaps: true,\n from: () => [x.get(), y.get()],\n },\n pinch: {\n from: () => [zoom.get(), 0],\n },\n pointer: { touch: true },\n },\n );\n\n return (\n <div className={`${classPrefix}`}>\n <div className={`${classPrefix}-control`} ref={controlRef}>\n <animated.div className={`${classPrefix}-zoom`} style={{ scale: zoom, x, y }}>\n {props.children}\n </animated.div>\n </div>\n </div>\n );\n};\n\nZoom.defaultProps = {\n maxZoom: 2,\n};\n","import { hooks } from '@wove/react';\nimport { FC, useRef, useState } from 'react';\nimport { Image } from '../image';\nimport { ModalFull } from '../modal-full';\nimport { Swiper, SwiperItem } from '../swiper';\nimport { Zoom } from '../zoom';\nimport './style.less';\n\nexport type ImageViewerProps = {\n images: string[];\n visible: boolean;\n onClose: () => void;\n initActiveIndex?: number;\n onAfterClose?: () => void;\n destroyOnClose?: boolean;\n loop?: boolean;\n lazy?: boolean;\n maxZoom?: number;\n};\n\nexport const ImageViewerInner: FC<ImageViewerProps> = (props) => {\n const [renderSwiper, setRenderSwiper] = useState(false);\n const [currentNum, setCurrentNum] = useState(props.images.length > 0 ? 1 : 0);\n const swiperInstanceRef = useRef<Record<string, any>>({});\n\n /**\n * 由于swiper渲染受到modal弹窗缩放过程影响,导致swiper宽度计算错误,此处在onAfterOpen后渲染swiper\n */\n const onAfterOpen = hooks.useCallbackRef(() => {\n setTimeout(() => {\n setRenderSwiper(true);\n }, 50);\n });\n const slideChanged = hooks.useCallbackRef((e) => {\n setCurrentNum((e.track.details.rel as number) + 1);\n });\n\n const swiperOption = {\n slides: {\n spacing: 15,\n },\n loop: props.loop,\n slideChanged,\n };\n\n return (\n <ModalFull\n visible={props.visible}\n className=\"v-image-viewer-modal\"\n onAfterOpen={onAfterOpen}\n onClose={props.onClose}\n maskStyle={{ background: 'rgba(0, 0, 0, 0.75)' }}\n onAfterClose={props.onAfterClose}\n destroyOnClose={props.destroyOnClose}\n >\n {props.images.length > 1 && (\n <div className=\"v-image-viewer-dot\">\n {currentNum}/{props.images.length}\n </div>\n )}\n {renderSwiper && (\n <Swiper\n dot={false}\n option={{\n ...swiperOption,\n created: (e) => {\n swiperInstanceRef.current = e;\n if (props.initActiveIndex) {\n e.moveToIdx(props.initActiveIndex, true, { duration: 0 });\n }\n },\n }}\n >\n {props.images.map((item, index) => {\n return (\n <SwiperItem key={index}>\n <Zoom\n maxZoom={props.maxZoom}\n onZoomChange={(zoom) => {\n if (zoom === 1) {\n swiperInstanceRef.current.update({\n drag: true,\n ...swiperOption,\n });\n } else {\n swiperInstanceRef.current.update({\n drag: false,\n ...swiperOption,\n });\n }\n }}\n >\n <Image\n src={item}\n imgProps={{ style: { objectFit: 'contain' } }}\n onClick={props.onClose}\n width={'100%'}\n height={'100%'}\n lazy={props.lazy}\n />\n </Zoom>\n </SwiperItem>\n );\n })}\n </Swiper>\n )}\n </ModalFull>\n );\n};\n\nImageViewerInner.defaultProps = {\n lazy: true,\n loop: false,\n maxZoom: 2,\n};\n","import { hooks } from '@wove/react';\nimport { useEffect, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { bodyAppendDivElement, BodyAppendDivElementProps, removeBodyChild } from '../utils';\nimport { ImageViewerInner, ImageViewerProps } from './image-viewer';\n\nexport type TDialogImageViewerProps = Pick<ImageViewerProps, 'images' | 'initActiveIndex'>;\n\nconst ModalRender = (props: TDialogImageViewerProps & BodyAppendDivElementProps) => {\n const [visible, setVisible] = useState(false);\n\n const onClose = () => {\n setVisible(false);\n };\n\n useEffect(() => {\n setVisible(true);\n }, []);\n\n const onAfterClose = hooks.useCallbackRef(() => {\n removeBodyChild(`#${props.elementId}`);\n });\n\n return (\n <ImageViewerInner\n {...props}\n visible={visible}\n onClose={onClose}\n onAfterClose={onAfterClose}\n destroyOnClose={true}\n />\n );\n};\n\nexport const dialogImageViewer = (props: TDialogImageViewerProps) => {\n const { divElement, elementId } = bodyAppendDivElement();\n ReactDOM.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />, divElement);\n};\n","import { attachPropertiesToComponent } from '../utils/inner-use/attach-properties-to-component';\nimport { ImageViewerInner } from './image-viewer';\nimport { dialogImageViewer } from './methods';\n\nexport const ImageViewer = attachPropertiesToComponent(ImageViewerInner, {\n show: dialogImageViewer,\n});\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { forwardRef, Fragment, ReactElement, ReactNode, useImperativeHandle, useRef, useState } from 'react';\nimport { useLockFn } from '../hooks';\nimport { InVisibleView } from '../in-visible-view';\nimport { IphoneBottomAdaptive } from '../iphone-bottom-adaptive';\nimport { Progress } from '../progress';\nimport { Space } from '../space';\nimport { getScrollParent } from '../utils/get-scroll-parent';\nimport { NativeProps } from '../utils/native-props';\nimport './style.less';\n\nconst classPrefix = `v-infinite-scroll`;\n\nexport type NativeInfiniteScrollProps = {\n onLoadMore: () => Promise<any>;\n hasMore: boolean;\n // 目前实现有问题,暂时不支持\n // threshold?: number;\n visible?: boolean;\n children?: ReactNode | ReactNode[];\n noMoreText?: string | ReactElement;\n} & NativeProps;\n\nconst InfiniteScrollContent = (props: {\n hasMore: boolean;\n noMoreText: NativeInfiniteScrollProps['noMoreText'];\n}) => {\n return (\n <>\n {props.hasMore ? (\n <Space gap={10}>\n <Progress value={0.1} gap={3} size={30} isRotate={true} />\n <span>加载中...</span>\n </Space>\n ) : (\n <div className=\"v-infinite-scroll-nomore\">{props.noMoreText}</div>\n )}\n </>\n );\n};\n\nexport type NativeInfiniteScrollRefApi = {\n scrollToTop: () => void;\n};\n\nexport const NativeInfiniteScroll = forwardRef<NativeInfiniteScrollRefApi, NativeInfiniteScrollProps>(\n (props, ref) => {\n const elementRef = useRef<HTMLDivElement>(null);\n const [loadFailed, setLoadFailed] = useState(false);\n // const threshold = typeof props.threshold === 'number' ? px2DPIpx(props.threshold) : '0px';\n\n const doLoadMore = useLockFn(() => {\n return props.onLoadMore();\n });\n\n const onChangeInView = hooks.useDebounceClick((inView) => {\n if (inView && !loadFailed) {\n if (!props.visible || !props.hasMore) return;\n void doLoadMore().catch(() => {\n setLoadFailed(true);\n });\n }\n }, 200);\n\n const onChangeInView2 = hooks.useCallbackRef((inView) => {\n if (!inView) {\n setLoadFailed(false);\n }\n });\n\n const onFailedRequest = hooks.useCallbackRef(() => {\n setLoadFailed(false);\n void doLoadMore().catch(() => {\n setLoadFailed(true);\n });\n });\n\n useImperativeHandle(ref, () => {\n return {\n scrollToTop: () => {\n const element = getScrollParent(elementRef.current as Element) as Element;\n element.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n },\n };\n });\n\n if (!props.visible) return null;\n\n return (\n <Fragment>\n {/* <InVisibleView onChange={onChangeInView} rootMargin={`0px 0px ${threshold} 0px`} /> */}\n <InVisibleView onChange={onChangeInView} />\n <div className={classNames(classPrefix, props.className)} style={props.style} ref={elementRef}>\n {loadFailed ? (\n <Fragment>\n <InVisibleView onChange={onChangeInView2} rootMargin={`0px 0px 30px 0px`} />\n <div onClick={onFailedRequest} className={`${classPrefix}-failed`}>\n 数据加载失败,点击重新加载\n </div>\n </Fragment>\n ) : (\n <Fragment>\n {props.children ? (\n props.children\n ) : (\n <InfiniteScrollContent hasMore={props.hasMore} noMoreText={props.noMoreText} />\n )}\n </Fragment>\n )}\n </div>\n <IphoneBottomAdaptive />\n </Fragment>\n );\n },\n);\n\nNativeInfiniteScroll.defaultProps = {\n visible: false,\n noMoreText: '没有更多数据了',\n};\n","export function bound(position: number, min: number | undefined, max: number | undefined) {\n let ret = position;\n if (min !== undefined) {\n ret = Math.max(position, min);\n }\n if (max !== undefined) {\n ret = Math.min(ret, max);\n }\n return ret;\n}\n","import { bound } from './bound';\n\nexport function rubberband(distance: number, dimension: number, constant: number) {\n return (distance * dimension * constant) / (dimension + constant * distance);\n}\n\nexport function rubberbandIfOutOfBounds(\n position: number,\n min: number,\n max: number,\n dimension: number,\n constant = 0.15,\n) {\n if (constant === 0) return bound(position, min, max);\n if (position < min) return -rubberband(min - position, dimension, constant) + min;\n if (position > max) return +rubberband(position - max, dimension, constant) + max;\n return position;\n}\n","import { classNames } from '@dimjs/utils';\nimport { sleep } from '@flatbiz/utils';\nimport { animated, useSpring } from '@react-spring/web';\nimport { useDrag } from '@use-gesture/react';\nimport { CSSProperties, forwardRef, ReactNode, useImperativeHandle, useRef, useState } from 'react';\nimport { getScrollParent } from '../utils/get-scroll-parent';\nimport './style.less';\nimport { rubberbandIfOutOfBounds } from './utils/rubberband';\n\nconst classPrefix = `v-pull-to-refresh`;\n\nexport type PullStatus = 'pulling' | 'canRelease' | 'refreshing' | 'complete';\n\nexport type NativePullToRefreshProps = {\n onRefresh: () => Promise<any>;\n pullingText?: ReactNode;\n canReleaseText?: ReactNode;\n refreshingText?: ReactNode;\n completeText?: ReactNode;\n completeDelay?: number;\n headHeight?: number;\n threshold?: number;\n renderText?: (status: PullStatus) => ReactNode;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode | ReactNode[];\n};\n\nexport type NativePullToRefreshRefApi = {\n scrollToTop: () => void;\n};\n\nexport const NativePullToRefresh = forwardRef<NativePullToRefreshRefApi, NativePullToRefreshProps>(\n (props, ref) => {\n const headHeight = props.headHeight ?? 40;\n const threshold = props.threshold ?? 50;\n\n const [status, setStatus] = useState<PullStatus>('pulling');\n\n const [springStyles, api] = useSpring(() => ({\n from: { height: 0 },\n config: {\n tension: 300,\n friction: 30,\n clamp: true,\n },\n }));\n\n const elementRef = useRef<HTMLDivElement>(null);\n\n const pullingRef = useRef(false);\n\n const doRefresh = async () => {\n api.start({ height: headHeight });\n setStatus('refreshing');\n try {\n await props.onRefresh();\n setStatus('complete');\n if (props.completeDelay && props.completeDelay > 0) {\n await sleep(props.completeDelay);\n }\n } catch (e) {\n // setStatus('pulling');\n }\n\n api.start({\n to: async (next) => {\n await next({ height: 0 });\n await next({ height: 0 });\n setStatus('pulling');\n },\n });\n };\n\n useDrag(\n (state) => {\n if (status === 'refreshing' || status === 'complete') return;\n\n const { event } = state;\n\n if (state.last) {\n pullingRef.current = false;\n if (status === 'canRelease') {\n void doRefresh();\n } else {\n api.start({ height: 0 });\n }\n return;\n }\n\n const [, y] = state.movement;\n if (state.first) {\n const element = elementRef.current;\n if (!element) return;\n const scrollParent = getScrollParent(element) as any;\n if (!scrollParent) return;\n const top = 'scrollTop' in scrollParent ? scrollParent.scrollTop : scrollParent.pageYOffset;\n if (top <= 0 && y > 0) {\n pullingRef.current = true;\n }\n }\n\n if (!pullingRef.current) return;\n\n if (typeof event.cancelable !== 'boolean' || event.cancelable) {\n event.preventDefault();\n }\n event.stopPropagation();\n const height = Math.max(rubberbandIfOutOfBounds(y, 0, 0, headHeight * 5, 0.5), 0);\n api.start({ height });\n setStatus(height > threshold ? 'canRelease' : 'pulling');\n },\n {\n pointer: { touch: true },\n axis: 'y',\n target: elementRef,\n eventOptions: { passive: false },\n },\n );\n\n const renderStatusText = () => {\n if (props.renderText) {\n return props.renderText?.(status);\n }\n\n if (status === 'pulling') return props.pullingText as string;\n if (status === 'canRelease') return props.canReleaseText as string;\n if (status === 'refreshing') return props.refreshingText as string;\n if (status === 'complete') return props.completeText as string;\n return '';\n };\n\n useImperativeHandle(ref, () => {\n return {\n scrollToTop: () => {\n const element = getScrollParent(elementRef.current as Element) as Element;\n element.scrollTo({\n top: 0,\n behavior: 'auto',\n });\n },\n };\n });\n\n return (\n <animated.div ref={elementRef} className={classNames(classPrefix, props.className)} style={props.style}>\n <animated.div style={springStyles} className={`${classPrefix}-head`}>\n <div className={`${classPrefix}-head-content`}>{renderStatusText()}</div>\n </animated.div>\n <div className={`${classPrefix}-content`}>{props.children}</div>\n </animated.div>\n );\n },\n);\n\nNativePullToRefresh.defaultProps = {\n pullingText: '下拉刷新',\n canReleaseText: '释放刷新',\n refreshingText: '加载中...',\n completeText: '刷新成功',\n completeDelay: 500,\n};\n","import { classNames } from '@dimjs/utils';\nimport { hooks } from '@wove/react';\nimport { forwardRef, useEffect, useImperativeHandle, 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}\n\nexport type SmsCountDownRefApi = {\n onStart: () => void;\n};\n\nexport const SmsCountDown = forwardRef<SmsCountDownRefApi, SmsCountDownProps>((props, ref) => {\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 useImperativeHandle(ref, () => {\n return {\n onStart: onStart,\n };\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 { classNames, extend } from '@dimjs/utils';\nimport { Space } from '@flatbiz/react';\nimport { CSSProperties, ReactElement, ReactNode } from 'react';\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 style = extend({}, props.style, { padding: props.padding, 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 {\n cutString,\n DateFormatType,\n flatbizDate,\n getStrByteLen,\n isUndefinedOrNull,\n TAny,\n TPlainObject,\n} from '@flatbiz/utils';\nimport { Tag, Tooltip } from 'antd';\nimport { CSSProperties } from 'react';\nimport { ButtonOperate, ButtonOperateProps } from '../button-operate';\n\nconst tableColumnTooltipRender = (options?: { showMaxNumber?: number }) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (value: string | number, _record: TAny, _index: number) => {\n if (isUndefinedOrNull(value)) return;\n const colunmText = value.toString();\n const showMaxNumber = (isUndefinedOrNull(options?.showMaxNumber) ? 10 : options?.showMaxNumber) as number;\n const strByteLen = getStrByteLen(colunmText);\n if (strByteLen <= showMaxNumber * 2) {\n return colunmText;\n }\n return (\n <Tooltip placement=\"topLeft\" title={colunmText}>\n {cutString(colunmText, showMaxNumber * 2)}\n </Tooltip>\n );\n };\n};\n\ntype TTableColumnTagRenderOptions = Record<\n string | number,\n {\n color: CSSProperties['color'];\n text: string;\n }\n>;\nconst tableColumnTagRender = (options: TTableColumnTagRenderOptions) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (value: string | number, _record: TAny, _index: number) => {\n const params = options[value];\n return <Tag color={params.color}>{params.text}</Tag>;\n };\n};\n\nconst tableColumnOperateRender = (options: (item: TAny) => ButtonOperateProps) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, record: TPlainObject, _index: number) => {\n const operateProps = options(record);\n return <ButtonOperate {...operateProps} />;\n };\n};\n\nconst tableColumnDateRender = (options?: { dateFormatType: DateFormatType }) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (value: string | number, _record: TPlainObject, _index: number) => {\n try {\n return flatbizDate.format(value, options?.dateFormatType);\n } catch (error) {\n return value;\n }\n };\n};\n\nconst tableColumnIndexRender = (options: { pageSize: number; pageNo: number }) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return (_value: string | number, _record: TPlainObject, index: number) => {\n return (options.pageNo - 1) * options.pageSize + index + 1;\n };\n};\n\nexport const tableCellRender = {\n /**\n * 表格列分页计数\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 * table Tag 效果\n * ```\n * 使用方式\n * tableCellRender.tagCell({\n * '1': { color: '#108ee9', text: '已开启' },\n * '0': { color: '#ff4d4f', text: '已关闭' },\n * })\n * ```\n * */\n tagCell: tableColumnTagRender,\n /**\n * 实现字段超出隐藏,默认长度20个【字节】\n * ```\n * showMaxNumber: 显示最大【字节】长度\n * ```\n */\n tooltipCell: tableColumnTooltipRender,\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) => {\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 = otherProps.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 /**\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 const isMultiple = otherProps.treeCheckable;\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 /**\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 dropdownClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.dropdownClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={renderValueList as any}\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, 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?: any) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => any;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: any) => 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: any[]) => {\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: any[]): any[] =>\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","isArray","hasPermission","name","includes","Permission","props","_jsx","Fragment","children","DropdownMenuWrapper","menuList","dropdownOtherProps","_excluded","menuItems","useState","visible","_useState","setVisible","loading","_useState2","setLoading","onConfirmtTriggerClick","_hooks","useCallbackRef","event","stopPropagation","onConfirm","item","result","onClick","_isPromise","finally","forEach","index","text","color","permission","needConfirm","confirmMessage","hidden","type","style","popconfirmProps","otherProps","_excluded2","newStyle","_extends","buttonType","nromal","key","label","_createElement","Button","size","bind","confirm","Popconfirm","okText","cancelText","trigger","destroyTooltipOnHide","title","onCancel","arrowPointAtCenter","overlayStyle","zIndex","okButtonProps","danger","disabled","push","Dropdown","arrow","pointAtCenter","overlay","Menu","items","onVisibleChange","_visible","console","log","ButtonOperate","viewList","useMemo","operateList","filter","isValidElement","has","isFold","foldList","filterList","map","className","_classNames","classNames","_jsxs","Space","split","Divider","wrap","_isUndefined","placement","undefined","createElement","length","foldIcon","jsx","_MoreOutlined","defaultProps","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","then","$await_1","$boundEx","useSafeState","initialState","state","setState","isMounted","useIsMounted","value","current","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","options","setOptions","newServiceConfig","_useSafeState","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","extend","valueList","setValueList","serviceRespDataAdapter","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$Try_1_Catch","error","window","message","resolve","$await_2","isLeaf","cloneState","cloneList","treeLeafParentsArray","treeToTiledArray","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","targetOption","$await_3","concat","onChange","values","selectList","Cascader","showSearch","allowClear","notFoundContent","suffixIcon","_RedoOutlined","spin","multiple","DatePickerWrapper","format","showTime","onChangeDate","date","dateString","getDisabledDate","currentDate","disabledDateConfig","minDate","maxDate","flatbizDate","in","gte","datePickerValue","moment","dateNormalize","DatePicker","disabledDate","width","DateRangePickerWrapper","_props$disabledDateCo","_format","maxDays","dates","setDates","hackValue","setHackValue","date1","_ref","date2","rangePickerValue","newDate1","newDate2","dateStrings","tooLate","diff","tooEarly","onOpenChange","open","RangePicker","onCalendarChange","val","DateRangePickerWrapperFormItem","startName","endName","formListName","dateRangePickerWrapperProps","form","Form","useFormInstance","bodyName","slice","startNameMerge","endNameMerge","startVal","useWatch","endVal","setFields","reftest","useRef","reftest2","data","_reftest$current","_reftest2$current","_Fragment","Item","InputContent","Input","bodyAppendDivElement","div","document","id","Date","now","setAttribute","body","append","divElement","elementId","removeBodyChild","element","removeChild","querySelector","ModalRender","onOk","content","configProviderProps","okButtonExtraProps","cancelButtonExtraProps","operatePosition","_props$operatePositio","_props$width","useForm","_Form$useForm","onClose","onCancelHandle","e","response","onOkHandle","operateGroup","jsxs","ConfigProvider","locale","zh_CN","componentSize","space","Drawer","maskClosable","destroyOnClose","contentWrapperStyle","maxWidth","footer","extra","getContainer","dialogDrawer","_bodyAppendDivElement","ReactDOM","render","close","_window$elementId","_window","call","onAfterClose","afterClose","Modal","centered","dialogModal","DrawerModel","openDrawerForm","itemData","operateType","pageLoading","closeDrawer","setDrawerItemData","DrawerOperation","cancelButtonProps","hideOkBtn","icon","_SaveOutlined","PageLoader","DrawerWraper","operationProps","keyboard","forceRender","drawerModels","createDrawerWraperModel","DrawerWrapperContent","DrawerWrapperFooter","DrawerWrapper","Content","Footer","createDrawerWrapperModel","getEditable","editable","tableRowIndex","CheckboxGroupFormItemContent","fieldConfig","editableConfig","editableComptProps","viewLabelList","returnList","target","find","temp","Checkbox","Group","tag","Tag","CheckboxGroupFormItem","formItemProps","DatePickerWrapperFormItem","FormItemContent","viewLabel","join","InputWrapper","cpLockRef","inputValueRef","isFirstUseValueRef","defaultSearchInputKey","setDefaultSearchInputKey","isUndefinedOrNull","onCompositionStart","onCompositionEnd","defaultValue","InputSearchWrapper","Search","InputTextAreaWrapper","TextArea","InputFormItem","InputNumberFormItem","InputNumber","RadioGroupFormItemContent","Radio","RadioGroupFormItem","resetSelectBoxList","selectorWrapperModels","selectorWrapperModel","getVauleList","labelInValueFieldNames","tempList","_isObject","array2map","list","selectorWrapperValueDeepEqual","value1","value2","object1","object2","dequal","SelectorWrapper","showAllOption","effectDependencyList","onSelectorListChange","onSelectorRequestError","onLabelRenderAdapter","searchFieldName","searchIdFieldName","labelInValue","loadingWrapper","isSearch","hasSelectorList","hasOwnProperty","newEffectDependencyList","_selectorWrapperModel","labelInValueFieldNamesMerge","refreshKey","setRefreshKey","allOptionConfig","isTrue","isMultiple","mode","innerOperateValueRef","defaultValueRef","valueIsEmpty","inputValue","searchId","requiredParamsKeys","isEmpty","keyword","warn","useCustomCompareEffect","Boolean","allState","getState","onClearSelectorList","getSelectorList","filterOption","input","option","mergeString","_isString","toLowerCase","indexOf","onSearch","useDebounceCallback","onRespChange","selectedList","lvLabel","lvValue","labelInValueList","onInnerChange","otherParams","targetList","_targetList$push","filterTarget","selectorAllList","_ref2","Select","dropdownMatchSelectWidth","Option","showIcon","setSelectorList","setviewLabelList","String","dataList","arrayField2LabelValue","display","SelectorWrapperFormItem","FormItemTextContent","_props$fieldConfig2","_props$fieldConfig3","_props$fieldConfig","isBaseData","_isNumber","_isBoolean","JSON","stringify","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","_value","record","tableRowName","customRender","operation","fieldConfigActual","rules","formListOperation","onTableBeforeRender","Table","scroll","x","pagination","rowKey","dataSource","onTableAfterRender","block","_PlusOutlined","editorTemplates","primary_p","secondary_p","warning_p","danger_p","success_p","p","defaultVarStyle","EditorWrapper","_","editor","getContent","respValue","varStyleString","merge","varStyle","Object","keys","_Editor","Editor","cdnTinyMce","init","content_style","menubar","language","paste_retain_style_properties","table_default_styles","plugins","toolbar","fontsize_formats","autoresize_bottom_margin","templates","template_replace_values","template_preview_replace_values","editorInitParams","editorProps","onEditorChange","FileImport","onImportFinish","buttonName","showUploadList","accept","FileUpload","onPreview","uploadValue","setUploadValue","fileKey","fileName","thumbUrl","uploadItem","onUploadPreview","FlexLayout","childrens","direction","gap","fullIndexList","fullIndex","childrenStyle","flex","marginRight","marginBottom","cloneElement","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","a","b","gridGroupList","defaultGrid","FormRow","screenType","childrenList","toArray","_currentGridList","_temp$props","_extends2","itemProps","newProps","Gap","height","inline","IconWrapper","Tooltip","hoverTips","LabelValueLayout","labelWidth","Descriptions","column","bordered","ModalModel","openModalForm","closeModal","setModalItemData","ModalOperation","_ref$okText","_ref$cancelText","ModalWraper","modalModels","createModalWraperModel","ModalWrapperContent","ModalWrapperFooter","ModalWrapper","createModalWrapperModel","PageFixedFooter","Page404","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_auto","label_align_left","label_align_right","formItemClassName","preDefinedClassName","formItem","isBrowser","getTargetElement","defaultElement","targetElement","resolveContainer","container","containerElement","overflowScrollReg","defaultRoot","isElement","node","ELEMENT_NODE_TYPE","tagName","nodeType","getScrollParent","el","root","_window$getComputedSt","getComputedStyle","overflowY","test","parentNode","withNativeProps","px2DPIpx","d","_fabricViewport2","fabricViewport","currRem","parseFloat","toString","px2rem","numberPx2rem","pxValue","newDefaultValue","newPxValue","numberPx2DPIpx","getScrollPosition","position","left","top","scrollingElement","scrollLeft","scrollTop","Math","max","pageYOffset","documentElement","pageXOffset","_isStyleNameSupport","styleName","styleNameList","Array","some","detectFlexGapSupported","flexDirection","rowGap","appendChild","flexGapSupported","scrollHeight","isStyleNameSupport","zIndexFactory","_cache","cache","getZIndex","Number","replace","dynamicNode","tempElement","fixed","nodeElementId","dynamicElementId","_document$querySelect","Progress","wrapperStyle","setWrapperStyle","pieStyle","setPieStyle","barLeftStyle","_useState3","setBarLeftStyle","barRightStyle","_useState4","setBarRightStyle","shadowStyle","_useState5","setShadowStyle","isOver50","_useState6","setIsOver50","renderFlag","_useState7","setRenderFlag","px2px","ceil","useLayoutEffect","_props$size","_props$gap","rotate","pos","padding","clip","WebkitTransform","transform","borderWidth","isRotate","pie","over50","supportFlexGap","align","flexFullIndexList","flexFullIndex","gapArray","verticalSize","horizontalSize","verticalHalfSize","horizontalHalfSize","justifyContent","Children","ButtonContent","buttonProps","beforeIcon","afterIcon","progressSize","mini","small","middle","large","lockRef","_props$type","_props$inline","fill","_props$fill","_props$ellipsis","debounceDuration","_props$debounceDurati","innerLoading","setInnerLoading","loadingRst","handleClick","useDebounceClick","catch","loadingMask","columnHeight","gridAutoRows","GridItem","xSpan","_props$xSpan","ySpan","_props$ySpan","updateQueue","makeQueue","raf","schedule","writeQueue","write","onStartQueue","onStart","onFrameQueue","onFrame","onFinishQueue","onFinish","timeouts","setTimeout","handler","ms","time","cancel","i","t","pendingCount","timeout","findTimeout","start","delete","sync","batchedUpdates","throttle","lastArgs","queuedFn","throttled","args","nativeRaf","requestAnimationFrame","use","impl","performance","frameLoop","advance","update","ts","queue","loop","stop","prevTs","count","eachSafely","flush","min","next","Set","arg","each","defineHidden","obj","defineProperty","writable","configurable","is","arr","constructor","fun","str","num","und","isEqual","eachProp","ctx","iterator","clear","flushCalls","isSSR","navigator","userAgent","createStringInterpolator$1","to","colors$1","skipAnimation","willAdvance","assign","globals","colors","createStringInterpolator","freeze","__proto__","startQueue","currentFrame","prevFrame","priority","idle","animation","flushStartQueue","startSafely","sort","prevIndex","startUnsafely","other","dt","nextFrame","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","NUMBER","PERCENTAGE","parts","rgb","RegExp","rgba","hsl","hsla","hex3","hex4","hex6","hex8","normalizeColor","match","exec","parseInt","parse255","parse1","hslToRgb","parse360","parsePercentage","hue2rgb","q","h","s","l","r","g","round","int","colorToRgba","int32Color","createInterpolator","range","output","extrapolate","config","outputRange","inputRange","extrapolateLeft","extrapolateRight","easing","findRange","interpolate","inputMin","inputMax","outputMin","outputMax","Infinity","arguments","source","prototype","apply","this","$get","Symbol","for","$observers","hasFluidValue","getFluidValue","getFluidObservers","callFluidObserver","observer","eventObserved","callFluidObservers","observers","FluidValue","get","setFluidGetter","setHidden","addFluidObserver","observerAdded","removeFluidObserver","observerRemoved","numberRegex","colorRegex","unitRegex","rgbaRegex","cssVariableRegex","variableToRgba","token","fallback","parseCSSVariable","getPropertyValue","trim","startsWith","namedColorRegex","rgbaRound","p1","p2","p3","p4","keyframes","outputRanges","interpolators","_output$find","missingUnit","prefix","once","func","called","TypeError","warnInterpolate","deprecateInterpolate","warnDirectCall","deprecateDirectCall","isAnimatedString","useIsomorphicLayoutEffect","useForceUpdate","random","useMemoOne","getResult","inputs","initial","committed","prevCache","useCache","areInputsEqual","prev","useOnce","effect","emptyDeps","usePrev","prevRef","$node","isAnimated","getAnimated","owner","setAnimated","getPayload","Animated","payload","AnimatedValue","super","done","elapsedTime","lastPosition","lastVelocity","v0","durationProgress","static","getValue","setValue","step","reset","AnimatedString","_string","_toString","goal","TreeContext","dependencies","AnimatedObject","animated","_makePayload","_addToPayload","AnimatedArray","makeAnimated","create","getAnimatedType","withAnimated","Component","host","hasInstance","isReactComponent","givenProps","givenRef","instanceRef","useCallback","updateRef","getAnimatedState","forceUpdate","callback","instance","didUpdate","applyAnimatedValues","PropsObserver","observerRef","dep","usedProps","getComponentProps","React","createAnimatedStyle","cacheKey","createHost","components","_applyAnimatedValues","_createAnimatedStyle","_getComponentProps","hostConfig","displayName","getDisplayName","callProp","matchProp","resolveProp","prop","getDefaultProp","default","noopTransform","getDefaultProps","DEFAULT_PROPS","defaults","RESERVED_PROPS","pause","reverse","immediate","delay","onProps","onPause","onResume","onRest","onResolve","trail","expires","enter","leave","onDestroyed","callId","parentId","getForwardProps","forward","inferTo","out","computeGoal","Globals","hasProps","isAsyncTo","detachRefs","ctrl","_ctrl$ref","replaceRef","_ctrl$ref2","tension","friction","gentle","wobbly","stiff","slow","molasses","c1","c2","c3","c4","PI","c5","bounceOut","n1","d1","easings","linear","easeInQuad","easeOutQuad","easeInOutQuad","pow","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","sin","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","easeInElastic","easeOutElastic","easeInOutElastic","easeInBounce","easeOutBounce","easeInOutBounce","mass","damping","clamp","AnimationConfig","frequency","velocity","restVelocity","precision","progress","duration","bounce","decay","mergeConfig","newConfig","defaultConfig","sanitizeConfig","isTensionConfig","emptyArray","Animation","changed","toValues","fromValues","scheduleProps","reject","_props$cancel","paused","resumeQueue","resume","delayed","pauseQueue","cancelId","err","getCombinedResult","results","cancelled","getCancelledResult","every","getNoopResult","getFinishedResult","finished","runAsync","asyncTo","prevTo","promise","prevPromise","asyncId","preventBail","bail","bailPromise","bailIfEnded","bailSignal","bailResult","animate","arg1","arg2","BailSignal","skipAnimationSignal","SkipAniamtionSignal","stopAsync","animating","async","all","isFrameValue","FrameValue","nextId$1","_priority","_onPriorityChange","toJSON","_attach","_detach","_onChange","parent","$P","HAS_ANIMATED","IS_ANIMATING","IS_PAUSED","hasAnimated","isAnimating","isPaused","setActiveBit","active","setPausedBit","SpringValue","_state","_pendingCalls","_lastCallId","_lastToId","_memoizedDuration","isDelayed","anim","elapsed","abs","exp","bounceFactor","canBounce","isGrowing","isMoving","isBouncing","numSteps","n","springForce","dampingForce","acceleration","isNaN","currVal","finalVal","_stop","set","_focus","_set","_update","finish","_onStart","up","_start","_prepareNode","isLoop","mergeActiveFn","sendEvent","isFrozen","checkFinished","_resume","_merge","nextProps","createLoopUpdate","hasToProp","hasFromProp","prevFrom","hasFromChanged","hasToChanged","hasAsyncTo","isAnimatable","goalType","started","hasValueChanged","ACTIVE_EVENTS","oldNode","loopRet","overrides","createUpdate","findDefined","declareUpdate","_target$animation$typ","_target$animation","_target$defaultProps$","_target$defaultProps","BATCHED_EVENTS","nextId","Controller","springs","_flush","_initialProps","_lastAsyncId","_active","_changed","_started","_item","_events","Map","_onFrame","spring","prepareKeys","flushUpdateQueue","flushUpdate","promises","getSprings","prepareSprings","createSpring","setSprings","excluded","sourceKeys","_excluded$3","SpringContext","inherited","useContext","Provider","makeContext","Consumer","createContext","_context","SpringRef","_getProps","useSprings","propsFn","layoutId","ctrls","updates","canFlushSync","prevLength","declareUpdates","startIndex","endIndex","context","prevContext","hasContext","cb","useSpring","isFn","TransitionPhase","Interpolation","calc","_get","_dt","oldValue","checkIdle","becomeIdle","highest","isIdle","self","_excluded$2","isCustomPropRE","dangerousStyleValue","isUnitlessNumber","attributeCache","isFilterElement","nodeName","attributes","names","hasAttribute","textContent","setProperty","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","orphans","tabSize","widows","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","prefixKey","charAt","toUpperCase","substring","prefixes","acc","_excluded$1","domTransforms","pxTransforms","degTransforms","addUnit","unit","isValueIdentity","v","AnimatedStyle","y","z","transforms","xyz","deg","FluidTransform","identity","primitives","unstable_batchedUpdates","browserPrefix","vendors","elementStyle","substr","addPrefixStyle","vendor","getTouchAction","eventPassthrough","addPinch","touchAction","TouchableService","_this","deltaX","deltaY","pointX","pointY","distX","distY","directionLocked","directionLockThreshold","disableTouchMove","handleTouchStart","multiTouchDisable","point","touches","pageX","pageY","handleTouchMove","absDistX","absDistY","preventDefault","_proto","targetTouches","stopImmediatePropagation","changeTouchAction","changeDisableTouchMove","NativeLockScroll","rootRef","touchService","lock","_rootRef$current","_rootRef$current2","addEventListener","unlock","_rootRef$current3","_rootRef$current4","removeEventListener","rootRefHandle","useUnmountEffect","classPrefix","opacityRecord","thin","thick","Mask","background","_opacityRecord","setActive","_useSpring","afterShow","onMaskClick","createPortal","useInitialized","check","initializedRef","useShouldRender","initialized","ModalContent","_props$onClose","closeIcon","maskZIndex","bodyZIndex","updateZindex","shouldRender","onBeforeOpenHandle","onBeforeOpen","onAfterOpenHandle","onAfterOpen","onBeforeCloseHandle","onBeforeClose","onAfterCloseHandle","scale","clickStopPropagation","closeByMask","classList","mask","maskClassName","maskStyle","bodyClassName","bodyStyle","ModalDrawerContent","ModalDrawer","_classNames2","bodyCls","percent","bodyRef","LoadingAnimation","indicator","Spinner","useLockFn","$args","ret","useMutationEffect","MutationObserver","observe","disconnect","useResizeEffect","targetRef","ResizeObserver","IntersectionObserverEntry","intersectionRatio","getFrameElement","doc","defaultView","frameElement","startDoc","frame","ownerDocument","registry","crossOriginUpdater","crossOriginRect","entry","rootBounds","ensureDOMRect","boundingClientRect","intersectionRect","getEmptyRect","isIntersecting","targetRect","targetArea","intersectionArea","toFixed","IntersectionObserver","opt_options","_checkForIntersections","THROTTLE_TIMEOUT","_callback","_observationTargets","_queuedEntries","_rootMarginValues","_parseRootMargin","rootMargin","thresholds","_initThresholds","threshold","margin","_monitoringDocuments","_monitoringUnsubscribes","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","convertFromParentRect","_resetCrossOriginUpdater","isTargetAlreadyObserved","_registerInstance","_monitorIntersections","unobserve","_unmonitorIntersections","_unregisterInstance","_unmonitorAllIntersections","takeRecords","records","opt_threshold","opt_rootMargin","marginString","margins","win","monitoringInterval","domObserver","setInterval","addEvent","childList","characterData","subtree","clearInterval","removeEvent","rootDoc","hasDependentTargets","itemDoc","unsubscribe","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","newEntry","_hasCrossedThreshold","getParentNode","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","overflow","computeRectIntersection","isDoc","html","right","clientWidth","bottom","clientHeight","_expandRectByRootMargin","rect","newRect","oldRatio","newRatio","containsDeep","timer","opt_useCapture","attachEvent","detachEvent","rect1","rect2","parentBoundingRect","parentIntersectionRect","child","assignedSlot","InVisibleView","scrollParentNode","setScrollParentNode","inViewCallback","useInViewEffect","NativeScroll","dpiHeight","clsName","IphoneBottomAdaptive","bgColor","backgroundColor","SwiperItem","swiperAutoSwitchPlugin","param","slider","mouseOver","clearNextTimeout","clearTimeout","nextTimeout","on","react","require$$0","floor","removeAttribute","querySelectorAll","HTMLElement","NodeList","o","raw","cancelable","defaultPrevented","u","c","addListener","nativeEvent","changedTouches","detail","identifier","idChanged","screenX","screenY","purge","removeListener","offsetHeight","offsetWidth","f","getOwnPropertyNames","m","track","emit","targetIdx","cancelAnimationFrame","details","earlyExit","distance","distToIdx","k","w","M","T","C","P","E","O","origin","rel","I","S","A","L","D","timestamp","rtl","portion","maxIdx","minIdx","slides","slidesLength","absToRel","idxToDist","trackConfig","lastTimestamp","dist","dur","rubberband","animator","moveToIdx","vertical","innerHeight","innerWidth","drag","dragSpeed","capture","passive","scrollWidth","overflowX","renderMode","matches","__media","breakpoints","matchMedia","spacing","selector","destroy","defaultAnimation","useKeenSlider","Swiper","currentSlide","setCurrentSlide","setInstance","getOption","slideChanged","_props$option","created","_props$option2","autoPlay","getPlugins","_useKeenSlider","sliderRef","dotRender","dot","onPrev","onNext","idx","getMoveSize","moveSize","getDefaultSize","ArrowIcon","dpiSize","ListItem","_props$arrow","showArrowIcon","arrowIconPorps","clickable","V","toVector","v1","v2","sub","addTo","subTo","dimension","constant","rubberbandIfOutOfBounds","computeRubberband","bounds","Vx","Vy","Rx","Ry","X0","X1","Y0","Y1","_defineProperty","enumerable","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","getOwnPropertyDescriptors","defineProperties","EVENT_TYPE_MAP","pointer","change","end","mouse","touch","gesture","capitalize","string","actionsWithoutCaptureSupported","hasCapture","actionKey","toHandlerProp","device","action","deviceProps","pointerCaptureEvents","parseProp","eventKey","captureKey","toDomEventType","isTouch","getPointerType","pointerType","getCurrentTargetTouchList","_event$currentTarget","_event$currentTarget$","currentTarget","contains","getTouchList","getValueEvent","distanceAngle","P1","P2","dx","clientX","dy","clientY","cx","cy","hypot","angle","atan2","touchIds","touchDistanceAngle","ids","pointerId","valueEvent","pointerValues","LINE_HEIGHT","PAGE_HEIGHT","wheelValues","deltaMode","scrollValues","scrollX","scrollY","getEventDetails","buttons","shiftKey","altKey","metaKey","ctrlKey","chain","fns","assignDefault","BEFORE_LAST_KINEMATICS_DELAY","Engine","computeValues","computeInitial","shared","eventStore","gestureEventStores","timeoutStore","gestureTimeoutStores","sharedConfig","handlers","ingKey","_blocked","_force","_step","intentional","_movement","_distance","_direction","_delta","_bounds","axis","memo","_movementBound","movement","delta","timeStamp","lastOffset","offset","startTime","_values","_initial","compute","pointerIds","locked","pointerLockElement","down","pressed","_absoluteDelta","axisIntent","_m0","_m1","t0","t1","hasCustomTransform","sign","restrictToAxis","previousOffset","gestureIsActive","first","last","setup","computeOffset","ox","oy","x0","x1","y0","y1","computeMovement","absoluteDelta","clean","triggerAllEvents","aliasKey","selectAxis","absDx","absDy","CoordinatesEngine","axisThreshold","lockDirection","DEFAULT_RUBBERBAND","commonConfigResolver","enabled","eventOptions","_k","process","env","NODE_ENV","originalTransform","isFinite","domTarget","NaN","DEFAULT_AXIS_THRESHOLD","coordinatesConfigResolver","_v","DISPLACEMENT","KEYS_DELTA_MAP","ArrowRight","factor","ArrowLeft","ArrowUp","ArrowDown","DragEngine","_pointerId","_pointerActive","_keyboardActive","_preventScroll","_delayed","swipe","tap","canceled","boundRect","pointerClean","pointerDown","pointerButtons","ctrlIds","setEventIds","pointerCapture","setPointerCapture","setupPointer","preventScrollAxis","setupScrollPrevention","setupDelayTrigger","startPointerDrag","pointerMove","movementX","movementY","pointerUp","hasPointerCapture","releasePointerCapture","_unused","tapsThreshold","filterTaps","dirx","diry","vx","vy","mx","my","svx","svy","sx","sy","sdt","pointerClick","preventScrollDelay","sourceEvent","_unused2","pointerLock","requestPointerLock","exitPointerLock","preventScroll","persistEvent","keyDown","deltaFn","keyUp","bindFunction","persist","supportsTouchEvents","isTouchScreen","maxTouchPoints","supportsPointerEvents","supportsPointerLock","supportsGestureEvents","GestureEvent","SUPPORT","touchscreen","DEFAULT_PREVENT_SCROLL_DELAY","DEFAULT_DRAG_DELAY","DEFAULT_SWIPE_VELOCITY","DEFAULT_SWIPE_DISTANCE","DEFAULT_SWIPE_DURATION","DEFAULT_DRAG_AXIS_THRESHOLD","pen","dragConfigResolver","useTouch","experimental_preventWindowScrollY","swipeVelocity","swipeDistance","swipeDuration","SCALE_ANGLE_RATIO_INTENT_DEG","PINCH_WHEEL_RATIO","PinchEngine","_pointerEvents","_touchIds","turns","axisMovementDifference","touchStart","ctrlTouchIds","pinchStart","pointerStart","ctrlPointerIds","touchMove","pinchMove","prev_a","delta_a","delta_turns","touchEnd","pointerEnd","gestureStart","rotation","gestureMove","_previousMovement","gestureEnd","wheel","modifierKey","wheelStart","wheelChange","wheelEnd","isR3f","pinchConfigResolver","scaleBounds","angleBounds","_scaleBounds","_angleBounds","MoveEngine","move","mouseOnly","moveStart","moveChange","moveEnd","moveConfigResolver","ScrollEngine","scrollChange","scrollEnd","scrollConfigResolver","WheelEngine","wheelConfigResolver","HoverEngine","hoverConfigResolver","EngineMap","ConfigResolverMap","registerAction","engine","resolver","dragAction","hoverAction","moveAction","pinchAction","scrollAction","wheelAction","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","sharedConfigResolver","resolveWith","resolvers","entries","parse","gestureKey","_config","rest","EventStore","_ctrl","_gestureKey","listeners","_listeners","_options","TimeoutStore","_timeouts","resolveGestures","applyHandlers","nativeHandlers","applyConfig","_targetEventStore","gestures","gestureConfig","bindToProps","nativeBindFunction","handlerProp","setupGesture","internalHandlers","pinch","hover","withPassiveOption","isNative","_options$capture","_options$passive","RE_NOT_NATIVE","sortHandlers","_handlers","native","lastMatch","registerGesture","handlerKey","startKey","endKey","parseMergedHandlers","mergedHandlers","mergedConfig","useRecognizers","useDrag","createUseGesture","useGesture","hook","bound","Column","itemHeight","pickerDataList","api","draggingRef","finalPosition","scrollSelect","Picker","getYearList","_flatbizDate$detail","minDateYear","_flatbizDate$detail2","maxDateYear","getMonthList","year","minDateInfo","maxDateInfo","minMonth","maxMonth","getDayList","month","maxDay","getDate","minDay","targetValueInDateItemList","dateItemList","targetValue","latelyDateItemValue","maxValue","minValue","DateView","currentDateRef","minDateRef","maxDateRef","yearList","setYearList","monthList","setMonthList","dayList","setDyList","selectedValueList","setSelectedValueList","getMinMaxDate","defaultDate","isDate","gt","onYearChange","pickerItem","nextYearValue","currentMonthValue","nextMonthValue","currentDayValue","nextDayValue","selectedDateItemList","selectedDate","onMonthChange","onDayChange","TabPane","usePropsListActiveValueChange","stateRef","If","TabContent","isFixed","tabsType","panes","pane","isActive","activeKey","lazyLoad","activatedKeyList","contentItemStyle","Tabs","tabListContainerRef","activeLineWidth","onPushActivatedKeyList","_usePropsListActiveVa","defaultActiveKey","setActiveKey","_useSpring$","_useSpring2","scrollApi","_useSpring3","leftMaskOpacity","rightMaskOpacity","_useSpring3$","maskApi","activeIndex","activeTabWrapper","activeTab","activeTabLeft","offsetLeft","activeTabWidth","containerWidth","containerScrollWidth","containerScrollLeft","newActiveLineWidth","maxScrollDistance","nextScrollLeft","useUpdateEffect","updateMask","useThrottleCallback","showLeftMask","showRightMask","onTabHeaderScroll","onTabClick","onPreChange","$If_1","hideTabsContent","hideTabsHeader","onScroll","hideActiveLine","leftRightMask","tabBarExtraContent","onTabBarExtraClick","adaptiveIphone","Pane","DateRangePicker","_props$leftOperateBtn2","currentStartDateRef","currentEndDateRef","setActiveIndex","startDate","setStartDate","endDate","setEndDate","initiativeStartDate","setInitiativeStartDate","initiativeEndDate","setInitiativeEndDate","useDeepCompareEffect","defaultStartDate","defaultEndDate","currentStartDate","currentEndDate","dateViewProps","startDateIsRequired","onChangeTab","onTabChange","onStartDateChange","startDateItem","isUnite","onEndDateChange","endDateItem","onLeftOperateBtn","_props$leftOperateBtn","leftOperateBtn","selectedStartDate","selectedEndDate","startDateProps","endDateProps","modalProps","header","btnName","attachPropertiesToComponent","component","properties","FormContext","omit","newTarget","getFormModalPickerValue","_isPlainObject","pickerValue","getFormModalValue","toLabelValue","inputRef","fieldValue","onInputChange","stringFormat","compositionstartHandle","compositionendHandle","convertProps","domTypeName","FormModal","_newProps$children","visibleChange","selectedDataRef","labelValue","isCustom","baseValue","dateRangeList","dateRangeValue","selectedDataList","baseValueList","isDequal","_newProps$value","isNumber","labelValueGroup","pickItem","onValueChange","selectedData","_newProps$value2","_newProps$value3","placeholder","suffix","adapter","FormText","clickTigger","setClickTigger","readOnly","Textarea","showCount","maxLength","getKeyboardKeyList","numberKeys","randomOrder","arrayRandomSort","customKey","number9Keys","showOkButton","KeyboardInner","timeoutRef","intervalRef","onBackSpace","onMouseUp","onInput","onTouchStart","onTouchEnd","keyboardKeyList","customKeyboardKeyList","gridColumns","onMouseDown","keyInfo","Keyboard","KeyboardModalInner","renderHeader","keyboardProps","KeyboardModal","prevProps","VirtualInput","_props$modalProps2","_props$modalProps3","keysRef","windowSize","useWindowSize","scrollRef","scrollPaddingBottomRef","onFocus","onBlur","changeScrollStyle","blur","autoConfirm","formatValue","pop","bodyRefHandle","paddingBottom","_bodyRef$current","_props$modalProps","scrollTarget","keyboardHeight","clientRect","domClientBottom","scrollTo","behavior","showValue","mainClassName","tabIndex","FormItemClear","onClear","FormItemLabel","showTips","onTips","ValidateError","_props$errorList$","errorList","showErrorMessage","FormItem","onValuesChange","formRef","scrollIntoView","registerField","setFieldsValueInner","getValidateErrorList","getFieldsValue","setFieldNameList","dependenciesFormItemValidate","formItemRef","setErrorList","childrenTypeName","toLocaleLowerCase","isInput","validateTriggerRef","fieldSortHandle","_formRef$current","nodes","onScrollIntoView","clearValidateMessage","onValidateResponse","changeClearStatus","clearNode","formItemValidate","validateTrigger","formItemValueChangeHandle","_setFieldsValueInner","onValueChangeCallback","onStoreValueChange","_onValuesChange","allValues","onItemValueChange","onInputClear","onInputFocus","_props$children","_props$children$props","onInputBlur","_props$children2","_props$children2$prop","trimValue","removeSpace","formItemChangeOperate","_props$children3","_props$children3$prop","newValue","isRequired","ruleItem","required","cancelRegister","layout","valueAlign","hideRequiredMark","childrenProps","FormStore","store","fieldNameList","fieldsMap","initialValues","field","setFieldsValue","newStore","newStoreValues","previous","_utils","deepEqual","_this$fieldsMap$key","parseRule","FieldRequiredrule","FieldRegExprule","regexpDf","reg","validateAllFields","_this$fieldsMap$key2","storeItemValue","requiredTarget","validateFields","allErrorList","_this$fieldsMap$item$","_this$fieldsMap$scrol","scrollName","validateFieldsRequired","validateField","nameList","_this$fieldsMap$name","onReset","_this$setFieldsValue","setInitialValues","_this$fieldsMap$name2","_this$fieldsMap$name3","_this$fieldsMap$name4","getForm","getFormInner","formStore","FormInner","_useForm","formInstance","formInstanceInner","Text","Image","_props$imgProps","lazy","showImage","setShowImage","loaded","setLoaded","failed","setFailed","setPlaceholder","inView","imgStyle","objectFit","fit","imgProps","src","onLoad","onError","ModalFull","Zoom","controlRef","pinchLockRef","onDrag","onTap","currentZoom","_state$offset","onPinch","_state$offset2","maxZoom","onZoomChange","ImageViewerInner","renderSwiper","setRenderSwiper","images","currentNum","setCurrentNum","swiperInstanceRef","swiperOption","initActiveIndex","dialogImageViewer","show","InfiniteScrollContent","hasMore","noMoreText","NativeInfiniteScroll","elementRef","loadFailed","setLoadFailed","doLoadMore","onLoadMore","onChangeInView","onChangeInView2","onFailedRequest","scrollToTop","NativePullToRefresh","_props$headHeight","_props$threshold","headHeight","setStatus","springStyles","pullingRef","doRefresh","$await_4","onRefresh","$await_5","completeDelay","sleep","$await_6","$If_2","_state$movement","scrollParent","renderStatusText","renderText","pullingText","canReleaseText","refreshingText","completeText","SmsCountDown","showMessage","setShowMessage","running","setRunning","starting","setStarting","initConfig","sendTxt","sentTxt","processingTxt","autoStart","totalTicks","countdownFnc","useCountdownCallback","second","onTick","intervalTime","onSendRequest","SimpleLayout","labelAlign","formLabelAlign","layoutType","titleClassName","titleLeftLine","titleExtra","desc","contentStyle","tableColumnTooltipRender","_record","_index","colunmText","showMaxNumber","strByteLen","getStrByteLen","cutString","tableColumnTagRender","tableColumnOperateRender","operateProps","tableColumnDateRender","dateFormatType","tableColumnIndexRender","pageNo","pageSize","tableCellRender","indexCell","dateCell","operateCell","tagCell","tooltipCell","treeSelectorList","treeSelectorTiledArray","TreeSelectorWrapperModel","treeSelectorWrapperModels","treeSelectorWrapperModel","getExpandedKeys","treeList","tiledArray","parentValue","treeSelectorWrapperValueDeepEqual","TreeSelectorWrapper","onTreeSelectorListChange","onTreeSelectorRequestError","_labelInValue","onTreeItemDataAdapter","_ref$selectedParentCh","selectedParentCheckedAllChildrenList","onChangeHandle","hasTreeSelectorList","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","treeCheckStrictly","innerOperateValue","setInnerOperateValue","expandedKeys","getTreeExpandedKeys","serviceResponseHandle","_respData2","onChangeSelectorList","tempItem","newdataList","treeToArray","onTreeExpand","refresh","newTreeExpandedKeys","parseDataSourceItem","parseLabelInValueItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","arrayFind","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","parseItem","realTreeNodeList","treeCheckable","showCheckedStrategy","realTreeNodeValueList","selectedValues","_data","_getResponseTreeNodeL","mergeList","_ref3","mapTree","itemAdapterData","TreeSelect","TreeNode","renderValueList","innerOperateValueList","_targetParseItem","_targetParseItem2","targetParseItem","defualtValue","getValueOrDefault","dropdownStyle","maxHeight","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","dropdownClassName","treeTiledArray","TreeWrapperModel","setTreeList","childrenName","resetTreeList","treeListAppendChildren","array","valueName","appendList","treeWrapperModels","treeWrapperModel","treeWrapperValueDeepEqual","TreeWrapper","selectorTreeList","checkableResponseParentNode","_props$checkableRespo","checkable","onSelectorTreeListChange","treeItemDataAdapter","searchValue","searchPlaceholder","disabledCanUse","hasSelectorTreeList","_treeWrapperModel$use","treeSearchValue","setTreeSearchValue","_params","$Try_2_Post","$Try_2_Catch","_item$label","getTreeDataList","onExpand","selectedKey","selectInfo","selectAllList","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","currentNode","nodeValue","treeItemDataAdapterHandle","dataItem","treeData","adapterItem","strTitle","titleDom","beforeStr","afterStr","_treeItemName","_disabled","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","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","Tree"],"mappings":"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"}
|