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.
- package/README.md +33 -21
- package/dist/Command.svelte.d.ts +38 -30
- package/dist/Command.svelte.d.ts.map +1 -1
- package/dist/Command.svelte.js +271 -326
- package/dist/CustomProperty.svelte +3 -5
- package/dist/CustomProperty.svelte.d.ts +3 -6
- package/dist/CustomProperty.svelte.d.ts.map +1 -1
- package/dist/KeyMapper.svelte.d.ts +19 -6
- package/dist/KeyMapper.svelte.d.ts.map +1 -1
- package/dist/KeyMapper.svelte.js +95 -112
- package/dist/Node.svelte +16 -13
- package/dist/Node.svelte.d.ts +3 -5
- package/dist/Node.svelte.d.ts.map +1 -1
- package/dist/NodeArrayProperty.svelte +39 -22
- package/dist/NodeArrayProperty.svelte.d.ts +3 -5
- package/dist/NodeArrayProperty.svelte.d.ts.map +1 -1
- package/dist/NodeCaret.svelte +1 -1
- package/dist/NodeCaret.svelte.d.ts +6 -14
- package/dist/NodeCaret.svelte.d.ts.map +1 -1
- package/dist/NodeGap.svelte +12 -6
- package/dist/NodeGap.svelte.d.ts +7 -14
- package/dist/NodeGap.svelte.d.ts.map +1 -1
- package/dist/NodeGapMarkers.svelte +19 -10
- package/dist/NodeGapMarkers.svelte.d.ts +6 -11
- package/dist/NodeGapMarkers.svelte.d.ts.map +1 -1
- package/dist/NodeSelectionMarkers.svelte +20 -6
- package/dist/NodeSelectionMarkers.svelte.d.ts +2 -5
- package/dist/NodeSelectionMarkers.svelte.d.ts.map +1 -1
- package/dist/Session.svelte.d.ts +81 -129
- package/dist/Session.svelte.d.ts.map +1 -1
- package/dist/Session.svelte.js +542 -648
- package/dist/Svedit.svelte +144 -138
- package/dist/Svedit.svelte.d.ts +30 -10
- package/dist/Svedit.svelte.d.ts.map +1 -1
- package/dist/TextProperty.svelte +32 -18
- package/dist/TextProperty.svelte.d.ts +3 -5
- package/dist/TextProperty.svelte.d.ts.map +1 -1
- package/dist/Transaction.svelte.d.ts +64 -127
- package/dist/Transaction.svelte.d.ts.map +1 -1
- package/dist/Transaction.svelte.js +839 -1001
- package/dist/UnknownNode.svelte +4 -3
- package/dist/UnknownNode.svelte.d.ts +5 -9
- package/dist/UnknownNode.svelte.d.ts.map +1 -1
- package/dist/doc_utils.d.ts +67 -155
- package/dist/doc_utils.d.ts.map +1 -1
- package/dist/doc_utils.js +619 -863
- package/dist/index.d.ts +20 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -17
- package/dist/node_visibility.svelte.d.ts +110 -9
- package/dist/node_visibility.svelte.d.ts.map +1 -1
- package/dist/node_visibility.svelte.js +473 -544
- package/dist/paste_utils.d.ts +11 -44
- package/dist/paste_utils.d.ts.map +1 -1
- package/dist/paste_utils.js +111 -152
- package/dist/transforms.svelte.d.ts +9 -7
- package/dist/transforms.svelte.d.ts.map +1 -1
- package/dist/transforms.svelte.js +125 -150
- package/dist/types.d.ts +277 -309
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +40 -119
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +346 -473
- package/package.json +69 -70
- package/src/lib/{Command.svelte.js → Command.svelte.ts} +29 -17
- package/src/lib/CustomProperty.svelte +3 -5
- package/src/lib/{KeyMapper.svelte.js → KeyMapper.svelte.ts} +28 -11
- package/src/lib/Node.svelte +16 -13
- package/src/lib/NodeArrayProperty.svelte +39 -22
- package/src/lib/NodeCaret.svelte +1 -1
- package/src/lib/NodeGap.svelte +12 -6
- package/src/lib/NodeGapMarkers.svelte +19 -10
- package/src/lib/NodeSelectionMarkers.svelte +20 -6
- package/src/lib/{Session.svelte.js → Session.svelte.ts} +130 -127
- package/src/lib/Svedit.svelte +144 -138
- package/src/lib/TextProperty.svelte +32 -18
- package/src/lib/{Transaction.svelte.js → Transaction.svelte.ts} +139 -143
- package/src/lib/UnknownNode.svelte +4 -3
- package/src/lib/{doc_utils.js → doc_utils.ts} +247 -206
- package/src/lib/{index.js → index.ts} +47 -0
- package/src/lib/{node_visibility.svelte.js → node_visibility.svelte.ts} +68 -92
- package/src/lib/{paste_utils.js → paste_utils.ts} +47 -58
- package/src/lib/{transforms.svelte.js → transforms.svelte.ts} +39 -21
- package/src/lib/{types.d.ts → types.ts} +143 -66
- 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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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({
|