svedit 0.12.0 → 0.14.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 +35 -22
- 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 +2 -2
- 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 +36 -14
- package/dist/NodeGapMarkers.svelte.d.ts +6 -11
- package/dist/NodeGapMarkers.svelte.d.ts.map +1 -1
- package/dist/NodeSelectionMarkers.svelte +21 -7
- 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 +146 -140
- package/dist/Svedit.svelte.d.ts +30 -10
- package/dist/Svedit.svelte.d.ts.map +1 -1
- package/dist/TextProperty.svelte +37 -23
- 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/styles/svedit-colors.css +8 -5
- 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 +294 -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 +70 -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 +2 -2
- package/src/lib/NodeGap.svelte +12 -6
- package/src/lib/NodeGapMarkers.svelte +36 -14
- package/src/lib/NodeSelectionMarkers.svelte +21 -7
- package/src/lib/{Session.svelte.js → Session.svelte.ts} +130 -127
- package/src/lib/Svedit.svelte +146 -140
- package/src/lib/TextProperty.svelte +37 -23
- 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} +48 -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/styles/svedit-colors.css +8 -5
- package/src/lib/{transforms.svelte.js → transforms.svelte.ts} +39 -21
- package/src/lib/{types.d.ts → types.ts} +161 -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({
|
|
@@ -172,9 +186,9 @@
|
|
|
172
186
|
display: inline-block;
|
|
173
187
|
/* we use box-shadow to draw the caret shape, matching the native caret */
|
|
174
188
|
box-shadow:
|
|
175
|
-
0 -0.4cap 0 0.65px var(--
|
|
176
|
-
0 0 0 0.65px var(--
|
|
177
|
-
0 0.4cap 0 0.65px var(--
|
|
189
|
+
0 -0.4cap 0 0.65px var(--editing, AccentColor),
|
|
190
|
+
0 0 0 0.65px var(--editing, AccentColor),
|
|
191
|
+
0 0.4cap 0 0.65px var(--editing, AccentColor);
|
|
178
192
|
animation: var(
|
|
179
193
|
--node-caret-animation,
|
|
180
194
|
node-caret-blink var(--node-caret-blink-duration, 1.1s) ease-in-out infinite
|
|
@@ -193,12 +207,12 @@
|
|
|
193
207
|
|
|
194
208
|
/* Dim the selection highlight when canvas loses native focus */
|
|
195
209
|
:global(.svedit-canvas:not(:focus-within)) .selection-highlight {
|
|
196
|
-
background: oklch(from var(--
|
|
210
|
+
background: oklch(from var(--editing-muted) l 0 h / alpha);
|
|
197
211
|
}
|
|
198
212
|
|
|
199
213
|
/* Make a collapsed caret visible */
|
|
200
214
|
:global(.svedit-canvas:not(:focus-within)) .selection-highlight:empty {
|
|
201
215
|
background: none;
|
|
202
|
-
outline: 0.5px solid oklch(from var(--
|
|
216
|
+
outline: 0.5px solid oklch(from var(--editing) l 0 h / alpha);
|
|
203
217
|
}
|
|
204
218
|
</style>
|