UNPKG

4.65 kBTypeScriptView Raw
1import { ComponentType } from 'react'
2import { CommonEventFunction, StandardProps } from './common'
3interface RichTextProps extends StandardProps {
4 /** 文本是否可选,该属性会使节点显示为 block
5 * @default false
6 * @supported weapp, jd, h5, harmony_hybrid
7 */
8 userSelect?: boolean
9 /** 节点列表/ HTML String
10 * @supported weapp, jd, alipay, swan, tt, qq, h5, rn, harmony, harmony_hybrid
11 */
12 nodes?: Nodes
13 /** 显示连续空格
14 * @supported weapp, jd, alipay, tt, qq, h5, rn, harmony_hybrid
15 */
16 space?: keyof RichTextProps.TSpace
17 /** 富文本是否可以长按选中,可用于复制,粘贴,长按搜索等场景
18 * @default false(基础库 3.150.1 以前版本)true(基础库 3.150.1 及以后版本)
19 * @supported swan, h5, harmony_hybrid
20 */
21 selectable?: string
22 /** 阻止长按图片时弹起默认菜单(将该属性设置为image-menu-prevent或image-menu-prevent="true"),只在初始化时有效,不能动态变更;若不想阻止弹起默认菜单,则不需要设置此属性
23 * @default false
24 * @supported swan
25 */
26 imageMenuPrevent?: string
27 /** 富文本中的图片是否可点击预览。在不设置的情况下,若 rich-text 未监听点击事件,则默认开启。未显示设置 preview 时会进行点击默认预览判断,建议显示设置 preview
28 * @supported swan
29 */
30 preview?: string
31 /** 触摸。
32 * @supported alipay
33 */
34 onTap?: CommonEventFunction
35 /** 触摸动作开始。
36 * @supported alipay
37 */
38 onTouchstart?: CommonEventFunction
39 /** 触摸移动事件。
40 * @supported alipay
41 */
42 onTouchmove?: CommonEventFunction
43 /** 触摸动作被打断。
44 * @supported alipay
45 */
46 onTouchcancel?: CommonEventFunction
47 /** 触摸动作结束。
48 * @supported alipay
49 */
50 onTouchend?: CommonEventFunction
51 /** 触摸后,超过 500ms 再离开。
52 * @supported alipay
53 */
54 onLongtap?: CommonEventFunction
55 /** 布局兼容模式
56 * @supported weapp
57 * @default default
58 */
59 mode?: 'default' | 'compat' | 'aggressive' | 'inline-block' | 'web'
60}
61/** 节点类型
62 * > 现支持两种节点,通过type来区分,分别是元素节点和文本节点,默认是元素节点,在富文本区域里显示的HTML节点 元素节点:type = node*
63 */
64type Nodes = Array<RichTextProps.Text | RichTextProps.HTMLElement> | string
65declare namespace RichTextProps {
66 /** space 的合法值 */
67 interface TSpace {
68 /** 中文字符空格一半大小 */
69 ensp
70 /** 中文字符空格大小 */
71 emsp
72 /** 根据字体设置的空格大小 */
73 nbsp
74 }
75 /** 文本节点 */
76 interface Text {
77 /** 文本类型 */
78 type: 'text'
79 /** 文本字符串
80 * @remarks 支持 entities
81 * @default ""
82 */
83 text: string
84 }
85 /** 元素节点,默认为元素节点
86 * 全局支持class和style属性,不支持 id 属性。
87 */
88 interface HTMLElement {
89 /** HTML 类型 */
90 type?: 'node'
91 /** 标签名
92 * @remarks 支持部分受信任的 HTML 节点
93 */
94 name: string
95 /** 属性
96 * @remarks 支持部分受信任的属性,遵循 Pascal 命名法
97 */
98 attrs?: Object
99 /** 子节点列表
100 * @remarks 结构和 nodes 一致
101 */
102 children?: Nodes
103 }
104}
105/** 富文本
106 * @classification base
107 * @supported weapp, jd, swan, alipay, tt, h5, rn, harmony, harmony_hybrid
108 * @example_react
109 * ```tsx
110 * class App extends Components {
111 * state = {
112 * nodes: [{
113 * name: 'div',
114 * attrs: {
115 * class: 'div_class',
116 * style: 'line-height: 60px; color: red;'
117 * },
118 * children: [{
119 * type: 'text',
120 * text: 'Hello World!'
121 * }]
122 * }]
123 * }
124 * render () {
125 * return (
126 * <RichText nodes={this.state.nodes} />
127 * )
128 * }
129 * }
130 * ```
131 * @example_vue
132 * ```html
133 * <template>
134 * <view class="components-page">
135 * <rich-text :nodes="nodes"></rich-text>
136 * </view>
137 * </template>
138 *
139 * <script>
140 * export default {
141 * name: 'Index',
142 * data() {
143 * return {
144 * nodes: [{
145 * name: 'div',
146 * attrs: {
147 * class: 'div_class',
148 * style: 'line-height: 60px; color: red;'
149 * },
150 * children: [{
151 * type: 'text',
152 * text: 'Hello World!'
153 * }]
154 * }]
155 * }
156 * },
157 * onReady () {
158 * console.log('onReady')
159 * }
160 * }
161 * </script>
162 * ```
163 * @see https://developers.weixin.qq.com/miniprogram/dev/component/rich-text.html
164 */
165declare const RichText: ComponentType<RichTextProps>
166export { RichText, RichTextProps }