@flatbiz/antd 4.4.14 → 4.4.16

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.
Files changed (36) hide show
  1. package/esm/dialog-confirm/index.js +1 -1
  2. package/esm/dialog-confirm/index.js.map +1 -1
  3. package/esm/dialog-drawer/index.js +1 -1
  4. package/esm/dialog-drawer/index.js.map +1 -1
  5. package/esm/dialog-drawer-content/index.js.map +1 -1
  6. package/esm/dialog-modal/index.js +1 -1
  7. package/esm/dialog-modal/index.js.map +1 -1
  8. package/esm/drag-form-list/index.css +1 -1
  9. package/esm/drag-form-list/index.js +1 -1
  10. package/esm/drag-form-list/index.js.map +1 -1
  11. package/esm/easy-form/index.js +1 -1
  12. package/esm/easy-form/index.js.map +1 -1
  13. package/esm/editable-table/index.css +1 -1
  14. package/esm/fba-app/index.js +1 -1
  15. package/esm/fba-app/index.js.map +1 -1
  16. package/esm/form-item-group/index.js.map +1 -1
  17. package/esm/form-item-wrapper/index.js +1 -1
  18. package/esm/form-item-wrapper/index.js.map +1 -1
  19. package/esm/form-list-wrapper/index.css +1 -1
  20. package/esm/form-list-wrapper/index.js +1 -1
  21. package/esm/form-list-wrapper/index.js.map +1 -1
  22. package/esm/index.js +3 -2
  23. package/esm/label-value-render/index.css +1 -0
  24. package/esm/label-value-render/index.js +8 -0
  25. package/esm/label-value-render/index.js.map +1 -0
  26. package/esm/rich-text-editor/index.js +1 -1
  27. package/esm/rich-text-editor/index.js.map +1 -1
  28. package/esm/text-overflow/index.css +1 -1
  29. package/esm/text-overflow/index.js +1 -1
  30. package/esm/text-overflow/index.js.map +1 -1
  31. package/esm/text-symbol-wrapper/index.css +1 -1
  32. package/esm/tips-wrapper/index.css +1 -0
  33. package/esm/tips-wrapper/index.js +1 -1
  34. package/esm/tips-wrapper/index.js.map +1 -1
  35. package/index.d.ts +147 -52
  36. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { fbaHooks } from '../../fba-hooks';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { getStrByteLen, type TAny } from '@flatbiz/utils';\nimport { Editor, type IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { message } from 'antd';\nimport { useRef, useState } from 'react';\nimport { type Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange' | 'init'> {\n onChange?: (data?: string) => void;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n /** 图片点击预览 */\n imgPreview?: boolean;\n init?: IAllProps['init'] & {\n /**\n * 通过粘贴图片创建的img标签,显示压缩比例,此处min、max是和指图片宽度\n * ```\n * 1. 默认值:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n * ```\n */\n img_ratio?: { min: number; max?: number; ratio: number }[];\n /**\n * 粘贴文本大小限制\n * ```\n * 1. limit 限制大小,单位KB,例如限制2M,值为2*1024\n * 2. 限制提示文案\n * ```\n */\n paste_text_limit?: {\n limit: number;\n message: string;\n };\n /** 插件添加;自定义plugins后失效 */\n plugins_append?: string;\n /** 工具栏添加;自定义toolbar后失效 */\n toolbar_append?: string;\n };\n /** 点击全屏按钮回调 */\n onFullScreenChange?: (state?: boolean) => void;\n}\n\n/**\n * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6\n * @param props\n * @returns\n * ```\n * 1. 修改高度 init={{ height: 300 }}\n * 2. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 3. 获取富文本实例,通过onInit(_, editor)函数获取\n * 4. 预览富文本数据,使用 RichTextViewer 组件\n * 5. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append\n * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />\n * 6. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏\n * 7. 其他插件\n * emoticons 表情插件\n * 8. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例\n * 默认比例:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\n const imgRatio = props.init?.img_ratio || [\n { min: 0, max: 1000, ratio: 0.5 },\n { min: 1000, ratio: 0.3 },\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 useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n editor.on('FullscreenStateChanged', (e) => {\n props.onFullScreenChange?.(e.state);\n });\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n const getImgRatio = (width: number) => {\n if (imgRatio.length === 0) return 1;\n for (let index = 0; index < imgRatio.length; index++) {\n const element = imgRatio[index];\n if (element.max) {\n if (width >= element.min && width <= element.max) return element.ratio;\n } else {\n if (width >= element.min) return element.ratio;\n }\n }\n return 1;\n };\n\n const paste_postprocess = hooks.useCallbackRef((editor, args) => {\n try {\n const nodes = (args.node.children || []) as unknown as HTMLElement[];\n if (nodes.length === 1 && nodes[0].nodeName === 'IMG') {\n nodes[0].setAttribute('style', `display:none`);\n const img = document.createElement('img');\n img.src = nodes[0].getAttribute('src') as string;\n img.onload = () => {\n const ratio = getImgRatio(img.width);\n editor.execCommand(\n 'mceInsertContent',\n true,\n `<img src=\"${img.src}\" width=\"${img.width * ratio}\" height=\"${img.height * ratio}\" />`,\n );\n };\n }\n } catch (error) {\n //\n }\n });\n\n const paste_preprocess = hooks.useCallbackRef((_plugin, args) => {\n const paste_text_limit = props.init?.paste_text_limit;\n if (paste_text_limit) {\n const byteLen = getStrByteLen(args.content);\n if (byteLen > 1024 * paste_text_limit.limit) {\n message.error(paste_text_limit.message);\n args.content = '';\n }\n }\n });\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n // apiKey=\"ds6j8so4g3d2cycidbhgkds36q0phy1uqd9jd8bot91sfe5l\"\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: 500,\n paste_data_images: onUploadImage ? true : false,\n paste_postprocess,\n paste_preprocess,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n autoresize_bottom_margin: 0,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error: any) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n plugins:\n 'lists link image advlist charmap preview fullscreen code table help codesample ' +\n (props.init?.plugins_append || ''),\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsize blocks |' +\n 'forecolor backcolor removeformat |' +\n 'numlist bullist advlist |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent |' +\n 'hr image link code codesample |' +\n (props.init?.toolbar_append || ''),\n font_size_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n ...props.init,\n content_style: `img {max-width:100%;} table{width:100%} ${props.init?.content_style}`,\n convert_urls: false,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\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"],"names":["Preview","props","visible","url","fbaHooks","useEffectCustom","dynamicNode","append","content","_jsx","_PlusCircleOutlined","onClick","close","className","twoToneColor","remove","_Fragment","Fragment","children","Image","style","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","_props$init","_props$init3","_props$init4","_props$init5","onUploadImage","onChange","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","_useState","useState","previewUrl","setPreviewUrl","imgRatio","init","img_ratio","min","max","ratio","useKeyPress","event","type","key","_editorRef$current","isFull","current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","error","events","onKeyDown","_hooks","useCallbackRef","editor","keyCode","_editorRef$current3","_editorRef$current4","onInit","_","on","e","onFullScreenChange","state","_editor$iframeElement","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","target","onEditorChange","a","tinymceBaseUrl","getImgRatio","width","length","index","element","paste_postprocess","args","nodes","node","nodeName","setAttribute","img","document","createElement","getAttribute","onload","height","paste_preprocess","_plugin","_props$init2","paste_text_limit","byteLen","getStrByteLen","limit","message","_jsxs","_classNames","Editor","_extends","tinymceScriptSrc","promotion","language","paste_data_images","autosave_ask_before_unload","base_url","autoresize_bottom_margin","images_upload_handler","blobInfo","Promise","$return","$error","blob","_file","respData","$Try_5_Catch","reject","$boundEx","file","File","name","resolve","then","$await_6","plugins","plugins_append","toolbar","toolbar_append","font_size_formats","content_style","convert_urls"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { fbaHooks } from '../../fba-hooks';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { getStrByteLen, type TAny } from '@flatbiz/utils';\nimport { Editor, type IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { message } from 'antd';\nimport { useRef, useState } from 'react';\nimport { type Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange' | 'init'> {\n /** 设置高度,默认:500 */\n height?: number;\n onChange?: (data?: string) => void;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n /** 图片点击预览 */\n imgPreview?: boolean;\n init?: IAllProps['init'] & {\n /**\n * 通过粘贴图片创建的img标签,显示压缩比例,此处min、max是和指图片宽度\n * ```\n * 1. 默认值:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n * ```\n */\n img_ratio?: { min: number; max?: number; ratio: number }[];\n /**\n * 粘贴文本大小限制\n * ```\n * 1. limit 限制大小,单位KB,例如限制2M,值为2*1024\n * 2. 限制提示文案\n * ```\n */\n paste_text_limit?: {\n limit: number;\n message: string;\n };\n /** 插件添加;自定义plugins后失效 */\n plugins_append?: string;\n /** 工具栏添加;自定义toolbar后失效 */\n toolbar_append?: string;\n };\n /** 点击全屏按钮回调 */\n onFullScreenChange?: (state?: boolean) => void;\n className?: string;\n}\n\n/**\n * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 获取富文本实例,通过onInit(_, editor)函数获取\n * 3. 预览富文本数据,使用 RichTextViewer 组件\n * 4. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append\n * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />\n * 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏\n * 6. 其他插件\n * emoticons 表情插件\n * 7. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例\n * 默认比例:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, height, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\n const imgRatio = props.init?.img_ratio || [\n { min: 0, max: 1000, ratio: 0.5 },\n { min: 1000, ratio: 0.3 },\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 useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n editor.on('FullscreenStateChanged', (e) => {\n props.onFullScreenChange?.(e.state);\n });\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n const getImgRatio = (width: number) => {\n if (imgRatio.length === 0) return 1;\n for (let index = 0; index < imgRatio.length; index++) {\n const element = imgRatio[index];\n if (element.max) {\n if (width >= element.min && width <= element.max) return element.ratio;\n } else {\n if (width >= element.min) return element.ratio;\n }\n }\n return 1;\n };\n\n const paste_postprocess = hooks.useCallbackRef((editor, args) => {\n try {\n const nodes = (args.node.children || []) as unknown as HTMLElement[];\n if (nodes.length === 1 && nodes[0].nodeName === 'IMG') {\n nodes[0].setAttribute('style', `display:none`);\n const img = document.createElement('img');\n img.src = nodes[0].getAttribute('src') as string;\n img.onload = () => {\n const ratio = getImgRatio(img.width);\n editor.execCommand(\n 'mceInsertContent',\n true,\n `<img src=\"${img.src}\" width=\"${img.width * ratio}\" height=\"${img.height * ratio}\" />`,\n );\n };\n }\n } catch (error) {\n //\n }\n });\n\n const paste_preprocess = hooks.useCallbackRef((_plugin, args) => {\n const paste_text_limit = props.init?.paste_text_limit;\n if (paste_text_limit) {\n const byteLen = getStrByteLen(args.content);\n if (byteLen > 1024 * paste_text_limit.limit) {\n message.error(paste_text_limit.message);\n args.content = '';\n }\n }\n });\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: height,\n paste_data_images: onUploadImage ? true : false,\n paste_postprocess,\n paste_preprocess,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n autoresize_bottom_margin: 0,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error: any) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n plugins:\n 'lists link image advlist charmap preview fullscreen code table help codesample ' +\n (props.init?.plugins_append || ''),\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsize blocks |' +\n 'forecolor backcolor removeformat |' +\n 'numlist bullist advlist |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent |' +\n 'hr image link code codesample |' +\n (props.init?.toolbar_append || ''),\n font_size_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n ...props.init,\n content_style: `img {max-width:100%;} table{width:100%} ${props.init?.content_style}`,\n convert_urls: false,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\n />\n </div>\n );\n};\n"],"names":["Preview","props","visible","url","fbaHooks","useEffectCustom","dynamicNode","append","content","_jsx","_PlusCircleOutlined","onClick","close","className","twoToneColor","remove","_Fragment","Fragment","children","Image","style","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","_props$init","_props$init3","_props$init4","_props$init5","onUploadImage","onChange","height","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","_useState","useState","previewUrl","setPreviewUrl","imgRatio","init","img_ratio","min","max","ratio","useKeyPress","event","type","key","_editorRef$current","isFull","current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","error","events","onKeyDown","_hooks","useCallbackRef","editor","keyCode","_editorRef$current3","_editorRef$current4","onInit","_","on","e","onFullScreenChange","state","_editor$iframeElement","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","target","onEditorChange","a","tinymceBaseUrl","getImgRatio","width","length","index","element","paste_postprocess","args","nodes","node","nodeName","setAttribute","img","document","createElement","getAttribute","onload","paste_preprocess","_plugin","_props$init2","paste_text_limit","byteLen","getStrByteLen","limit","message","_jsxs","_classNames","Editor","_extends","tinymceScriptSrc","promotion","language","paste_data_images","autosave_ask_before_unload","base_url","autoresize_bottom_margin","images_upload_handler","blobInfo","Promise","$return","$error","blob","_file","respData","$Try_5_Catch","reject","$boundEx","file","File","name","resolve","then","$await_6","plugins","plugins_append","toolbar","toolbar_append","font_size_formats","content_style","convert_urls"],"mappings":"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"}
@@ -1 +1 @@
1
- .text-overflow{display:flex;overflow:hidden;width:100%}.tow-content{position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.tow-content,.tow-hidden{display:inline-block;overflow:hidden}.tow-hidden{height:0;left:0;position:absolute;top:0;width:0}.tow-hidden span{white-space:nowrap}.tow-hidden span,.tow-inner-text{display:inline-block}.tow-trigger .tow-content,.tow-trigger .tow-cut-content{color:#1677ff;transition:color .3s}.tow-trigger .tow-show-text{cursor:pointer}.tow-trigger .tow-show-text:hover{color:#69b1ff}
1
+ .text-overflow{display:flex;overflow:hidden;width:100%}.tow-content{position:relative;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;width:100%}.tow-content,.tow-hidden{display:inline-block;overflow:hidden}.tow-hidden{height:0;left:0;position:absolute;top:0;width:0}.tow-hidden span{white-space:nowrap}.tow-hidden span,.tow-inner-text{display:inline-block}.tow-trigger .tow-content,.tow-trigger .tow-cut-content{color:#1677ff;transition:color .3s}.tow-trigger .tow-show-text{cursor:pointer}.tow-trigger .tow-show-text:hover{color:#69b1ff}
@@ -2,5 +2,5 @@
2
2
  import './../fba-hooks/index.css';
3
3
  import './index.css';
4
4
  /*! @flatjs/forge MIT @flatbiz/antd */
5
- import{_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{useRef as e,Fragment as r,useMemo as n,memo as i}from"react";import{classNames as a}from"@dimjs/utils/cjs/class-names";import{useSize as o}from"ahooks";import{Tooltip as l}from"antd";import{fbaHooks as c}from"../fba-hooks/index.js";import{jsx as s,jsxs as u}from"react/jsx-runtime";import{getStrByteLen as d,subStringByBytes as m}from"@flatbiz/utils";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-21b8c601.js";var h=function t(n){var i=e(null);var d=o(i);var m=(d==null?void 0:d.width)||0;var h=c.useMemoCustom((function(){if(i.current){var t;var e=((t=i.current.querySelector(".tow-inner-text"))==null?void 0:t.clientWidth)||0;return e}return 0}),[i.current]);var v=h>m;return s(r,{children:u("div",{className:a("text-overflow",{"tow-trigger":n.onClick}),ref:i,children:[s("span",{className:"tow-hidden",children:s("span",{className:"tow-inner-text",children:n.text})}),s(l,{title:v?n.text:undefined,children:s("span",{className:"tow-content",children:s("span",{className:"tow-show-text",onClick:n.onClick,children:n.text})})})]})})};var v=function t(n){var i=e(null);var h=o(i);var v=n.maxLength;var f=(h==null?void 0:h.width)||0;var x=c.useMemoCustom((function(){return d(n.text)>v*2}),[v,n.text]);var w=c.useMemoCustom((function(){if(i.current){var t;var e=((t=i.current.querySelector(".tow-inner-text"))==null?void 0:t.clientWidth)||0;return e}return 0}),[i.current]);var p=x&&w<f;var N=f<w+1||x;return s(r,{children:u("div",{className:a("text-overflow",{"tow-trigger":n.onClick}),ref:i,children:[s("span",{className:"tow-hidden",children:s("span",{className:"tow-inner-text",children:m(n.text,n.maxLength*2)})}),s(l,{title:N?n.text:undefined,children:p?s("span",{className:"tow-cut-content",children:u("span",{className:"tow-show-text",onClick:n.onClick,children:[m(n.text,n.maxLength*2),"..."]})}):s("span",{className:"tow-content",children:s("span",{className:"tow-show-text",onClick:n.onClick,children:n.text})})})]})})};var f=function t(i){var d=e(null);var m=o(d);var h=(m==null?void 0:m.width)||0;var v=i.maxWidth||0;var f=c.useMemoCustom((function(){if(d.current){var t;var e=((t=d.current.querySelector(".tow-inner-text"))==null?void 0:t.clientWidth)||0;return e}return 0}),[d.current]);var x=n((function(){if(f<v)return undefined;var t=f>v?v:f;if(h>t){return t}return undefined}),[f,v,h]);var w=x||f>h;return s(r,{children:u("div",{className:a("text-overflow",{"tow-trigger":i.onClick}),ref:d,children:[s("span",{className:"tow-hidden",children:s("span",{className:"tow-inner-text",children:i.text})}),s(l,{title:w?i.text:undefined,children:s("span",{className:"tow-content",style:{width:x},children:s("span",{className:"tow-show-text",onClick:i.onClick,children:i.text})})})]})})};var x=function e(r){if(r.maxLength){return s(v,t({},r))}if(r.maxWidth){return s(f,t({},r))}return s(h,t({},r))};var w=i(x,(function(t,e){if(t.text!==e.text||t.maxLength!==e.maxLength||t.maxWidth!==t.maxWidth){return false}return true}));export{w as TextOverflow};
5
+ import{_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{isString as e}from"@dimjs/lang/cjs/is-string";import{useRef as r,Fragment as n,useMemo as i,memo as a}from"react";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{useSize as l}from"ahooks";import{Tooltip as c}from"antd";import{fbaHooks as s}from"../fba-hooks/index.js";import{jsx as u,jsxs as d}from"react/jsx-runtime";import{getStrByteLen as m,subStringByBytes as h}from"@flatbiz/utils";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-21b8c601.js";var v=function t(e){var i=r(null);var a=l(i);var m=(a==null?void 0:a.width)||0;var h=s.useMemoCustom((function(){if(i.current){var t;var e=((t=i.current.querySelector(".tow-inner-text"))==null?void 0:t.clientWidth)||0;return e}return 0}),[i.current]);var v=h>m;return u(n,{children:d("div",{className:o("text-overflow",{"tow-trigger":e.onClick}),ref:i,children:[u("span",{className:"tow-hidden",children:u("span",{className:"tow-inner-text",children:e.text})}),u(c,{title:v?e.text:undefined,children:u("span",{className:"tow-content",children:u("span",{className:"tow-show-text",onClick:e.onClick,children:e.text})})})]})})};var f=function t(e){var i=r(null);var a=l(i);var v=e.maxLength;var f=(a==null?void 0:a.width)||0;var x=e.text;var w=s.useMemoCustom((function(){return m(x)>v*2}),[v,x]);var p=s.useMemoCustom((function(){if(i.current){var t;var e=((t=i.current.querySelector(".tow-inner-text"))==null?void 0:t.clientWidth)||0;return e}return 0}),[i.current]);var N=w&&p<f;var g=f<p+1||w;return u(n,{children:d("div",{className:o("text-overflow",{"tow-trigger":e.onClick}),ref:i,children:[u("span",{className:"tow-hidden",children:u("span",{className:"tow-inner-text",children:h(x,e.maxLength*2)})}),u(c,{title:g?x:undefined,children:N?u("span",{className:"tow-cut-content",children:d("span",{className:"tow-show-text",onClick:e.onClick,children:[h(x,e.maxLength*2),"..."]})}):u("span",{className:"tow-content",children:u("span",{className:"tow-show-text",onClick:e.onClick,children:x})})})]})})};var x=function t(e){var a=r(null);var m=l(a);var h=(m==null?void 0:m.width)||0;var v=e.maxWidth||0;var f=s.useMemoCustom((function(){if(a.current){var t;var e=((t=a.current.querySelector(".tow-inner-text"))==null?void 0:t.clientWidth)||0;return e}return 0}),[a.current]);var x=i((function(){if(f<v)return undefined;var t=f>v?v:f;if(h>t){return t}return undefined}),[f,v,h]);var w=x||f>h;return u(n,{children:d("div",{className:o("text-overflow",{"tow-trigger":e.onClick}),ref:a,children:[u("span",{className:"tow-hidden",children:u("span",{className:"tow-inner-text",children:e.text})}),u(c,{title:w?e.text:undefined,children:u("span",{className:"tow-content",style:{width:x},children:u("span",{className:"tow-show-text",onClick:e.onClick,children:e.text})})})]})})};var w=function r(n){if(n.maxLength&&e(n.text)){return u(f,t({},n))}if(n.maxWidth){return u(x,t({},n))}return u(v,t({},n))};var p=a(w,(function(t,e){if(t.text!==e.text||t.maxLength!==e.maxLength||t.maxWidth!==t.maxWidth){return false}return true}));export{p as TextOverflow};
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/text-overflow/overflow-auto.tsx","@flatbiz/antd/src/text-overflow/overflow-length.tsx","@flatbiz/antd/src/text-overflow/overflow-width.tsx","@flatbiz/antd/src/text-overflow/text-overflow.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { Fragment, useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowAuto = (props: TextOverflowProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const parentNodeWidth = size?.width || 0;\n\n // 文本宽度\n const textWidth = fbaHooks.useMemoCustom(() => {\n if (rootRef.current) {\n // 裁切后元素宽度\n const textWidth = rootRef.current.querySelector('.tow-inner-text')?.clientWidth || 0;\n return textWidth;\n }\n return 0;\n }, [rootRef.current]);\n\n const showTips = textWidth > parentNodeWidth;\n\n return (\n <Fragment>\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\">{props.text}</span>\n </span>\n\n <Tooltip title={showTips ? props.text : undefined}>\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { getStrByteLen, subStringByBytes } from '@flatbiz/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { Fragment, useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowLength = (props: Omit<TextOverflowProps, 'maxWidth'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const maxLength = props.maxLength as number;\n const parentNodeWidth = size?.width || 0;\n\n const needCut = fbaHooks.useMemoCustom(() => {\n return getStrByteLen(props.text) > maxLength * 2;\n }, [maxLength, props.text]);\n\n // 裁切后文本宽度\n const cutedTextWidth = fbaHooks.useMemoCustom(() => {\n if (rootRef.current) {\n // 裁切后元素宽度\n const cutContentWidth = rootRef.current.querySelector('.tow-inner-text')?.clientWidth || 0;\n\n return cutContentWidth;\n }\n return 0;\n }, [rootRef.current]);\n\n const showCustomEllipsis = needCut && cutedTextWidth < parentNodeWidth;\n\n const showTips = parentNodeWidth < cutedTextWidth + 1 || needCut;\n\n return (\n <Fragment>\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\">\n {subStringByBytes(props.text, (props.maxLength as number) * 2)}\n </span>\n </span>\n\n <Tooltip title={showTips ? props.text : undefined}>\n {showCustomEllipsis ? (\n <span className=\"tow-cut-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {subStringByBytes(props.text, (props.maxLength as number) * 2)}\n ...\n </span>\n </span>\n ) : (\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n )}\n </Tooltip>\n </div>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { Fragment, useMemo, useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowWidth = (props: Omit<TextOverflowProps, 'maxLength'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const parentNodeWidth = size?.width || 0;\n const maxWidth = props.maxWidth || 0;\n\n // 文本宽度\n const textWidth = fbaHooks.useMemoCustom(() => {\n if (rootRef.current) {\n // 裁切后元素宽度\n const textWidth = rootRef.current.querySelector('.tow-inner-text')?.clientWidth || 0;\n return textWidth;\n }\n return 0;\n }, [rootRef.current]);\n\n const showTextWidth = useMemo(() => {\n if (textWidth < maxWidth) return undefined;\n const textWidthBast = textWidth > maxWidth ? maxWidth : textWidth;\n if (parentNodeWidth > textWidthBast) {\n return textWidthBast;\n }\n return undefined;\n }, [textWidth, maxWidth, parentNodeWidth]);\n const showTips = showTextWidth || textWidth > parentNodeWidth;\n\n return (\n <Fragment>\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\">{props.text}</span>\n </span>\n\n <Tooltip title={showTips ? props.text : undefined}>\n <span className=\"tow-content\" style={{ width: showTextWidth }}>\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n </Fragment>\n );\n};\n","import { memo } from 'react';\nimport { OverflowAuto } from './overflow-auto';\nimport { OverflowLength } from './overflow-length';\nimport { OverflowWidth } from './overflow-width';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nconst InnerTextOverflow = (props: TextOverflowProps) => {\n if (props.maxLength) {\n return <OverflowLength {...props} />;\n }\n if (props.maxWidth) {\n return <OverflowWidth {...props} />;\n }\n return <OverflowAuto {...props} />;\n};\n\n/**\n * 内容溢出截取,并在尾部添加...,被截取的添加Tooltip显示完整数据\n * ```\n * 控制文本显示三种方式\n * 1. 通过 maxLength 控制超长\n * 2. 通过 maxWidth 控制超长\n * 3. 与父节点宽度比较,控制超长\n * 4. 优先级 maxLength > maxWidth\n *\n * 注意:\n * 1. 当前节点父节点需要添加 overflow-x: hidden;\n * 2. 如果父节点设置flex-shrink会有影响,可复写flex-shrink: initial;\n * 3. 与 Table columns render结合使用,需要配置ellipsis=true\n * 例如:<Table columns={[{\n ...\n render: (value) => {\n return <TextOverflow text={value} />;\n },\n ellipsis: true,\n }]} />\n 4. 与 Table columns render结合使用,如果Table配置了 scroll={{ x: 'max-content' }}后,不能与TextOverflow maxWidth结合使用\n * ```\n */\nexport const TextOverflow = memo(InnerTextOverflow, (pre, next) => {\n if (pre.text !== next.text || pre.maxLength !== next.maxLength || pre.maxWidth !== pre.maxWidth) {\n return false;\n }\n return true;\n});\n"],"names":["OverflowAuto","props","rootRef","useRef","size","useSize","parentNodeWidth","width","textWidth","fbaHooks","useMemoCustom","current","_rootRef$current$quer","querySelector","clientWidth","showTips","_jsx","Fragment","children","_jsxs","className","_classNames","onClick","ref","text","Tooltip","title","undefined","OverflowLength","maxLength","needCut","getStrByteLen","cutedTextWidth","cutContentWidth","showCustomEllipsis","subStringByBytes","OverflowWidth","maxWidth","showTextWidth","useMemo","textWidthBast","style","InnerTextOverflow","_extends","TextOverflow","memo","pre","next"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/text-overflow/overflow-auto.tsx","@flatbiz/antd/src/text-overflow/overflow-length.tsx","@flatbiz/antd/src/text-overflow/overflow-width.tsx","@flatbiz/antd/src/text-overflow/text-overflow.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { Fragment, useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowAuto = (props: TextOverflowProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const parentNodeWidth = size?.width || 0;\n\n // 文本宽度\n const textWidth = fbaHooks.useMemoCustom(() => {\n if (rootRef.current) {\n // 裁切后元素宽度\n const textWidth = rootRef.current.querySelector('.tow-inner-text')?.clientWidth || 0;\n return textWidth;\n }\n return 0;\n }, [rootRef.current]);\n\n const showTips = textWidth > parentNodeWidth;\n\n return (\n <Fragment>\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\">{props.text}</span>\n </span>\n <Tooltip title={showTips ? props.text : undefined}>\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { getStrByteLen, subStringByBytes } from '@flatbiz/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { Fragment, useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowLength = (props: Omit<TextOverflowProps, 'maxWidth'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const maxLength = props.maxLength as number;\n const parentNodeWidth = size?.width || 0;\n const text = props.text as string;\n\n const needCut = fbaHooks.useMemoCustom(() => {\n return getStrByteLen(text) > maxLength * 2;\n }, [maxLength, text]);\n\n // 裁切后文本宽度\n const cutedTextWidth = fbaHooks.useMemoCustom(() => {\n if (rootRef.current) {\n // 裁切后元素宽度\n const cutContentWidth = rootRef.current.querySelector('.tow-inner-text')?.clientWidth || 0;\n\n return cutContentWidth;\n }\n return 0;\n }, [rootRef.current]);\n\n const showCustomEllipsis = needCut && cutedTextWidth < parentNodeWidth;\n\n const showTips = parentNodeWidth < cutedTextWidth + 1 || needCut;\n\n return (\n <Fragment>\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\">{subStringByBytes(text, (props.maxLength as number) * 2)}</span>\n </span>\n\n <Tooltip title={showTips ? text : undefined}>\n {showCustomEllipsis ? (\n <span className=\"tow-cut-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {subStringByBytes(text, (props.maxLength as number) * 2)}\n ...\n </span>\n </span>\n ) : (\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {text}\n </span>\n </span>\n )}\n </Tooltip>\n </div>\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { Fragment, useMemo, useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowWidth = (props: Omit<TextOverflowProps, 'maxLength'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const parentNodeWidth = size?.width || 0;\n const maxWidth = props.maxWidth || 0;\n\n // 文本宽度\n const textWidth = fbaHooks.useMemoCustom(() => {\n if (rootRef.current) {\n // 裁切后元素宽度\n const textWidth = rootRef.current.querySelector('.tow-inner-text')?.clientWidth || 0;\n return textWidth;\n }\n return 0;\n }, [rootRef.current]);\n\n const showTextWidth = useMemo(() => {\n if (textWidth < maxWidth) return undefined;\n const textWidthBast = textWidth > maxWidth ? maxWidth : textWidth;\n if (parentNodeWidth > textWidthBast) {\n return textWidthBast;\n }\n return undefined;\n }, [textWidth, maxWidth, parentNodeWidth]);\n const showTips = showTextWidth || textWidth > parentNodeWidth;\n\n return (\n <Fragment>\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\">{props.text}</span>\n </span>\n\n <Tooltip title={showTips ? props.text : undefined}>\n <span className=\"tow-content\" style={{ width: showTextWidth }}>\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n </Fragment>\n );\n};\n","import { isString } from '@dimjs/lang';\nimport { memo } from 'react';\nimport { OverflowAuto } from './overflow-auto';\nimport { OverflowLength } from './overflow-length';\nimport { OverflowWidth } from './overflow-width';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nconst InnerTextOverflow = (props: TextOverflowProps) => {\n if (props.maxLength && isString(props.text)) {\n return <OverflowLength {...props} />;\n }\n if (props.maxWidth) {\n return <OverflowWidth {...props} />;\n }\n return <OverflowAuto {...props} />;\n};\n\n/**\n * 内容溢出截取,并在尾部添加...,被截取的添加Tooltip显示完整数据\n * ```\n * 控制文本显示三种方式\n * 1. 通过 maxLength 控制超长\n * 2. 通过 maxWidth 控制超长\n * 3. 与父节点宽度比较,控制超长\n * 4. 优先级 maxLength > maxWidth\n *\n * 注意:\n * 1. 当前节点父节点需要添加 overflow-x: hidden;\n * 2. 如果父节点设置flex-shrink会有影响,可复写flex-shrink: initial;\n * 3. 与 Table columns render结合使用,需要配置ellipsis=true\n * 例如:<Table columns={[{\n ...\n render: (value) => {\n return <TextOverflow text={value} />;\n },\n ellipsis: true,\n }]} />\n 4. 与 Table columns render结合使用,如果Table配置了 scroll={{ x: 'max-content' }}后,不能与TextOverflow maxWidth结合使用\n * ```\n */\nexport const TextOverflow = memo(InnerTextOverflow, (pre, next) => {\n if (pre.text !== next.text || pre.maxLength !== next.maxLength || pre.maxWidth !== pre.maxWidth) {\n return false;\n }\n return true;\n});\n"],"names":["OverflowAuto","props","rootRef","useRef","size","useSize","parentNodeWidth","width","textWidth","fbaHooks","useMemoCustom","current","_rootRef$current$quer","querySelector","clientWidth","showTips","_jsx","Fragment","children","_jsxs","className","_classNames","onClick","ref","text","Tooltip","title","undefined","OverflowLength","maxLength","needCut","getStrByteLen","cutedTextWidth","cutContentWidth","showCustomEllipsis","subStringByBytes","OverflowWidth","maxWidth","showTextWidth","useMemo","textWidthBast","style","InnerTextOverflow","_isString","_extends","TextOverflow","memo","pre","next"],"mappings":"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"}
@@ -1 +1 @@
1
- .text-symbol-wrapper{position:relative}.tsw-symbol{font-size:14px;line-height:normal;position:absolute;top:50%}.tsw-symbol-before{transform:translate(-100%,-50%)}.tsw-symbol-after{transform:translate(100%,-50%)}.tsw-required .tsw-symbol{color:#ff4d4f}
1
+ .text-symbol-wrapper{display:inline-block;position:relative}.tsw-symbol{font-size:14px;line-height:normal;position:absolute;top:50%}.tsw-symbol-before{transform:translate(-100%,-50%)}.tsw-symbol-after{transform:translate(100%,-50%)}.tsw-required .tsw-symbol{color:#ff4d4f}
@@ -0,0 +1 @@
1
+ .tips-wrapper{align-items:center;display:inline-flex}.tips-wrapper-icon{flex-shrink:0;opacity:.8}.tips-wrapper-text{flex:1;overflow:hidden}
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable */
2
2
  import './index.css';
3
3
  /*! @flatjs/forge MIT @flatbiz/antd */
4
- import{_ as e}from"../_rollupPluginBabelHelpers-a0769acd.js";import i from"@ant-design/icons/es/icons/QuestionCircleOutlined";import{isUndefinedOrNull as l}from"@flatbiz/utils";import{Space as r,Tooltip as s,Popover as n}from"antd";import{Fragment as c}from"react";import{jsx as a,jsxs as t}from"react/jsx-runtime";var o=function o(p){var d=p.icon||a(i,{});var h=p.trigger||"icon";var y=l(p.gap)?3:p.gap;if(p.tipType==="tooltip"&&h==="icon"){return t(r,{size:y,className:p.className,style:p.style,children:[a("span",{children:p.children}),a(s,e({},p.tooltipProps,{children:a("span",{style:{opacity:.7},children:d})}))]})}if(p.tipType==="tooltip"&&h==="all"){return a(s,e({},p.tooltipProps,{children:t(r,{size:y,className:p.className,style:p.style,children:[a("span",{children:p.children}),a("span",{children:d})]})}))}if(p.tipType==="popover"&&h==="icon"){return t(r,{size:y,className:p.className,style:p.style,children:[a("span",{children:p.children}),a(n,e({},p.popoverProps,{children:a("span",{style:{opacity:.8},children:d})}))]})}if(p.tipType==="popover"&&h==="all"){return a(n,e({},p.popoverProps,{children:t(r,{size:y,className:p.className,style:p.style,children:[a("span",{children:p.children}),a("span",{style:{opacity:.8},children:d})]})}))}if(p.onClick&&h==="icon"){return t(r,{size:y,className:p.className,style:p.style,children:[a("span",{children:p.children}),a("span",{onClick:p.onClick,style:{opacity:.8},children:d})]})}if(p.onClick&&h==="all"){return t(r,{size:y,className:p.className,style:p.style,onClick:p.onClick,children:[a("span",{children:p.children}),a("span",{style:{opacity:.8},children:d})]})}if(p.icon){return t(r,{size:y,className:p.className,style:p.style,children:[a("span",{children:p.children}),a("span",{style:{opacity:.8},children:p.icon})]})}return a(c,{children:p.children})};export{o as TipsWrapper};
4
+ import{_ as e}from"../_rollupPluginBabelHelpers-a0769acd.js";import{classNames as s}from"@dimjs/utils/cjs/class-names";import r from"@ant-design/icons/es/icons/QuestionCircleOutlined";import{isUndefinedOrNull as i}from"@flatbiz/utils";import{Tooltip as a,Popover as p}from"antd";import{Fragment as l}from"react";import{jsx as t,jsxs as n}from"react/jsx-runtime";var c=function c(o){var m=o.icon||t(r,{});var h=o.trigger||"icon";var d=i(o.gap)?3:o.gap;if(o.tipType==="tooltip"&&h==="icon"){return n("span",{className:s("tips-wrapper",o.className),style:o.style,children:[t("span",{className:"tips-wrapper-text",style:{marginRight:d},children:o.children}),t(a,e({},o.tooltipProps,{children:t("span",{className:"tips-wrapper-icon",children:m})}))]})}if(o.tipType==="tooltip"&&h==="all"){return t(a,e({},o.tooltipProps,{children:n("span",{className:s("tips-wrapper",o.className),style:o.style,children:[t("span",{className:"tips-wrapper-text",style:{marginRight:d},children:o.children}),t("span",{className:"tips-wrapper-icon",children:m})]})}))}if(o.tipType==="popover"&&h==="icon"){return n("span",{className:s("tips-wrapper",o.className),style:o.style,children:[t("span",{className:"tips-wrapper-text",style:{marginRight:d},children:o.children}),t(p,e({},o.popoverProps,{children:t("span",{className:"tips-wrapper-icon",children:m})}))]})}if(o.tipType==="popover"&&h==="all"){return t(p,e({},o.popoverProps,{children:n("span",{className:s("tips-wrapper",o.className),style:o.style,children:[t("span",{className:"tips-wrapper-text",style:{marginRight:d},children:o.children}),t("span",{className:"tips-wrapper-icon",children:m})]})}))}if(o.onClick&&h==="icon"){return n("span",{className:s("tips-wrapper",o.className),style:o.style,children:[t("span",{className:"tips-wrapper-text",style:{marginRight:d},children:o.children}),t("span",{onClick:o.onClick,className:"tips-wrapper-icon",children:m})]})}if(o.onClick&&h==="all"){return n("span",{className:s("tips-wrapper",o.className),style:o.style,onClick:o.onClick,children:[t("span",{className:"tips-wrapper-text",style:{marginRight:d},children:o.children}),t("span",{className:"tips-wrapper-icon",children:m})]})}if(o.icon){return n("span",{className:s("tips-wrapper",o.className),style:o.style,children:[t("span",{className:"tips-wrapper-text",style:{marginRight:d},children:o.children}),t("span",{className:"tips-wrapper-icon",children:m})]})}return t(l,{children:o.children})};export{c as TipsWrapper};
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tips-wrapper/tips-wrapper.tsx"],"sourcesContent":["import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Popover, PopoverProps, Space, Tooltip, TooltipProps } from 'antd';\nimport { Fragment, ReactNode, type CSSProperties, type ReactElement } from 'react';\n\nexport type TipsWrapperProps = {\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n icon?: ReactElement;\n /** Icon添加点击事件,设置hoverTips后失效 */\n onClick?: (event) => void;\n /**\n * 提示效果类型\n * ```\n * 1. popover 气泡卡片,内容通过popoverProps设置\n * 2. tooltip 文字提示,内容通过tooltipProps设置\n * ```\n */\n tipType?: 'popover' | 'tooltip';\n popoverProps?: PopoverProps;\n tooltipProps?: TooltipProps;\n trigger?: 'icon' | 'all';\n};\n\n/**\n * 为目标元素右侧添加Icon\n * ```\n * Icon有两种交互行为\n * 1. 鼠标悬浮显示提示效果;\n * 2. 为Icon添加点击事件\n *\n * 例如:\n * 1.\n * <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title:'说明文案' }}>ABC</TipsWrapper>\n * 2.\n * <TipsWrapper tipType=\"popover\" popoverProps={{ title:'说明标题', content:'说明内容' }}>ABC</TipsWrapper>\n * 3.\n * <TipsWrapper onClick={noop}>ABC</TipsWrapper>\n * ```\n */\nexport const TipsWrapper = (props: TipsWrapperProps) => {\n const icon = props.icon || <QuestionCircleOutlined />;\n const trigger = props.trigger || 'icon';\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (props.tipType === 'tooltip' && trigger === 'icon') {\n return (\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.children}</span>\n <Tooltip {...props.tooltipProps}>\n <span style={{ opacity: 0.7 }}>{icon}</span>\n </Tooltip>\n </Space>\n );\n }\n if (props.tipType === 'tooltip' && trigger === 'all') {\n return (\n <Tooltip {...props.tooltipProps}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.children}</span>\n <span>{icon}</span>\n </Space>\n </Tooltip>\n );\n }\n\n if (props.tipType === 'popover' && trigger === 'icon') {\n return (\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.children}</span>\n <Popover {...props.popoverProps}>\n <span style={{ opacity: 0.8 }}>{icon}</span>\n </Popover>\n </Space>\n );\n }\n if (props.tipType === 'popover' && trigger === 'all') {\n return (\n <Popover {...props.popoverProps}>\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.children}</span>\n <span style={{ opacity: 0.8 }}>{icon}</span>\n </Space>\n </Popover>\n );\n }\n\n if (props.onClick && trigger === 'icon') {\n return (\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.children}</span>\n <span onClick={props.onClick} style={{ opacity: 0.8 }}>\n {icon}\n </span>\n </Space>\n );\n }\n if (props.onClick && trigger === 'all') {\n return (\n <Space size={gap} className={props.className} style={props.style} onClick={props.onClick}>\n <span>{props.children}</span>\n <span style={{ opacity: 0.8 }}>{icon}</span>\n </Space>\n );\n }\n if (props.icon) {\n return (\n <Space size={gap} className={props.className} style={props.style}>\n <span>{props.children}</span>\n <span style={{ opacity: 0.8 }}>{props.icon}</span>\n </Space>\n );\n }\n return <Fragment>{props.children}</Fragment>;\n};\n"],"names":["TipsWrapper","props","icon","_jsx","_QuestionCircleOutlined","trigger","gap","isUndefinedOrNull","tipType","_jsxs","Space","size","className","style","children","Tooltip","_extends","tooltipProps","opacity","Popover","popoverProps","onClick","Fragment"],"mappings":";+TA2CaA,EAAc,SAAdA,EAAeC,GAC1B,IAAMC,EAAOD,EAAMC,MAAQC,EAAAC,EAAA,CAAA,GAC3B,IAAMC,EAAUJ,EAAMI,SAAW,OACjC,IAAMC,EAAMC,EAAkBN,EAAMK,KAAO,EAAIL,EAAMK,IACrD,GAAIL,EAAMO,UAAY,WAAaH,IAAY,OAAQ,CACrD,OACEI,EAACC,EAAK,CAACC,KAAML,EAAKM,UAAWX,EAAMW,UAAWC,MAAOZ,EAAMY,MAAMC,UAC/DX,EAAA,OAAA,CAAAW,SAAOb,EAAMa,WACbX,EAACY,EAAOC,EAAA,CAAA,EAAKf,EAAMgB,aAAY,CAAAH,SAC7BX,EAAA,OAAA,CAAMU,MAAO,CAAEK,QAAS,IAAMJ,SAAEZ,SAIxC,CACA,GAAID,EAAMO,UAAY,WAAaH,IAAY,MAAO,CACpD,OACEF,EAACY,EAAOC,EAAKf,CAAAA,EAAAA,EAAMgB,aAAY,CAAAH,SAC7BL,EAACC,EAAK,CAACC,KAAML,EAAKM,UAAWX,EAAMW,UAAWC,MAAOZ,EAAMY,MAAMC,UAC/DX,EAAA,OAAA,CAAAW,SAAOb,EAAMa,WACbX,EAAA,OAAA,CAAAW,SAAOZ,SAIf,CAEA,GAAID,EAAMO,UAAY,WAAaH,IAAY,OAAQ,CACrD,OACEI,EAACC,EAAK,CAACC,KAAML,EAAKM,UAAWX,EAAMW,UAAWC,MAAOZ,EAAMY,MAAMC,UAC/DX,EAAA,OAAA,CAAAW,SAAOb,EAAMa,WACbX,EAACgB,EAAOH,EAAA,CAAA,EAAKf,EAAMmB,aAAY,CAAAN,SAC7BX,EAAA,OAAA,CAAMU,MAAO,CAAEK,QAAS,IAAMJ,SAAEZ,SAIxC,CACA,GAAID,EAAMO,UAAY,WAAaH,IAAY,MAAO,CACpD,OACEF,EAACgB,EAAOH,EAAKf,CAAAA,EAAAA,EAAMmB,aAAY,CAAAN,SAC7BL,EAACC,EAAK,CAACC,KAAML,EAAKM,UAAWX,EAAMW,UAAWC,MAAOZ,EAAMY,MAAMC,UAC/DX,EAAA,OAAA,CAAAW,SAAOb,EAAMa,WACbX,EAAA,OAAA,CAAMU,MAAO,CAAEK,QAAS,IAAMJ,SAAEZ,SAIxC,CAEA,GAAID,EAAMoB,SAAWhB,IAAY,OAAQ,CACvC,OACEI,EAACC,EAAK,CAACC,KAAML,EAAKM,UAAWX,EAAMW,UAAWC,MAAOZ,EAAMY,MAAMC,UAC/DX,EAAA,OAAA,CAAAW,SAAOb,EAAMa,WACbX,EAAA,OAAA,CAAMkB,QAASpB,EAAMoB,QAASR,MAAO,CAAEK,QAAS,IAAMJ,SACnDZ,MAIT,CACA,GAAID,EAAMoB,SAAWhB,IAAY,MAAO,CACtC,OACEI,EAACC,EAAK,CAACC,KAAML,EAAKM,UAAWX,EAAMW,UAAWC,MAAOZ,EAAMY,MAAOQ,QAASpB,EAAMoB,QAAQP,UACvFX,EAAA,OAAA,CAAAW,SAAOb,EAAMa,WACbX,EAAA,OAAA,CAAMU,MAAO,CAAEK,QAAS,IAAMJ,SAAEZ,MAGtC,CACA,GAAID,EAAMC,KAAM,CACd,OACEO,EAACC,EAAK,CAACC,KAAML,EAAKM,UAAWX,EAAMW,UAAWC,MAAOZ,EAAMY,MAAMC,UAC/DX,EAAA,OAAA,CAAAW,SAAOb,EAAMa,WACbX,EAAA,OAAA,CAAMU,MAAO,CAAEK,QAAS,IAAMJ,SAAEb,EAAMC,SAG5C,CACA,OAAOC,EAACmB,EAAQ,CAAAR,SAAEb,EAAMa,UAC1B"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tips-wrapper/tips-wrapper.tsx"],"sourcesContent":["import { QuestionCircleOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { Popover, PopoverProps, Tooltip, TooltipProps } from 'antd';\nimport { Fragment, ReactNode, type CSSProperties, type ReactElement } from 'react';\nimport './style.less';\n\nexport type TipsWrapperProps = {\n // 间隙,默认值:3\n gap?: number;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n icon?: ReactElement;\n /** Icon添加点击事件,设置hoverTips后失效 */\n onClick?: (event) => void;\n /**\n * 提示效果类型\n * ```\n * 1. popover 气泡卡片,内容通过popoverProps设置\n * 2. tooltip 文字提示,内容通过tooltipProps设置\n * ```\n */\n tipType?: 'popover' | 'tooltip';\n popoverProps?: PopoverProps;\n tooltipProps?: TooltipProps;\n trigger?: 'icon' | 'all';\n};\n\n/**\n * 为目标元素右侧添加Icon\n * ```\n * Icon有两种交互行为\n * 1. 鼠标悬浮显示提示效果;\n * 2. 为Icon添加点击事件\n *\n * 例如:\n * 1.\n * <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title:'说明文案' }}>ABC</TipsWrapper>\n * 2.\n * <TipsWrapper tipType=\"popover\" popoverProps={{ title:'说明标题', content:'说明内容' }}>ABC</TipsWrapper>\n * 3.\n * <TipsWrapper onClick={noop}>ABC</TipsWrapper>\n * ```\n */\nexport const TipsWrapper = (props: TipsWrapperProps) => {\n const icon = props.icon || <QuestionCircleOutlined />;\n const trigger = props.trigger || 'icon';\n const gap = isUndefinedOrNull(props.gap) ? 3 : props.gap;\n if (props.tipType === 'tooltip' && trigger === 'icon') {\n return (\n <span className={classNames('tips-wrapper', props.className)} style={props.style}>\n <span className=\"tips-wrapper-text\" style={{ marginRight: gap }}>\n {props.children}\n </span>\n <Tooltip {...props.tooltipProps}>\n <span className=\"tips-wrapper-icon\">{icon}</span>\n </Tooltip>\n </span>\n );\n }\n if (props.tipType === 'tooltip' && trigger === 'all') {\n return (\n <Tooltip {...props.tooltipProps}>\n <span className={classNames('tips-wrapper', props.className)} style={props.style}>\n <span className=\"tips-wrapper-text\" style={{ marginRight: gap }}>\n {props.children}\n </span>\n <span className=\"tips-wrapper-icon\">{icon}</span>\n </span>\n </Tooltip>\n );\n }\n\n if (props.tipType === 'popover' && trigger === 'icon') {\n return (\n <span className={classNames('tips-wrapper', props.className)} style={props.style}>\n <span className=\"tips-wrapper-text\" style={{ marginRight: gap }}>\n {props.children}\n </span>\n <Popover {...props.popoverProps}>\n <span className=\"tips-wrapper-icon\">{icon}</span>\n </Popover>\n </span>\n );\n }\n if (props.tipType === 'popover' && trigger === 'all') {\n return (\n <Popover {...props.popoverProps}>\n <span className={classNames('tips-wrapper', props.className)} style={props.style}>\n <span className=\"tips-wrapper-text\" style={{ marginRight: gap }}>\n {props.children}\n </span>\n <span className=\"tips-wrapper-icon\">{icon}</span>\n </span>\n </Popover>\n );\n }\n\n if (props.onClick && trigger === 'icon') {\n return (\n <span className={classNames('tips-wrapper', props.className)} style={props.style}>\n <span className=\"tips-wrapper-text\" style={{ marginRight: gap }}>\n {props.children}\n </span>\n <span onClick={props.onClick} className=\"tips-wrapper-icon\">\n {icon}\n </span>\n </span>\n );\n }\n if (props.onClick && trigger === 'all') {\n return (\n <span\n className={classNames('tips-wrapper', props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n <span className=\"tips-wrapper-text\" style={{ marginRight: gap }}>\n {props.children}\n </span>\n <span className=\"tips-wrapper-icon\">{icon}</span>\n </span>\n );\n }\n if (props.icon) {\n return (\n <span className={classNames('tips-wrapper', props.className)} style={props.style}>\n <span className=\"tips-wrapper-text\" style={{ marginRight: gap }}>\n {props.children}\n </span>\n <span className=\"tips-wrapper-icon\">{icon}</span>\n </span>\n );\n }\n return <Fragment>{props.children}</Fragment>;\n};\n"],"names":["TipsWrapper","props","icon","_jsx","_QuestionCircleOutlined","trigger","gap","isUndefinedOrNull","tipType","_jsxs","className","_classNames","style","children","marginRight","Tooltip","_extends","tooltipProps","Popover","popoverProps","onClick","Fragment"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -418,6 +418,14 @@ export type ButtonWrapperProps = Omit<ButtonProps, "onClick"> & {
418
418
  */
419
419
  export declare const ButtonWrapper: (props: ButtonWrapperProps) => import("react/jsx-runtime").JSX.Element | null;
420
420
  export type DialogModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContainer" | "open" | "open" | "okButtonProps" | "cancelButtonProps" | "footer"> & {
421
+ /**
422
+ * 内置尺寸,根据比例固定高度、宽度,默认:middle
423
+ * ```
424
+ * 1. 如果自定义了width、styles.body.height属性,size中的height、width将对应失效
425
+ * 2. 可传 null 值,取消内置尺寸
426
+ * ```
427
+ */
428
+ size?: "small" | "middle" | "large" | null;
421
429
  onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
422
430
  onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
423
431
  content: string | ReactElement | ((form: FormInstance, operate: {
@@ -430,6 +438,7 @@ export type DialogModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContai
430
438
  cancelButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
431
439
  /**
432
440
  * 设置modal body height 为当前窗口height的百分比,例如:30
441
+ * @deprecated 已失效,可通过size属性设置
433
442
  * ```
434
443
  * 1. 最大值:80
435
444
  * 1. 设置bodyStyle.height 后,bodyHeightPercent失效
@@ -450,6 +459,7 @@ export type DialogModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContai
450
459
  * 3. 需要修改默认主题风格的场景,请使用
451
460
  * const { appDialogModal } = FbaApp.useDialogModal();
452
461
  * appDialogModal.open({})
462
+ * 4. 配置size属性可使用预设的弹窗尺寸
453
463
  * ```
454
464
  */
455
465
  export declare const dialogModal: {
@@ -1135,7 +1145,8 @@ export type DialogDrawerContentProps = {
1135
1145
  /**
1136
1146
  * 当dialogDrawer底部操作按钮在业务content内部时,使用
1137
1147
  * ```
1138
- * 1. 设置 footer 后,okHidden、cancelHidden、okButtonExtraProps、cancelButtonExtraProps、okText、cancelText、onOk、onCancel全部失效
1148
+ * 1. 只能与 dialogDrawer 配合使用;与 FbaApp.useDialogDrawer 配合使用无效
1149
+ * 2. 设置 footer 后,okHidden、cancelHidden、okButtonExtraProps、cancelButtonExtraProps、okText、cancelText、onOk、onCancel全部失效
1139
1150
  * ```
1140
1151
  */
1141
1152
  export declare const DialogDrawerContent: (props: DialogDrawerContentProps) => import("react/jsx-runtime").JSX.Element;
@@ -1778,6 +1789,35 @@ export declare const DragEditableTable: import("react").ForwardRefExoticComponen
1778
1789
  overIndex: number;
1779
1790
  }) => void) | undefined;
1780
1791
  } & import("react").RefAttributes<EditableTableRefApi>>;
1792
+ export type FormItemHorizontalUnionProps = {
1793
+ className?: string;
1794
+ style?: CSSProperties;
1795
+ label?: string | ReactElement;
1796
+ /** 水平布局元素 */
1797
+ groupConfigList: {
1798
+ hidden?: boolean;
1799
+ before?: ReactElement | string;
1800
+ /**
1801
+ * 设置宽度
1802
+ * ```
1803
+ * 1. 自适应可设置:auto
1804
+ * 2. 可设置具体数值
1805
+ * 3. 不设置会在铺满flex剩余空间
1806
+ * 4. 多个未设置会等分铺满剩余空间
1807
+ * ```
1808
+ */
1809
+ width?: number | string;
1810
+ mainItem: ReactElement;
1811
+ after?: ReactElement | string;
1812
+ }[];
1813
+ /** 水平布局原始之间的间距 */
1814
+ gap?: number;
1815
+ flexLayoutStyle?: CSSProperties;
1816
+ flexLayoutClassName?: string;
1817
+ hidden?: boolean;
1818
+ required?: boolean;
1819
+ colon?: boolean;
1820
+ };
1781
1821
  export type DragFormListContentProps = {
1782
1822
  /** Form.List item fieldData */
1783
1823
  formListFieldData: FormListFieldData;
@@ -1857,14 +1897,14 @@ export type DragFormListProps = {
1857
1897
  required?: boolean;
1858
1898
  width?: number;
1859
1899
  }[];
1860
- formListItemTitleClassName?: string;
1861
- formListItemTitleStyle?: CSSProperties;
1900
+ /** formListItemTitle HorizontalUnionProps 配置 */
1901
+ formListItemTitleHorizontalUnionProps?: Omit<FormItemHorizontalUnionProps, "groupConfigList">;
1862
1902
  };
1863
1903
  /**
1864
1904
  * 可拖拽FormList
1865
1905
  * ```
1906
+ * Demo: https://fex.qa.tcshuke.com/docs/admin/main/form/list
1866
1907
  * 1. FormList数组中必须要有唯一值字段,默认值字段名称uid,可通过uidFieldName自定义设置
1867
- * 2. Demo: https://fex.qa.tcshuke.com/docs/admin/main/form/list
1868
1908
  * ```
1869
1909
  */
1870
1910
  export declare const DragFormList: (props: DragFormListProps) => import("react/jsx-runtime").JSX.Element;
@@ -2033,17 +2073,14 @@ export type EasyFormProps = Omit<FormWrapperProps, "children"> & {
2033
2073
 
2034
2074
  * 例如
2035
2075
  * <EasyForm column={3}>
2036
- * <Form.Item name="field1" label="条件1">
2076
+ * <FormItemWrapper name="field1" label="条件1">
2037
2077
  * <Input placeholder="请输入" allowClear={true} />
2038
- * </Form.Item>
2039
- * <Form.Item name="field2" label="条件2">
2040
- * <Input placeholder="请输入" allowClear={true} />
2041
- * </Form.Item>
2078
+ * </FormItemWrapper>
2042
2079
  * <!-- !!自定义栅格占位格数第一种方式:可通过使用 BoxGrid.Col 包裹元素来自定义网格占比 -->
2043
2080
  * <BoxGrid.Col span={24}>
2044
- * <Form.Item name="field5" label="条件5">
2081
+ * <FormItemWrapper name="field5" label="条件5">
2045
2082
  * <Input placeholder="请输入" allowClear={true} />
2046
- * </Form.Item>
2083
+ * </FormItemWrapper>
2047
2084
  * </BoxGrid.Col>
2048
2085
  * <!-- !!自定义栅格占位格数第二种方式:如果为FormItemWrapper组件,可设置span属性 -->
2049
2086
  * <FormItemWrapper name="field6" label="条件6" span={24}>
@@ -2511,6 +2548,14 @@ export type FbaAppDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getCont
2511
2548
  extra?: ReactNode | ((form: FormInstance) => ReactElement);
2512
2549
  };
2513
2550
  export type FbaAppModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContainer" | "okButtonProps" | "cancelButtonProps" | "footer"> & {
2551
+ /**
2552
+ * 内置尺寸,根据比例固定高度、宽度,默认:middle
2553
+ * ```
2554
+ * 1. 如果自定义了width、styles.body.height属性,size中的height、width将对应失效
2555
+ * 2. 可传 null 值,取消内置尺寸
2556
+ * ```
2557
+ */
2558
+ size?: "small" | "middle" | "large" | null;
2514
2559
  onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
2515
2560
  onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
2516
2561
  onClose?: () => void;
@@ -2523,6 +2568,7 @@ export type FbaAppModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContai
2523
2568
  cancelButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
2524
2569
  /**
2525
2570
  * 设置modal body height 为当前窗口height的百分比,例如:30
2571
+ * @deprecated 已失效,可通过size属性设置
2526
2572
  * ```
2527
2573
  * 1. 最大值:80
2528
2574
  * 1. 设置bodyStyle.height 后,bodyHeightPercent失效
@@ -2821,33 +2867,6 @@ export declare const FormGrid: {
2821
2867
  domTypeName: string;
2822
2868
  };
2823
2869
  };
2824
- export type FormItemHorizontalUnionProps = {
2825
- className?: string;
2826
- style?: CSSProperties;
2827
- label?: string | ReactElement;
2828
- groupConfigList: {
2829
- hidden?: boolean;
2830
- before?: ReactElement | string;
2831
- /**
2832
- * 设置宽度
2833
- * ```
2834
- * 1. 自适应可设置:auto
2835
- * 2. 可设置具体数值
2836
- * 3. 不设置会在铺满flex剩余空间
2837
- * 4. 多个未设置会等分铺满剩余空间
2838
- * ```
2839
- */
2840
- width?: number | string;
2841
- mainItem: ReactElement;
2842
- after?: ReactElement | string;
2843
- }[];
2844
- gap?: number;
2845
- flexLayoutStyle?: CSSProperties;
2846
- flexLayoutClassName?: string;
2847
- hidden?: boolean;
2848
- required?: boolean;
2849
- colon?: boolean;
2850
- };
2851
2870
  export type FormItemCardProps = {
2852
2871
  title?: string | ReactElement;
2853
2872
  children: ReactElement | ReactElement[];
@@ -3005,14 +3024,14 @@ export type FormListWrapperProps = {
3005
3024
  required?: boolean;
3006
3025
  width?: number;
3007
3026
  }[];
3008
- formListItemTitleClassName?: string;
3009
- formListItemTitleStyle?: CSSProperties;
3027
+ /** formListItemTitle HorizontalUnionProps 配置 */
3028
+ formListItemTitleHorizontalUnionProps?: Omit<FormItemHorizontalUnionProps, "groupConfigList">;
3010
3029
  };
3011
3030
  /**
3012
- * FormList
3031
+ * Form.List 包装组件,使用更简单
3013
3032
  * ```
3033
+ * Demo: https://fex.qa.tcshuke.com/docs/admin/main/form/list
3014
3034
  * 1. FormList数组中必须要有唯一值字段,默认值字段名称uid,可通过uidFieldName自定义设置
3015
- * 2. Demo: https://fex.qa.tcshuke.com/docs/admin/main/form/list
3016
3035
  * ```
3017
3036
  */
3018
3037
  export declare const FormListWrapper: (props: FormListWrapperProps) => import("react/jsx-runtime").JSX.Element;
@@ -3149,6 +3168,80 @@ export type LabelValueLayoutProps = {
3149
3168
  * options[].hidden 是否隐藏 Description.Item
3150
3169
  */
3151
3170
  export declare const LabelValueLayout: (props: LabelValueLayoutProps) => import("react/jsx-runtime").JSX.Element;
3171
+ export type TLabelValueItem = {
3172
+ label: string | ReactElement;
3173
+ value: string | number | ReactElement;
3174
+ /** 一行有4列,当前labelValue数据占用的列数,默认是根据LabelValueRender.column配置来 */
3175
+ span?: 1 | 2 | 3 | 4;
3176
+ /** 是否隐藏 */
3177
+ hidden?: boolean;
3178
+ /** 超出宽度是否隐藏 */
3179
+ ellipsis?: boolean;
3180
+ /** 是否添加必填标识 */
3181
+ required?: boolean;
3182
+ /** 添加说明标签 */
3183
+ tips?: string;
3184
+ };
3185
+ export type LabelValueRenderProps = {
3186
+ className?: string;
3187
+ style?: CSSProperties;
3188
+ /**
3189
+ * 定义一行显示几列, 默认值:3
3190
+ * ```
3191
+ * 1. 当外层宽度尺寸大于 992px(lg) 时,一行显示几列
3192
+ * 1. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响,响应式布局
3193
+ * 2. 宽度尺寸定义
3194
+ * xs: 宽度 < 576px
3195
+ * sm: 宽度 ≥ 576px
3196
+ * md: 宽度 ≥ 768px
3197
+ * lg: 宽度 ≥ 992px
3198
+ * xl: 宽度 ≥ 1200px
3199
+ * xxl: 宽度 ≥ 1600px
3200
+ * 3. 列数尺寸定义
3201
+ * {
3202
+ * 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },
3203
+ * 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },
3204
+ * 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },
3205
+ * 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },
3206
+ * };
3207
+ * ```
3208
+ */
3209
+ column?: 1 | 2 | 3 | 4;
3210
+ /**
3211
+ * 强制定义一行显示几列,不考虑响应式
3212
+ * ```
3213
+ * 1. 优先级大于column
3214
+ * 2. 建议优先使用column配置
3215
+ * ```
3216
+ */
3217
+ forceColumn?: 1 | 2 | 3 | 4;
3218
+ /** 数据源配置 */
3219
+ dataList: TLabelValueItem[];
3220
+ /**
3221
+ * 超过宽度将自动省略,默认值:true
3222
+ */
3223
+ ellipsis?: boolean;
3224
+ /** 是否添加边框 */
3225
+ border?: boolean;
3226
+ /** label对齐方式 */
3227
+ labelAlign?: "left" | "right" | "center";
3228
+ /** label 宽度,默认值:100 */
3229
+ labelWidth?: number;
3230
+ width?: number;
3231
+ /** label 样式 */
3232
+ labelStyle?: CSSProperties;
3233
+ /** value 样式 */
3234
+ valueStyle?: CSSProperties;
3235
+ };
3236
+ /**
3237
+ * label+value 列表布局
3238
+ * ```
3239
+ * 1. 可设置超出隐藏、必填标识、设置隐藏、添加说明标签等功能
3240
+ * 2. 可自定义设置占用网格列数
3241
+ * 3. 内置响应式布局
3242
+ * ```
3243
+ */
3244
+ export declare const LabelValueRender: (props: LabelValueRenderProps) => import("react/jsx-runtime").JSX.Element;
3152
3245
  export type LocalLoadingServiceConfig = {
3153
3246
  onRequest: (params?: TAny) => Promise<TAny>;
3154
3247
  params?: TPlainObject;
@@ -3552,10 +3645,11 @@ export type TRelationTreeOperate = {
3552
3645
  };
3553
3646
  export declare const RelationTree: (props: RelationTreeProps) => import("react/jsx-runtime").JSX.Element;
3554
3647
  export interface RichTextEditorProps extends Omit<IAllProps, "onChange" | "init"> {
3648
+ /** 设置高度,默认:500 */
3649
+ height?: number;
3555
3650
  onChange?: (data?: string) => void;
3556
3651
  /** 上传图片服务 */
3557
3652
  onUploadImage?: (file: File) => Promise<string>;
3558
- className?: string;
3559
3653
  /** 图片点击预览 */
3560
3654
  imgPreview?: boolean;
3561
3655
  init?: IAllProps["init"] & {
@@ -3588,22 +3682,22 @@ export interface RichTextEditorProps extends Omit<IAllProps, "onChange" | "init"
3588
3682
  };
3589
3683
  /** 点击全屏按钮回调 */
3590
3684
  onFullScreenChange?: (state?: boolean) => void;
3685
+ className?: string;
3591
3686
  }
3592
3687
  /**
3593
3688
  * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6
3594
3689
  * @param props
3595
3690
  * @returns
3596
3691
  * ```
3597
- * 1. 修改高度 init={{ height: 300 }}
3598
- * 2. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口
3599
- * 3. 获取富文本实例,通过onInit(_, editor)函数获取
3600
- * 4. 预览富文本数据,使用 RichTextViewer 组件
3601
- * 5. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append
3692
+ * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口
3693
+ * 2. 获取富文本实例,通过onInit(_, editor)函数获取
3694
+ * 3. 预览富文本数据,使用 RichTextViewer 组件
3695
+ * 4. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append
3602
3696
  * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />
3603
- * 6. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏
3604
- * 7. 其他插件
3697
+ * 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏
3698
+ * 6. 其他插件
3605
3699
  * emoticons 表情插件
3606
- * 8. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例
3700
+ * 7. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例
3607
3701
  * 默认比例:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]
3608
3702
  * ```
3609
3703
  */
@@ -4436,7 +4530,8 @@ export type CssTextEllipsisProps = {
4436
4530
  */
4437
4531
  export declare const TextCssEllipsis: (props: CssTextEllipsisProps) => import("react/jsx-runtime").JSX.Element;
4438
4532
  export type TextOverflowProps = {
4439
- text: string;
4533
+ /** text 为ReactElement类型时,maxLength配置无效 */
4534
+ text: string | ReactElement;
4440
4535
  /** 最大显示宽度 */
4441
4536
  maxWidth?: number;
4442
4537
  /** 最大显示字数 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.4.14",
3
+ "version": "4.4.16",
4
4
  "description": "flat-biz ui components",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "@dimjs/utils": ">=1.4.4",
34
34
  "@flatbiz/utils": ">=4.0.19",
35
35
  "@wove/react": ">=1.2.23",
36
- "antd": ">=5.11.0",
36
+ "antd": ">=5.17.0",
37
37
  "dayjs": ">=1.11.9",
38
38
  "react": ">=18.2.0",
39
39
  "react-dom": ">=18.2.0",
@@ -47,7 +47,7 @@
47
47
  "@dimjs/utils": "^1.4.4",
48
48
  "@flatbiz/utils": "^4.0.16",
49
49
  "@wove/react": "^1.2.23",
50
- "antd": "5.11.0",
50
+ "antd": "5.17.0",
51
51
  "dayjs": "1.11.9",
52
52
  "dequal": "2.0.3",
53
53
  "react": "18.2.0",