@humandialog/forms.svelte 0.3.3 → 0.3.4

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 (76) hide show
  1. package/components/button.svelte +80 -0
  2. package/components/button.svelte.d.ts +24 -0
  3. package/components/checkbox.svelte +55 -0
  4. package/components/checkbox.svelte.d.ts +25 -0
  5. package/components/combo/combo.d.ts +15 -0
  6. package/components/combo/combo.item.svelte +14 -0
  7. package/components/combo/combo.item.svelte.d.ts +19 -0
  8. package/components/combo/combo.js +15 -0
  9. package/components/combo/combo.source.svelte +13 -0
  10. package/components/combo/combo.source.svelte.d.ts +20 -0
  11. package/components/combo/combo.svelte +527 -0
  12. package/components/combo/combo.svelte.d.ts +28 -0
  13. package/components/date.svelte +113 -0
  14. package/components/date.svelte.d.ts +23 -0
  15. package/components/document/internal/Document_command.d.ts +9 -0
  16. package/components/document/internal/Document_command.js +9 -0
  17. package/components/document/internal/Selection_helper.d.ts +7 -0
  18. package/components/document/internal/Selection_helper.js +133 -0
  19. package/components/document/internal/Selection_range.d.ts +26 -0
  20. package/components/document/internal/Selection_range.js +58 -0
  21. package/components/document/internal/palette.row.svelte +34 -0
  22. package/components/document/internal/palette.row.svelte.d.ts +36 -0
  23. package/components/document/internal/palette.svelte +123 -0
  24. package/components/document/internal/palette.svelte.d.ts +67 -0
  25. package/components/document/rich.edit.svelte +733 -0
  26. package/components/document/rich.edit.svelte.d.ts +23 -0
  27. package/components/edit.field.svelte +134 -0
  28. package/components/edit.field.svelte.d.ts +27 -0
  29. package/components/file.loader.svelte +90 -0
  30. package/components/file.loader.svelte.d.ts +25 -0
  31. package/components/input.text.svelte +37 -0
  32. package/components/input.text.svelte.d.ts +29 -0
  33. package/components/inputbox.ltop.svelte +110 -0
  34. package/components/inputbox.ltop.svelte.d.ts +44 -0
  35. package/components/radio.svelte +53 -0
  36. package/components/radio.svelte.d.ts +25 -0
  37. package/components/simple.table.svelte +106 -0
  38. package/components/simple.table.svelte.d.ts +41 -0
  39. package/components/table/_template.table.svelte +111 -0
  40. package/components/table/_template.table.svelte.d.ts +57 -0
  41. package/components/table/column.svelte +17 -0
  42. package/components/table/column.svelte.d.ts +19 -0
  43. package/components/table/item.svelte +10 -0
  44. package/components/table/item.svelte.d.ts +17 -0
  45. package/components/table/table.d.ts +11 -0
  46. package/components/table/table.js +11 -0
  47. package/components/table/table.svelte +150 -0
  48. package/components/table/table.svelte.d.ts +73 -0
  49. package/components/textarea.ltop.svelte +55 -0
  50. package/components/textarea.ltop.svelte.d.ts +35 -0
  51. package/components/tile.title.svelte +54 -0
  52. package/components/tile.title.svelte.d.ts +29 -0
  53. package/form.box.svelte +60 -0
  54. package/form.box.svelte.d.ts +35 -0
  55. package/global.d.ts +1 -0
  56. package/icon.svelte +105 -0
  57. package/icon.svelte.d.ts +62 -0
  58. package/index.d.ts +21 -0
  59. package/index.js +25 -0
  60. package/package.json +42 -48
  61. package/page.row.svelte +31 -0
  62. package/page.row.svelte.d.ts +31 -0
  63. package/page.svelte +83 -0
  64. package/page.svelte.d.ts +39 -0
  65. package/stores.d.ts +15 -0
  66. package/stores.js +7 -0
  67. package/tile.svelte +41 -0
  68. package/tile.svelte.d.ts +33 -0
  69. package/tiles.row.svelte +35 -0
  70. package/tiles.row.svelte.d.ts +31 -0
  71. package/tiles.vertical.row.svelte +25 -0
  72. package/tiles.vertical.row.svelte.d.ts +29 -0
  73. package/updates.d.ts +3 -0
  74. package/updates.js +95 -0
  75. package/utils.d.ts +5 -0
  76. package/utils.js +51 -0
@@ -0,0 +1,733 @@
1
+ <script>import { Selection_helper } from "./internal/Selection_helper";
2
+ import { getContext, onDestroy, onMount } from "svelte";
3
+ import { Selection_range, Selection_edge } from "./internal/Selection_range";
4
+ import { data_tick_store, context_items_store, context_types_store } from "../../stores.js";
5
+ import { inform_modification, push_changes } from "../../updates.js";
6
+ import { parse_width_directive } from "../../utils.js";
7
+ import Palette from "./internal/palette.svelte";
8
+ import FaFont from "svelte-icons/fa/FaFont.svelte";
9
+ import FaHead from "svelte-icons/fa/FaHeading.svelte";
10
+ import FaCode from "svelte-icons/fa/FaCode.svelte";
11
+ import FaComments from "svelte-icons/fa/FaComment.svelte";
12
+ import FaQuote from "svelte-icons/fa/FaQuoteRight.svelte";
13
+ import FaWarn from "svelte-icons/fa/FaExclamationTriangle.svelte";
14
+ import FaInfo from "svelte-icons/fa/FaInfo.svelte";
15
+ export let value = "";
16
+ export let placeholder = "";
17
+ export let self = null;
18
+ export let a = "";
19
+ export let context = "";
20
+ export let typename = "";
21
+ export let c = "";
22
+ let item = null;
23
+ let changed_value;
24
+ let has_changed_value = false;
25
+ let additional_class = $$restProps["class"] ?? "";
26
+ let editable_div = null;
27
+ let observer;
28
+ let palette = null;
29
+ let is_command_palette_visible = false;
30
+ let palette_focused_node = null;
31
+ let palette_focused_node_org_text;
32
+ let palette_focused_selection_pos;
33
+ let palette_focused_string_start;
34
+ let palette_focused_string_end;
35
+ let ctx = context ? context : getContext("ctx");
36
+ let cs = parse_width_directive(c);
37
+ let last_tick = -1;
38
+ $: {
39
+ if (last_tick < $data_tick_store)
40
+ setup_source();
41
+ }
42
+ function setup_source() {
43
+ last_tick = $data_tick_store;
44
+ if (a) {
45
+ if (self)
46
+ item = self;
47
+ else
48
+ item = $context_items_store[ctx];
49
+ if (!typename)
50
+ typename = $context_types_store[ctx];
51
+ if (item != null)
52
+ value = item[a];
53
+ }
54
+ if (!value)
55
+ value = "<div>\u200B</div>";
56
+ has_changed_value = false;
57
+ }
58
+ onMount(() => {
59
+ if (!editable_div)
60
+ return;
61
+ if (!observer) {
62
+ observer = new MutationObserver(async () => {
63
+ await content_changed(true);
64
+ });
65
+ observer.observe(editable_div, {
66
+ childList: true,
67
+ attributes: true,
68
+ characterData: true,
69
+ subtree: true
70
+ });
71
+ }
72
+ });
73
+ onDestroy(() => {
74
+ if (!editable_div)
75
+ return;
76
+ if (observer)
77
+ observer.disconnect();
78
+ if (is_command_palette_visible)
79
+ hide_command_palette();
80
+ });
81
+ function content_changed(checkZeroWitdhSpaces) {
82
+ if (document.activeElement != editable_div)
83
+ return;
84
+ if (checkZeroWitdhSpaces) {
85
+ const sel = window.getSelection();
86
+ if (sel.focusNode == editable_div) {
87
+ console.log("focusNode is editable_div!", sel.focusNode);
88
+ return;
89
+ }
90
+ let txt = sel.focusNode.textContent;
91
+ var exp = /\u200B/g;
92
+ if (txt.length > 1 && txt.search(exp) >= 0) {
93
+ let active_range = Selection_helper.get_selection(editable_div);
94
+ let selection_offset = active_range.begin.absolute_index - active_range.begin.node_index;
95
+ sel.focusNode.textContent = txt.replace(exp, "");
96
+ set_position(selection_offset + sel.focusNode.textContent.length);
97
+ }
98
+ }
99
+ if (is_command_palette_visible) {
100
+ if (palette_focused_node) {
101
+ let current_text;
102
+ current_text = palette_focused_node.textContent;
103
+ let key;
104
+ if (current_text.charAt(palette_focused_string_start) == "/")
105
+ palette_focused_string_start++;
106
+ if (palette_focused_string_end > 0)
107
+ key = current_text.slice(palette_focused_string_start, -palette_focused_string_end);
108
+ else
109
+ key = current_text.substr(palette_focused_string_start);
110
+ filter_command_palette(key);
111
+ }
112
+ }
113
+ changed_value = editable_div.innerHTML;
114
+ has_changed_value = true;
115
+ }
116
+ const on_keyup = () => {
117
+ selection_changed();
118
+ };
119
+ const on_keydown = (event) => {
120
+ switch (event.key) {
121
+ case "Enter":
122
+ if (is_command_palette_visible) {
123
+ event.cancelBubble = true;
124
+ event.preventDefault();
125
+ restore_previous_text_and_position();
126
+ choose_command_on_palette();
127
+ } else {
128
+ event.cancelBubble = true;
129
+ event.preventDefault();
130
+ if (is_multiline())
131
+ insert_new_line();
132
+ else
133
+ move_cursor_to_next_editable_element();
134
+ }
135
+ break;
136
+ case "/":
137
+ store_node_text_and_position();
138
+ show_command_palette();
139
+ break;
140
+ case "Backspace":
141
+ if (is_range_selected()) {
142
+ event.cancelBubble = true;
143
+ event.preventDefault();
144
+ console.log("Unsupported");
145
+ } else {
146
+ let hide_commands_palette = false;
147
+ if (is_command_palette_visible)
148
+ hide_commands_palette = will_slash_remove();
149
+ if (is_last_character_before_caret()) {
150
+ event.cancelBubble = true;
151
+ event.preventDefault();
152
+ if (is_focused_paragraph_empty()) {
153
+ if (!is_focused_paragraph_first_in_document()) {
154
+ let prev_paragraph;
155
+ prev_paragraph = remove_focused_paragraph(false);
156
+ set_caret_at_end_of_paragraph(prev_paragraph);
157
+ }
158
+ } else
159
+ make_focused_paragraph_empty(true);
160
+ }
161
+ if (hide_commands_palette)
162
+ hide_command_palette();
163
+ }
164
+ break;
165
+ case "Delete":
166
+ if (is_range_selected()) {
167
+ event.cancelBubble = true;
168
+ event.preventDefault();
169
+ console.log("Unsupported");
170
+ } else if (is_last_character_after_caret()) {
171
+ event.cancelBubble = true;
172
+ event.preventDefault();
173
+ make_focused_paragraph_empty(true);
174
+ } else if (is_focused_paragraph_empty()) {
175
+ event.cancelBubble = true;
176
+ event.preventDefault();
177
+ if (!is_focused_paragraph_last_in_document()) {
178
+ let next_paragraph;
179
+ next_paragraph = remove_focused_paragraph(true);
180
+ set_caret_at_begin_of_paragraph(next_paragraph);
181
+ }
182
+ }
183
+ break;
184
+ case "Esc":
185
+ case "Escape":
186
+ if (is_command_palette_visible) {
187
+ event.cancelBubble = true;
188
+ event.preventDefault();
189
+ hide_command_palette();
190
+ }
191
+ break;
192
+ case "ArrowDown":
193
+ if (is_command_palette_visible) {
194
+ event.cancelBubble = true;
195
+ event.preventDefault();
196
+ navigate_command_palette(event.key);
197
+ }
198
+ break;
199
+ case "ArrowUp":
200
+ if (is_command_palette_visible) {
201
+ event.cancelBubble = true;
202
+ event.preventDefault();
203
+ navigate_command_palette(event.key);
204
+ }
205
+ break;
206
+ }
207
+ };
208
+ const on_mouseup = () => {
209
+ selection_changed();
210
+ };
211
+ function set_selection(range) {
212
+ const selection = window.getSelection();
213
+ selection.removeAllRanges();
214
+ selection.addRange(range);
215
+ }
216
+ function set_position(position) {
217
+ const range = Selection_helper.create_range(editable_div, position, position);
218
+ set_selection(range);
219
+ }
220
+ function get_position() {
221
+ return Selection_helper.get_selection(editable_div);
222
+ }
223
+ function selection_changed() {
224
+ if (!editable_div || editable_div.textContent.length === 0)
225
+ return;
226
+ on_selection_changed();
227
+ }
228
+ function store_node_text_and_position() {
229
+ let sel;
230
+ sel = window.getSelection();
231
+ if (sel.focusNode.textContent && sel.focusNode.nodeType !== sel.focusNode.COMMENT_NODE) {
232
+ palette_focused_node = sel.focusNode;
233
+ palette_focused_node_org_text = sel.focusNode.textContent;
234
+ palette_focused_string_start = sel.focusOffset;
235
+ palette_focused_string_end = sel.focusNode.textContent.length - sel.focusOffset;
236
+ let sr;
237
+ sr = get_position();
238
+ palette_focused_selection_pos = sr.end.absolute_index;
239
+ }
240
+ }
241
+ function restore_previous_text_and_position() {
242
+ if (palette_focused_node) {
243
+ palette_focused_node.textContent = palette_focused_node_org_text;
244
+ content_changed(false);
245
+ set_position(palette_focused_selection_pos);
246
+ on_selection_changed();
247
+ }
248
+ }
249
+ function clear_previous_text_and_position() {
250
+ palette_focused_node = null;
251
+ palette_focused_node_org_text = "";
252
+ }
253
+ function will_slash_remove() {
254
+ let sel;
255
+ sel = window.getSelection();
256
+ if (sel.focusNode.textContent && sel.focusNode.nodeType !== sel.focusNode.COMMENT_NODE) {
257
+ if (sel.focusOffset > 0 && sel.focusNode.textContent.charAt(sel.focusOffset - 1) == "/")
258
+ return true;
259
+ }
260
+ return false;
261
+ }
262
+ function is_last_character_before_caret() {
263
+ let sel;
264
+ sel = window.getSelection();
265
+ if (sel.focusNode.textContent && sel.focusNode.nodeType !== sel.focusNode.COMMENT_NODE) {
266
+ if (sel.focusOffset == 1 && sel.focusNode.textContent.length == 1)
267
+ return true;
268
+ }
269
+ return false;
270
+ }
271
+ function is_last_character_after_caret() {
272
+ let sel;
273
+ sel = window.getSelection();
274
+ if (sel.focusNode.textContent && sel.focusNode.nodeType !== sel.focusNode.COMMENT_NODE) {
275
+ if (sel.focusOffset == 0 && sel.focusNode.textContent.length == 1)
276
+ return true;
277
+ }
278
+ return false;
279
+ }
280
+ function is_range_selected() {
281
+ let sel;
282
+ sel = window.getSelection();
283
+ if (sel.rangeCount == 0)
284
+ return false;
285
+ if (sel.rangeCount > 1)
286
+ return true;
287
+ if (sel.anchorNode !== sel.focusNode)
288
+ return true;
289
+ if (sel.anchorOffset != sel.focusOffset)
290
+ return true;
291
+ return false;
292
+ }
293
+ function make_focused_paragraph_empty(_set_selection) {
294
+ let sel;
295
+ sel = window.getSelection();
296
+ let node = sel.focusNode;
297
+ if (node.textContent && node.nodeType !== node.COMMENT_NODE) {
298
+ node.textContent = "\u200B";
299
+ }
300
+ if (_set_selection) {
301
+ let range = new Range();
302
+ range.collapse(true);
303
+ range.setStart(node, 1);
304
+ range.setEnd(node, 1);
305
+ set_selection(range);
306
+ }
307
+ }
308
+ function is_focused_paragraph_empty() {
309
+ let sel;
310
+ sel = window.getSelection();
311
+ if (sel.focusNode.textContent == "\u200B")
312
+ return true;
313
+ return false;
314
+ }
315
+ function is_focused_paragraph_first_in_document() {
316
+ let text_node = window.getSelection().focusNode;
317
+ let focused_div = text_node.parentNode;
318
+ let prev_div = focused_div.previousSibling;
319
+ if (prev_div != null)
320
+ return false;
321
+ else
322
+ return true;
323
+ }
324
+ function is_focused_paragraph_last_in_document() {
325
+ let text_node = window.getSelection().focusNode;
326
+ let focused_div = text_node.parentNode;
327
+ let next_div = focused_div.nextSibling;
328
+ if (next_div != null)
329
+ return false;
330
+ else
331
+ return true;
332
+ }
333
+ function remove_focused_paragraph(return_next_sibling = false) {
334
+ let text_node = window.getSelection().focusNode;
335
+ let focused_div = text_node.parentNode;
336
+ let result;
337
+ if (!return_next_sibling)
338
+ result = focused_div.previousSibling;
339
+ else
340
+ result = focused_div.nextSibling;
341
+ let root = focused_div.parentNode;
342
+ root.removeChild(focused_div);
343
+ return result;
344
+ }
345
+ function set_caret_at_end_of_paragraph(paragraph) {
346
+ let text_node = paragraph.childNodes[0];
347
+ if (text_node == null)
348
+ return;
349
+ let pos = text_node.textContent.length;
350
+ let range = new Range();
351
+ range.collapse(true);
352
+ range.setStart(text_node, pos);
353
+ range.setEnd(text_node, pos);
354
+ set_selection(range);
355
+ }
356
+ function set_caret_at_begin_of_paragraph(paragraph) {
357
+ let text_node = paragraph.childNodes[0];
358
+ if (text_node == null)
359
+ return;
360
+ let range = new Range();
361
+ range.collapse(true);
362
+ range.setStart(text_node, 0);
363
+ range.setEnd(text_node, 0);
364
+ set_selection(range);
365
+ }
366
+ function is_multiline() {
367
+ let sel = window.getSelection();
368
+ let n = sel.focusNode;
369
+ if (!n)
370
+ return false;
371
+ if (n.nodeType !== n.TEXT_NODE)
372
+ return false;
373
+ let element = n.parentElement;
374
+ if (!element)
375
+ return false;
376
+ let propname_attr = element.attributes.getNamedItem("data-hd-propname");
377
+ if (!propname_attr)
378
+ return true;
379
+ else
380
+ return false;
381
+ }
382
+ function is_text_node(node) {
383
+ if (node.nodeType == node.TEXT_NODE && node.textContent)
384
+ return true;
385
+ else
386
+ return false;
387
+ }
388
+ function is_non_editable_element(node) {
389
+ if (node.nodeType != node.ELEMENT_NODE)
390
+ return false;
391
+ let element = node;
392
+ return element.isContentEditable;
393
+ }
394
+ function find_next_editable_node(after, parent, check_upper_nodes = false) {
395
+ let node;
396
+ if (after == null)
397
+ node = parent.childNodes[0];
398
+ else
399
+ node = after.nextSibling;
400
+ while (node) {
401
+ if (node.hasChildNodes()) {
402
+ if (!is_non_editable_element(node)) {
403
+ let result;
404
+ result = find_next_editable_node(null, node);
405
+ if (result)
406
+ return result;
407
+ }
408
+ } else if (is_text_node(node))
409
+ return node;
410
+ node = node.nextSibling;
411
+ }
412
+ if (check_upper_nodes) {
413
+ let upper_after = parent;
414
+ let upper_parent = parent.parentNode;
415
+ while (upper_parent) {
416
+ let result = find_next_editable_node(upper_after, upper_parent);
417
+ if (result)
418
+ return result;
419
+ upper_after = upper_parent;
420
+ upper_parent = upper_after.parentNode;
421
+ }
422
+ }
423
+ return null;
424
+ }
425
+ function move_cursor_to_next_editable_element() {
426
+ let sel = window.getSelection();
427
+ let next_text_editable_node = find_next_editable_node(sel.focusNode, sel.focusNode.parentNode, true);
428
+ if (!next_text_editable_node)
429
+ return;
430
+ let range = new Range();
431
+ range.collapse(true);
432
+ range.setStart(next_text_editable_node, 0);
433
+ range.setEnd(next_text_editable_node, 0);
434
+ set_selection(range);
435
+ }
436
+ function set_tag_and_class_for_paragraph(node, tag, css_class) {
437
+ while (node && node.nodeType !== Node.ELEMENT_NODE)
438
+ node = node.parentNode;
439
+ if (!node)
440
+ return;
441
+ let element = node;
442
+ if (element.tagName == tag.toUpperCase()) {
443
+ element.className = css_class;
444
+ return false;
445
+ } else {
446
+ let old_element = element;
447
+ let new_element = document.createElement(tag);
448
+ new_element.innerHTML = old_element.innerHTML;
449
+ const attribs_no = old_element.attributes.length;
450
+ for (let i = 0; i < attribs_no; i++) {
451
+ let attr = old_element.attributes[i];
452
+ new_element.setAttribute(attr.name, attr.value);
453
+ }
454
+ new_element.className = css_class;
455
+ old_element.parentNode.replaceChild(new_element, old_element);
456
+ return true;
457
+ }
458
+ }
459
+ function do_format(tag, css_class) {
460
+ const elem = editable_div;
461
+ const editableElem = editable_div;
462
+ let stored_selection = Selection_helper.get_selection(elem);
463
+ let sel = window.getSelection();
464
+ let should_restore_selection = false;
465
+ if (sel.isCollapsed || sel.focusNode === sel.anchorNode) {
466
+ if (set_tag_and_class_for_paragraph(sel.focusNode, tag, css_class))
467
+ should_restore_selection = true;
468
+ } else {
469
+ let from;
470
+ let to;
471
+ const flags = sel.focusNode.compareDocumentPosition(sel.anchorNode);
472
+ if (flags & Node.DOCUMENT_POSITION_PRECEDING) {
473
+ to = sel.focusNode;
474
+ from = sel.anchorNode;
475
+ } else {
476
+ from = sel.focusNode;
477
+ to = sel.anchorNode;
478
+ }
479
+ if (set_tag_and_class_for_paragraph(from, tag, css_class))
480
+ should_restore_selection = true;
481
+ let node = from;
482
+ do {
483
+ node = find_next_editable_node(node, node.parentNode, true);
484
+ if (set_tag_and_class_for_paragraph(node, tag, css_class))
485
+ should_restore_selection = true;
486
+ if (node == to)
487
+ break;
488
+ } while (node);
489
+ }
490
+ if (should_restore_selection) {
491
+ const range = Selection_helper.create_range(editableElem, stored_selection.begin.absolute_index, stored_selection.end.absolute_index);
492
+ set_selection(range);
493
+ }
494
+ }
495
+ function insert_new_line() {
496
+ const elem = editable_div;
497
+ const editableElem = editable_div;
498
+ const tag = "div";
499
+ let inTheMiddle;
500
+ if (editableElem) {
501
+ let active_range = Selection_helper.get_selection(editable_div);
502
+ const rangeNode = Selection_helper.create_cursor_range(editableElem, active_range.begin.absolute_index);
503
+ if (rangeNode) {
504
+ const activeNode = rangeNode[1];
505
+ inTheMiddle = true;
506
+ if (rangeNode[0].startOffset === activeNode.textContent.length) {
507
+ inTheMiddle = false;
508
+ } else if (rangeNode[0].startOffset === activeNode.textContent.length - 1 && activeNode.textContent.substring(activeNode.textContent.length - 1) === "\u200B") {
509
+ inTheMiddle = false;
510
+ }
511
+ const newTag = document.createElement(tag);
512
+ let new_line_cursor_pos;
513
+ if (!inTheMiddle) {
514
+ newTag.innerHTML = "\u200B";
515
+ new_line_cursor_pos = 1;
516
+ activeNode.parentElement.insertAdjacentElement("afterend", newTag);
517
+ } else {
518
+ let range;
519
+ range = rangeNode[0];
520
+ let current_div;
521
+ current_div = activeNode.parentNode;
522
+ let current_text;
523
+ current_text = activeNode.textContent;
524
+ let range_start;
525
+ range_start = range.startOffset;
526
+ let range_end;
527
+ range_end = range.endOffset;
528
+ if (range_start === 0)
529
+ current_div.innerHTML = "\u200B";
530
+ else
531
+ current_div.innerHTML = current_text.substring(0, range_start);
532
+ newTag.innerHTML = current_text.substring(range_end);
533
+ current_div.insertAdjacentElement("afterend", newTag);
534
+ new_line_cursor_pos = 0;
535
+ }
536
+ let text_node = newTag.childNodes[0];
537
+ rangeNode[0].collapse(true);
538
+ rangeNode[0].setStart(text_node, new_line_cursor_pos);
539
+ rangeNode[0].setEnd(text_node, new_line_cursor_pos);
540
+ set_selection(rangeNode[0]);
541
+ content_changed(false);
542
+ }
543
+ }
544
+ }
545
+ function get_selection_bbox() {
546
+ const selection = window.getSelection();
547
+ const range = selection.getRangeAt(0);
548
+ let rect;
549
+ rect = range.getBoundingClientRect();
550
+ return rect;
551
+ }
552
+ function get_window_box() {
553
+ let client_rect;
554
+ client_rect = new DOMRect();
555
+ client_rect.x = 0;
556
+ client_rect.y = 0;
557
+ client_rect.width = window.innerWidth;
558
+ client_rect.height = window.innerHeight;
559
+ return client_rect;
560
+ }
561
+ function on_palette_mouse_click() {
562
+ restore_previous_text_and_position();
563
+ }
564
+ function on_palette_shown() {
565
+ is_command_palette_visible = true;
566
+ }
567
+ function on_palette_hidden() {
568
+ is_command_palette_visible = false;
569
+ clear_previous_text_and_position();
570
+ }
571
+ function show_command_palette() {
572
+ let rect = get_selection_bbox();
573
+ let client_rect = get_window_box();
574
+ let top_space = rect.y;
575
+ let bottom_space = client_rect.height - (rect.y + rect.height);
576
+ palette.max_height_px = 500;
577
+ palette.width_px = 400;
578
+ let preferred_palette_height = palette.max_height_px;
579
+ let preferred_palette_width = palette.width_px;
580
+ let x = 0, y = 0;
581
+ let show_above = false;
582
+ let show_fullscreen = false;
583
+ if (client_rect.width < preferred_palette_width)
584
+ show_fullscreen = true;
585
+ else if (rect.x + preferred_palette_width > client_rect.width)
586
+ x = client_rect.width - preferred_palette_width;
587
+ else
588
+ x = rect.x;
589
+ if (client_rect.height < preferred_palette_height)
590
+ show_fullscreen = true;
591
+ else if (bottom_space >= preferred_palette_height)
592
+ y = rect.y + rect.height;
593
+ else if (top_space >= preferred_palette_height) {
594
+ y = rect.y;
595
+ show_above = true;
596
+ } else
597
+ show_fullscreen = true;
598
+ if (show_fullscreen)
599
+ palette.show_fullscreen(client_rect.width, client_rect.height);
600
+ else
601
+ palette.show(x, y, show_above);
602
+ }
603
+ function hide_command_palette() {
604
+ palette.hide();
605
+ }
606
+ function filter_command_palette(key) {
607
+ palette.filter(key);
608
+ }
609
+ function choose_command_on_palette() {
610
+ palette.execute_selected_command();
611
+ }
612
+ function navigate_command_palette(key) {
613
+ if (key == "ArrowDown")
614
+ palette.navigate_down();
615
+ else if (key == "ArrowUp")
616
+ palette.navigate_up();
617
+ }
618
+ function on_selection_changed() {
619
+ }
620
+ function on_blur() {
621
+ let active_range = Selection_helper.get_selection(editable_div);
622
+ if (item && a && has_changed_value) {
623
+ item[a] = changed_value;
624
+ has_changed_value = false;
625
+ if (typename) {
626
+ inform_modification(item, a, typename);
627
+ push_changes();
628
+ }
629
+ last_tick = $data_tick_store + 1;
630
+ $data_tick_store = last_tick;
631
+ }
632
+ }
633
+ let commands = [
634
+ { caption: "Normal", description: "This is normal text style", tags: "text", icon: FaFont, on_choice: () => {
635
+ do_format("div", "");
636
+ } },
637
+ { caption: "Heading 1", description: "Big section heading", tags: "h1", icon: FaHead, icon_size: 6, on_choice: () => {
638
+ do_format("h2", "");
639
+ } },
640
+ { caption: "Heading 2", description: "Medium section heading", tags: "h2", icon: FaHead, icon_size: 5, on_choice: () => {
641
+ do_format("h3", "");
642
+ } },
643
+ { caption: "Heading 3", description: "Small section heading", tags: "h3", icon: FaHead, icon_size: 4, on_choice: () => {
644
+ do_format("h4", "");
645
+ } },
646
+ { caption: "Code", description: "Source code monospace text", icon: FaCode, on_choice: () => {
647
+ do_format("div", "ml-6 text-sm font-mono break-normal text-pink-700 dark:text-pink-600");
648
+ } },
649
+ { caption: "Comment", description: "With this you can comment the above paragraph", icon: FaComments, on_choice: () => {
650
+ do_format("div", "ml-6 text-sm italic text-lime-700 dark:text-lime-600");
651
+ } },
652
+ { caption: "Quote", description: "To quote someone", icon: FaQuote, on_choice: () => {
653
+ do_format("blockquote", "");
654
+ } },
655
+ { caption: "Warning", description: "An important warning to above paragraph", icon: FaWarn, on_choice: () => {
656
+ do_format("div", "ml-6 px-3 py-1 border-l-2 rounded-md border-orange-500 bg-orange-100 dark:bg-orange-900");
657
+ } },
658
+ { caption: "Info", description: "An important info about above paragraph", icon: FaInfo, on_choice: () => {
659
+ do_format("div", "ml-6 px-3 py-1 border-l-2 rounded-md border-blue-500 bg-blue-100 dark:bg-blue-900");
660
+ } }
661
+ ];
662
+ </script>
663
+
664
+ <div contenteditable="true"
665
+ bind:this={editable_div}
666
+ on:keyup={on_keyup}
667
+ on:keydown={on_keydown}
668
+ on:mouseup={on_mouseup}
669
+ class="{cs} bg-gray-50 border border-gray-300 text-sm rounded-md
670
+ px-2.5 dark:bg-gray-700 dark:border-gray-600
671
+ prose prose-sm sm:prose-base dark:prose-invert {additional_class} overflow-y-auto"
672
+ on:blur={on_blur}
673
+ >
674
+ {@html value}
675
+ </div>
676
+
677
+ <Palette commands={commands}
678
+ bind:this={palette}
679
+ on:palette_shown={on_palette_shown}
680
+ on:palette_hidden={on_palette_hidden}
681
+ on:palette_mouse_click={on_palette_mouse_click}/>
682
+
683
+
684
+
685
+ <style>
686
+
687
+ [contenteditable]:focus {
688
+ outline: 0px solid transparent;
689
+ }
690
+
691
+ /*
692
+ :global(.doc-code) {
693
+ margin-left: 3rem;
694
+ font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
695
+ font-size: 87.5%;
696
+ color: #e83e8c;
697
+ word-wrap: break-word;
698
+ }
699
+
700
+ :global(.doc-quote) {
701
+ margin-left: 3rem;
702
+ font-style: italic;
703
+ color: #6c757d;
704
+ }
705
+
706
+ :global(.doc-comment) {
707
+ margin-left: 3rem;
708
+ font-size: 87.5%;
709
+ color: #28a745;
710
+ }
711
+
712
+ :global(.doc-warn) {
713
+ margin-left: 3rem;
714
+ padding: .75rem 1.25rem;
715
+ border: 1px solid transparent;
716
+ border-radius: .25rem;
717
+ color: #856404;
718
+ background-color: #fff3cd;
719
+ border-color: #ffeeba;
720
+ }
721
+
722
+ :global(.doc-info) {
723
+ margin-left: 3rem;
724
+ padding: .75rem 1.25rem;
725
+ border: 1px solid transparent;
726
+ border-radius: .25rem;
727
+ color: #0c5460;
728
+ background-color:#d1ecf1;
729
+ border-color: #bee5eb;
730
+ }
731
+ */
732
+
733
+ </style>