@kaitify/core 0.0.1-beta.1

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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/examples/App.vue +342 -0
  4. package/examples/content.js +1 -0
  5. package/examples/main.ts +4 -0
  6. package/examples/test.html +23 -0
  7. package/lib/extensions/Extension.d.ts +172 -0
  8. package/lib/extensions/align/index.d.ts +10 -0
  9. package/lib/extensions/attachment/index.d.ts +29 -0
  10. package/lib/extensions/back-color/index.d.ts +9 -0
  11. package/lib/extensions/blockquote/index.d.ts +12 -0
  12. package/lib/extensions/bold/index.d.ts +9 -0
  13. package/lib/extensions/code/index.d.ts +12 -0
  14. package/lib/extensions/code-block/hljs.d.ts +12 -0
  15. package/lib/extensions/code-block/index.d.ts +15 -0
  16. package/lib/extensions/color/index.d.ts +9 -0
  17. package/lib/extensions/font-family/index.d.ts +9 -0
  18. package/lib/extensions/font-size/index.d.ts +9 -0
  19. package/lib/extensions/heading/index.d.ts +13 -0
  20. package/lib/extensions/history/index.d.ts +10 -0
  21. package/lib/extensions/horizontal/index.d.ts +7 -0
  22. package/lib/extensions/image/index.d.ts +26 -0
  23. package/lib/extensions/indent/index.d.ts +8 -0
  24. package/lib/extensions/index.d.ts +29 -0
  25. package/lib/extensions/italic/index.d.ts +9 -0
  26. package/lib/extensions/line-height/index.d.ts +9 -0
  27. package/lib/extensions/link/index.d.ts +27 -0
  28. package/lib/extensions/list/index.d.ts +18 -0
  29. package/lib/extensions/math/index.d.ts +11 -0
  30. package/lib/extensions/strikethrough/index.d.ts +9 -0
  31. package/lib/extensions/subscript/index.d.ts +9 -0
  32. package/lib/extensions/superscript/index.d.ts +9 -0
  33. package/lib/extensions/table/index.d.ts +21 -0
  34. package/lib/extensions/task/index.d.ts +12 -0
  35. package/lib/extensions/text/index.d.ts +14 -0
  36. package/lib/extensions/underline/index.d.ts +9 -0
  37. package/lib/extensions/video/index.d.ts +27 -0
  38. package/lib/index.d.ts +3 -0
  39. package/lib/kaitify-core.es.js +38337 -0
  40. package/lib/kaitify-core.umd.js +2 -0
  41. package/lib/model/Editor.d.ts +504 -0
  42. package/lib/model/History.d.ts +42 -0
  43. package/lib/model/KNode.d.ts +258 -0
  44. package/lib/model/Selection.d.ts +29 -0
  45. package/lib/model/config/dom-observe.d.ts +10 -0
  46. package/lib/model/config/event-handler.d.ts +33 -0
  47. package/lib/model/config/format-patch.d.ts +25 -0
  48. package/lib/model/config/format-rules.d.ts +37 -0
  49. package/lib/model/config/function.d.ts +84 -0
  50. package/lib/model/index.d.ts +6 -0
  51. package/lib/tools/index.d.ts +49 -0
  52. package/lib/view/index.d.ts +21 -0
  53. package/lib/view/js-render/dom-patch.d.ts +65 -0
  54. package/lib/view/js-render/index.d.ts +5 -0
  55. package/package.json +52 -0
  56. package/src/css/style.less +56 -0
  57. package/src/css/var.less +45 -0
  58. package/src/extensions/Extension.ts +200 -0
  59. package/src/extensions/align/index.ts +115 -0
  60. package/src/extensions/attachment/icon.svg +1 -0
  61. package/src/extensions/attachment/index.ts +293 -0
  62. package/src/extensions/attachment/style.less +25 -0
  63. package/src/extensions/back-color/index.ts +56 -0
  64. package/src/extensions/blockquote/index.ts +144 -0
  65. package/src/extensions/blockquote/style.less +16 -0
  66. package/src/extensions/bold/index.ts +77 -0
  67. package/src/extensions/code/index.ts +295 -0
  68. package/src/extensions/code/style.less +14 -0
  69. package/src/extensions/code-block/hljs.less +183 -0
  70. package/src/extensions/code-block/hljs.ts +95 -0
  71. package/src/extensions/code-block/index.ts +308 -0
  72. package/src/extensions/code-block/style.less +20 -0
  73. package/src/extensions/color/index.ts +56 -0
  74. package/src/extensions/font-family/index.ts +80 -0
  75. package/src/extensions/font-size/index.ts +56 -0
  76. package/src/extensions/heading/index.ts +164 -0
  77. package/src/extensions/heading/style.less +42 -0
  78. package/src/extensions/history/index.ts +96 -0
  79. package/src/extensions/horizontal/index.ts +45 -0
  80. package/src/extensions/horizontal/style.less +13 -0
  81. package/src/extensions/image/index.ts +242 -0
  82. package/src/extensions/image/style.less +8 -0
  83. package/src/extensions/indent/index.ts +98 -0
  84. package/src/extensions/index.ts +29 -0
  85. package/src/extensions/italic/index.ts +77 -0
  86. package/src/extensions/line-height/index.ts +113 -0
  87. package/src/extensions/link/index.ts +184 -0
  88. package/src/extensions/link/style.less +19 -0
  89. package/src/extensions/list/index.ts +410 -0
  90. package/src/extensions/list/style.less +19 -0
  91. package/src/extensions/math/index.ts +233 -0
  92. package/src/extensions/math/style.less +21 -0
  93. package/src/extensions/strikethrough/index.ts +78 -0
  94. package/src/extensions/subscript/index.ts +77 -0
  95. package/src/extensions/superscript/index.ts +77 -0
  96. package/src/extensions/table/index.ts +1148 -0
  97. package/src/extensions/table/style.less +71 -0
  98. package/src/extensions/task/index.ts +243 -0
  99. package/src/extensions/task/style.less +59 -0
  100. package/src/extensions/text/index.ts +359 -0
  101. package/src/extensions/underline/index.ts +78 -0
  102. package/src/extensions/video/index.ts +273 -0
  103. package/src/extensions/video/style.less +8 -0
  104. package/src/index.ts +9 -0
  105. package/src/model/Editor.ts +1963 -0
  106. package/src/model/History.ts +115 -0
  107. package/src/model/KNode.ts +677 -0
  108. package/src/model/Selection.ts +39 -0
  109. package/src/model/config/dom-observe.ts +184 -0
  110. package/src/model/config/event-handler.ts +237 -0
  111. package/src/model/config/format-patch.ts +215 -0
  112. package/src/model/config/format-rules.ts +218 -0
  113. package/src/model/config/function.ts +1018 -0
  114. package/src/model/index.ts +6 -0
  115. package/src/tools/index.ts +156 -0
  116. package/src/view/index.ts +46 -0
  117. package/src/view/js-render/dom-patch.ts +324 -0
  118. package/src/view/js-render/index.ts +210 -0
  119. package/vite-env.d.ts +2 -0
@@ -0,0 +1,78 @@
1
+ import { KNodeStylesType } from '@/model'
2
+ import { splitNodeToNodes } from '@/model/config/function'
3
+ import { Extension } from '../Extension'
4
+
5
+ declare module '../../model' {
6
+ interface EditorCommandsType {
7
+ isStrikethrough?: () => boolean
8
+ setStrikethrough?: () => Promise<void>
9
+ unsetStrikethrough?: () => Promise<void>
10
+ }
11
+ }
12
+
13
+ export const StrikethroughExtension = () =>
14
+ Extension.create({
15
+ name: 'strikethrough',
16
+ pasteKeepStyles(node) {
17
+ const styles: KNodeStylesType = {}
18
+ if (node.isText() && node.hasStyles()) {
19
+ if (node.styles!.hasOwnProperty('textDecoration')) styles.textDecoration = node.styles!.textDecoration
20
+ if (node.styles!.hasOwnProperty('textDecorationLine')) styles.textDecorationLine = node.styles!.textDecorationLine
21
+ }
22
+ return styles
23
+ },
24
+ extraKeepTags: ['del'],
25
+ domParseNodeCallback(node) {
26
+ if (node.isMatch({ tag: 'del' })) {
27
+ node.type = 'inline'
28
+ }
29
+ return node
30
+ },
31
+ formatRules: [
32
+ ({ editor, node }) => {
33
+ if (!node.isEmpty() && node.isMatch({ tag: 'del' })) {
34
+ const styles: KNodeStylesType = node.styles || {}
35
+ node.styles = {
36
+ ...styles,
37
+ textDecorationLine: 'line-through'
38
+ }
39
+ node.tag = editor.textRenderTag
40
+ splitNodeToNodes.apply(editor, [node])
41
+ }
42
+ }
43
+ ],
44
+ addCommands() {
45
+ /**
46
+ * 光标所在文本是否删除线
47
+ */
48
+ const isStrikethrough = () => {
49
+ return this.commands.isTextStyle!('textDecoration', 'line-through') || this.commands.isTextStyle!('textDecorationLine', 'line-through')
50
+ }
51
+ /**
52
+ * 设置删除线
53
+ */
54
+ const setStrikethrough = async () => {
55
+ if (isStrikethrough()) {
56
+ return
57
+ }
58
+ await this.commands.setTextStyle!({
59
+ textDecorationLine: 'line-through'
60
+ })
61
+ }
62
+ /**
63
+ * 取消删除线
64
+ */
65
+ const unsetStrikethrough = async () => {
66
+ if (!isStrikethrough()) {
67
+ return
68
+ }
69
+ await this.commands.removeTextStyle!(['textDecoration', 'textDecorationLine'])
70
+ }
71
+
72
+ return {
73
+ isStrikethrough,
74
+ setStrikethrough,
75
+ unsetStrikethrough
76
+ }
77
+ }
78
+ })
@@ -0,0 +1,77 @@
1
+ import { KNodeStylesType } from '@/model'
2
+ import { splitNodeToNodes } from '@/model/config/function'
3
+ import { Extension } from '../Extension'
4
+
5
+ declare module '../../model' {
6
+ interface EditorCommandsType {
7
+ isSubscript?: () => boolean
8
+ setSubscript?: () => Promise<void>
9
+ unsetSubscript?: () => Promise<void>
10
+ }
11
+ }
12
+
13
+ export const SubscriptExtension = () =>
14
+ Extension.create({
15
+ name: 'subscript',
16
+ pasteKeepStyles(node) {
17
+ const styles: KNodeStylesType = {}
18
+ if (node.isText() && node.hasStyles()) {
19
+ if (node.styles!.hasOwnProperty('verticalAlign')) styles.verticalAlign = node.styles!.verticalAlign
20
+ }
21
+ return styles
22
+ },
23
+ extraKeepTags: ['sub'],
24
+ domParseNodeCallback(node) {
25
+ if (node.isMatch({ tag: 'sub' })) {
26
+ node.type = 'inline'
27
+ }
28
+ return node
29
+ },
30
+ formatRules: [
31
+ ({ editor, node }) => {
32
+ if (!node.isEmpty() && node.isMatch({ tag: 'sub' })) {
33
+ const styles: KNodeStylesType = node.styles || {}
34
+ node.styles = {
35
+ ...styles,
36
+ verticalAlign: 'sub'
37
+ }
38
+ node.tag = editor.textRenderTag
39
+ splitNodeToNodes.apply(editor, [node])
40
+ }
41
+ }
42
+ ],
43
+ addCommands() {
44
+ /**
45
+ * 光标所在文本是否下标
46
+ */
47
+ const isSubscript = () => {
48
+ return this.commands.isTextStyle!('verticalAlign', 'sub')
49
+ }
50
+ /**
51
+ * 设置下标
52
+ */
53
+ const setSubscript = async () => {
54
+ if (isSubscript()) {
55
+ return
56
+ }
57
+ await this.commands.setTextStyle!({
58
+ verticalAlign: 'sub'
59
+ })
60
+ }
61
+ /**
62
+ * 取消下标
63
+ */
64
+ const unsetSubscript = async () => {
65
+ if (!isSubscript()) {
66
+ return
67
+ }
68
+ await this.commands.removeTextStyle!(['verticalAlign'])
69
+ }
70
+
71
+ return {
72
+ isSubscript,
73
+ setSubscript,
74
+ unsetSubscript
75
+ }
76
+ }
77
+ })
@@ -0,0 +1,77 @@
1
+ import { KNodeStylesType } from '@/model'
2
+ import { splitNodeToNodes } from '@/model/config/function'
3
+ import { Extension } from '../Extension'
4
+
5
+ declare module '../../model' {
6
+ interface EditorCommandsType {
7
+ isSuperscript?: () => boolean
8
+ setSuperscript?: () => Promise<void>
9
+ unsetSuperscript?: () => Promise<void>
10
+ }
11
+ }
12
+
13
+ export const SuperscriptExtension = () =>
14
+ Extension.create({
15
+ name: 'superscript',
16
+ pasteKeepStyles(node) {
17
+ const styles: KNodeStylesType = {}
18
+ if (node.isText() && node.hasStyles()) {
19
+ if (node.styles!.hasOwnProperty('verticalAlign')) styles.verticalAlign = node.styles!.verticalAlign
20
+ }
21
+ return styles
22
+ },
23
+ extraKeepTags: ['sup'],
24
+ domParseNodeCallback(node) {
25
+ if (node.isMatch({ tag: 'sup' })) {
26
+ node.type = 'inline'
27
+ }
28
+ return node
29
+ },
30
+ formatRules: [
31
+ ({ editor, node }) => {
32
+ if (!node.isEmpty() && node.isMatch({ tag: 'sup' })) {
33
+ const styles: KNodeStylesType = node.styles || {}
34
+ node.styles = {
35
+ ...styles,
36
+ verticalAlign: 'super'
37
+ }
38
+ node.tag = editor.textRenderTag
39
+ splitNodeToNodes.apply(editor, [node])
40
+ }
41
+ }
42
+ ],
43
+ addCommands() {
44
+ /**
45
+ * 光标所在文本是否上标
46
+ */
47
+ const isSuperscript = () => {
48
+ return this.commands.isTextStyle!('verticalAlign', 'super')
49
+ }
50
+ /**
51
+ * 设置上标
52
+ */
53
+ const setSuperscript = async () => {
54
+ if (isSuperscript()) {
55
+ return
56
+ }
57
+ await this.commands.setTextStyle!({
58
+ verticalAlign: 'super'
59
+ })
60
+ }
61
+ /**
62
+ * 取消上标
63
+ */
64
+ const unsetSuperscript = async () => {
65
+ if (!isSuperscript()) {
66
+ return
67
+ }
68
+ await this.commands.removeTextStyle!(['verticalAlign'])
69
+ }
70
+
71
+ return {
72
+ isSuperscript,
73
+ setSuperscript,
74
+ unsetSuperscript
75
+ }
76
+ }
77
+ })