@adminforth/rich-editor 1.5.4 → 1.6.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.
package/build.log CHANGED
@@ -10,5 +10,5 @@ custom/package.json
10
10
  custom/quillEditor.vue
11
11
  custom/tsconfig.json
12
12
 
13
- sent 21,704 bytes received 115 bytes 43,638.00 bytes/sec
14
- total size is 21,281 speedup is 0.98
13
+ sent 28,581 bytes received 115 bytes 57,392.00 bytes/sec
14
+ total size is 28,158 speedup is 0.98
@@ -9,7 +9,62 @@
9
9
  "version": "1.0.0",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "quill": "^2.0.2"
12
+ "quill": "^2.0.2",
13
+ "quill-table-better": "^1.2.3"
14
+ }
15
+ },
16
+ "node_modules/@babel/runtime": {
17
+ "version": "7.28.4",
18
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
19
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
20
+ "license": "MIT",
21
+ "engines": {
22
+ "node": ">=6.9.0"
23
+ }
24
+ },
25
+ "node_modules/@irojs/iro-core": {
26
+ "version": "1.2.1",
27
+ "resolved": "https://registry.npmjs.org/@irojs/iro-core/-/iro-core-1.2.1.tgz",
28
+ "integrity": "sha512-p2OvsBSSmidsDsTSkID6jEyXDF7lcyxPrkh3qBzasBZFpjkYd6kZ3yMWai3MlAaQ3F7li/Et7rSJVV09Fpei+A==",
29
+ "license": "MPL-2.0"
30
+ },
31
+ "node_modules/@jaames/iro": {
32
+ "version": "5.5.2",
33
+ "resolved": "https://registry.npmjs.org/@jaames/iro/-/iro-5.5.2.tgz",
34
+ "integrity": "sha512-Fbi5U4Vdkw6UsF+R3oMlPONqkvUDMkwzh+mX718gQsDFt3+1r1jvGsrfCbedmXAAy0WsjDHOrefK0BkDk99TQg==",
35
+ "license": "MPL-2.0",
36
+ "dependencies": {
37
+ "@irojs/iro-core": "^1.2.1",
38
+ "preact": "^10.0.0"
39
+ }
40
+ },
41
+ "node_modules/@types/lodash": {
42
+ "version": "4.17.21",
43
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz",
44
+ "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==",
45
+ "license": "MIT"
46
+ },
47
+ "node_modules/@types/lodash.merge": {
48
+ "version": "4.6.9",
49
+ "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz",
50
+ "integrity": "sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==",
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "@types/lodash": "*"
54
+ }
55
+ },
56
+ "node_modules/clone-deep": {
57
+ "version": "4.0.1",
58
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
59
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
60
+ "license": "MIT",
61
+ "dependencies": {
62
+ "is-plain-object": "^2.0.4",
63
+ "kind-of": "^6.0.2",
64
+ "shallow-clone": "^3.0.0"
65
+ },
66
+ "engines": {
67
+ "node": ">=6"
13
68
  }
14
69
  },
15
70
  "node_modules/eventemitter3": {
@@ -22,6 +77,45 @@
22
77
  "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
23
78
  "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
24
79
  },
80
+ "node_modules/flat": {
81
+ "version": "5.0.2",
82
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
83
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
84
+ "license": "BSD-3-Clause",
85
+ "bin": {
86
+ "flat": "cli.js"
87
+ }
88
+ },
89
+ "node_modules/is-plain-object": {
90
+ "version": "2.0.4",
91
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
92
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
93
+ "license": "MIT",
94
+ "dependencies": {
95
+ "isobject": "^3.0.1"
96
+ },
97
+ "engines": {
98
+ "node": ">=0.10.0"
99
+ }
100
+ },
101
+ "node_modules/isobject": {
102
+ "version": "3.0.1",
103
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
104
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
105
+ "license": "MIT",
106
+ "engines": {
107
+ "node": ">=0.10.0"
108
+ }
109
+ },
110
+ "node_modules/kind-of": {
111
+ "version": "6.0.3",
112
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
113
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
114
+ "license": "MIT",
115
+ "engines": {
116
+ "node": ">=0.10.0"
117
+ }
118
+ },
25
119
  "node_modules/lodash-es": {
26
120
  "version": "4.17.21",
27
121
  "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
@@ -37,11 +131,27 @@
37
131
  "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
38
132
  "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
39
133
  },
134
+ "node_modules/lodash.merge": {
135
+ "version": "4.6.2",
136
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
137
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
138
+ "license": "MIT"
139
+ },
40
140
  "node_modules/parchment": {
41
141
  "version": "3.0.0",
42
142
  "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz",
43
143
  "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A=="
44
144
  },
145
+ "node_modules/preact": {
146
+ "version": "10.27.2",
147
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz",
148
+ "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==",
149
+ "license": "MIT",
150
+ "funding": {
151
+ "type": "opencollective",
152
+ "url": "https://opencollective.com/preact"
153
+ }
154
+ },
45
155
  "node_modules/quill": {
46
156
  "version": "2.0.2",
47
157
  "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.2.tgz",
@@ -69,6 +179,54 @@
69
179
  "engines": {
70
180
  "node": ">= 12.0.0"
71
181
  }
182
+ },
183
+ "node_modules/quill-table-better": {
184
+ "version": "1.2.3",
185
+ "resolved": "https://registry.npmjs.org/quill-table-better/-/quill-table-better-1.2.3.tgz",
186
+ "integrity": "sha512-AlXGuIPhNx0B65DI7eCbGsEThxGWc0gLsd3Y+3NpMaPkFIQpcDCk0htrD2BzNLynOF/Euja1BkHnzjkVz3QFGw==",
187
+ "license": "MIT",
188
+ "dependencies": {
189
+ "@babel/runtime": "^7.17.9",
190
+ "@jaames/iro": "^5.5.2",
191
+ "@types/lodash.merge": "^4.6.7",
192
+ "lodash.merge": "^4.6.2",
193
+ "webpack-merge": "^5.8.0"
194
+ },
195
+ "engines": {
196
+ "node": ">= 14.15.0"
197
+ }
198
+ },
199
+ "node_modules/shallow-clone": {
200
+ "version": "3.0.1",
201
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
202
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
203
+ "license": "MIT",
204
+ "dependencies": {
205
+ "kind-of": "^6.0.2"
206
+ },
207
+ "engines": {
208
+ "node": ">=8"
209
+ }
210
+ },
211
+ "node_modules/webpack-merge": {
212
+ "version": "5.10.0",
213
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
214
+ "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
215
+ "license": "MIT",
216
+ "dependencies": {
217
+ "clone-deep": "^4.0.1",
218
+ "flat": "^5.0.2",
219
+ "wildcard": "^2.0.0"
220
+ },
221
+ "engines": {
222
+ "node": ">=10.0.0"
223
+ }
224
+ },
225
+ "node_modules/wildcard": {
226
+ "version": "2.0.1",
227
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
228
+ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
229
+ "license": "MIT"
72
230
  }
73
231
  }
74
232
  }
@@ -10,6 +10,7 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "quill": "^2.0.2"
13
+ "quill": "^2.0.2",
14
+ "quill-table-better": "^1.2.3"
14
15
  }
15
16
  }
@@ -27,6 +27,9 @@ import adminforth from '@/adminforth';
27
27
  import AsyncQueue from './async-queue';
28
28
  import Quill from "quill";
29
29
  import "quill/dist/quill.snow.css";
30
+ import QuillTableBetter from 'quill-table-better';
31
+ import 'quill-table-better/dist/quill-table-better.css';
32
+
30
33
  import { useI18n } from 'vue-i18n';
31
34
 
32
35
  const { t } = useI18n();
@@ -89,6 +92,11 @@ Quill.register(CompleteBlot);
89
92
  // @ts-ignore
90
93
  Quill.register(ImageBlot);
91
94
 
95
+ Quill.register({
96
+ 'modules/table-better': QuillTableBetter
97
+ }, true);
98
+
99
+
92
100
  const updaterQueue = new AsyncQueue();
93
101
 
94
102
  const props = defineProps<{
@@ -197,11 +205,7 @@ async function imageHandler() {
197
205
  };
198
206
  }
199
207
 
200
- onMounted(() => {
201
- currentValue.value = props.record[props.column.name] || '';
202
- editor.value.innerHTML = currentValue.value;
203
-
204
- quill = new Quill(editor.value as HTMLElement, {
208
+ const quillOptions = {
205
209
  theme: "snow",
206
210
  readOnly:props.column?.editReadonly,
207
211
  placeholder: 'Type here...',
@@ -210,6 +214,7 @@ onMounted(() => {
210
214
  toolbar: {
211
215
  container: props.meta.toolbar || [
212
216
  ['bold', 'italic', 'underline', 'strike'], // toggled buttons
217
+ ['table-better'],
213
218
  ['blockquote', 'code-block', 'link', ...props.meta.uploadPluginInstanceId ? ['image'] : []],
214
219
  // [
215
220
  // // 'image',
@@ -237,6 +242,11 @@ onMounted(() => {
237
242
  image: imageHandler,
238
243
  },
239
244
  },
245
+ 'table-better': {
246
+ language: 'en_US',
247
+ menus: ['column', 'row', 'merge', 'table', 'cell', 'wrap', 'delete'],
248
+ toolbarTable: true
249
+ },
240
250
  keyboard: {
241
251
  bindings: {
242
252
  tab: {
@@ -250,8 +260,24 @@ onMounted(() => {
250
260
  },
251
261
  }
252
262
  },
253
- });
263
+ };
264
+
265
+ function initValue(quill: Quill) {
266
+ const html = props.record[props.column.name] || '';
267
+ const delta = quill.clipboard.convert({ html });
268
+ const [range] = quill.selection.getRange();
269
+ quill.updateContents(delta, Quill.sources.USER);
270
+ quill.setSelection(
271
+ delta.length() - (range?.length || 0),
272
+ Quill.sources.SILENT
273
+ );
274
+ quill.scrollSelectionIntoView();
275
+ }
254
276
 
277
+ onMounted(() => {
278
+ currentValue.value = props.record[props.column.name] || '';
279
+ quill = new Quill(editor.value as HTMLElement, quillOptions);
280
+ initValue(quill);
255
281
  lastText = quill.getText();
256
282
 
257
283
  quill.on(Quill.events.TEXT_CHANGE, async (delta: any, oldDelta: any, source: string) => {
@@ -1,19 +1,27 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "baseUrl": ".", // This should point to your project root
3
+ "baseUrl": ".",
4
4
  "paths": {
5
5
  "@/*": [
6
- // "node_modules/adminforth/dist/spa/src/*"
7
- "../../../spa/src/*"
6
+ "../../../adminforth/spa/src/*"
8
7
  ],
9
8
  "*": [
10
- // "node_modules/adminforth/dist/spa/node_modules/*"
11
- "../../../spa/node_modules/*"
9
+ "../../../adminforth/spa/node_modules/*"
12
10
  ],
13
11
  "@@/*": [
14
- // "node_modules/adminforth/dist/spa/src/*"
15
12
  "."
16
13
  ]
17
14
  }
18
- }
15
+ },
16
+ "include": [
17
+ "./**/*.ts",
18
+ "./**/*.tsx",
19
+ "./**/*.vue",
20
+ "../**/*.ts",
21
+ "../**/*.tsx",
22
+ "../**/*.vue",
23
+ "../*.vue",
24
+ "../*.ts",
25
+ "../*.tsx"
26
+ ]
19
27
  }
@@ -9,7 +9,62 @@
9
9
  "version": "1.0.0",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "quill": "^2.0.2"
12
+ "quill": "^2.0.2",
13
+ "quill-table-better": "^1.2.3"
14
+ }
15
+ },
16
+ "node_modules/@babel/runtime": {
17
+ "version": "7.28.4",
18
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
19
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
20
+ "license": "MIT",
21
+ "engines": {
22
+ "node": ">=6.9.0"
23
+ }
24
+ },
25
+ "node_modules/@irojs/iro-core": {
26
+ "version": "1.2.1",
27
+ "resolved": "https://registry.npmjs.org/@irojs/iro-core/-/iro-core-1.2.1.tgz",
28
+ "integrity": "sha512-p2OvsBSSmidsDsTSkID6jEyXDF7lcyxPrkh3qBzasBZFpjkYd6kZ3yMWai3MlAaQ3F7li/Et7rSJVV09Fpei+A==",
29
+ "license": "MPL-2.0"
30
+ },
31
+ "node_modules/@jaames/iro": {
32
+ "version": "5.5.2",
33
+ "resolved": "https://registry.npmjs.org/@jaames/iro/-/iro-5.5.2.tgz",
34
+ "integrity": "sha512-Fbi5U4Vdkw6UsF+R3oMlPONqkvUDMkwzh+mX718gQsDFt3+1r1jvGsrfCbedmXAAy0WsjDHOrefK0BkDk99TQg==",
35
+ "license": "MPL-2.0",
36
+ "dependencies": {
37
+ "@irojs/iro-core": "^1.2.1",
38
+ "preact": "^10.0.0"
39
+ }
40
+ },
41
+ "node_modules/@types/lodash": {
42
+ "version": "4.17.21",
43
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz",
44
+ "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==",
45
+ "license": "MIT"
46
+ },
47
+ "node_modules/@types/lodash.merge": {
48
+ "version": "4.6.9",
49
+ "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.9.tgz",
50
+ "integrity": "sha512-23sHDPmzd59kUgWyKGiOMO2Qb9YtqRO/x4IhkgNUiPQ1+5MUVqi6bCZeq9nBJ17msjIMbEIO5u+XW4Kz6aGUhQ==",
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "@types/lodash": "*"
54
+ }
55
+ },
56
+ "node_modules/clone-deep": {
57
+ "version": "4.0.1",
58
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
59
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
60
+ "license": "MIT",
61
+ "dependencies": {
62
+ "is-plain-object": "^2.0.4",
63
+ "kind-of": "^6.0.2",
64
+ "shallow-clone": "^3.0.0"
65
+ },
66
+ "engines": {
67
+ "node": ">=6"
13
68
  }
14
69
  },
15
70
  "node_modules/eventemitter3": {
@@ -22,6 +77,45 @@
22
77
  "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
23
78
  "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
24
79
  },
80
+ "node_modules/flat": {
81
+ "version": "5.0.2",
82
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
83
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
84
+ "license": "BSD-3-Clause",
85
+ "bin": {
86
+ "flat": "cli.js"
87
+ }
88
+ },
89
+ "node_modules/is-plain-object": {
90
+ "version": "2.0.4",
91
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
92
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
93
+ "license": "MIT",
94
+ "dependencies": {
95
+ "isobject": "^3.0.1"
96
+ },
97
+ "engines": {
98
+ "node": ">=0.10.0"
99
+ }
100
+ },
101
+ "node_modules/isobject": {
102
+ "version": "3.0.1",
103
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
104
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
105
+ "license": "MIT",
106
+ "engines": {
107
+ "node": ">=0.10.0"
108
+ }
109
+ },
110
+ "node_modules/kind-of": {
111
+ "version": "6.0.3",
112
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
113
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
114
+ "license": "MIT",
115
+ "engines": {
116
+ "node": ">=0.10.0"
117
+ }
118
+ },
25
119
  "node_modules/lodash-es": {
26
120
  "version": "4.17.21",
27
121
  "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
@@ -37,11 +131,27 @@
37
131
  "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
38
132
  "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
39
133
  },
134
+ "node_modules/lodash.merge": {
135
+ "version": "4.6.2",
136
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
137
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
138
+ "license": "MIT"
139
+ },
40
140
  "node_modules/parchment": {
41
141
  "version": "3.0.0",
42
142
  "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz",
43
143
  "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A=="
44
144
  },
145
+ "node_modules/preact": {
146
+ "version": "10.27.2",
147
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz",
148
+ "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==",
149
+ "license": "MIT",
150
+ "funding": {
151
+ "type": "opencollective",
152
+ "url": "https://opencollective.com/preact"
153
+ }
154
+ },
45
155
  "node_modules/quill": {
46
156
  "version": "2.0.2",
47
157
  "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.2.tgz",
@@ -69,6 +179,54 @@
69
179
  "engines": {
70
180
  "node": ">= 12.0.0"
71
181
  }
182
+ },
183
+ "node_modules/quill-table-better": {
184
+ "version": "1.2.3",
185
+ "resolved": "https://registry.npmjs.org/quill-table-better/-/quill-table-better-1.2.3.tgz",
186
+ "integrity": "sha512-AlXGuIPhNx0B65DI7eCbGsEThxGWc0gLsd3Y+3NpMaPkFIQpcDCk0htrD2BzNLynOF/Euja1BkHnzjkVz3QFGw==",
187
+ "license": "MIT",
188
+ "dependencies": {
189
+ "@babel/runtime": "^7.17.9",
190
+ "@jaames/iro": "^5.5.2",
191
+ "@types/lodash.merge": "^4.6.7",
192
+ "lodash.merge": "^4.6.2",
193
+ "webpack-merge": "^5.8.0"
194
+ },
195
+ "engines": {
196
+ "node": ">= 14.15.0"
197
+ }
198
+ },
199
+ "node_modules/shallow-clone": {
200
+ "version": "3.0.1",
201
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
202
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
203
+ "license": "MIT",
204
+ "dependencies": {
205
+ "kind-of": "^6.0.2"
206
+ },
207
+ "engines": {
208
+ "node": ">=8"
209
+ }
210
+ },
211
+ "node_modules/webpack-merge": {
212
+ "version": "5.10.0",
213
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
214
+ "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
215
+ "license": "MIT",
216
+ "dependencies": {
217
+ "clone-deep": "^4.0.1",
218
+ "flat": "^5.0.2",
219
+ "wildcard": "^2.0.0"
220
+ },
221
+ "engines": {
222
+ "node": ">=10.0.0"
223
+ }
224
+ },
225
+ "node_modules/wildcard": {
226
+ "version": "2.0.1",
227
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
228
+ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
229
+ "license": "MIT"
72
230
  }
73
231
  }
74
232
  }
@@ -10,6 +10,7 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "quill": "^2.0.2"
13
+ "quill": "^2.0.2",
14
+ "quill-table-better": "^1.2.3"
14
15
  }
15
16
  }
@@ -27,6 +27,9 @@ import adminforth from '@/adminforth';
27
27
  import AsyncQueue from './async-queue';
28
28
  import Quill from "quill";
29
29
  import "quill/dist/quill.snow.css";
30
+ import QuillTableBetter from 'quill-table-better';
31
+ import 'quill-table-better/dist/quill-table-better.css';
32
+
30
33
  import { useI18n } from 'vue-i18n';
31
34
 
32
35
  const { t } = useI18n();
@@ -89,6 +92,11 @@ Quill.register(CompleteBlot);
89
92
  // @ts-ignore
90
93
  Quill.register(ImageBlot);
91
94
 
95
+ Quill.register({
96
+ 'modules/table-better': QuillTableBetter
97
+ }, true);
98
+
99
+
92
100
  const updaterQueue = new AsyncQueue();
93
101
 
94
102
  const props = defineProps<{
@@ -197,11 +205,7 @@ async function imageHandler() {
197
205
  };
198
206
  }
199
207
 
200
- onMounted(() => {
201
- currentValue.value = props.record[props.column.name] || '';
202
- editor.value.innerHTML = currentValue.value;
203
-
204
- quill = new Quill(editor.value as HTMLElement, {
208
+ const quillOptions = {
205
209
  theme: "snow",
206
210
  readOnly:props.column?.editReadonly,
207
211
  placeholder: 'Type here...',
@@ -210,6 +214,7 @@ onMounted(() => {
210
214
  toolbar: {
211
215
  container: props.meta.toolbar || [
212
216
  ['bold', 'italic', 'underline', 'strike'], // toggled buttons
217
+ ['table-better'],
213
218
  ['blockquote', 'code-block', 'link', ...props.meta.uploadPluginInstanceId ? ['image'] : []],
214
219
  // [
215
220
  // // 'image',
@@ -237,6 +242,11 @@ onMounted(() => {
237
242
  image: imageHandler,
238
243
  },
239
244
  },
245
+ 'table-better': {
246
+ language: 'en_US',
247
+ menus: ['column', 'row', 'merge', 'table', 'cell', 'wrap', 'delete'],
248
+ toolbarTable: true
249
+ },
240
250
  keyboard: {
241
251
  bindings: {
242
252
  tab: {
@@ -250,8 +260,24 @@ onMounted(() => {
250
260
  },
251
261
  }
252
262
  },
253
- });
263
+ };
264
+
265
+ function initValue(quill: Quill) {
266
+ const html = props.record[props.column.name] || '';
267
+ const delta = quill.clipboard.convert({ html });
268
+ const [range] = quill.selection.getRange();
269
+ quill.updateContents(delta, Quill.sources.USER);
270
+ quill.setSelection(
271
+ delta.length() - (range?.length || 0),
272
+ Quill.sources.SILENT
273
+ );
274
+ quill.scrollSelectionIntoView();
275
+ }
254
276
 
277
+ onMounted(() => {
278
+ currentValue.value = props.record[props.column.name] || '';
279
+ quill = new Quill(editor.value as HTMLElement, quillOptions);
280
+ initValue(quill);
255
281
  lastText = quill.getText();
256
282
 
257
283
  quill.on(Quill.events.TEXT_CHANGE, async (delta: any, oldDelta: any, source: string) => {
@@ -1,19 +1,27 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "baseUrl": ".", // This should point to your project root
3
+ "baseUrl": ".",
4
4
  "paths": {
5
5
  "@/*": [
6
- // "node_modules/adminforth/dist/spa/src/*"
7
- "../../../spa/src/*"
6
+ "../../../adminforth/spa/src/*"
8
7
  ],
9
8
  "*": [
10
- // "node_modules/adminforth/dist/spa/node_modules/*"
11
- "../../../spa/node_modules/*"
9
+ "../../../adminforth/spa/node_modules/*"
12
10
  ],
13
11
  "@@/*": [
14
- // "node_modules/adminforth/dist/spa/src/*"
15
12
  "."
16
13
  ]
17
14
  }
18
- }
15
+ },
16
+ "include": [
17
+ "./**/*.ts",
18
+ "./**/*.tsx",
19
+ "./**/*.vue",
20
+ "../**/*.ts",
21
+ "../**/*.tsx",
22
+ "../**/*.vue",
23
+ "../*.vue",
24
+ "../*.ts",
25
+ "../*.tsx"
26
+ ]
19
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminforth/rich-editor",
3
- "version": "1.5.4",
3
+ "version": "1.6.0",
4
4
  "description": "Rich editor plugin for adminforth",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",