@block-kit/plugin 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 (297) hide show
  1. package/dist/es/align/index.d.ts +12 -0
  2. package/dist/es/align/index.js +25 -0
  3. package/dist/es/align/types/index.d.ts +1 -0
  4. package/dist/es/align/types/index.js +3 -0
  5. package/dist/es/background/index.d.ts +12 -0
  6. package/dist/es/background/index.js +27 -0
  7. package/dist/es/background/types/index.d.ts +1 -0
  8. package/dist/es/background/types/index.js +3 -0
  9. package/dist/es/bold/index.d.ts +15 -0
  10. package/dist/es/bold/index.js +46 -0
  11. package/dist/es/bold/types/index.d.ts +1 -0
  12. package/dist/es/bold/types/index.js +3 -0
  13. package/dist/es/bullet-list/index.d.ts +16 -0
  14. package/dist/es/bullet-list/index.js +149 -0
  15. package/dist/es/bullet-list/types/index.d.ts +6 -0
  16. package/dist/es/bullet-list/types/index.js +8 -0
  17. package/dist/es/bullet-list/utils/is.d.ts +6 -0
  18. package/dist/es/bullet-list/view/list.d.ts +9 -0
  19. package/dist/es/divider/index.d.ts +17 -0
  20. package/dist/es/divider/index.js +60 -0
  21. package/dist/es/divider/types/index.d.ts +1 -0
  22. package/dist/es/divider/types/index.js +3 -0
  23. package/dist/es/dom-71a99400.js +45 -0
  24. package/dist/es/emoji/index.d.ts +16 -0
  25. package/dist/es/emoji/index.js +51 -0
  26. package/dist/es/emoji/types/index.d.ts +1 -0
  27. package/dist/es/emoji/types/index.js +3 -0
  28. package/dist/es/font-color/index.d.ts +12 -0
  29. package/dist/es/font-color/index.js +27 -0
  30. package/dist/es/font-color/types/index.d.ts +1 -0
  31. package/dist/es/font-color/types/index.js +3 -0
  32. package/dist/es/font-size/index.d.ts +12 -0
  33. package/dist/es/font-size/index.js +28 -0
  34. package/dist/es/font-size/types/index.d.ts +1 -0
  35. package/dist/es/font-size/types/index.js +3 -0
  36. package/dist/es/heading/index.d.ts +13 -0
  37. package/dist/es/heading/index.js +33 -0
  38. package/dist/es/heading/types/index.d.ts +1 -0
  39. package/dist/es/heading/types/index.js +3 -0
  40. package/dist/es/image/index.d.ts +21 -0
  41. package/dist/es/image/index.js +245 -0
  42. package/dist/es/image/types/index.d.ts +12 -0
  43. package/dist/es/image/types/index.js +14 -0
  44. package/dist/es/image/view/image.d.ts +10 -0
  45. package/dist/es/image/view/wrapper.d.ts +10 -0
  46. package/dist/es/indent/index.d.ts +14 -0
  47. package/dist/es/indent/index.js +67 -0
  48. package/dist/es/indent/types/index.d.ts +1 -0
  49. package/dist/es/indent/types/index.js +3 -0
  50. package/dist/es/index-1e46887d.js +205 -0
  51. package/dist/es/index-ddc2e5ac.js +493 -0
  52. package/dist/es/index.css +1 -0
  53. package/dist/es/index.d.ts +50 -0
  54. package/dist/es/index.js +64 -0
  55. package/dist/es/inline-code/index.d.ts +14 -0
  56. package/dist/es/inline-code/index.js +46 -0
  57. package/dist/es/inline-code/types/index.d.ts +1 -0
  58. package/dist/es/inline-code/types/index.js +3 -0
  59. package/dist/es/is-2b264ec8.js +11 -0
  60. package/dist/es/is-3de778e2.js +15 -0
  61. package/dist/es/is-7f3ae820.js +12 -0
  62. package/dist/es/italic/index.d.ts +15 -0
  63. package/dist/es/italic/index.js +43 -0
  64. package/dist/es/italic/types/index.d.ts +1 -0
  65. package/dist/es/italic/types/index.js +3 -0
  66. package/dist/es/line-height/index.d.ts +12 -0
  67. package/dist/es/line-height/index.js +25 -0
  68. package/dist/es/line-height/types/index.d.ts +1 -0
  69. package/dist/es/line-height/types/index.js +3 -0
  70. package/dist/es/link/index.d.ts +17 -0
  71. package/dist/es/link/index.js +64 -0
  72. package/dist/es/link/types/index.d.ts +3 -0
  73. package/dist/es/link/types/index.js +7 -0
  74. package/dist/es/link/view/a.d.ts +6 -0
  75. package/dist/es/marks-ac0ec630.js +46 -0
  76. package/dist/es/mention/index.d.ts +16 -0
  77. package/dist/es/mention/index.js +13 -0
  78. package/dist/es/mention/modules/suggest.d.ts +18 -0
  79. package/dist/es/mention/types/index.d.ts +2 -0
  80. package/dist/es/mention/types/index.js +4 -0
  81. package/dist/es/mention/utils/constant.d.ts +2 -0
  82. package/dist/es/mention/view/suggest.d.ts +9 -0
  83. package/dist/es/order-list/index.d.ts +16 -0
  84. package/dist/es/order-list/index.js +323 -0
  85. package/dist/es/order-list/types/index.d.ts +8 -0
  86. package/dist/es/order-list/types/index.js +10 -0
  87. package/dist/es/order-list/utils/format.d.ts +6 -0
  88. package/dist/es/order-list/utils/is.d.ts +6 -0
  89. package/dist/es/order-list/utils/serial.d.ts +10 -0
  90. package/dist/es/order-list/view/list.d.ts +10 -0
  91. package/dist/es/quote/index.d.ts +17 -0
  92. package/dist/es/quote/index.js +130 -0
  93. package/dist/es/quote/types/index.d.ts +1 -0
  94. package/dist/es/quote/types/index.js +3 -0
  95. package/dist/es/selection-badfb0bc.js +81 -0
  96. package/dist/es/shared/components/selection.d.ts +26 -0
  97. package/dist/es/shared/icons/divider.d.ts +2 -0
  98. package/dist/es/shared/icons/emoji.d.ts +2 -0
  99. package/dist/es/shared/icons/font-color.d.ts +2 -0
  100. package/dist/es/shared/icons/font-size.d.ts +2 -0
  101. package/dist/es/shared/icons/justify.d.ts +2 -0
  102. package/dist/es/shared/icons/line-height.d.ts +2 -0
  103. package/dist/es/shared/icons/text.d.ts +2 -0
  104. package/dist/es/shared/modules/selection.d.ts +12 -0
  105. package/dist/es/shared/utils/dom.d.ts +26 -0
  106. package/dist/es/shared/utils/event.d.ts +8 -0
  107. package/dist/es/shared/utils/is.d.ts +4 -0
  108. package/dist/es/shortcut/index.d.ts +14 -0
  109. package/dist/es/shortcut/index.js +85 -0
  110. package/dist/es/shortcut/modules/preset.d.ts +2 -0
  111. package/dist/es/shortcut/types/index.d.ts +10 -0
  112. package/dist/es/shortcut/types/index.js +3 -0
  113. package/dist/es/strike/index.d.ts +15 -0
  114. package/dist/es/strike/index.js +47 -0
  115. package/dist/es/strike/types/index.d.ts +1 -0
  116. package/dist/es/strike/types/index.js +3 -0
  117. package/dist/es/toolbar/context/basic.d.ts +4 -0
  118. package/dist/es/toolbar/context/float.d.ts +13 -0
  119. package/dist/es/toolbar/context/provider.d.ts +12 -0
  120. package/dist/es/toolbar/index.d.ts +26 -0
  121. package/dist/es/toolbar/index.js +34 -0
  122. package/dist/es/toolbar/modules/align.d.ts +2 -0
  123. package/dist/es/toolbar/modules/bold.d.ts +2 -0
  124. package/dist/es/toolbar/modules/bullet-list.d.ts +2 -0
  125. package/dist/es/toolbar/modules/cut.d.ts +3 -0
  126. package/dist/es/toolbar/modules/divider.d.ts +2 -0
  127. package/dist/es/toolbar/modules/emoji.d.ts +3 -0
  128. package/dist/es/toolbar/modules/font-color.d.ts +3 -0
  129. package/dist/es/toolbar/modules/font-size.d.ts +2 -0
  130. package/dist/es/toolbar/modules/heading.d.ts +2 -0
  131. package/dist/es/toolbar/modules/history.d.ts +2 -0
  132. package/dist/es/toolbar/modules/image.d.ts +2 -0
  133. package/dist/es/toolbar/modules/inline-code.d.ts +2 -0
  134. package/dist/es/toolbar/modules/italic.d.ts +2 -0
  135. package/dist/es/toolbar/modules/line-height.d.ts +3 -0
  136. package/dist/es/toolbar/modules/link.d.ts +5 -0
  137. package/dist/es/toolbar/modules/order-list.d.ts +2 -0
  138. package/dist/es/toolbar/modules/quote.d.ts +2 -0
  139. package/dist/es/toolbar/modules/strike.d.ts +2 -0
  140. package/dist/es/toolbar/modules/underline.d.ts +2 -0
  141. package/dist/es/toolbar/types/index.d.ts +8 -0
  142. package/dist/es/toolbar/types/index.js +7 -0
  143. package/dist/es/toolbar/utils/marks.d.ts +4 -0
  144. package/dist/es/tslib.es6-83956cc1.js +38 -0
  145. package/dist/es/underline/index.d.ts +15 -0
  146. package/dist/es/underline/index.js +45 -0
  147. package/dist/es/underline/types/index.d.ts +1 -0
  148. package/dist/es/underline/types/index.js +3 -0
  149. package/dist/lib/align/index.d.ts +12 -0
  150. package/dist/lib/align/index.js +29 -0
  151. package/dist/lib/align/types/index.d.ts +1 -0
  152. package/dist/lib/align/types/index.js +7 -0
  153. package/dist/lib/background/index.d.ts +12 -0
  154. package/dist/lib/background/index.js +31 -0
  155. package/dist/lib/background/types/index.d.ts +1 -0
  156. package/dist/lib/background/types/index.js +7 -0
  157. package/dist/lib/bold/index.d.ts +15 -0
  158. package/dist/lib/bold/index.js +50 -0
  159. package/dist/lib/bold/types/index.d.ts +1 -0
  160. package/dist/lib/bold/types/index.js +7 -0
  161. package/dist/lib/bullet-list/index.d.ts +16 -0
  162. package/dist/lib/bullet-list/index.js +153 -0
  163. package/dist/lib/bullet-list/types/index.d.ts +6 -0
  164. package/dist/lib/bullet-list/types/index.js +14 -0
  165. package/dist/lib/bullet-list/utils/is.d.ts +6 -0
  166. package/dist/lib/bullet-list/view/list.d.ts +9 -0
  167. package/dist/lib/divider/index.d.ts +17 -0
  168. package/dist/lib/divider/index.js +64 -0
  169. package/dist/lib/divider/types/index.d.ts +1 -0
  170. package/dist/lib/divider/types/index.js +7 -0
  171. package/dist/lib/dom-cb8b8e40.js +50 -0
  172. package/dist/lib/emoji/index.d.ts +16 -0
  173. package/dist/lib/emoji/index.js +59 -0
  174. package/dist/lib/emoji/types/index.d.ts +1 -0
  175. package/dist/lib/emoji/types/index.js +7 -0
  176. package/dist/lib/font-color/index.d.ts +12 -0
  177. package/dist/lib/font-color/index.js +31 -0
  178. package/dist/lib/font-color/types/index.d.ts +1 -0
  179. package/dist/lib/font-color/types/index.js +7 -0
  180. package/dist/lib/font-size/index.d.ts +12 -0
  181. package/dist/lib/font-size/index.js +32 -0
  182. package/dist/lib/font-size/types/index.d.ts +1 -0
  183. package/dist/lib/font-size/types/index.js +7 -0
  184. package/dist/lib/heading/index.d.ts +13 -0
  185. package/dist/lib/heading/index.js +37 -0
  186. package/dist/lib/heading/types/index.d.ts +1 -0
  187. package/dist/lib/heading/types/index.js +7 -0
  188. package/dist/lib/image/index.d.ts +21 -0
  189. package/dist/lib/image/index.js +249 -0
  190. package/dist/lib/image/types/index.d.ts +12 -0
  191. package/dist/lib/image/types/index.js +25 -0
  192. package/dist/lib/image/view/image.d.ts +10 -0
  193. package/dist/lib/image/view/wrapper.d.ts +10 -0
  194. package/dist/lib/indent/index.d.ts +14 -0
  195. package/dist/lib/indent/index.js +71 -0
  196. package/dist/lib/indent/types/index.d.ts +1 -0
  197. package/dist/lib/indent/types/index.js +7 -0
  198. package/dist/lib/index-f50053bf.js +506 -0
  199. package/dist/lib/index-ffc4bb34.js +212 -0
  200. package/dist/lib/index.css +1 -0
  201. package/dist/lib/index.d.ts +50 -0
  202. package/dist/lib/index.js +141 -0
  203. package/dist/lib/inline-code/index.d.ts +14 -0
  204. package/dist/lib/inline-code/index.js +50 -0
  205. package/dist/lib/inline-code/types/index.d.ts +1 -0
  206. package/dist/lib/inline-code/types/index.js +7 -0
  207. package/dist/lib/is-18806678.js +14 -0
  208. package/dist/lib/is-473d664a.js +18 -0
  209. package/dist/lib/is-fa1755d0.js +13 -0
  210. package/dist/lib/italic/index.d.ts +15 -0
  211. package/dist/lib/italic/index.js +47 -0
  212. package/dist/lib/italic/types/index.d.ts +1 -0
  213. package/dist/lib/italic/types/index.js +7 -0
  214. package/dist/lib/line-height/index.d.ts +12 -0
  215. package/dist/lib/line-height/index.js +29 -0
  216. package/dist/lib/line-height/types/index.d.ts +1 -0
  217. package/dist/lib/line-height/types/index.js +7 -0
  218. package/dist/lib/link/index.d.ts +17 -0
  219. package/dist/lib/link/index.js +68 -0
  220. package/dist/lib/link/types/index.d.ts +3 -0
  221. package/dist/lib/link/types/index.js +13 -0
  222. package/dist/lib/link/view/a.d.ts +6 -0
  223. package/dist/lib/marks-a30b8a0f.js +50 -0
  224. package/dist/lib/mention/index.d.ts +16 -0
  225. package/dist/lib/mention/index.js +21 -0
  226. package/dist/lib/mention/modules/suggest.d.ts +18 -0
  227. package/dist/lib/mention/types/index.d.ts +2 -0
  228. package/dist/lib/mention/types/index.js +9 -0
  229. package/dist/lib/mention/utils/constant.d.ts +2 -0
  230. package/dist/lib/mention/view/suggest.d.ts +9 -0
  231. package/dist/lib/order-list/index.d.ts +16 -0
  232. package/dist/lib/order-list/index.js +327 -0
  233. package/dist/lib/order-list/types/index.d.ts +8 -0
  234. package/dist/lib/order-list/types/index.js +17 -0
  235. package/dist/lib/order-list/utils/format.d.ts +6 -0
  236. package/dist/lib/order-list/utils/is.d.ts +6 -0
  237. package/dist/lib/order-list/utils/serial.d.ts +10 -0
  238. package/dist/lib/order-list/view/list.d.ts +10 -0
  239. package/dist/lib/quote/index.d.ts +17 -0
  240. package/dist/lib/quote/index.js +134 -0
  241. package/dist/lib/quote/types/index.d.ts +1 -0
  242. package/dist/lib/quote/types/index.js +7 -0
  243. package/dist/lib/selection-868f15c1.js +88 -0
  244. package/dist/lib/shared/components/selection.d.ts +26 -0
  245. package/dist/lib/shared/icons/divider.d.ts +2 -0
  246. package/dist/lib/shared/icons/emoji.d.ts +2 -0
  247. package/dist/lib/shared/icons/font-color.d.ts +2 -0
  248. package/dist/lib/shared/icons/font-size.d.ts +2 -0
  249. package/dist/lib/shared/icons/justify.d.ts +2 -0
  250. package/dist/lib/shared/icons/line-height.d.ts +2 -0
  251. package/dist/lib/shared/icons/text.d.ts +2 -0
  252. package/dist/lib/shared/modules/selection.d.ts +12 -0
  253. package/dist/lib/shared/utils/dom.d.ts +26 -0
  254. package/dist/lib/shared/utils/event.d.ts +8 -0
  255. package/dist/lib/shared/utils/is.d.ts +4 -0
  256. package/dist/lib/shortcut/index.d.ts +14 -0
  257. package/dist/lib/shortcut/index.js +89 -0
  258. package/dist/lib/shortcut/modules/preset.d.ts +2 -0
  259. package/dist/lib/shortcut/types/index.d.ts +10 -0
  260. package/dist/lib/shortcut/types/index.js +7 -0
  261. package/dist/lib/strike/index.d.ts +15 -0
  262. package/dist/lib/strike/index.js +51 -0
  263. package/dist/lib/strike/types/index.d.ts +1 -0
  264. package/dist/lib/strike/types/index.js +7 -0
  265. package/dist/lib/toolbar/context/basic.d.ts +4 -0
  266. package/dist/lib/toolbar/context/float.d.ts +13 -0
  267. package/dist/lib/toolbar/context/provider.d.ts +12 -0
  268. package/dist/lib/toolbar/index.d.ts +26 -0
  269. package/dist/lib/toolbar/index.js +44 -0
  270. package/dist/lib/toolbar/modules/align.d.ts +2 -0
  271. package/dist/lib/toolbar/modules/bold.d.ts +2 -0
  272. package/dist/lib/toolbar/modules/bullet-list.d.ts +2 -0
  273. package/dist/lib/toolbar/modules/cut.d.ts +3 -0
  274. package/dist/lib/toolbar/modules/divider.d.ts +2 -0
  275. package/dist/lib/toolbar/modules/emoji.d.ts +3 -0
  276. package/dist/lib/toolbar/modules/font-color.d.ts +3 -0
  277. package/dist/lib/toolbar/modules/font-size.d.ts +2 -0
  278. package/dist/lib/toolbar/modules/heading.d.ts +2 -0
  279. package/dist/lib/toolbar/modules/history.d.ts +2 -0
  280. package/dist/lib/toolbar/modules/image.d.ts +2 -0
  281. package/dist/lib/toolbar/modules/inline-code.d.ts +2 -0
  282. package/dist/lib/toolbar/modules/italic.d.ts +2 -0
  283. package/dist/lib/toolbar/modules/line-height.d.ts +3 -0
  284. package/dist/lib/toolbar/modules/link.d.ts +5 -0
  285. package/dist/lib/toolbar/modules/order-list.d.ts +2 -0
  286. package/dist/lib/toolbar/modules/quote.d.ts +2 -0
  287. package/dist/lib/toolbar/modules/strike.d.ts +2 -0
  288. package/dist/lib/toolbar/modules/underline.d.ts +2 -0
  289. package/dist/lib/toolbar/types/index.d.ts +8 -0
  290. package/dist/lib/toolbar/types/index.js +12 -0
  291. package/dist/lib/toolbar/utils/marks.d.ts +4 -0
  292. package/dist/lib/tslib.es6-d44c9a95.js +41 -0
  293. package/dist/lib/underline/index.d.ts +15 -0
  294. package/dist/lib/underline/index.js +49 -0
  295. package/dist/lib/underline/types/index.d.ts +1 -0
  296. package/dist/lib/underline/types/index.js +7 -0
  297. package/package.json +56 -0
@@ -0,0 +1,323 @@
1
+ import { _ as __decorate } from '../tslib.es6-83956cc1.js';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { EDITOR_EVENT, RawPoint, Point } from '@block-kit/core';
4
+ import { Delta } from '@block-kit/delta';
5
+ import { EditorPlugin } from '@block-kit/react';
6
+ import { preventNativeEvent, cs, Bind, KEY_CODE, NIL } from '@block-kit/utils';
7
+ import { LIST_TYPE_KEY } from '../bullet-list/types/index.js';
8
+ import { INDENT_LEVEL_KEY } from '../indent/types/index.js';
9
+ import { p as preventContextEvent } from '../dom-71a99400.js';
10
+ import { a as isKeyCode, i as isEmptyLine } from '../is-3de778e2.js';
11
+ import { LIST_RESTART_KEY, LIST_START_KEY, ORDER_LIST_KEY, ORDER_LIST_TYPE } from './types/index.js';
12
+ import { i as isOrderList } from '../is-7f3ae820.js';
13
+
14
+ /**
15
+ * 批量刷新选区的列表序号 [批量刷新简单方便]
16
+ * - 从选区开始的第一个列表项开始,逐个刷新序号
17
+ * - 全量刷新序号数据, 最后需要在渲染时批量刷新
18
+ * @param editor
19
+ * @param sel
20
+ */
21
+ const applyNewOrderList = (editor, range) => {
22
+ const sel = range || editor.selection.get();
23
+ if (!sel)
24
+ return void 0;
25
+ const startPoint = sel.start;
26
+ const block = editor.state.block;
27
+ let start = startPoint.line;
28
+ const selStartLine = block.getLine(sel.start.line);
29
+ const selEndLine = block.getLine(sel.end.line);
30
+ const selEndNextLine = selEndLine && selEndLine.next();
31
+ // 如果当前行不是列表项,且选区结尾下一行是列表项,则从下一行开始探查
32
+ if (selStartLine &&
33
+ !isOrderList(selStartLine.attributes) &&
34
+ selEndNextLine &&
35
+ isOrderList(selEndNextLine.attributes)) {
36
+ start++;
37
+ }
38
+ // 如果 start 的行属性不存在列表项, 则无需刷新
39
+ const currentLine = block.getLine(start);
40
+ if (!currentLine || !isOrderList(currentLine.attributes)) {
41
+ return void 0;
42
+ }
43
+ // 向前查找到第一个列表项
44
+ while (--start >= 0) {
45
+ const line = block.getLine(start);
46
+ if (!line || !isOrderList(line.attributes)) {
47
+ start++;
48
+ break;
49
+ }
50
+ }
51
+ const delta = new Delta();
52
+ const startLine = block.getLine(start);
53
+ if (!startLine)
54
+ return void 0;
55
+ delta.retain(startLine.start);
56
+ // 逐行刷新序号
57
+ const levelToIndex = {};
58
+ for (let i = start; i < block.size; i++) {
59
+ const line = block.getLine(i);
60
+ const attrs = line && line.attributes;
61
+ if (!line || !attrs || !isOrderList(attrs))
62
+ break;
63
+ const level = attrs[INDENT_LEVEL_KEY];
64
+ // 重置序号
65
+ if (attrs[LIST_RESTART_KEY]) {
66
+ levelToIndex[level] = 1;
67
+ }
68
+ const index = levelToIndex[level] || 1;
69
+ levelToIndex[level] = index + 1;
70
+ delta.retain(line.length - 1);
71
+ delta.retain(1, { [LIST_START_KEY]: String(index) });
72
+ }
73
+ editor.state.apply(delta, { autoCaret: false });
74
+ };
75
+
76
+ const latinCache = {};
77
+ const romanCache = {};
78
+ const startToLatin = (start) => {
79
+ if (start < 1)
80
+ return "";
81
+ const cache = latinCache[start];
82
+ if (cache)
83
+ return cache;
84
+ // 1 -> a, 27 -> aa
85
+ let res = "";
86
+ let n = start - 1;
87
+ while (n >= 0) {
88
+ res = String.fromCharCode((n % 26) + 97) + res;
89
+ n = Math.floor(n / 26) - 1;
90
+ }
91
+ latinCache[start] = res;
92
+ return res;
93
+ };
94
+ const startToRoman = (start) => {
95
+ if (start < 1 || start > 5000)
96
+ return "";
97
+ const cache = romanCache[start];
98
+ if (cache)
99
+ return cache;
100
+ // https://github.com/bpampuch/pdfmake/blob/7af85/src/DocMeasure.js#L315
101
+ const lookup = {
102
+ m: 1000,
103
+ cm: 900,
104
+ d: 500,
105
+ cd: 400,
106
+ c: 100,
107
+ xc: 90,
108
+ l: 50,
109
+ xl: 40,
110
+ x: 10,
111
+ ix: 9,
112
+ v: 5,
113
+ iv: 4,
114
+ i: 1,
115
+ };
116
+ let res = "";
117
+ let n = start;
118
+ for (const i of Object.keys(lookup)) {
119
+ while (n >= lookup[i]) {
120
+ res = res + i;
121
+ n = n - lookup[i];
122
+ }
123
+ }
124
+ romanCache[start] = res;
125
+ return res;
126
+ };
127
+ /**
128
+ * 序列化有序列表前缀值
129
+ * @param start
130
+ * @param level
131
+ */
132
+ const formatListLevel = (start, level) => {
133
+ let serial = "";
134
+ const value = level % 3;
135
+ if (value === 0) {
136
+ // 1 -> 1
137
+ serial = start.toString();
138
+ }
139
+ else if (value === 1) {
140
+ // 1 -> a
141
+ serial = startToLatin(start);
142
+ }
143
+ else if (value === 2) {
144
+ // 1 -> i
145
+ serial = startToRoman(start);
146
+ }
147
+ return serial + ".";
148
+ };
149
+
150
+ const OrderListView = props => {
151
+ const { level, start, children } = props;
152
+ return (jsxs("ol", { className: "block-kit-order-list", children: [jsx("div", { contentEditable: false, className: "block-kit-order-indicator", onMouseDown: preventNativeEvent, children: formatListLevel(start, level) }), jsx("li", { value: start, className: cs("block-kit-order-item", `block-kit-li-level-${level % 3}`), children: children })] }));
153
+ };
154
+
155
+ class OrderListPlugin extends EditorPlugin {
156
+ constructor(editor) {
157
+ super();
158
+ this.editor = editor;
159
+ this.key = ORDER_LIST_KEY;
160
+ editor.command.register(this.key, this.onExec);
161
+ editor.event.on(EDITOR_EVENT.KEY_DOWN, this.onKeyDown);
162
+ }
163
+ destroy() {
164
+ this.editor.event.off(EDITOR_EVENT.KEY_DOWN, this.onKeyDown);
165
+ }
166
+ match(attrs) {
167
+ return isOrderList(attrs);
168
+ }
169
+ renderLine(context) {
170
+ const level = Number(context.attributes[INDENT_LEVEL_KEY]) || 0;
171
+ const start = Number(context.attributes[LIST_START_KEY]) || 1;
172
+ return (jsx(OrderListView, { level: level, start: start, editor: this.editor, context: context, children: context.children }));
173
+ }
174
+ onExec(payload) {
175
+ const editor = this.editor;
176
+ const sel = editor.selection.get() || payload.range;
177
+ if (!sel)
178
+ return void 0;
179
+ const { start, end } = sel;
180
+ // 先检查当前需要设置/解除列表状态
181
+ const lines = editor.state.block.getLines().slice(start.line, end.line + 1);
182
+ const isList = lines.every(line => isOrderList(line.attributes));
183
+ // 计算需要操作的范围
184
+ const rawPoint = RawPoint.fromPoint(this.editor, Point.from(start.line, 0));
185
+ if (!rawPoint)
186
+ return void 0;
187
+ const block = this.editor.state.block;
188
+ const delta = new Delta();
189
+ delta.retain(rawPoint.offset);
190
+ // 根据行的状态, 逐行设置列表状态
191
+ for (let i = start.line; i <= end.line; i++) {
192
+ const lineState = block.getLine(i);
193
+ if (!lineState)
194
+ break;
195
+ delta.retain(lineState.length - 1);
196
+ const attrs = {
197
+ [LIST_TYPE_KEY]: isList ? NIL : ORDER_LIST_TYPE,
198
+ [LIST_START_KEY]: isList ? NIL : "1",
199
+ };
200
+ if (!isList && lineState.attributes[INDENT_LEVEL_KEY]) {
201
+ attrs[INDENT_LEVEL_KEY] = lineState.attributes[INDENT_LEVEL_KEY];
202
+ }
203
+ if (!isList && lineState.attributes[LIST_RESTART_KEY]) {
204
+ attrs[LIST_RESTART_KEY] = lineState.attributes[LIST_RESTART_KEY];
205
+ }
206
+ delta.retain(1, attrs);
207
+ }
208
+ this.editor.state.apply(delta, { autoCaret: false });
209
+ applyNewOrderList(this.editor, sel);
210
+ }
211
+ onKeyDown(event, context) {
212
+ const sel = this.editor.selection.get();
213
+ if (!sel)
214
+ return void 0;
215
+ const block = this.editor.state.block;
216
+ const startLine = block.getLine(sel.start.line);
217
+ if (!startLine)
218
+ return void 0;
219
+ const prevLine = startLine.prev();
220
+ const attrs = startLine.attributes;
221
+ // 当前行是列表行, 且按下回车键, 且选区折叠, 且当前行是空内容行
222
+ // => 处理列表的缩进等级
223
+ if (isKeyCode(event, KEY_CODE.ENTER) &&
224
+ isOrderList(attrs) &&
225
+ sel.isCollapsed &&
226
+ isEmptyLine(startLine)) {
227
+ const level = Number(attrs[INDENT_LEVEL_KEY]);
228
+ const nextAttrs = {};
229
+ if (level > 0) {
230
+ // 缩进等级大于 0, 则减少缩进等级
231
+ const nextLevel = level - 1 > 0 ? String(level - 1) : NIL;
232
+ nextAttrs[INDENT_LEVEL_KEY] = nextLevel;
233
+ }
234
+ else {
235
+ // 否则, 取消列表状态
236
+ nextAttrs[LIST_TYPE_KEY] = NIL;
237
+ nextAttrs[LIST_START_KEY] = NIL;
238
+ nextAttrs[LIST_RESTART_KEY] = NIL;
239
+ }
240
+ const delta = new Delta().retain(startLine.start + startLine.length - 1).retain(1, nextAttrs);
241
+ this.editor.state.apply(delta, { autoCaret: false });
242
+ applyNewOrderList(this.editor, sel);
243
+ preventContextEvent(event, context);
244
+ return void 0;
245
+ }
246
+ // 当前行是列表行, 且按下回车键, 且选区折叠, 且位于行首, 且上一行是列表行
247
+ // => 继续编号, 避免默认的处理, 保持列表的连续性
248
+ if (isKeyCode(event, KEY_CODE.ENTER) &&
249
+ isOrderList(attrs) &&
250
+ sel.isCollapsed &&
251
+ !sel.start.offset &&
252
+ prevLine &&
253
+ isOrderList(prevLine.attributes)) {
254
+ const nextAttrs = Object.assign({}, prevLine.attributes);
255
+ if (attrs[INDENT_LEVEL_KEY]) {
256
+ // 缩进层级优先取当前行的缩进层级
257
+ nextAttrs[INDENT_LEVEL_KEY] = attrs[INDENT_LEVEL_KEY];
258
+ }
259
+ const delta = new Delta().retain(startLine.start).insertEOL(nextAttrs);
260
+ this.editor.state.apply(delta);
261
+ applyNewOrderList(this.editor, sel);
262
+ preventContextEvent(event, context);
263
+ return void 0;
264
+ }
265
+ // 当前行是列表行, 且按下回车键
266
+ // => 在列表行内部插入换行符, 且携带列表状态
267
+ if (isKeyCode(event, KEY_CODE.ENTER) && isOrderList(attrs)) {
268
+ this.editor.perform.insertBreak(sel, attrs);
269
+ applyNewOrderList(this.editor, sel);
270
+ preventContextEvent(event, context);
271
+ return void 0;
272
+ }
273
+ // 当前行是列表行, 且折叠选区, 且在行首, 且按下退格键
274
+ // => 将当前行的列表状态移除, 保留缩进的等级
275
+ if (isKeyCode(event, KEY_CODE.BACKSPACE) &&
276
+ sel.isCollapsed &&
277
+ isOrderList(attrs) &&
278
+ !sel.start.offset) {
279
+ const delta = new Delta().retain(startLine.start + startLine.length - 1).retain(1, {
280
+ [LIST_TYPE_KEY]: NIL,
281
+ [LIST_START_KEY]: NIL,
282
+ [LIST_RESTART_KEY]: NIL,
283
+ });
284
+ this.editor.state.apply(delta, { autoCaret: false });
285
+ applyNewOrderList(this.editor, sel);
286
+ preventContextEvent(event, context);
287
+ return void 0;
288
+ }
289
+ // 当前行是列表行, 按下 Tab 键
290
+ // => 由列表的缩进状态调整列表的序号
291
+ if (isKeyCode(event, KEY_CODE.TAB) && isOrderList(attrs)) {
292
+ applyNewOrderList(this.editor, sel);
293
+ preventContextEvent(event, context);
294
+ return void 0;
295
+ }
296
+ // 处于当前行的行首, 且不存在其他行属性, 且前一行是列表行
297
+ // => 将当前上一行属性移到当前行, 且刷新列表值
298
+ if (isKeyCode(event, KEY_CODE.BACKSPACE) &&
299
+ !sel.start.offset &&
300
+ !Object.keys(attrs).length &&
301
+ prevLine &&
302
+ isOrderList(prevLine.attributes)) {
303
+ const prevAttrs = Object.assign({}, prevLine.attributes);
304
+ const delta = new Delta()
305
+ .retain(startLine.start - 1)
306
+ .delete(1)
307
+ .retain(startLine.length - 1)
308
+ .retain(1, prevAttrs);
309
+ this.editor.state.apply(delta);
310
+ applyNewOrderList(this.editor, sel);
311
+ preventContextEvent(event, context);
312
+ return void 0;
313
+ }
314
+ }
315
+ }
316
+ __decorate([
317
+ Bind
318
+ ], OrderListPlugin.prototype, "onExec", null);
319
+ __decorate([
320
+ Bind
321
+ ], OrderListPlugin.prototype, "onKeyDown", null);
322
+
323
+ export { OrderListPlugin };
@@ -0,0 +1,8 @@
1
+ /** 有序列表标识 */
2
+ export declare const ORDER_LIST_KEY = "order-list";
3
+ /** 有序列表类型值 */
4
+ export declare const ORDER_LIST_TYPE = "order";
5
+ /** 有序列表序号 */
6
+ export declare const LIST_START_KEY = "list-start";
7
+ /** 重新编号标识 */
8
+ export declare const LIST_RESTART_KEY = "list-restart";
@@ -0,0 +1,10 @@
1
+ /** 有序列表标识 */
2
+ const ORDER_LIST_KEY = "order-list";
3
+ /** 有序列表类型值 */
4
+ const ORDER_LIST_TYPE = "order";
5
+ /** 有序列表序号 */
6
+ const LIST_START_KEY = "list-start";
7
+ /** 重新编号标识 */
8
+ const LIST_RESTART_KEY = "list-restart";
9
+
10
+ export { LIST_RESTART_KEY, LIST_START_KEY, ORDER_LIST_KEY, ORDER_LIST_TYPE };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 序列化有序列表前缀值
3
+ * @param start
4
+ * @param level
5
+ */
6
+ export declare const formatListLevel: (start: number, level: number) => string;
@@ -0,0 +1,6 @@
1
+ import type { AttributeMap } from "@block-kit/delta";
2
+ /**
3
+ * 检查有序列表
4
+ * @param attrs
5
+ */
6
+ export declare const isOrderList: (attrs: AttributeMap) => boolean;
@@ -0,0 +1,10 @@
1
+ import type { Range } from "@block-kit/core";
2
+ import type { Editor } from "@block-kit/core";
3
+ /**
4
+ * 批量刷新选区的列表序号 [批量刷新简单方便]
5
+ * - 从选区开始的第一个列表项开始,逐个刷新序号
6
+ * - 全量刷新序号数据, 最后需要在渲染时批量刷新
7
+ * @param editor
8
+ * @param sel
9
+ */
10
+ export declare const applyNewOrderList: (editor: Editor, range?: Range) => undefined;
@@ -0,0 +1,10 @@
1
+ import "../styles/index.scss";
2
+ import type { Editor } from "@block-kit/core";
3
+ import type { ReactLineContext } from "@block-kit/react";
4
+ import type { FC } from "react";
5
+ export declare const OrderListView: FC<{
6
+ context: ReactLineContext;
7
+ editor: Editor;
8
+ level: number;
9
+ start: number;
10
+ }>;
@@ -0,0 +1,17 @@
1
+ import "./styles/index.scss";
2
+ import type { CMDPayload, Editor } from "@block-kit/core";
3
+ import type { AttributeMap } from "@block-kit/delta";
4
+ import type { ReactWrapLineContext } from "@block-kit/react";
5
+ import { EditorPlugin } from "@block-kit/react";
6
+ import type { EventContext } from "@block-kit/utils";
7
+ import type { ReactNode } from "react";
8
+ export declare class QuotePlugin extends EditorPlugin {
9
+ protected editor: Editor;
10
+ key: string;
11
+ constructor(editor: Editor);
12
+ destroy(): void;
13
+ match(attrs: AttributeMap): boolean;
14
+ wrapLine(context: ReactWrapLineContext): ReactNode;
15
+ protected onExec(payload: CMDPayload): undefined;
16
+ protected onKeyDown(event: KeyboardEvent, context: EventContext): undefined;
17
+ }
@@ -0,0 +1,130 @@
1
+ import { _ as __decorate } from '../tslib.es6-83956cc1.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { EDITOR_EVENT, RawPoint, Point } from '@block-kit/core';
4
+ import { Delta } from '@block-kit/delta';
5
+ import { InjectWrapKeys, EditorPlugin } from '@block-kit/react';
6
+ import { Bind, KEY_CODE, NIL, TRULY } from '@block-kit/utils';
7
+ import { p as preventContextEvent } from '../dom-71a99400.js';
8
+ import { a as isKeyCode, i as isEmptyLine } from '../is-3de778e2.js';
9
+ import { QUOTE_KEY } from './types/index.js';
10
+
11
+ class QuotePlugin extends EditorPlugin {
12
+ constructor(editor) {
13
+ super();
14
+ this.editor = editor;
15
+ this.key = QUOTE_KEY;
16
+ editor.command.register(this.key, this.onExec);
17
+ editor.event.on(EDITOR_EVENT.KEY_DOWN, this.onKeyDown);
18
+ }
19
+ destroy() {
20
+ this.editor.event.off(EDITOR_EVENT.KEY_DOWN, this.onKeyDown);
21
+ }
22
+ match(attrs) {
23
+ return !!attrs[QUOTE_KEY];
24
+ }
25
+ wrapLine(context) {
26
+ if (!context.lineState.attributes[QUOTE_KEY]) {
27
+ return context.children;
28
+ }
29
+ return jsx("div", { className: "block-kit-quote", children: context.children });
30
+ }
31
+ onExec(payload) {
32
+ const editor = this.editor;
33
+ const sel = editor.selection.get() || payload.range;
34
+ if (!sel)
35
+ return void 0;
36
+ const { start, end } = sel;
37
+ // 先检查当前需要设置/解除引用状态
38
+ const lines = editor.state.block.getLines().slice(start.line, end.line + 1);
39
+ const isQuote = lines.every(line => line.attributes[QUOTE_KEY]);
40
+ // 计算需要操作的范围
41
+ const rawPoint = RawPoint.fromPoint(this.editor, Point.from(start.line, 0));
42
+ if (!rawPoint)
43
+ return void 0;
44
+ const block = this.editor.state.block;
45
+ const delta = new Delta();
46
+ delta.retain(rawPoint.offset);
47
+ // 根据行的状态, 逐行设置引用状态
48
+ for (let i = start.line; i <= end.line; i++) {
49
+ const lineState = block.getLine(i);
50
+ if (!lineState)
51
+ break;
52
+ delta.retain(lineState.length - 1);
53
+ const attrs = {
54
+ [QUOTE_KEY]: isQuote ? NIL : TRULY,
55
+ };
56
+ delta.retain(1, attrs);
57
+ }
58
+ this.editor.state.apply(delta, { autoCaret: false });
59
+ }
60
+ onKeyDown(event, context) {
61
+ const sel = this.editor.selection.get();
62
+ if (!sel)
63
+ return void 0;
64
+ const block = this.editor.state.block;
65
+ const startLine = block.getLine(sel.start.line);
66
+ if (!startLine)
67
+ return void 0;
68
+ const prevLine = startLine.prev();
69
+ const attrs = startLine.attributes;
70
+ // 当前行是引用行, 且按下回车键, 且选区折叠, 且当前行是空行
71
+ // => 删除当前的引用行格式
72
+ if (isKeyCode(event, KEY_CODE.ENTER) &&
73
+ attrs[QUOTE_KEY] &&
74
+ sel.isCollapsed &&
75
+ isEmptyLine(startLine)) {
76
+ const nextAttrs = {
77
+ [QUOTE_KEY]: NIL,
78
+ };
79
+ const delta = new Delta().retain(startLine.start + startLine.length - 1).retain(1, nextAttrs);
80
+ this.editor.state.apply(delta, { autoCaret: false });
81
+ preventContextEvent(event, context);
82
+ return void 0;
83
+ }
84
+ // 当前行是引用行, 且按下回车键, 且选区折叠, 且位于行首, 且上一行是引用行
85
+ // => 继续引用格式, 避免默认的处理, 保持引用的连续性
86
+ if (isKeyCode(event, KEY_CODE.ENTER) &&
87
+ attrs[QUOTE_KEY] &&
88
+ sel.isCollapsed &&
89
+ sel.start.offset === 0 &&
90
+ prevLine &&
91
+ prevLine.attributes[QUOTE_KEY]) {
92
+ const nextAttrs = Object.assign({}, prevLine.attributes);
93
+ const delta = new Delta().retain(startLine.start).insertEOL(nextAttrs);
94
+ this.editor.state.apply(delta);
95
+ preventContextEvent(event, context);
96
+ return void 0;
97
+ }
98
+ // 当前行是引用行, 且按下回车键, 且非行首
99
+ // => 在引用行内部插入换行符, 且携带引用状态
100
+ if (isKeyCode(event, KEY_CODE.ENTER) && attrs[QUOTE_KEY] && sel.start.offset) {
101
+ this.editor.perform.insertBreak(sel, attrs);
102
+ preventContextEvent(event, context);
103
+ return void 0;
104
+ }
105
+ // 当前行是引用行, 且折叠选区, 且在行首, 且按下退格键
106
+ // => 将当前行的引用状态移除
107
+ if (isKeyCode(event, KEY_CODE.BACKSPACE) &&
108
+ sel.isCollapsed &&
109
+ attrs[QUOTE_KEY] &&
110
+ !sel.start.offset) {
111
+ const delta = new Delta()
112
+ .retain(startLine.start + startLine.length - 1)
113
+ .retain(1, { [QUOTE_KEY]: NIL });
114
+ this.editor.state.apply(delta, { autoCaret: false });
115
+ preventContextEvent(event, context);
116
+ return void 0;
117
+ }
118
+ }
119
+ }
120
+ __decorate([
121
+ InjectWrapKeys(QUOTE_KEY)
122
+ ], QuotePlugin.prototype, "wrapLine", null);
123
+ __decorate([
124
+ Bind
125
+ ], QuotePlugin.prototype, "onExec", null);
126
+ __decorate([
127
+ Bind
128
+ ], QuotePlugin.prototype, "onKeyDown", null);
129
+
130
+ export { QuotePlugin };
@@ -0,0 +1 @@
1
+ export declare const QUOTE_KEY = "quote";
@@ -0,0 +1,3 @@
1
+ const QUOTE_KEY = "quote";
2
+
3
+ export { QUOTE_KEY };
@@ -0,0 +1,81 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Range, EDITOR_EVENT } from '@block-kit/core';
3
+ import { ReadonlyContext } from '@block-kit/react';
4
+ import { getId, cs, Bind } from '@block-kit/utils';
5
+ import React from 'react';
6
+ import { _ as __decorate } from './tslib.es6-83956cc1.js';
7
+
8
+ class SelectionHOC extends React.PureComponent {
9
+ constructor(props) {
10
+ super(props);
11
+ this.state = {
12
+ id: getId(),
13
+ selected: false,
14
+ };
15
+ this.editor = this.props.selection.editor;
16
+ }
17
+ componentDidMount() {
18
+ // FIX: UNDO 时内容与选区变化同样需要更新状态
19
+ const range = this.editor.selection.get();
20
+ this.onSelectionChange(range);
21
+ this.props.selection.mountView(this.state.id, this);
22
+ }
23
+ componentWillUnmount() {
24
+ this.props.selection.unmountView(this.state.id);
25
+ }
26
+ onSelectionChange(range) {
27
+ const leaf = this.props.leaf;
28
+ const leafRange = leaf.toRange();
29
+ const nextState = range ? Range.intersection(leafRange, range) : false;
30
+ if (this.state.selected !== nextState) {
31
+ this.setState({ selected: nextState });
32
+ }
33
+ }
34
+ render() {
35
+ const selected = this.state.selected;
36
+ const { border = true } = this.props;
37
+ // readonly context
38
+ if (this.context) {
39
+ return this.props.children;
40
+ }
41
+ return (jsx("div", { className: cs(this.props.className, selected && border && "block-kit-embed-selected"), "data-selection": true, children: React.Children.map(this.props.children, child => {
42
+ if (React.isValidElement(child)) {
43
+ const { props } = child;
44
+ return React.cloneElement(child, Object.assign(Object.assign({}, props), { selected: selected }));
45
+ }
46
+ else {
47
+ return child;
48
+ }
49
+ }) }));
50
+ }
51
+ }
52
+ SelectionHOC.contextType = ReadonlyContext;
53
+
54
+ class SelectionPlugin {
55
+ constructor(editor) {
56
+ this.editor = editor;
57
+ this.idToView = new Map();
58
+ editor.event.on(EDITOR_EVENT.SELECTION_CHANGE, this.onSelectionChange);
59
+ }
60
+ destroy() {
61
+ this.idToView.clear();
62
+ this.editor.event.off(EDITOR_EVENT.SELECTION_CHANGE, this.onSelectionChange);
63
+ }
64
+ mountView(id, view) {
65
+ this.idToView.set(id, view);
66
+ }
67
+ unmountView(id) {
68
+ this.idToView.delete(id);
69
+ }
70
+ onSelectionChange(e) {
71
+ const current = e.current;
72
+ this.idToView.forEach(view => {
73
+ view.onSelectionChange(current);
74
+ });
75
+ }
76
+ }
77
+ __decorate([
78
+ Bind
79
+ ], SelectionPlugin.prototype, "onSelectionChange", null);
80
+
81
+ export { SelectionHOC as S, SelectionPlugin as a };
@@ -0,0 +1,26 @@
1
+ import "../styles/selection.scss";
2
+ import type { LeafState } from "@block-kit/core";
3
+ import type { Editor } from "@block-kit/core";
4
+ import { Range } from "@block-kit/core";
5
+ import React from "react";
6
+ import type { SelectionPlugin } from "../modules/selection";
7
+ type Props = {
8
+ leaf: LeafState;
9
+ border?: boolean;
10
+ className?: string;
11
+ selection: SelectionPlugin;
12
+ };
13
+ type State = {
14
+ id: string;
15
+ selected: boolean;
16
+ };
17
+ export declare class SelectionHOC extends React.PureComponent<Props, State> {
18
+ protected editor: Editor;
19
+ static contextType: React.Context<boolean>;
20
+ constructor(props: Props);
21
+ componentDidMount(): void;
22
+ componentWillUnmount(): void;
23
+ onSelectionChange(range: Range | null): void;
24
+ render(): React.ReactNode;
25
+ }
26
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const DividerIcon: FC;
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const EmojiIcon: FC;
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const FontColorIcon: FC;
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const FontSizeIcon: FC;
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const JustifyIcon: FC;
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const LineHeightIcon: FC;
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const TextIcon: FC;