antdv-next-tiptap 1.0.0

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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +282 -0
  3. package/dist/favicon.ico +0 -0
  4. package/dist/index.css +2 -0
  5. package/dist/index.mjs +9132 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/types/index.d.ts +3 -0
  8. package/dist/types/src/commands/colorButton.vue.d.ts +15 -0
  9. package/dist/types/src/commands/fontFamilySelect.vue.d.ts +7 -0
  10. package/dist/types/src/commands/fontSizeSelect.vue.d.ts +7 -0
  11. package/dist/types/src/commands/fullscreenButton.vue.d.ts +7 -0
  12. package/dist/types/src/commands/headingSelect.vue.d.ts +7 -0
  13. package/dist/types/src/commands/imageButton.vue.d.ts +7 -0
  14. package/dist/types/src/commands/imageModal.vue.d.ts +23 -0
  15. package/dist/types/src/commands/imageView.vue.d.ts +93 -0
  16. package/dist/types/src/commands/linkButton.vue.d.ts +7 -0
  17. package/dist/types/src/commands/listSelect.vue.d.ts +7 -0
  18. package/dist/types/src/commands/tableButton.vue.d.ts +7 -0
  19. package/dist/types/src/commands/tableToolbar.vue.d.ts +7 -0
  20. package/dist/types/src/commands/taskItemView.vue.d.ts +4 -0
  21. package/dist/types/src/commands/textBubbleMenu.vue.d.ts +7 -0
  22. package/dist/types/src/commands/videoButton.vue.d.ts +7 -0
  23. package/dist/types/src/commands/videoModal.vue.d.ts +21 -0
  24. package/dist/types/src/commands/videoView.vue.d.ts +93 -0
  25. package/dist/types/src/extensions/base.d.ts +2 -0
  26. package/dist/types/src/extensions/blockquote.d.ts +6 -0
  27. package/dist/types/src/extensions/bold.d.ts +2 -0
  28. package/dist/types/src/extensions/bulletList.d.ts +2 -0
  29. package/dist/types/src/extensions/clearFormat.d.ts +7 -0
  30. package/dist/types/src/extensions/code.d.ts +6 -0
  31. package/dist/types/src/extensions/codeBlock.d.ts +6 -0
  32. package/dist/types/src/extensions/color.d.ts +2 -0
  33. package/dist/types/src/extensions/fontFamily.d.ts +6 -0
  34. package/dist/types/src/extensions/fontSize.d.ts +6 -0
  35. package/dist/types/src/extensions/fullscreen.d.ts +2 -0
  36. package/dist/types/src/extensions/heading.d.ts +2 -0
  37. package/dist/types/src/extensions/highlight.d.ts +7 -0
  38. package/dist/types/src/extensions/horizontalRule.d.ts +6 -0
  39. package/dist/types/src/extensions/image.d.ts +2 -0
  40. package/dist/types/src/extensions/index.d.ts +3 -0
  41. package/dist/types/src/extensions/italic.d.ts +2 -0
  42. package/dist/types/src/extensions/link.d.ts +6 -0
  43. package/dist/types/src/extensions/orderedList.d.ts +2 -0
  44. package/dist/types/src/extensions/print.d.ts +2 -0
  45. package/dist/types/src/extensions/strike.d.ts +6 -0
  46. package/dist/types/src/extensions/table.d.ts +2 -0
  47. package/dist/types/src/extensions/taskList.d.ts +2 -0
  48. package/dist/types/src/extensions/textAlign.d.ts +2 -0
  49. package/dist/types/src/extensions/textStyle.d.ts +7 -0
  50. package/dist/types/src/extensions/types.d.ts +31 -0
  51. package/dist/types/src/extensions/underline.d.ts +6 -0
  52. package/dist/types/src/extensions/undoRedo.d.ts +6 -0
  53. package/dist/types/src/extensions/video.d.ts +2 -0
  54. package/dist/types/src/extensions/videoNode.d.ts +27 -0
  55. package/dist/types/src/injectionKeys.d.ts +5 -0
  56. package/dist/types/src/tiptap.vue.d.ts +30 -0
  57. package/dist/types/src/tiptapProps.d.ts +39 -0
  58. package/dist/types/src/toolbarItem.vue.d.ts +9 -0
  59. package/package.json +112 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Antdv Next Tiptap
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,282 @@
1
+ <p align="center">
2
+ <img alt="npm" src="https://img.shields.io/npm/v/antdv-next-tiptap">
3
+ <img alt="npm peer dependency version" src="https://img.shields.io/badge/vue-%5E3.0.0-vue">
4
+ <img alt="GitHub" src="https://img.shields.io/github/license/pengyinghao/antdv-next-tiptap">
5
+ </p>
6
+
7
+ <h3 align="center">Antdv Next Tiptap 富文本编辑器</h3>
8
+
9
+ <p align="center"><strong>现代化、轻量级、易扩展的 Vue 3 富文本编辑器</strong></p>
10
+
11
+ 基于 [Tiptap](https://github.com/ueberdosis/tiptap) 和 [antdv-next](https://github.com/antdv-next/antdv-next) 为 Vue 3 打造的现代化富文本编辑器,专为构建高质量内容管理系统而设计。
12
+
13
+ ### ✨ 核心特色
14
+
15
+ - **🔌 插件化架构** - 20+ 开箱即用的扩展插件,可按需启用
16
+ - **🎨 精美 UI** - 深度集成 Ant Design Vue,符合现代交互规范
17
+ - **📱 响应式设计** - 支持多端自适应,移动友好
18
+ - **⚡ 高性能** - 基于现代编辑器框架,流畅的编辑体验
19
+ - **🔧 高度可定制** - 灵活的插件配置和内容输出格式
20
+ - **📝 多格式支持** - 支持 HTML 和 JSON 内容输出
21
+ - **🖼️ 媒体处理** - 完善的图片、视频上传机制
22
+ - **🎯 TypeScript** - 完整的类型定义,更好的开发体验
23
+
24
+ ### 🎯 设计理念
25
+
26
+ 为 Vue 3 开发者提供最优雅、最易用的富文本编辑解决方案,让内容创作与编辑变得简单而愉快。
27
+
28
+ ## 📦 安装
29
+
30
+ ```shell
31
+ pnpm add antdv-next-tiptap
32
+ ```
33
+
34
+ ```shell
35
+ npm install antdv-next-tiptap
36
+ ```
37
+
38
+ #### 全局注册
39
+
40
+ ```js
41
+ import { createApp } from 'vue'
42
+ import App from './App.vue'
43
+ import AntdvNext from 'antdv-next'
44
+ import AntdvNextTiptap from 'antdv-next-tiptap'
45
+ import 'antdv-next-tiptap/index.css'
46
+
47
+ const app = createApp(App)
48
+
49
+ app.use(AntdvNext)
50
+ app.use(AntdvNextTiptap)
51
+ // 全局可直接使用 <Tiptap>
52
+
53
+ app.mount('#app')
54
+ ```
55
+
56
+ #### 按需引入
57
+
58
+ ```vue
59
+ <template>
60
+ <Tiptap v-model="content" />
61
+ </template>
62
+
63
+ <script setup>
64
+ import { Tiptap } from 'antdv-next-tiptap'
65
+ import 'antdv-next-tiptap/index.css'
66
+ </script>
67
+ ```
68
+
69
+ ## 🚀 基本用法
70
+
71
+ ```vue
72
+ <template>
73
+ <Tiptap v-model="content" :height="400" />
74
+ </template>
75
+
76
+ <script setup>
77
+ import { ref } from 'vue'
78
+ import { Tiptap } from 'antdv-next-tiptap'
79
+ import 'antdv-next-tiptap/index.css'
80
+
81
+ const content = ref('<h1>标题</h1><p>这个编辑器很棒!</p>')
82
+ </script>
83
+ ```
84
+
85
+ ## 📔 Props
86
+
87
+ ### `modelValue`
88
+
89
+ 类型:`string`
90
+
91
+ 默认值:`''`
92
+
93
+ 编辑器内容,配合 `v-model` 使用。
94
+
95
+ ### `height`
96
+
97
+ 类型:`number`
98
+
99
+ 默认值:`300`
100
+
101
+ 内容区域高度,单位为像素。
102
+
103
+ ### `editable`
104
+
105
+ 类型:`boolean`
106
+
107
+ 默认值:`true`
108
+
109
+ 是否可编辑。设为 `false` 时编辑器进入只读模式。
110
+
111
+ ```html
112
+ <Tiptap :editable="false" />
113
+ ```
114
+
115
+ ### `outputFormat`
116
+
117
+ 类型:`'html' | 'json'`
118
+
119
+ 默认值:`'html'`
120
+
121
+ `modelValue` 的输出格式。
122
+
123
+ - `'html'`:输出 HTML 字符串
124
+ - `'json'`:输出 JSON 字符串(Tiptap 文档格式)
125
+
126
+ ```html
127
+ <Tiptap output-format="json" />
128
+ ```
129
+
130
+ ### `disabledPlugins`
131
+
132
+ 类型:`PluginName[]`
133
+
134
+ 默认值:`[]`
135
+
136
+ 需要禁用的插件名称列表,默认启用全部插件。
137
+
138
+ ```html
139
+ <Tiptap :disabled-plugins="['image', 'video', 'table']" />
140
+ ```
141
+
142
+ 可用插件名称:
143
+
144
+ | 插件名 | 说明 |
145
+ | ---------------- | -------------------- |
146
+ | `undoRedo` | 撤销 / 重做 |
147
+ | `heading` | 标题级别 |
148
+ | `bold` | 加粗 |
149
+ | `italic` | 斜体 |
150
+ | `underline` | 下划线 |
151
+ | `strike` | 删除线 |
152
+ | `code` | 行内代码 |
153
+ | `codeBlock` | 代码块(含语法高亮) |
154
+ | `blockquote` | 引用块 |
155
+ | `bulletList` | 无序列表 |
156
+ | `orderedList` | 有序列表 |
157
+ | `taskList` | 任务清单 |
158
+ | `list` | 列表工具 |
159
+ | `textAlign` | 文本对齐 |
160
+ | `horizontalRule` | 分割线 |
161
+ | `clearFormat` | 清除格式 |
162
+ | `color` | 文字颜色 |
163
+ | `highlight` | 文字高亮 |
164
+ | `link` | 超链接 |
165
+ | `image` | 图片插入与上传 |
166
+ | `video` | 视频嵌入 |
167
+ | `table` | 表格 |
168
+ | `fontFamily` | 字体 |
169
+ | `fontSize` | 字号 |
170
+ | `print` | 打印 |
171
+ | `fullscreen` | 全屏模式 |
172
+
173
+ ### `uploadImage`
174
+
175
+ 类型:`(file: File) => Promise<string>`
176
+
177
+ 默认值:`undefined`
178
+
179
+ 自定义图片上传函数,返回图片最终 URL。未提供时图片以 base64 格式内嵌。
180
+
181
+ ```html
182
+ <Tiptap :upload-image="handleUpload" />
183
+ ```
184
+
185
+ ```ts
186
+ const handleUpload = async (file: File): Promise<string> => {
187
+ const url = await uploadToOSS(file)
188
+ return url
189
+ }
190
+ ```
191
+
192
+ ### `uploadVideo`
193
+
194
+ 类型:`(file: File) => Promise<string>`
195
+
196
+ 默认值:`undefined`
197
+
198
+ 自定义视频上传函数,返回视频最终 URL。提供后工具栏会出现"本地上传"入口;未提供时仅支持输入视频地址。
199
+
200
+ ```html
201
+ <Tiptap :upload-video="handleVideoUpload" />
202
+ ```
203
+
204
+ ```ts
205
+ const handleVideoUpload = async (file: File): Promise<string> => {
206
+ const url = await uploadToOSS(file)
207
+ return url
208
+ }
209
+ ```
210
+
211
+ ### `wordCount`
212
+
213
+ 类型:`true | number`
214
+
215
+ 默认值:`undefined`
216
+
217
+ 字符计数。传 `true` 仅展示计数;传 `number` 同时限制最大字符数。
218
+
219
+ ```html
220
+ <!-- 仅展示计数 -->
221
+ <Tiptap :word-count="true" />
222
+
223
+ <!-- 计数并限制最多 500 字符 -->
224
+ <Tiptap :word-count="500" />
225
+ ```
226
+
227
+ ## 👽 事件
228
+
229
+ ### `change`
230
+
231
+ 内容更新时触发,参数为当前输出字符串。
232
+
233
+ ```vue
234
+ <template>
235
+ <Tiptap @change="onChange" />
236
+ </template>
237
+
238
+ <script setup>
239
+ const onChange = (value: string) => {
240
+ console.log(value)
241
+ }
242
+ </script>
243
+ ```
244
+
245
+ ### `blur`
246
+
247
+ 编辑器失去焦点时触发,参数为当前输出字符串。
248
+
249
+ ```vue
250
+ <Tiptap @blur="onBlur" />
251
+ ```
252
+
253
+ ## 🎰 插槽
254
+
255
+ ### `word-count`
256
+
257
+ 自定义字符计数区域的 UI。
258
+
259
+ ```vue
260
+ <Tiptap :word-count="500">
261
+ <template #word-count="{ count, limit }">
262
+ <span>{{ count }} / {{ limit }}</span>
263
+ </template>
264
+ </Tiptap>
265
+ ```
266
+
267
+ 插槽参数:
268
+
269
+ | 参数 | 类型 | 说明 |
270
+ | ------- | ---------------- | -------------------------- |
271
+ | `count` | `number` | 当前字符数 |
272
+ | `limit` | `true \| number` | `word-count` prop 的传入值 |
273
+
274
+ ## 🙏 致谢
275
+
276
+ 本项目受 [element-tiptap](https://github.com/Leecason/element-tiptap) 启发,感谢 [Tiptap](https://github.com/ueberdosis/tiptap) 和 [Ant Design Vue](https://antdv-next.antfu.me/) 的开源支持。
277
+
278
+ ## 🚀 快速启动
279
+
280
+ 想快速体验本项目的魅力?我们为您准备了在线演示:
281
+
282
+ [![在线演示](https://img.shields.io/badge/在线演示-Antdv_Tiptap-4a90e2)](https://github.com/pengyinghao/antdv-next-tiptap)
Binary file
package/dist/index.css ADDED
@@ -0,0 +1,2 @@
1
+ .table-toolbar[data-v-d617e684]{background-color:var(--ant-color-bg-elevated);border:1px solid var(--ant-color-border-secondary);border-radius:8px;align-items:center;gap:2px;padding-block:4px;padding-inline:6px;display:flex;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.table-toolbar-divider[data-v-d617e684]{background-color:var(--ant-color-border-secondary);align-self:center;width:1px;height:16px;margin-inline:2px}.table-toolbar-row-height[data-v-d617e684]{color:var(--ant-color-text-secondary);align-items:center;gap:4px;padding-inline:4px;display:flex}.table-toolbar-row-height .row-height-icon[data-v-d617e684]{flex-shrink:0}.table-toolbar-row-height[data-v-d617e684] .ant-input-number{width:52px;height:22px;font-size:12px}.table-toolbar-row-height[data-v-d617e684] .ant-input-number .ant-input-number-input{text-align:center;height:22px;padding:0 4px}.table-toolbar-btn-wrap[data-v-d617e684]{display:inline-flex}.table-toolbar-btn[data-v-d617e684]{--un-outline-style:none;--un-border-style:none;cursor:pointer;width:26px;height:26px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:var(--ant-color-text);background:0 0;border-style:none;border-radius:4px;outline-style:none;justify-content:center;align-items:center;display:flex}@property --un-ease{syntax:"*";inherits:false}.table-toolbar-btn[data-v-d617e684]:hover:not(.disabled){background:var(--ant-color-primary-bg);color:var(--ant-color-primary)}.table-toolbar-btn.danger[data-v-d617e684]:hover:not(.disabled){background:var(--ant-color-error-bg);color:var(--ant-color-error)}.table-toolbar-btn.disabled[data-v-d617e684]{opacity:.3;cursor:not-allowed}.toolbar-btn[data-v-f31615a1]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toolbar-btn[data-v-f31615a1]:hover{background-color:var(--ant-color-primary-bg)}.color-swatch[data-v-f31615a1]{border-radius:3.40282e38px;width:14px;height:2px;display:block}.color-footer[data-v-f31615a1]{justify-content:flex-end;align-items:center;gap:8px;padding-block:6px;padding-inline:8px;display:flex}.text-bubble-menu[data-v-a937e33a]{background-color:var(--ant-color-bg-elevated);border:1px solid var(--ant-color-border-secondary);border-radius:8px;align-items:center;gap:2px;padding-block:4px;padding-inline:6px;display:flex;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.bubble-btn[data-v-a937e33a]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}@property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}.bubble-btn[data-v-a937e33a]:hover,.bubble-btn--active[data-v-a937e33a]{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.bubble-divider[data-v-a937e33a]{background-color:var(--ant-color-border-secondary);flex-shrink:0;align-self:center;width:1px;height:16px;margin-inline:2px}.toolbar-btn[data-v-8867673c]{cursor:pointer;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;gap:2px;padding-inline:6px;display:flex}.toolbar-btn[data-v-8867673c]:hover,.toolbar-btn.active[data-v-8867673c]{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.list-item[data-v-8867673c]{min-width:100px;color:var(--ant-color-text);align-items:center;gap:8px;padding-block:2px;padding-inline:4px;display:flex}.list-item.active[data-v-8867673c]{color:var(--ant-color-primary)}.toolbar-btn[data-v-f4bfe7b7]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toolbar-btn[data-v-f4bfe7b7]:hover{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.toolbar-btn[data-v-d1aa64d7]{cursor:pointer;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;gap:2px;padding-inline:6px;display:flex}.toolbar-btn[data-v-d1aa64d7]:hover,.toolbar-btn.active[data-v-d1aa64d7]{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.heading-item[data-v-d1aa64d7]{color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;align-items:center;gap:8px;min-width:100px;padding-block:2px;padding-inline:4px;display:flex}.heading-item.active[data-v-d1aa64d7]{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) }.form[data-v-7a6e16d1]{padding-top:16px}.form__row[data-v-7a6e16d1]{gap:16px;display:flex}.toolbar-btn[data-v-07611565]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toolbar-btn[data-v-07611565]:hover{background-color:var(--ant-color-primary-bg)}.toolbar-btn.is-uploading[data-v-07611565]{opacity:.8;cursor:not-allowed}.image-view[data-v-8c741472]{--un-leading:0;line-height:0}@property --un-leading{syntax:"*";inherits:false}.image-view--inline[data-v-8c741472]{margin-block:4px;display:inline-block}.image-view--block[data-v-8c741472]{text-align:center;margin-block:8px;display:block}.image-view--left[data-v-8c741472]{float:left;margin-block:4px;margin-right:8px;display:inline-block}.image-view--right[data-v-8c741472]{float:right;margin-block:4px;margin-left:8px;display:inline-block}.image-view__body[data-v-8c741472]{--un-leading:0;cursor:pointer;line-height:0;display:inline-block}.image-view__body[data-v-8c741472] img{vertical-align:bottom;box-sizing:border-box;max-width:100%}.image-toolbar[data-v-8c741472]{align-items:center;gap:2px;display:flex}.image-toolbar__btn[data-v-8c741472]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.image-toolbar__btn[data-v-8c741472]:hover,.image-toolbar__btn--active[data-v-8c741472]{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.image-toolbar__btn--danger[data-v-8c741472]:hover{color:color-mix(in srgb, var(--ant-color-error) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-error-bg)}.image-toolbar__divider[data-v-8c741472]{background-color:var(--ant-color-border-secondary);flex-shrink:0;width:1px;height:16px;margin-inline:2px}.toolbar-btn[data-v-60dcce95]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toolbar-btn[data-v-60dcce95]:hover{background-color:var(--ant-color-primary-bg)}.toolbar-btn.active[data-v-60dcce95]{color:color-mix(in srgb, var(--ant-color-primary-text) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.link-form[data-v-60dcce95]{padding-top:16px}.toolbar-btn[data-v-ae679706]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toolbar-btn[data-v-ae679706]:hover{background-color:var(--ant-color-primary-bg)}.table-grid-selector[data-v-ae679706]{-webkit-user-select:none;user-select:none;padding:8px}.table-grid-selector .grid-row[data-v-ae679706]{gap:2px;margin-bottom:2px;display:flex}.table-grid-selector .grid-cell[data-v-ae679706]{cursor:pointer;width:16px;height:16px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);background:var(--ant-color-bg-container);border:1px solid var(--ant-color-border-secondary);border-radius:2px}.table-grid-selector .grid-cell.selected[data-v-ae679706]{background-color:var(--ant-color-primary-bg);border-color:var(--ant-color-primary)}.table-grid-selector .grid-label[data-v-ae679706]{color:color-mix(in srgb, var(--ant-color-text-secondary) var(--un-text-opacity), transparent) ;text-align:center;margin-top:6px;font-size:12px}.task-item[data-v-26025aef]{align-items:baseline;gap:8px;display:flex}.task-content[data-v-26025aef]{flex:1}.task-content.is-checked[data-v-26025aef]{opacity:.5;text-decoration-line:line-through}.form[data-v-98919f10]{padding-top:16px;padding-bottom:8px}.tip[data-v-98919f10]{color:color-mix(in srgb, var(--ant-color-warning) var(--un-text-opacity), transparent) ;margin-left:8px;font-size:12px}.toolbar-btn[data-v-5a3e73c1]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toolbar-btn[data-v-5a3e73c1]:hover{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.toolbar-btn.is-uploading[data-v-5a3e73c1]{opacity:.8;cursor:not-allowed}.video-view{margin-block:8px;display:block}.video-view__body{cursor:pointer;box-sizing:border-box;border-radius:4px;outline:none;display:inline-block}.video-view__body video{border-radius:4px;max-width:100%;display:block}.video-toolbar{align-items:center;gap:2px;display:flex}.video-toolbar__btn{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.video-toolbar__btn:hover{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.video-toolbar__btn--danger:hover{color:color-mix(in srgb, var(--ant-color-error) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-error-bg)}.video-toolbar__divider{background-color:var(--ant-color-border-secondary);flex-shrink:0;width:1px;height:16px;margin-inline:2px}.toolbar-btn[data-v-630d3b1a]{cursor:pointer;width:32px;height:32px;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);color:color-mix(in srgb, var(--ant-color-text) var(--un-text-opacity), transparent) ;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.toolbar-btn[data-v-630d3b1a]:hover{color:color-mix(in srgb, var(--ant-color-primary) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.toolbar-btn.active[data-v-630d3b1a]{color:color-mix(in srgb, var(--ant-color-primary-text) var(--un-text-opacity), transparent) ;background-color:var(--ant-color-primary-bg)}.toolbar-btn.disabled[data-v-630d3b1a]{opacity:.3;cursor:not-allowed;pointer-events:none}html.dark{--tiptap-sb-thumb:#fff3;--tiptap-sb-thumb-active:#fff6}.editor{width:100%;transition-property:all;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.3s;--un-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);background-color:var(--ant-color-bg-container);border:1px solid var(--ant-color-border-secondary);border-radius:8px}.editor:fullscreen{background:var(--ant-color-bg-container);border-radius:0;flex-direction:column;display:flex;overflow:hidden}.editor:fullscreen .editor-content{flex:1;overflow:hidden}.editor:fullscreen .editor-content .tiptap{height:100%!important}.editor-toolbar{box-sizing:border-box;padding-top:var(--ant-padding-sm);padding-bottom:var(--ant-padding-xs);padding-left:var(--ant-padding-sm);padding-right:var(--ant-padding-sm);border-bottom:1px solid var(--ant-color-border-secondary);flex-wrap:wrap;align-items:center;gap:2px;display:flex}.editor-content{padding-top:var(--ant-padding-xs)}.editor-content .tiptap{box-sizing:border-box;height:100%;padding-bottom:var(--ant-padding-sm);padding-left:var(--ant-padding-sm);padding-right:var(--ant-padding-sm);scrollbar-width:thin;scrollbar-color:transparent transparent;overflow-y:auto}.editor-content .tiptap:focus-visible{--un-outline-style:none;outline-style:none}.editor-content .tiptap:hover{scrollbar-color:var(--tiptap-sb-thumb,#0003) transparent}.editor-content .tiptap::-webkit-scrollbar{width:8px}.editor-content .tiptap::-webkit-scrollbar-track{background-color:#0000}.editor-content .tiptap::-webkit-scrollbar-thumb{border-width:2px;border-color:#0000;border-color:var(--ant-color-bg-solid);background-color:#0000;background-clip:padding-box;border-radius:10px;transition:background-color .2s}.editor-content .tiptap:hover::-webkit-scrollbar-thumb{background-color:var(--tiptap-sb-thumb,#0003)}.editor-content .tiptap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--tiptap-sb-thumb-active,#0006)}.editor-content .tiptap p{outline:none;margin:0}.editor-content .tiptap h1,.editor-content .tiptap h2,.editor-content .tiptap h3,.editor-content .tiptap h4,.editor-content .tiptap h5{margin-top:20px;margin-bottom:20px;font-weight:700}.editor-content .tiptap h1:first-child,.editor-content .tiptap h2:first-child,.editor-content .tiptap h3:first-child,.editor-content .tiptap h4:first-child,.editor-content .tiptap h5:first-child{margin-top:0}.editor-content .tiptap h1:last-child,.editor-content .tiptap h2:last-child,.editor-content .tiptap h3:last-child,.editor-content .tiptap h4:last-child,.editor-content .tiptap h5:last-child{margin-bottom:0}.editor-content .tiptap h1{font-size:2em}.editor-content .tiptap h2{font-size:1.5em}.editor-content .tiptap h3{font-size:1.25em}.editor-content .tiptap h4{font-size:1em}.editor-content .tiptap h5{font-size:.875em}.editor-content .tiptap ul,.editor-content .tiptap ol{margin:0 0 0 24px;padding:5px 0;list-style-type:none}.editor-content .tiptap li>p{margin:0}.editor-content .tiptap li>p:first-child:before{content:counter(tiptap-counter) ".";text-align:right;width:24px;margin-left:-24px;line-height:1;display:inline-block;position:relative;top:0;left:-5px}.editor-content .tiptap ul li>p:first-child:before{content:"•";text-align:center}.editor-content .tiptap ol{counter-reset:tiptap-counter}.editor-content .tiptap ol li>p:first-child:before{counter-increment:tiptap-counter}.editor-content .tiptap ul[data-type=taskList]{padding-left:calc(var(--spacing) * 0);margin-left:5px;list-style-type:none}.editor-content .tiptap ul[data-type=taskList] li[data-type=taskItem]{flex-direction:row;align-items:flex-start;width:100%;display:flex}.editor-content .tiptap a{color:var(--ant-color-primary);cursor:pointer}.editor-content .tiptap blockquote{color:color-mix(in srgb, var(--ant-color-text-secondary) var(--un-text-opacity), transparent) ;box-sizing:border-box;border-left:3px solid var(--ant-color-border-secondary);margin-block:8px;padding-left:12px}.editor-content .tiptap hr{--un-border-style:none;background-color:var(--ant-color-border-secondary);border-style:none;height:1px;margin-block:12px}.editor-content .tiptap img{float:none;max-width:100%;margin:12px 0;display:inline-block}.editor-content .tiptap pre{background-color:var(--ant-color-fill-secondary);border-radius:6px;margin-block:8px;padding:12px}.editor-content .tiptap pre code{font-size:13px;font-family:var(--font-mono)}.editor-word-count{text-align:right;padding-left:var(--ant-padding-sm);padding-right:var(--ant-padding-sm);padding-top:var(--ant-padding-xs);padding-bottom:var(--ant-padding-xs);color:var(--ant-color-text-tertiary);border-top:1px solid var(--ant-color-border-secondary);font-size:12px}.editor .tiptap table{margin:calc(var(--spacing) * 0);border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden}.editor .tiptap table tr[style*=height] td,.editor .tiptap table tr[style*=height] th{height:inherit}.editor .tiptap table td,.editor .tiptap table th{vertical-align:top;box-sizing:border-box;border:1px solid var(--ant-color-border-secondary);min-width:1em;position:relative}.editor .tiptap table td>*,.editor .tiptap table th>*{margin-bottom:calc(var(--spacing) * 0)}.editor .tiptap table td p,.editor .tiptap table th p{margin:calc(var(--spacing) * 0)}.editor .tiptap table th{--un-font-weight:var(--fontWeight-bold);font-weight:var(--fontWeight-bold);text-align:left}.editor .tiptap table .selectedCell:after{pointer-events:none;content:"";inset:calc(var(--spacing) * 0);z-index:2;background-color:var(--ant-color-primary);position:absolute}.editor .tiptap table .column-resize-handle{pointer-events:none;width:4px;top:calc(var(--spacing) * 0);background-color:var(--ant-color-primary);position:absolute;bottom:-2px;right:-2px}.editor .tiptap .tableWrapper{margin-block:calc(var(--spacing) * 6);overflow-x:auto}.editor .tiptap.resize-cursor{cursor:col-resize}
2
+ /*$vite$:1*/