svedit 0.12.0 → 0.13.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 (86) hide show
  1. package/README.md +33 -21
  2. package/dist/Command.svelte.d.ts +38 -30
  3. package/dist/Command.svelte.d.ts.map +1 -1
  4. package/dist/Command.svelte.js +271 -326
  5. package/dist/CustomProperty.svelte +3 -5
  6. package/dist/CustomProperty.svelte.d.ts +3 -6
  7. package/dist/CustomProperty.svelte.d.ts.map +1 -1
  8. package/dist/KeyMapper.svelte.d.ts +19 -6
  9. package/dist/KeyMapper.svelte.d.ts.map +1 -1
  10. package/dist/KeyMapper.svelte.js +95 -112
  11. package/dist/Node.svelte +16 -13
  12. package/dist/Node.svelte.d.ts +3 -5
  13. package/dist/Node.svelte.d.ts.map +1 -1
  14. package/dist/NodeArrayProperty.svelte +39 -22
  15. package/dist/NodeArrayProperty.svelte.d.ts +3 -5
  16. package/dist/NodeArrayProperty.svelte.d.ts.map +1 -1
  17. package/dist/NodeCaret.svelte +1 -1
  18. package/dist/NodeCaret.svelte.d.ts +6 -14
  19. package/dist/NodeCaret.svelte.d.ts.map +1 -1
  20. package/dist/NodeGap.svelte +12 -6
  21. package/dist/NodeGap.svelte.d.ts +7 -14
  22. package/dist/NodeGap.svelte.d.ts.map +1 -1
  23. package/dist/NodeGapMarkers.svelte +19 -10
  24. package/dist/NodeGapMarkers.svelte.d.ts +6 -11
  25. package/dist/NodeGapMarkers.svelte.d.ts.map +1 -1
  26. package/dist/NodeSelectionMarkers.svelte +20 -6
  27. package/dist/NodeSelectionMarkers.svelte.d.ts +2 -5
  28. package/dist/NodeSelectionMarkers.svelte.d.ts.map +1 -1
  29. package/dist/Session.svelte.d.ts +81 -129
  30. package/dist/Session.svelte.d.ts.map +1 -1
  31. package/dist/Session.svelte.js +542 -648
  32. package/dist/Svedit.svelte +144 -138
  33. package/dist/Svedit.svelte.d.ts +30 -10
  34. package/dist/Svedit.svelte.d.ts.map +1 -1
  35. package/dist/TextProperty.svelte +32 -18
  36. package/dist/TextProperty.svelte.d.ts +3 -5
  37. package/dist/TextProperty.svelte.d.ts.map +1 -1
  38. package/dist/Transaction.svelte.d.ts +64 -127
  39. package/dist/Transaction.svelte.d.ts.map +1 -1
  40. package/dist/Transaction.svelte.js +839 -1001
  41. package/dist/UnknownNode.svelte +4 -3
  42. package/dist/UnknownNode.svelte.d.ts +5 -9
  43. package/dist/UnknownNode.svelte.d.ts.map +1 -1
  44. package/dist/doc_utils.d.ts +67 -155
  45. package/dist/doc_utils.d.ts.map +1 -1
  46. package/dist/doc_utils.js +619 -863
  47. package/dist/index.d.ts +20 -17
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +1 -17
  50. package/dist/node_visibility.svelte.d.ts +110 -9
  51. package/dist/node_visibility.svelte.d.ts.map +1 -1
  52. package/dist/node_visibility.svelte.js +473 -544
  53. package/dist/paste_utils.d.ts +11 -44
  54. package/dist/paste_utils.d.ts.map +1 -1
  55. package/dist/paste_utils.js +111 -152
  56. package/dist/transforms.svelte.d.ts +9 -7
  57. package/dist/transforms.svelte.d.ts.map +1 -1
  58. package/dist/transforms.svelte.js +125 -150
  59. package/dist/types.d.ts +277 -309
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +1 -0
  62. package/dist/utils.d.ts +40 -119
  63. package/dist/utils.d.ts.map +1 -1
  64. package/dist/utils.js +346 -473
  65. package/package.json +69 -70
  66. package/src/lib/{Command.svelte.js → Command.svelte.ts} +29 -17
  67. package/src/lib/CustomProperty.svelte +3 -5
  68. package/src/lib/{KeyMapper.svelte.js → KeyMapper.svelte.ts} +28 -11
  69. package/src/lib/Node.svelte +16 -13
  70. package/src/lib/NodeArrayProperty.svelte +39 -22
  71. package/src/lib/NodeCaret.svelte +1 -1
  72. package/src/lib/NodeGap.svelte +12 -6
  73. package/src/lib/NodeGapMarkers.svelte +19 -10
  74. package/src/lib/NodeSelectionMarkers.svelte +20 -6
  75. package/src/lib/{Session.svelte.js → Session.svelte.ts} +130 -127
  76. package/src/lib/Svedit.svelte +144 -138
  77. package/src/lib/TextProperty.svelte +32 -18
  78. package/src/lib/{Transaction.svelte.js → Transaction.svelte.ts} +139 -143
  79. package/src/lib/UnknownNode.svelte +4 -3
  80. package/src/lib/{doc_utils.js → doc_utils.ts} +247 -206
  81. package/src/lib/{index.js → index.ts} +47 -0
  82. package/src/lib/{node_visibility.svelte.js → node_visibility.svelte.ts} +68 -92
  83. package/src/lib/{paste_utils.js → paste_utils.ts} +47 -58
  84. package/src/lib/{transforms.svelte.js → transforms.svelte.ts} +39 -21
  85. package/src/lib/{types.d.ts → types.ts} +143 -66
  86. package/src/lib/{utils.js → utils.ts} +110 -129
@@ -1,4 +1,4 @@
1
- <script>
1
+ <script lang="ts">
2
2
  import { getContext } from 'svelte';
3
3
  import {
4
4
  char_slice,
@@ -9,12 +9,24 @@
9
9
  calculate_fragment_ranges
10
10
  } from './utils.js';
11
11
 
12
- /** @import { TextPropertyProps, Mark, Fragment, SelectionRange } from './types.d.ts'; */
13
-
14
- const svedit = getContext('svedit');
15
-
16
- /** @type {TextPropertyProps} */
17
- let { path, class: css_class, placeholder = '', tag = 'div', style = '', ...rest } = $props();
12
+ import type {
13
+ TextPropertyProps,
14
+ Mark,
15
+ Fragment,
16
+ SelectionRange,
17
+ SveditContext
18
+ } from './types.js';
19
+
20
+ const svedit = getContext<SveditContext>('svedit');
21
+
22
+ let {
23
+ path,
24
+ class: css_class,
25
+ placeholder = '',
26
+ tag = 'div',
27
+ style = '',
28
+ ...rest
29
+ }: TextPropertyProps = $props();
18
30
 
19
31
  let path_str = $derived(serialize_path(path));
20
32
 
@@ -30,9 +42,12 @@
30
42
  // re-runs for every text property on every document change).
31
43
  let is_empty = $derived(plain_text.length === 0 && !(svedit.is_composing && is_focused));
32
44
 
33
- let is_collapsed = $derived(
34
- is_focused && svedit.session.selection?.anchor_offset == svedit.session.selection?.focus_offset
35
- );
45
+ let is_collapsed = $derived.by(() => {
46
+ const selection = svedit.session.selection;
47
+ return (
48
+ is_focused && selection?.type === 'text' && selection.anchor_offset === selection.focus_offset
49
+ );
50
+ });
36
51
 
37
52
  // Get selection highlight range if it does not touch marks.
38
53
  // Only render selection highlight when canvas is NOT focused.
@@ -60,12 +75,12 @@
60
75
  /**
61
76
  * Converts text with marks into renderable fragments for display.
62
77
  * Annotations never fragment the text; they are data-only.
63
- * @param {string} text - The plain text content
64
- * @param {Array<Mark>} marks - Marks to render in-place
65
- * @param {SelectionRange} [selection_highlight_range] - Optional selection highlight range
66
- * @returns {Array<Fragment>} Array of fragments
67
78
  */
68
- function get_fragments(text, marks, selection_highlight_range) {
79
+ function get_fragments(
80
+ text: string,
81
+ marks: Array<Mark>,
82
+ selection_highlight_range?: SelectionRange | null
83
+ ): Array<Fragment> {
69
84
  // Fast path: no marks and no selection highlight means the whole text
70
85
  // is a single content fragment. This runs for EVERY text property on
71
86
  // EVERY document change, so skipping the two full Intl.Segmenter passes
@@ -79,8 +94,7 @@
79
94
  marks,
80
95
  selection_highlight_range
81
96
  );
82
- /** @type {Array<Fragment>} */
83
- let fragments = [];
97
+ const fragments: Array<Fragment> = [];
84
98
 
85
99
  for (const range of ranges) {
86
100
  const content = char_slice(text, range.start_offset, range.end_offset);
@@ -93,7 +107,7 @@
93
107
  type: 'mark',
94
108
  node,
95
109
  content,
96
- mark_index: range.mark_index
110
+ mark_index: range.mark_index!
97
111
  });
98
112
  } else if (range.type === 'selection_highlight') {
99
113
  fragments.push({