@rtif-sdk/web 1.0.0 → 1.3.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 (70) hide show
  1. package/dist/block-drag-handler.d.ts +5 -0
  2. package/dist/block-drag-handler.d.ts.map +1 -1
  3. package/dist/block-drag-handler.js +32 -3
  4. package/dist/block-drag-handler.js.map +1 -1
  5. package/dist/block-renderer.d.ts +12 -6
  6. package/dist/block-renderer.d.ts.map +1 -1
  7. package/dist/block-renderer.js +98 -9
  8. package/dist/block-renderer.js.map +1 -1
  9. package/dist/block-type-dropdown.d.ts +78 -0
  10. package/dist/block-type-dropdown.d.ts.map +1 -0
  11. package/dist/block-type-dropdown.js +276 -0
  12. package/dist/block-type-dropdown.js.map +1 -0
  13. package/dist/color-picker.d.ts +91 -0
  14. package/dist/color-picker.d.ts.map +1 -0
  15. package/dist/color-picker.js +346 -0
  16. package/dist/color-picker.js.map +1 -0
  17. package/dist/content-handlers.d.ts +7 -8
  18. package/dist/content-handlers.d.ts.map +1 -1
  19. package/dist/content-handlers.js +122 -93
  20. package/dist/content-handlers.js.map +1 -1
  21. package/dist/editor.d.ts.map +1 -1
  22. package/dist/editor.js +224 -15
  23. package/dist/editor.js.map +1 -1
  24. package/dist/embed-utils.d.ts +148 -0
  25. package/dist/embed-utils.d.ts.map +1 -0
  26. package/dist/embed-utils.js +197 -0
  27. package/dist/embed-utils.js.map +1 -0
  28. package/dist/font-family-picker.d.ts +105 -0
  29. package/dist/font-family-picker.d.ts.map +1 -0
  30. package/dist/font-family-picker.js +314 -0
  31. package/dist/font-family-picker.js.map +1 -0
  32. package/dist/font-size-picker.d.ts +82 -0
  33. package/dist/font-size-picker.d.ts.map +1 -0
  34. package/dist/font-size-picker.js +290 -0
  35. package/dist/font-size-picker.js.map +1 -0
  36. package/dist/index.d.ts +18 -4
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +30 -2
  39. package/dist/index.js.map +1 -1
  40. package/dist/plugins/index.d.ts +2 -1
  41. package/dist/plugins/index.d.ts.map +1 -1
  42. package/dist/plugins/index.js +1 -1
  43. package/dist/plugins/index.js.map +1 -1
  44. package/dist/plugins/link-plugin.d.ts +4 -0
  45. package/dist/plugins/link-plugin.d.ts.map +1 -1
  46. package/dist/plugins/link-plugin.js +17 -0
  47. package/dist/plugins/link-plugin.js.map +1 -1
  48. package/dist/plugins/mark-utils.d.ts +31 -0
  49. package/dist/plugins/mark-utils.d.ts.map +1 -1
  50. package/dist/plugins/mark-utils.js +46 -0
  51. package/dist/plugins/mark-utils.js.map +1 -1
  52. package/dist/renderer.d.ts +31 -2
  53. package/dist/renderer.d.ts.map +1 -1
  54. package/dist/renderer.js +131 -55
  55. package/dist/renderer.js.map +1 -1
  56. package/dist/selection-sync.d.ts +2 -26
  57. package/dist/selection-sync.d.ts.map +1 -1
  58. package/dist/selection-sync.js +49 -13
  59. package/dist/selection-sync.js.map +1 -1
  60. package/dist/spatial-index.d.ts +203 -0
  61. package/dist/spatial-index.d.ts.map +1 -0
  62. package/dist/spatial-index.js +211 -0
  63. package/dist/spatial-index.js.map +1 -0
  64. package/dist/types.d.ts +93 -0
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/virtual-viewport.d.ts +241 -0
  67. package/dist/virtual-viewport.d.ts.map +1 -0
  68. package/dist/virtual-viewport.js +584 -0
  69. package/dist/virtual-viewport.js.map +1 -0
  70. package/package.json +17 -5
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Color picker — a swatch grid dropdown for applying text colors.
3
+ *
4
+ * Shows the current text color in the trigger button and lets the user
5
+ * pick from preset swatches or enter a custom hex color. Uses the same
6
+ * `mousedown + preventDefault()` pattern as the toolbar to avoid stealing
7
+ * editor focus.
8
+ *
9
+ * @module
10
+ */
11
+ import { getMarkValueAtSelection } from './plugins/mark-utils.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Module-scoped counter for unique IDs
14
+ // ---------------------------------------------------------------------------
15
+ let instanceCounter = 0;
16
+ // ---------------------------------------------------------------------------
17
+ // Preset swatches
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Default color swatches displayed in the color picker grid.
21
+ *
22
+ * Row 1: dark/saturated colors.
23
+ * Row 2: light/pastel colors.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const picker = createColorPicker({
28
+ * container, bus, engine,
29
+ * swatches: DEFAULT_COLOR_SWATCHES.slice(0, 10), // first row only
30
+ * });
31
+ * ```
32
+ */
33
+ export const DEFAULT_COLOR_SWATCHES = [
34
+ // Row 1: dark/saturated
35
+ '#000000', '#434343', '#666666', '#E03131', '#E8590C',
36
+ '#FCC419', '#2F9E44', '#1971C2', '#7048E8', '#C2255C',
37
+ // Row 2: light/pastel
38
+ '#FFFFFF', '#CED4DA', '#868E96', '#FFC9C9', '#FFD8A8',
39
+ '#FFF3BF', '#B2F2BB', '#A5D8FF', '#D0BFFF', '#FAA2C1',
40
+ ];
41
+ // ---------------------------------------------------------------------------
42
+ // Factory
43
+ // ---------------------------------------------------------------------------
44
+ /**
45
+ * Create a color picker dropdown backed by a {@link CommandBus}.
46
+ *
47
+ * The picker reflects the current text color by querying the engine's
48
+ * mark state. It subscribes to the bus for live updates.
49
+ *
50
+ * @param config - Picker configuration
51
+ * @returns A handle for lifecycle management
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * const picker = createColorPicker({
56
+ * container: toolbar,
57
+ * bus: editor.commandBus,
58
+ * engine,
59
+ * });
60
+ * ```
61
+ */
62
+ export function createColorPicker(config) {
63
+ const { container, bus, engine, swatches = DEFAULT_COLOR_SWATCHES, columns = 10, showCustom = true, } = config;
64
+ const doc = container.ownerDocument;
65
+ const id = ++instanceCounter;
66
+ const menuId = `rtif-color-picker-menu-${id}`;
67
+ let isOpen = false;
68
+ let highlightIndex = -1;
69
+ let destroyed = false;
70
+ // Total selectable items: "Automatic" + swatches + (optional custom)
71
+ const totalItems = 1 + swatches.length;
72
+ // -----------------------------------------------------------------------
73
+ // DOM creation
74
+ // -----------------------------------------------------------------------
75
+ const wrapper = doc.createElement('div');
76
+ wrapper.className = 'rtif-color-picker';
77
+ // Trigger button
78
+ const trigger = doc.createElement('button');
79
+ trigger.type = 'button';
80
+ trigger.className = 'rtif-color-picker-trigger';
81
+ trigger.setAttribute('role', 'combobox');
82
+ trigger.setAttribute('aria-haspopup', 'listbox');
83
+ trigger.setAttribute('aria-expanded', 'false');
84
+ trigger.setAttribute('aria-controls', menuId);
85
+ trigger.setAttribute('aria-label', 'Text color');
86
+ const letterSpan = doc.createElement('span');
87
+ letterSpan.className = 'rtif-color-picker-letter';
88
+ letterSpan.textContent = 'A';
89
+ const colorBar = doc.createElement('span');
90
+ colorBar.className = 'rtif-color-picker-bar';
91
+ colorBar.style.backgroundColor = '#000000';
92
+ const chevron = doc.createElement('span');
93
+ chevron.className = 'rtif-color-picker-chevron';
94
+ chevron.textContent = '\u25BE'; // ▾
95
+ trigger.appendChild(letterSpan);
96
+ trigger.appendChild(colorBar);
97
+ trigger.appendChild(chevron);
98
+ // Menu
99
+ const menu = doc.createElement('div');
100
+ menu.id = menuId;
101
+ menu.className = 'rtif-color-picker-menu';
102
+ menu.setAttribute('role', 'listbox');
103
+ menu.setAttribute('aria-label', 'Color options');
104
+ menu.hidden = true;
105
+ // "Automatic" option (removes color)
106
+ const autoOption = doc.createElement('div');
107
+ autoOption.className = 'rtif-color-picker-option rtif-color-picker-auto';
108
+ autoOption.id = `rtif-color-picker-opt-${id}-auto`;
109
+ autoOption.setAttribute('role', 'option');
110
+ autoOption.setAttribute('aria-selected', 'false');
111
+ autoOption.textContent = 'Automatic';
112
+ autoOption.addEventListener('mousedown', (e) => {
113
+ e.preventDefault();
114
+ selectAutomatic();
115
+ });
116
+ menu.appendChild(autoOption);
117
+ // Separator
118
+ const sep1 = doc.createElement('div');
119
+ sep1.className = 'rtif-color-picker-separator';
120
+ sep1.setAttribute('role', 'separator');
121
+ menu.appendChild(sep1);
122
+ // Swatch grid
123
+ const grid = doc.createElement('div');
124
+ grid.className = 'rtif-color-picker-grid';
125
+ grid.style.setProperty('--rtif-color-picker-columns', String(columns));
126
+ const swatchEls = [];
127
+ for (let i = 0; i < swatches.length; i++) {
128
+ const color = swatches[i];
129
+ const swatch = doc.createElement('div');
130
+ swatch.className = 'rtif-color-picker-swatch';
131
+ swatch.id = `rtif-color-picker-opt-${id}-${i}`;
132
+ swatch.setAttribute('role', 'option');
133
+ swatch.setAttribute('aria-selected', 'false');
134
+ swatch.setAttribute('aria-label', color);
135
+ swatch.setAttribute('data-color', color);
136
+ swatch.style.backgroundColor = color;
137
+ // Add border for white/light swatches
138
+ if (color.toUpperCase() === '#FFFFFF') {
139
+ swatch.classList.add('rtif-color-picker-swatch-light');
140
+ }
141
+ swatch.addEventListener('mousedown', (e) => {
142
+ e.preventDefault();
143
+ selectColor(color);
144
+ });
145
+ grid.appendChild(swatch);
146
+ swatchEls.push(swatch);
147
+ }
148
+ menu.appendChild(grid);
149
+ // Custom color input
150
+ let customInput = null;
151
+ if (showCustom) {
152
+ const sep2 = doc.createElement('div');
153
+ sep2.className = 'rtif-color-picker-separator';
154
+ sep2.setAttribute('role', 'separator');
155
+ menu.appendChild(sep2);
156
+ const customRow = doc.createElement('div');
157
+ customRow.className = 'rtif-color-picker-custom';
158
+ const customLabel = doc.createElement('span');
159
+ customLabel.className = 'rtif-color-picker-custom-label';
160
+ customLabel.textContent = 'Custom...';
161
+ customInput = doc.createElement('input');
162
+ customInput.type = 'color';
163
+ customInput.className = 'rtif-color-picker-custom-input';
164
+ customInput.value = '#000000';
165
+ customInput.setAttribute('aria-label', 'Custom color');
166
+ customInput.addEventListener('input', (e) => {
167
+ const target = e.target;
168
+ selectColor(target.value);
169
+ });
170
+ // Prevent focus steal
171
+ customInput.addEventListener('mousedown', (e) => {
172
+ e.stopPropagation();
173
+ });
174
+ customRow.appendChild(customLabel);
175
+ customRow.appendChild(customInput);
176
+ menu.appendChild(customRow);
177
+ }
178
+ wrapper.appendChild(trigger);
179
+ wrapper.appendChild(menu);
180
+ container.appendChild(wrapper);
181
+ // -----------------------------------------------------------------------
182
+ // Active state detection
183
+ // -----------------------------------------------------------------------
184
+ function getCurrentColor() {
185
+ const { value, isMixed } = getMarkValueAtSelection(engine, 'color');
186
+ return { color: value, isMixed };
187
+ }
188
+ function updateDisplay() {
189
+ const { color, isMixed } = getCurrentColor();
190
+ if (isMixed) {
191
+ colorBar.style.backgroundColor = '#000000';
192
+ }
193
+ else {
194
+ colorBar.style.backgroundColor = color ?? '#000000';
195
+ }
196
+ // Update swatch selection
197
+ const normalizedColor = color?.toUpperCase();
198
+ autoOption.setAttribute('aria-selected', !color && !isMixed ? 'true' : 'false');
199
+ for (const swatch of swatchEls) {
200
+ const swatchColor = swatch.getAttribute('data-color')?.toUpperCase();
201
+ swatch.setAttribute('aria-selected', !isMixed && swatchColor === normalizedColor ? 'true' : 'false');
202
+ }
203
+ if (customInput && color) {
204
+ customInput.value = color;
205
+ }
206
+ }
207
+ // -----------------------------------------------------------------------
208
+ // Open / close
209
+ // -----------------------------------------------------------------------
210
+ function openMenu() {
211
+ if (isOpen)
212
+ return;
213
+ isOpen = true;
214
+ highlightIndex = -1;
215
+ menu.hidden = false;
216
+ trigger.setAttribute('aria-expanded', 'true');
217
+ trigger.removeAttribute('aria-activedescendant');
218
+ doc.addEventListener('mousedown', onDocumentMouseDown);
219
+ }
220
+ function closeMenu() {
221
+ if (!isOpen)
222
+ return;
223
+ isOpen = false;
224
+ highlightIndex = -1;
225
+ menu.hidden = true;
226
+ trigger.setAttribute('aria-expanded', 'false');
227
+ trigger.removeAttribute('aria-activedescendant');
228
+ // Clear highlight
229
+ autoOption.classList.remove('rtif-color-picker-option-highlighted');
230
+ for (const el of swatchEls) {
231
+ el.classList.remove('rtif-color-picker-option-highlighted');
232
+ }
233
+ doc.removeEventListener('mousedown', onDocumentMouseDown);
234
+ }
235
+ // -----------------------------------------------------------------------
236
+ // Selection
237
+ // -----------------------------------------------------------------------
238
+ function selectAutomatic() {
239
+ bus.execute('removeTextColor');
240
+ closeMenu();
241
+ }
242
+ function selectColor(color) {
243
+ bus.execute('setTextColor', { color });
244
+ closeMenu();
245
+ }
246
+ // -----------------------------------------------------------------------
247
+ // Keyboard navigation
248
+ // -----------------------------------------------------------------------
249
+ function getOptionId(index) {
250
+ if (index === 0)
251
+ return autoOption.id;
252
+ return swatchEls[index - 1]?.id ?? '';
253
+ }
254
+ function onKeyDown(e) {
255
+ if (!isOpen)
256
+ return;
257
+ switch (e.key) {
258
+ case 'ArrowDown': {
259
+ e.preventDefault();
260
+ highlightIndex = (highlightIndex + 1) % totalItems;
261
+ updateHighlight();
262
+ break;
263
+ }
264
+ case 'ArrowUp': {
265
+ e.preventDefault();
266
+ highlightIndex = highlightIndex <= 0
267
+ ? totalItems - 1
268
+ : highlightIndex - 1;
269
+ updateHighlight();
270
+ break;
271
+ }
272
+ case 'Enter': {
273
+ e.preventDefault();
274
+ if (highlightIndex === 0) {
275
+ selectAutomatic();
276
+ }
277
+ else if (highlightIndex > 0 && highlightIndex <= swatches.length) {
278
+ selectColor(swatches[highlightIndex - 1]);
279
+ }
280
+ break;
281
+ }
282
+ case 'Escape': {
283
+ e.preventDefault();
284
+ closeMenu();
285
+ break;
286
+ }
287
+ }
288
+ }
289
+ function updateHighlight() {
290
+ autoOption.classList.toggle('rtif-color-picker-option-highlighted', highlightIndex === 0);
291
+ for (let i = 0; i < swatchEls.length; i++) {
292
+ swatchEls[i].classList.toggle('rtif-color-picker-option-highlighted', highlightIndex === i + 1);
293
+ }
294
+ if (highlightIndex >= 0 && highlightIndex < totalItems) {
295
+ trigger.setAttribute('aria-activedescendant', getOptionId(highlightIndex));
296
+ }
297
+ else {
298
+ trigger.removeAttribute('aria-activedescendant');
299
+ }
300
+ }
301
+ // -----------------------------------------------------------------------
302
+ // Event handlers
303
+ // -----------------------------------------------------------------------
304
+ function onTriggerMouseDown(e) {
305
+ e.preventDefault();
306
+ }
307
+ function onTriggerClick() {
308
+ if (isOpen) {
309
+ closeMenu();
310
+ }
311
+ else {
312
+ openMenu();
313
+ }
314
+ }
315
+ function onDocumentMouseDown(e) {
316
+ if (!wrapper.contains(e.target)) {
317
+ closeMenu();
318
+ }
319
+ }
320
+ trigger.addEventListener('mousedown', onTriggerMouseDown);
321
+ trigger.addEventListener('click', onTriggerClick);
322
+ trigger.addEventListener('keydown', onKeyDown);
323
+ // -----------------------------------------------------------------------
324
+ // Bus subscription
325
+ // -----------------------------------------------------------------------
326
+ updateDisplay();
327
+ const unsubscribe = bus.subscribe(() => updateDisplay());
328
+ // -----------------------------------------------------------------------
329
+ // Handle
330
+ // -----------------------------------------------------------------------
331
+ return {
332
+ element: wrapper,
333
+ destroy() {
334
+ if (destroyed)
335
+ return;
336
+ destroyed = true;
337
+ unsubscribe();
338
+ closeMenu();
339
+ trigger.removeEventListener('mousedown', onTriggerMouseDown);
340
+ trigger.removeEventListener('click', onTriggerClick);
341
+ trigger.removeEventListener('keydown', onKeyDown);
342
+ wrapper.remove();
343
+ },
344
+ };
345
+ }
346
+ //# sourceMappingURL=color-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-picker.js","sourceRoot":"","sources":["../src/color-picker.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Provides handlers for:
5
5
  * - Plain text (`text/plain`) — splits on newlines, creates blocks
6
6
  * - RTIF JSON (`application/x-rtif+json`) — preserves marks and block attrs
7
- * - HTML (`text/html`) — stub, falls through to plain text handler
7
+ * - HTML (`text/html`) — deserializes via @rtif-sdk/format-html
8
8
  *
9
9
  * @module
10
10
  */
@@ -37,25 +37,24 @@ export declare function createPlainTextHandler(generateBlockId: () => string): C
37
37
  *
38
38
  * Priority: -80 (highest built-in, runs before HTML and plain text).
39
39
  *
40
- * @param generateBlockId - Factory for generating unique block IDs
41
40
  * @returns A ContentHandler for RTIF JSON paste
42
41
  *
43
42
  * @example
44
43
  * ```ts
45
- * const handler = createRtifPasteHandler(() => crypto.randomUUID());
44
+ * const handler = createRtifPasteHandler();
46
45
  * pipeline.register(handler);
47
46
  * ```
48
47
  */
49
- export declare function createRtifPasteHandler(generateBlockId: () => string): ContentHandler;
48
+ export declare function createRtifPasteHandler(): ContentHandler;
50
49
  /**
51
- * Create a stub content handler for HTML paste.
50
+ * Create a content handler for HTML paste.
52
51
  *
53
- * Currently always returns `false` (falls through to the plain text handler).
54
- * Will be implemented when the `@rtif-sdk/format-html` plugin is available.
52
+ * Accepts `text/html` content and deserializes it via `@rtif-sdk/format-html`,
53
+ * preserving formatting (bold, italic, links, headings, lists, code blocks, etc.).
55
54
  *
56
55
  * Priority: -90 (between RTIF JSON and plain text).
57
56
  *
58
- * @returns A ContentHandler stub for HTML paste
57
+ * @returns A ContentHandler for HTML paste
59
58
  *
60
59
  * @example
61
60
  * ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"content-handlers.d.ts","sourceRoot":"","sources":["../src/content-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,uBAAuB,CAAC;AAM/B;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,MAAM,GAC5B,cAAc,CA+ChB;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,MAAM,GAC5B,cAAc,CAyHhB;AAqDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CAevD"}
1
+ {"version":3,"file":"content-handlers.d.ts","sourceRoot":"","sources":["../src/content-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,uBAAuB,CAAC;AAM/B;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,MAAM,GAC5B,cAAc,CA+ChB;AA0ID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CAsBvD;AAqDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CA6BvD"}