dragon-editor 2.0.0-beta.1.3 → 2.0.0-beta.2

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 (45) hide show
  1. package/README.md +72 -135
  2. package/README_en.md +14 -62
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +9 -1
  5. package/dist/runtime/core/components/SvgIcon.vue +175 -0
  6. package/dist/runtime/core/components/editor/ImageBlock.vue +174 -0
  7. package/dist/runtime/core/components/editor/TextBlock.vue +137 -0
  8. package/dist/runtime/core/components/icon/Accept.vue +5 -0
  9. package/dist/runtime/core/components/icon/AlignCenter.vue +6 -0
  10. package/dist/runtime/core/components/icon/AlignLeft.vue +6 -0
  11. package/dist/runtime/core/components/icon/AlignRight.vue +6 -0
  12. package/dist/runtime/core/components/icon/ArrowDown.vue +3 -0
  13. package/dist/runtime/core/components/icon/ArrowUp.vue +3 -0
  14. package/dist/runtime/core/components/icon/Cancel.vue +5 -0
  15. package/dist/runtime/core/components/icon/CodeBlock.vue +6 -0
  16. package/dist/runtime/core/components/icon/DecorationBold.vue +6 -0
  17. package/dist/runtime/core/components/icon/DecorationItalic.vue +6 -0
  18. package/dist/runtime/core/components/icon/DecorationStrikethrough.vue +6 -0
  19. package/dist/runtime/core/components/icon/DecorationUnderline.vue +6 -0
  20. package/dist/runtime/core/components/icon/Delete.vue +3 -0
  21. package/dist/runtime/core/components/icon/ImageBlock.vue +5 -0
  22. package/dist/runtime/core/components/icon/LinkPath.vue +6 -0
  23. package/dist/runtime/core/components/icon/OlBlock.vue +6 -0
  24. package/dist/runtime/core/components/icon/QuotationBlock.vue +6 -0
  25. package/dist/runtime/core/components/icon/TableBlock.vue +8 -0
  26. package/dist/runtime/core/components/icon/TextBlock.vue +5 -0
  27. package/dist/runtime/core/components/icon/UlBlock.vue +6 -0
  28. package/dist/runtime/core/style/common.css +419 -0
  29. package/dist/runtime/core/style/viewer.css +191 -0
  30. package/dist/runtime/core/utils/cursor.d.ts +4 -0
  31. package/dist/runtime/core/utils/cursor.mjs +84 -0
  32. package/dist/runtime/core/utils/element.d.ts +2 -0
  33. package/dist/runtime/core/utils/element.mjs +29 -0
  34. package/dist/runtime/core/utils/index.d.ts +6 -0
  35. package/dist/runtime/core/utils/index.mjs +67 -0
  36. package/dist/runtime/core/utils/keyboard.d.ts +6 -0
  37. package/dist/runtime/core/utils/keyboard.mjs +322 -0
  38. package/dist/runtime/core/utils/style.d.ts +6 -0
  39. package/dist/runtime/core/utils/style.mjs +359 -0
  40. package/dist/runtime/shared/components/DragonEditor.vue +560 -0
  41. package/dist/runtime/{components → shared/components}/DragonEditorComment.vue +33 -11
  42. package/dist/runtime/shared/components/DragonEditorViewer.vue +29 -0
  43. package/package.json +1 -1
  44. package/dist/runtime/components/DragonEditor.vue +0 -361
  45. package/dist/runtime/components/DragonEditorViewer.vue +0 -3
@@ -0,0 +1,419 @@
1
+ .dragon-editor {
2
+ position: relative;
3
+ width: 100%;
4
+ padding: 10px 10px 50px;
5
+ line-height: 1.6;
6
+ }
7
+ .dragon-editor.--comment {
8
+ padding: 10px;
9
+ }
10
+ .dragon-editor h1,
11
+ .dragon-editor h2,
12
+ .dragon-editor h3,
13
+ .dragon-editor h4,
14
+ .dragon-editor h5,
15
+ .dragon-editor h6,
16
+ .dragon-editor p,
17
+ .dragon-editor blockquote,
18
+ .dragon-editor pre,
19
+ .dragon-editor dl,
20
+ .dragon-editor dd,
21
+ .dragon-editor ol,
22
+ .dragon-editor ul,
23
+ .dragon-editor fieldset,
24
+ .dragon-editor legend,
25
+ .dragon-editor figure,
26
+ .dragon-editor menu {
27
+ margin: 0;
28
+ padding: 0;
29
+ border: 0;
30
+ }
31
+ .dragon-editor table,
32
+ .dragon-editor th,
33
+ .dragon-editor td {
34
+ border-spacing: 0;
35
+ border-collapse: collapse;
36
+ }
37
+ .dragon-editor ol,
38
+ .dragon-editor ul,
39
+ .dragon-editor li {
40
+ list-style: none;
41
+ }
42
+ .dragon-editor h1,
43
+ .dragon-editor h2,
44
+ .dragon-editor h3,
45
+ .dragon-editor h4,
46
+ .dragon-editor h5,
47
+ .dragon-editor h6 {
48
+ font-size: 1em;
49
+ font-weight: normal;
50
+ }
51
+ .dragon-editor input,
52
+ .dragon-editor textarea,
53
+ .dragon-editor select,
54
+ .dragon-editor button {
55
+ margin: 0;
56
+ padding: 0;
57
+ border-radius: 0;
58
+ outline: 0;
59
+ vertical-align: middle;
60
+ }
61
+ .dragon-editor a,
62
+ .dragon-editor button,
63
+ .dragon-editor input[type=submit],
64
+ .dragon-editor input[type=button],
65
+ .dragon-editor input[type=reset] {
66
+ border: 0;
67
+ background: transparent;
68
+ cursor: pointer;
69
+ }
70
+ .dragon-editor img {
71
+ border: 0;
72
+ vertical-align: top;
73
+ }
74
+ .dragon-editor .d-align-left {
75
+ text-align: left;
76
+ }
77
+ .dragon-editor .d-align-center {
78
+ text-align: center;
79
+ }
80
+ .dragon-editor .d-align-right {
81
+ text-align: right;
82
+ }
83
+ .dragon-editor .d-deco-bold {
84
+ font-weight: bold;
85
+ }
86
+ .dragon-editor .d-deco-italic {
87
+ font-style: italic;
88
+ }
89
+ .dragon-editor .d-deco-underline {
90
+ text-decoration: underline;
91
+ }
92
+ .dragon-editor .d-deco-underline.d-deco-through {
93
+ text-decoration: underline line-through;
94
+ }
95
+ .dragon-editor .d-deco-through {
96
+ text-decoration: line-through;
97
+ }
98
+ .dragon-editor .d-deco-through.d-deco-underline, .dragon-editor .d-deco-through.d-deco-link {
99
+ text-decoration: line-through underline;
100
+ }
101
+ .dragon-editor .d-deco-code {
102
+ padding: 2px 5px;
103
+ margin: 0 2px;
104
+ background: #f1f1f1;
105
+ color: #c52e2e;
106
+ border-radius: 2px;
107
+ font-family: Inconsolata, monospace, sans-serif;
108
+ }
109
+ .dragon-editor .d-deco-link {
110
+ color: inherit;
111
+ }
112
+ .dragon-editor .d-row-block {
113
+ padding-left: 50px;
114
+ border-radius: 5px;
115
+ background: transparent;
116
+ transition: background 0.25s ease;
117
+ }
118
+ .dragon-editor .d-row-block:hover {
119
+ background: #fafafa;
120
+ }
121
+ .dragon-editor .d-text-block {
122
+ cursor: text;
123
+ outline: 0;
124
+ }
125
+ .dragon-editor .d-text-block:empty {
126
+ min-height: 1.6em;
127
+ }
128
+ .dragon-editor .d-text-block:empty::after {
129
+ display: inline;
130
+ content: "Write text";
131
+ color: #ccc;
132
+ }
133
+ .dragon-editor .d-image-block {
134
+ display: flex;
135
+ flex-direction: column;
136
+ align-items: center;
137
+ row-gap: 5px;
138
+ }
139
+ .dragon-editor .d-image-block.d-align-left {
140
+ align-items: flex-start;
141
+ }
142
+ .dragon-editor .d-image-block.d-align-right {
143
+ align-items: flex-end;
144
+ }
145
+ .dragon-editor .d-image-block.--1 .d-image-area {
146
+ width: 5%;
147
+ }
148
+ .dragon-editor .d-image-block.--2 .d-image-area {
149
+ width: 10%;
150
+ }
151
+ .dragon-editor .d-image-block.--3 .d-image-area {
152
+ width: 15%;
153
+ }
154
+ .dragon-editor .d-image-block.--4 .d-image-area {
155
+ width: 20%;
156
+ }
157
+ .dragon-editor .d-image-block.--5 .d-image-area {
158
+ width: 25%;
159
+ }
160
+ .dragon-editor .d-image-block.--6 .d-image-area {
161
+ width: 30%;
162
+ }
163
+ .dragon-editor .d-image-block.--7 .d-image-area {
164
+ width: 35%;
165
+ }
166
+ .dragon-editor .d-image-block.--8 .d-image-area {
167
+ width: 40%;
168
+ }
169
+ .dragon-editor .d-image-block.--9 .d-image-area {
170
+ width: 45%;
171
+ }
172
+ .dragon-editor .d-image-block.--10 .d-image-area {
173
+ width: 50%;
174
+ }
175
+ .dragon-editor .d-image-block.--11 .d-image-area {
176
+ width: 55%;
177
+ }
178
+ .dragon-editor .d-image-block.--12 .d-image-area {
179
+ width: 60%;
180
+ }
181
+ .dragon-editor .d-image-block.--13 .d-image-area {
182
+ width: 65%;
183
+ }
184
+ .dragon-editor .d-image-block.--14 .d-image-area {
185
+ width: 70%;
186
+ }
187
+ .dragon-editor .d-image-block.--15 .d-image-area {
188
+ width: 75%;
189
+ }
190
+ .dragon-editor .d-image-block.--16 .d-image-area {
191
+ width: 80%;
192
+ }
193
+ .dragon-editor .d-image-block.--17 .d-image-area {
194
+ width: 85%;
195
+ }
196
+ .dragon-editor .d-image-block.--18 .d-image-area {
197
+ width: 90%;
198
+ }
199
+ .dragon-editor .d-image-block.--19 .d-image-area {
200
+ width: 95%;
201
+ }
202
+ .dragon-editor .d-image-block.--20 .d-image-area {
203
+ width: 100%;
204
+ }
205
+ .dragon-editor .d-image-block .d-image-area {
206
+ position: relative;
207
+ }
208
+ .dragon-editor .d-image-block .d-image-area .d-img {
209
+ width: 100%;
210
+ height: auto;
211
+ }
212
+ .dragon-editor .d-image-block .d-image-area .d-btn-size-left,
213
+ .dragon-editor .d-image-block .d-image-area .d-btn-size-right {
214
+ position: absolute;
215
+ top: 50%;
216
+ width: 8px;
217
+ height: 60px;
218
+ background: #fff;
219
+ border: 2px solid #555;
220
+ border-radius: 6px;
221
+ cursor: col-resize;
222
+ }
223
+ .dragon-editor .d-image-block .d-image-area .d-btn-size-left {
224
+ left: 0;
225
+ transform: translate(-50%, -50%);
226
+ }
227
+ .dragon-editor .d-image-block .d-image-area .d-btn-size-right {
228
+ right: 0;
229
+ transform: translate(50%, -50%);
230
+ }
231
+ .dragon-editor .d-image-block .d-caption {
232
+ width: 100%;
233
+ color: #ccc;
234
+ font-size: 1rem;
235
+ cursor: text;
236
+ outline: 0;
237
+ }
238
+ .dragon-editor .d-image-block .d-caption:empty {
239
+ min-height: 1.6em;
240
+ }
241
+ .dragon-editor .d-image-block .d-caption:empty::after {
242
+ display: inline;
243
+ content: "Write caption";
244
+ }
245
+ .dragon-editor .d-block-list {
246
+ display: flex;
247
+ flex-direction: column;
248
+ row-gap: 5px;
249
+ position: absolute;
250
+ top: 100%;
251
+ left: 0;
252
+ width: 100px;
253
+ padding: 5px;
254
+ background: #fff;
255
+ border-radius: 5px;
256
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
257
+ opacity: 0;
258
+ visibility: hidden;
259
+ transition: all 0.25s ease;
260
+ }
261
+ .dragon-editor .d-block-list.--active {
262
+ opacity: 1;
263
+ visibility: visible;
264
+ }
265
+ .dragon-editor .d-block-list .d-btn-block {
266
+ display: flex;
267
+ align-items: center;
268
+ column-gap: 10px;
269
+ font-size: 14px;
270
+ }
271
+ .dragon-editor .d-block-list .d-btn-block .d-icon {
272
+ width: 20px;
273
+ }
274
+ .dragon-editor .d-left-menu {
275
+ display: flex;
276
+ column-gap: 4px;
277
+ position: absolute;
278
+ top: 0;
279
+ left: 10px;
280
+ opacity: 0;
281
+ visibility: hidden;
282
+ transition: all 0.25s ease;
283
+ z-index: 100;
284
+ }
285
+ .dragon-editor .d-left-menu.--active {
286
+ opacity: 1;
287
+ visibility: visible;
288
+ }
289
+ .dragon-editor .d-left-menu .d-add-block,
290
+ .dragon-editor .d-left-menu .d-control-block {
291
+ position: relative;
292
+ width: 20px;
293
+ height: 20px;
294
+ }
295
+ .dragon-editor .d-left-menu .d-btn-menu-pop,
296
+ .dragon-editor .d-left-menu .d-btn-block-pop {
297
+ position: relative;
298
+ width: 20px;
299
+ height: 20px;
300
+ border-radius: 5px;
301
+ vertical-align: top;
302
+ }
303
+ .dragon-editor .d-left-menu .d-btn-menu-pop:hover,
304
+ .dragon-editor .d-left-menu .d-btn-block-pop:hover {
305
+ background: #e9e9e9;
306
+ }
307
+ .dragon-editor .d-left-menu .d-btn-menu-pop:hover::before, .dragon-editor .d-left-menu .d-btn-menu-pop:hover::after,
308
+ .dragon-editor .d-left-menu .d-btn-block-pop:hover::before,
309
+ .dragon-editor .d-left-menu .d-btn-block-pop:hover::after {
310
+ background: #757575;
311
+ }
312
+ .dragon-editor .d-left-menu .d-btn-menu-pop::before, .dragon-editor .d-left-menu .d-btn-menu-pop::after {
313
+ display: block;
314
+ content: "";
315
+ position: absolute;
316
+ top: 50%;
317
+ left: 50%;
318
+ background: #837c7c;
319
+ border-radius: 2px;
320
+ transform: translate(-50%, -50%);
321
+ }
322
+ .dragon-editor .d-left-menu .d-btn-menu-pop::before {
323
+ width: 12px;
324
+ height: 2px;
325
+ }
326
+ .dragon-editor .d-left-menu .d-btn-menu-pop::after {
327
+ width: 2px;
328
+ height: 12px;
329
+ }
330
+ .dragon-editor .d-left-menu .d-btn-block-pop::before {
331
+ display: block;
332
+ content: "";
333
+ position: absolute;
334
+ top: 4px;
335
+ left: 6px;
336
+ width: 3px;
337
+ height: 3px;
338
+ background: #837c7c;
339
+ border-radius: 50%;
340
+ box-shadow: 0 5px 0 #837c7c, 0 10px 0 #837c7c, 5px 0 0 #837c7c, 5px 5px 0 #837c7c, 5px 10px 0 #837c7c;
341
+ }
342
+ .dragon-editor .d-style-menu {
343
+ display: flex;
344
+ align-items: center;
345
+ position: absolute;
346
+ top: 0;
347
+ left: 50%;
348
+ height: 30px;
349
+ background: #fff;
350
+ border-radius: 5px;
351
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
352
+ opacity: 0;
353
+ visibility: hidden;
354
+ transform: translateX(calc(-50% + 25px));
355
+ transition: all 0.25s ease;
356
+ z-index: 100;
357
+ }
358
+ .dragon-editor .d-style-menu.--active {
359
+ opacity: 1;
360
+ visibility: visible;
361
+ }
362
+ .dragon-editor .d-style-menu .d-column {
363
+ display: flex;
364
+ column-gap: 2px;
365
+ padding: 5px;
366
+ border-right: 1px solid #eee;
367
+ box-sizing: border-box;
368
+ }
369
+ .dragon-editor .d-style-menu .d-column:last-child {
370
+ border-right: 0;
371
+ }
372
+ .dragon-editor .d-style-menu .d-column:empty {
373
+ display: none;
374
+ }
375
+ .dragon-editor .d-style-menu .d-btn {
376
+ width: 20px;
377
+ height: 20px;
378
+ padding: 2px;
379
+ }
380
+ .dragon-editor .d-style-menu .d-btn.--active {
381
+ fill: blue;
382
+ }
383
+ .dragon-editor .d-link-box {
384
+ display: flex;
385
+ justify-content: space-between;
386
+ align-items: center;
387
+ column-gap: 10px;
388
+ position: absolute;
389
+ top: 0;
390
+ left: 0;
391
+ width: 250px;
392
+ height: 30px;
393
+ padding: 0 5px;
394
+ background: #fff;
395
+ border-radius: 5px;
396
+ box-sizing: border-box;
397
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
398
+ opacity: 0;
399
+ visibility: hidden;
400
+ transition: all 0.25s ease;
401
+ }
402
+ .dragon-editor .d-link-box.--active {
403
+ opacity: 1;
404
+ visibility: visible;
405
+ }
406
+ .dragon-editor .d-link-box .d-input {
407
+ flex: 1;
408
+ border: 0;
409
+ border-bottom: 2px solid #f1f1f1;
410
+ }
411
+ .dragon-editor .d-link-box .d-btn-link {
412
+ display: flex;
413
+ justify-content: center;
414
+ align-items: center;
415
+ width: 30px;
416
+ }
417
+ .dragon-editor .d-link-box .d-btn-link .d-icon {
418
+ height: 16px;
419
+ }
@@ -0,0 +1,191 @@
1
+ .dragon-editor-viewer {
2
+ width: 100%;
3
+ padding: 10px;
4
+ line-height: 1.6;
5
+ }
6
+ .dragon-editor-viewer h1,
7
+ .dragon-editor-viewer h2,
8
+ .dragon-editor-viewer h3,
9
+ .dragon-editor-viewer h4,
10
+ .dragon-editor-viewer h5,
11
+ .dragon-editor-viewer h6,
12
+ .dragon-editor-viewer p,
13
+ .dragon-editor-viewer blockquote,
14
+ .dragon-editor-viewer pre,
15
+ .dragon-editor-viewer dl,
16
+ .dragon-editor-viewer dd,
17
+ .dragon-editor-viewer ol,
18
+ .dragon-editor-viewer ul,
19
+ .dragon-editor-viewer fieldset,
20
+ .dragon-editor-viewer legend,
21
+ .dragon-editor-viewer figure,
22
+ .dragon-editor-viewer menu {
23
+ margin: 0;
24
+ padding: 0;
25
+ border: 0;
26
+ }
27
+ .dragon-editor-viewer table,
28
+ .dragon-editor-viewer th,
29
+ .dragon-editor-viewer td {
30
+ border-spacing: 0;
31
+ border-collapse: collapse;
32
+ }
33
+ .dragon-editor-viewer ol,
34
+ .dragon-editor-viewer ul,
35
+ .dragon-editor-viewer li {
36
+ list-style: none;
37
+ }
38
+ .dragon-editor-viewer h1,
39
+ .dragon-editor-viewer h2,
40
+ .dragon-editor-viewer h3,
41
+ .dragon-editor-viewer h4,
42
+ .dragon-editor-viewer h5,
43
+ .dragon-editor-viewer h6 {
44
+ font-size: 1em;
45
+ font-weight: normal;
46
+ }
47
+ .dragon-editor-viewer input,
48
+ .dragon-editor-viewer textarea,
49
+ .dragon-editor-viewer select,
50
+ .dragon-editor-viewer button {
51
+ margin: 0;
52
+ padding: 0;
53
+ border-radius: 0;
54
+ outline: 0;
55
+ vertical-align: middle;
56
+ }
57
+ .dragon-editor-viewer a,
58
+ .dragon-editor-viewer button,
59
+ .dragon-editor-viewer input[type=submit],
60
+ .dragon-editor-viewer input[type=button],
61
+ .dragon-editor-viewer input[type=reset] {
62
+ border: 0;
63
+ background: transparent;
64
+ cursor: pointer;
65
+ }
66
+ .dragon-editor-viewer img {
67
+ border: 0;
68
+ vertical-align: top;
69
+ }
70
+ .dragon-editor-viewer .d-align-left {
71
+ text-align: left;
72
+ }
73
+ .dragon-editor-viewer .d-align-center {
74
+ text-align: center;
75
+ }
76
+ .dragon-editor-viewer .d-align-right {
77
+ text-align: right;
78
+ }
79
+ .dragon-editor-viewer .d-deco-bold {
80
+ font-weight: bold;
81
+ }
82
+ .dragon-editor-viewer .d-deco-italic {
83
+ font-style: italic;
84
+ }
85
+ .dragon-editor-viewer .d-deco-underline {
86
+ text-decoration: underline;
87
+ }
88
+ .dragon-editor-viewer .d-deco-underline.d-deco-through {
89
+ text-decoration: underline line-through;
90
+ }
91
+ .dragon-editor-viewer .d-deco-through {
92
+ text-decoration: line-through;
93
+ }
94
+ .dragon-editor-viewer .d-deco-through.d-deco-underline, .dragon-editor-viewer .d-deco-through.d-deco-link {
95
+ text-decoration: line-through underline;
96
+ }
97
+ .dragon-editor-viewer .d-deco-code {
98
+ padding: 2px 5px;
99
+ margin: 0 2px;
100
+ background: #f1f1f1;
101
+ color: #c52e2e;
102
+ border-radius: 2px;
103
+ font-family: Inconsolata, monospace, sans-serif;
104
+ }
105
+ .dragon-editor-viewer .d-deco-link {
106
+ color: inherit;
107
+ }
108
+ .dragon-editor-viewer .d-text-block:empty {
109
+ min-height: 1.6em;
110
+ }
111
+ .dragon-editor-viewer .d-image-block {
112
+ display: flex;
113
+ flex-direction: column;
114
+ align-items: center;
115
+ row-gap: 5px;
116
+ }
117
+ .dragon-editor-viewer .d-image-block.d-align-left {
118
+ align-items: flex-start;
119
+ }
120
+ .dragon-editor-viewer .d-image-block.d-align-right {
121
+ align-items: flex-end;
122
+ }
123
+ .dragon-editor-viewer .d-image-block.--1 .d-image-area {
124
+ width: 5%;
125
+ }
126
+ .dragon-editor-viewer .d-image-block.--2 .d-image-area {
127
+ width: 10%;
128
+ }
129
+ .dragon-editor-viewer .d-image-block.--3 .d-image-area {
130
+ width: 15%;
131
+ }
132
+ .dragon-editor-viewer .d-image-block.--4 .d-image-area {
133
+ width: 20%;
134
+ }
135
+ .dragon-editor-viewer .d-image-block.--5 .d-image-area {
136
+ width: 25%;
137
+ }
138
+ .dragon-editor-viewer .d-image-block.--6 .d-image-area {
139
+ width: 30%;
140
+ }
141
+ .dragon-editor-viewer .d-image-block.--7 .d-image-area {
142
+ width: 35%;
143
+ }
144
+ .dragon-editor-viewer .d-image-block.--8 .d-image-area {
145
+ width: 40%;
146
+ }
147
+ .dragon-editor-viewer .d-image-block.--9 .d-image-area {
148
+ width: 45%;
149
+ }
150
+ .dragon-editor-viewer .d-image-block.--10 .d-image-area {
151
+ width: 50%;
152
+ }
153
+ .dragon-editor-viewer .d-image-block.--11 .d-image-area {
154
+ width: 55%;
155
+ }
156
+ .dragon-editor-viewer .d-image-block.--12 .d-image-area {
157
+ width: 60%;
158
+ }
159
+ .dragon-editor-viewer .d-image-block.--13 .d-image-area {
160
+ width: 65%;
161
+ }
162
+ .dragon-editor-viewer .d-image-block.--14 .d-image-area {
163
+ width: 70%;
164
+ }
165
+ .dragon-editor-viewer .d-image-block.--15 .d-image-area {
166
+ width: 75%;
167
+ }
168
+ .dragon-editor-viewer .d-image-block.--16 .d-image-area {
169
+ width: 80%;
170
+ }
171
+ .dragon-editor-viewer .d-image-block.--17 .d-image-area {
172
+ width: 85%;
173
+ }
174
+ .dragon-editor-viewer .d-image-block.--18 .d-image-area {
175
+ width: 90%;
176
+ }
177
+ .dragon-editor-viewer .d-image-block.--19 .d-image-area {
178
+ width: 95%;
179
+ }
180
+ .dragon-editor-viewer .d-image-block.--20 .d-image-area {
181
+ width: 100%;
182
+ }
183
+ .dragon-editor-viewer .d-image-block .d-image-area .d-img {
184
+ width: 100%;
185
+ height: auto;
186
+ }
187
+ .dragon-editor-viewer .d-image-block .d-caption {
188
+ width: 100%;
189
+ color: #ccc;
190
+ font-size: 1rem;
191
+ }
@@ -0,0 +1,4 @@
1
+ import type { cursorSelection, arrangementCursorData } from "../../../types";
2
+ export declare function setCursor(target: Node, idx: number): void;
3
+ export declare function getCursor(): cursorSelection;
4
+ export declare function getArrangementCursorData(parentCursorData: any): arrangementCursorData;
@@ -0,0 +1,84 @@
1
+ import { findEditableElement } from "./element.mjs";
2
+ export function setCursor(target, idx) {
3
+ if (target) {
4
+ let $target;
5
+ if (target.constructor.name === "Text") {
6
+ $target = target;
7
+ } else {
8
+ $target = target.childNodes.length > 0 ? target.childNodes[0] : target;
9
+ }
10
+ const select = window.getSelection();
11
+ const range = document.createRange();
12
+ const realLength = $target.textContent?.length;
13
+ if (realLength < idx) {
14
+ idx = realLength;
15
+ }
16
+ range.setStart($target, idx);
17
+ range.collapse(true);
18
+ select.removeAllRanges();
19
+ select.addRange(range);
20
+ }
21
+ }
22
+ export function getCursor() {
23
+ const select = window.getSelection();
24
+ return {
25
+ type: select.type,
26
+ startNode: select.anchorNode,
27
+ startOffset: select.anchorOffset,
28
+ endNode: select.focusNode,
29
+ endOffset: select.focusOffset
30
+ };
31
+ }
32
+ export function getArrangementCursorData(parentCursorData) {
33
+ let cursorData = getCursor();
34
+ if (cursorData.startNode === null) {
35
+ cursorData = parentCursorData;
36
+ }
37
+ let startNode = cursorData.startNode;
38
+ let editableElement = findEditableElement(startNode);
39
+ if (editableElement === null) {
40
+ cursorData = parentCursorData;
41
+ startNode = cursorData.startNode;
42
+ editableElement = findEditableElement(startNode);
43
+ }
44
+ let childNode;
45
+ let childIdx = -1;
46
+ let fixIdx = 0;
47
+ let preNodeType = "";
48
+ let childLength = 0;
49
+ if (startNode.parentNode === editableElement) {
50
+ childNode = startNode;
51
+ } else {
52
+ childNode = startNode.parentNode;
53
+ }
54
+ editableElement.childNodes.forEach((child, count) => {
55
+ if (child === childNode) {
56
+ childIdx = count;
57
+ }
58
+ });
59
+ editableElement.childNodes.forEach((child, count) => {
60
+ if (count <= childIdx + fixIdx) {
61
+ const type = child.constructor.name;
62
+ if (preNodeType !== type) {
63
+ childLength = 0;
64
+ }
65
+ if (type === "Text") {
66
+ if (preNodeType === type) {
67
+ childIdx -= 1;
68
+ fixIdx += 1;
69
+ childLength += child.textContent?.length ?? 0;
70
+ } else {
71
+ childLength = child.textContent?.length ?? 0;
72
+ }
73
+ } else {
74
+ childLength = child.textContent?.length ?? 0;
75
+ }
76
+ preNodeType = type;
77
+ }
78
+ });
79
+ return {
80
+ editableNode: editableElement,
81
+ childCount: childIdx,
82
+ length: childLength
83
+ };
84
+ }
@@ -0,0 +1,2 @@
1
+ export declare function findEditableElement(node: Node): (HTMLElement | null);
2
+ export declare function findChildNumber(parent: HTMLElement, child: Node): number;