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.
Files changed (88) hide show
  1. package/README.md +35 -22
  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 +2 -2
  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 +36 -14
  24. package/dist/NodeGapMarkers.svelte.d.ts +6 -11
  25. package/dist/NodeGapMarkers.svelte.d.ts.map +1 -1
  26. package/dist/NodeSelectionMarkers.svelte +21 -7
  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 +146 -140
  33. package/dist/Svedit.svelte.d.ts +30 -10
  34. package/dist/Svedit.svelte.d.ts.map +1 -1
  35. package/dist/TextProperty.svelte +37 -23
  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/styles/svedit-colors.css +8 -5
  57. package/dist/transforms.svelte.d.ts +9 -7
  58. package/dist/transforms.svelte.d.ts.map +1 -1
  59. package/dist/transforms.svelte.js +125 -150
  60. package/dist/types.d.ts +294 -309
  61. package/dist/types.d.ts.map +1 -0
  62. package/dist/types.js +1 -0
  63. package/dist/utils.d.ts +40 -119
  64. package/dist/utils.d.ts.map +1 -1
  65. package/dist/utils.js +346 -473
  66. package/package.json +70 -70
  67. package/src/lib/{Command.svelte.js → Command.svelte.ts} +29 -17
  68. package/src/lib/CustomProperty.svelte +3 -5
  69. package/src/lib/{KeyMapper.svelte.js → KeyMapper.svelte.ts} +28 -11
  70. package/src/lib/Node.svelte +16 -13
  71. package/src/lib/NodeArrayProperty.svelte +39 -22
  72. package/src/lib/NodeCaret.svelte +2 -2
  73. package/src/lib/NodeGap.svelte +12 -6
  74. package/src/lib/NodeGapMarkers.svelte +36 -14
  75. package/src/lib/NodeSelectionMarkers.svelte +21 -7
  76. package/src/lib/{Session.svelte.js → Session.svelte.ts} +130 -127
  77. package/src/lib/Svedit.svelte +146 -140
  78. package/src/lib/TextProperty.svelte +37 -23
  79. package/src/lib/{Transaction.svelte.js → Transaction.svelte.ts} +139 -143
  80. package/src/lib/UnknownNode.svelte +4 -3
  81. package/src/lib/{doc_utils.js → doc_utils.ts} +247 -206
  82. package/src/lib/{index.js → index.ts} +48 -0
  83. package/src/lib/{node_visibility.svelte.js → node_visibility.svelte.ts} +68 -92
  84. package/src/lib/{paste_utils.js → paste_utils.ts} +47 -58
  85. package/src/lib/styles/svedit-colors.css +8 -5
  86. package/src/lib/{transforms.svelte.js → transforms.svelte.ts} +39 -21
  87. package/src/lib/{types.d.ts → types.ts} +161 -66
  88. 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({
@@ -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(--svedit-caret-color, AccentColor),
176
- 0 0 0 0.65px var(--svedit-caret-color, AccentColor),
177
- 0 0.4cap 0 0.65px var(--svedit-caret-color, AccentColor);
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(--svedit-editing-fill) l 0 h / alpha);
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(--svedit-editing-stroke) l 0 h / alpha);
216
+ outline: 0.5px solid oklch(from var(--editing) l 0 h / alpha);
203
217
  }
204
218
  </style>