@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.
- package/esm/dialog-confirm/index.js +1 -1
- package/esm/dialog-confirm/index.js.map +1 -1
- package/esm/dialog-drawer/index.js +1 -1
- package/esm/dialog-drawer/index.js.map +1 -1
- package/esm/dialog-drawer-content/index.js.map +1 -1
- package/esm/dialog-modal/index.js +1 -1
- package/esm/dialog-modal/index.js.map +1 -1
- package/esm/drag-form-list/index.css +1 -1
- package/esm/drag-form-list/index.js +1 -1
- package/esm/drag-form-list/index.js.map +1 -1
- package/esm/easy-form/index.js +1 -1
- package/esm/easy-form/index.js.map +1 -1
- package/esm/editable-table/index.css +1 -1
- package/esm/fba-app/index.js +1 -1
- package/esm/fba-app/index.js.map +1 -1
- package/esm/form-item-group/index.js.map +1 -1
- package/esm/form-item-wrapper/index.js +1 -1
- package/esm/form-item-wrapper/index.js.map +1 -1
- package/esm/form-list-wrapper/index.css +1 -1
- package/esm/form-list-wrapper/index.js +1 -1
- package/esm/form-list-wrapper/index.js.map +1 -1
- package/esm/index.js +3 -2
- package/esm/label-value-render/index.css +1 -0
- package/esm/label-value-render/index.js +8 -0
- package/esm/label-value-render/index.js.map +1 -0
- package/esm/rich-text-editor/index.js +1 -1
- package/esm/rich-text-editor/index.js.map +1 -1
- package/esm/text-overflow/index.css +1 -1
- package/esm/text-overflow/index.js +1 -1
- package/esm/text-overflow/index.js.map +1 -1
- package/esm/text-symbol-wrapper/index.css +1 -1
- package/esm/tips-wrapper/index.css +1 -0
- package/esm/tips-wrapper/index.js +1 -1
- package/esm/tips-wrapper/index.js.map +1 -1
- package/index.d.ts +147 -52
- 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:
|
|
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
|
|
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
|
|
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,
|
|
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.
|
|
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
|
-
|
|
1861
|
-
|
|
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
|
-
* <
|
|
2076
|
+
* <FormItemWrapper name="field1" label="条件1">
|
|
2037
2077
|
* <Input placeholder="请输入" allowClear={true} />
|
|
2038
|
-
* </
|
|
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
|
-
* <
|
|
2081
|
+
* <FormItemWrapper name="field5" label="条件5">
|
|
2045
2082
|
* <Input placeholder="请输入" allowClear={true} />
|
|
2046
|
-
* </
|
|
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
|
-
|
|
3009
|
-
|
|
3027
|
+
/** formListItemTitle HorizontalUnionProps 配置 */
|
|
3028
|
+
formListItemTitleHorizontalUnionProps?: Omit<FormItemHorizontalUnionProps, "groupConfigList">;
|
|
3010
3029
|
};
|
|
3011
3030
|
/**
|
|
3012
|
-
*
|
|
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.
|
|
3598
|
-
* 2.
|
|
3599
|
-
* 3.
|
|
3600
|
-
* 4.
|
|
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
|
-
*
|
|
3604
|
-
*
|
|
3697
|
+
* 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏
|
|
3698
|
+
* 6. 其他插件
|
|
3605
3699
|
* emoticons 表情插件
|
|
3606
|
-
*
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
50
|
+
"antd": "5.17.0",
|
|
51
51
|
"dayjs": "1.11.9",
|
|
52
52
|
"dequal": "2.0.3",
|
|
53
53
|
"react": "18.2.0",
|