@mdzip/editor 1.2.1

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 (50) hide show
  1. package/README.md +126 -0
  2. package/dist/archive-utils.d.ts +35 -0
  3. package/dist/archive-utils.d.ts.map +1 -0
  4. package/dist/archive-utils.js +148 -0
  5. package/dist/archive-utils.js.map +1 -0
  6. package/dist/browser.d.ts +7 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js +108 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/diff.d.ts +36 -0
  11. package/dist/diff.d.ts.map +1 -0
  12. package/dist/diff.js +100 -0
  13. package/dist/diff.js.map +1 -0
  14. package/dist/icons/md-markdown.d.ts +3 -0
  15. package/dist/icons/md-markdown.d.ts.map +1 -0
  16. package/dist/icons/md-markdown.js +35 -0
  17. package/dist/icons/md-markdown.js.map +1 -0
  18. package/dist/index.d.ts +11 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +10 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/metadata.d.ts +9 -0
  23. package/dist/metadata.d.ts.map +1 -0
  24. package/dist/metadata.js +21 -0
  25. package/dist/metadata.js.map +1 -0
  26. package/dist/rendering.d.ts +20 -0
  27. package/dist/rendering.d.ts.map +1 -0
  28. package/dist/rendering.js +83 -0
  29. package/dist/rendering.js.map +1 -0
  30. package/dist/theme.d.ts +14 -0
  31. package/dist/theme.d.ts.map +1 -0
  32. package/dist/theme.js +96 -0
  33. package/dist/theme.js.map +1 -0
  34. package/dist/view-css.d.ts +2 -0
  35. package/dist/view-css.d.ts.map +1 -0
  36. package/dist/view-css.js +1281 -0
  37. package/dist/view-css.js.map +1 -0
  38. package/dist/view.d.ts +237 -0
  39. package/dist/view.d.ts.map +1 -0
  40. package/dist/view.js +1857 -0
  41. package/dist/view.js.map +1 -0
  42. package/dist/workspace-view.d.ts +20 -0
  43. package/dist/workspace-view.d.ts.map +1 -0
  44. package/dist/workspace-view.js +200 -0
  45. package/dist/workspace-view.js.map +1 -0
  46. package/dist/workspace.d.ts +131 -0
  47. package/dist/workspace.d.ts.map +1 -0
  48. package/dist/workspace.js +555 -0
  49. package/dist/workspace.js.map +1 -0
  50. package/package.json +40 -0
@@ -0,0 +1,555 @@
1
+ import { MdzArchiveCore, MdzPackagerCore } from 'mdzip-core-js';
2
+ import { buildNewArchiveBytesWithTitle, blobToBytes, openedArchiveFromWorkspace, readBinaryFileFromArchive } from './archive-utils.js';
3
+ import { displayTitleFromManifest, fileBaseNameFromPath, firstMarkdownHeading, suggestedTitleFromMarkdown } from './metadata.js';
4
+ export class MdzipReadOnlyError extends Error {
5
+ constructor(operation) {
6
+ super(`Cannot ${operation}: workspace is read-only.`);
7
+ this.name = 'MdzipReadOnlyError';
8
+ }
9
+ }
10
+ export class MdzipWorkspaceService {
11
+ constructor(bytes, workspace, content, options) {
12
+ this.listeners = new Set();
13
+ this.currentTextValue = '';
14
+ this.currentPathValue = 'index.md';
15
+ this.currentPathTypeValue = 'markdown';
16
+ this.dirtyValue = false;
17
+ // Orphaned paths derived from the current in-memory text; null means use contentValue.
18
+ this.liveOrphanedPaths = null;
19
+ this.archiveBytes = bytes;
20
+ this.workspaceValue = workspace;
21
+ this.contentValue = content;
22
+ this.currentTextValue = content.markdownText;
23
+ this.currentPathValue = content.entryPoint;
24
+ this.sourceFormatValue = options.sourceFormat;
25
+ this.modeValue = options.mode;
26
+ this.fileName = options.fileName;
27
+ }
28
+ static async open(bytes, options = {}) {
29
+ const fileName = options.fileName ?? 'document.mdz';
30
+ const resolvedOptions = {
31
+ mode: options.mode ?? 'editable',
32
+ sourceFormat: options.sourceFormat ?? inferMdzipSourceFormat(bytes, fileName),
33
+ fileName
34
+ };
35
+ if (resolvedOptions.sourceFormat === 'markdown') {
36
+ const markdown = new TextDecoder('utf-8').decode(bytes);
37
+ const title = suggestedTitleFromMarkdown(markdown, fileBaseNameFromPath(resolvedOptions.fileName));
38
+ const archiveBytes = await buildNewArchiveBytesWithTitle(markdown, title);
39
+ const coreWorkspace = await MdzArchiveCore.openWorkspace(archiveBytes, {
40
+ includeOrphanedAssetAnalysis: true
41
+ });
42
+ const workspace = new MdzipWorkspaceService(archiveBytes, coreWorkspace, await openedArchiveFromWorkspace(coreWorkspace), resolvedOptions);
43
+ workspace.currentTextValue = markdown;
44
+ return workspace;
45
+ }
46
+ const coreWorkspace = await MdzArchiveCore.openWorkspace(bytes, {
47
+ includeOrphanedAssetAnalysis: true
48
+ });
49
+ return new MdzipWorkspaceService(bytes, coreWorkspace, await openedArchiveFromWorkspace(coreWorkspace), resolvedOptions);
50
+ }
51
+ static async openWorkspace(workspace, options = {}) {
52
+ const resolvedOptions = {
53
+ mode: options.mode ?? 'editable',
54
+ sourceFormat: options.sourceFormat ?? 'mdz',
55
+ fileName: options.fileName ?? 'document.mdz'
56
+ };
57
+ return new MdzipWorkspaceService(new Uint8Array(), workspace, await openedArchiveFromWorkspace(workspace), resolvedOptions);
58
+ }
59
+ subscribe(listener) {
60
+ this.listeners.add(listener);
61
+ return () => this.listeners.delete(listener);
62
+ }
63
+ snapshot() {
64
+ const fileBaseName = fileBaseNameFromPath(this.fileName);
65
+ const manifestTitle = this.sourceFormatValue === 'mdz'
66
+ ? this.contentValue.manifest?.title
67
+ : undefined;
68
+ const archiveContent = this.liveOrphanedPaths !== null
69
+ ? { ...this.contentValue, orphanedAssetPaths: this.liveOrphanedPaths }
70
+ : this.contentValue;
71
+ const content = this.sourceFormatValue === 'markdown'
72
+ ? {
73
+ ...archiveContent,
74
+ paths: [{
75
+ path: fileNameFromPath(this.fileName),
76
+ isMarkdown: true,
77
+ isImage: false,
78
+ isDirectory: false
79
+ }],
80
+ entryPoint: fileNameFromPath(this.fileName),
81
+ manifest: null,
82
+ images: new Map(),
83
+ orphanedAssetPaths: []
84
+ }
85
+ : archiveContent;
86
+ return {
87
+ mode: this.modeValue,
88
+ sourceFormat: this.sourceFormatValue,
89
+ fileName: this.fileName,
90
+ archiveBytes: this.archiveBytes,
91
+ workspace: this.workspaceValue,
92
+ content,
93
+ currentText: this.currentTextValue,
94
+ currentPath: this.currentPathValue,
95
+ currentPathType: this.currentPathTypeValue,
96
+ dirty: this.dirtyValue,
97
+ displayTitle: displayTitleFromManifest(manifestTitle, fileBaseName),
98
+ headingFallback: firstMarkdownHeading(this.currentTextValue),
99
+ suggestedTitle: suggestedTitleFromMarkdown(this.currentTextValue, fileBaseName),
100
+ validation: this.contentValue.validation,
101
+ validationStatus: MdzArchiveCore.getValidationStatus(this.contentValue.validation)
102
+ };
103
+ }
104
+ hostState() {
105
+ const snapshot = this.snapshot();
106
+ return {
107
+ dirty: snapshot.dirty,
108
+ validation: snapshot.validation,
109
+ validationStatus: snapshot.validationStatus,
110
+ title: this.workspaceValue.title,
111
+ displayTitle: snapshot.displayTitle,
112
+ fileName: snapshot.fileName,
113
+ currentPath: snapshot.currentPath || null,
114
+ sourceFormat: snapshot.sourceFormat,
115
+ mode: this.workspaceValue.mode
116
+ };
117
+ }
118
+ get mode() {
119
+ return this.modeValue;
120
+ }
121
+ get sourceFormat() {
122
+ return this.sourceFormatValue;
123
+ }
124
+ get content() {
125
+ return this.contentValue;
126
+ }
127
+ get workspace() {
128
+ return this.workspaceValue;
129
+ }
130
+ get currentText() {
131
+ return this.currentTextValue;
132
+ }
133
+ get currentPath() {
134
+ return this.currentPathValue;
135
+ }
136
+ get currentPathType() {
137
+ return this.currentPathTypeValue;
138
+ }
139
+ get dirty() {
140
+ return this.dirtyValue;
141
+ }
142
+ async convertToMdz() {
143
+ this.assertEditable('convert to MDZ');
144
+ if (this.sourceFormatValue === 'mdz') {
145
+ return false;
146
+ }
147
+ const archiveBytes = await this.archiveBytesWithPendingText();
148
+ await this.reloadPreservingCurrentText(archiveBytes);
149
+ this.sourceFormatValue = 'mdz';
150
+ this.fileName = mdzFileNameFromMarkdown(this.fileName);
151
+ this.dirtyValue = true;
152
+ this.emit('edit', ['workspace']);
153
+ return true;
154
+ }
155
+ editText(newText) {
156
+ this.assertEditable('edit text');
157
+ if (!isEditableTextPath(this.currentPathTypeValue, this.currentPathValue)) {
158
+ return;
159
+ }
160
+ this.currentTextValue = newText;
161
+ this.dirtyValue = true;
162
+ this.liveOrphanedPaths = this.computeLiveOrphanedPaths(newText);
163
+ this.emit('edit', ['document'], this.currentPathValue);
164
+ }
165
+ async openPath(archivePath) {
166
+ const target = this.findPath(archivePath);
167
+ if (!target) {
168
+ return false;
169
+ }
170
+ const nextType = pathTypeForEntry(target);
171
+ if (target.path === this.currentPathValue && nextType === this.currentPathTypeValue) {
172
+ return true;
173
+ }
174
+ this.currentPathValue = target.path;
175
+ this.currentPathTypeValue = nextType;
176
+ if (target.isImage) {
177
+ this.currentTextValue = '';
178
+ this.emit('reload', ['selection'], target.path);
179
+ return true;
180
+ }
181
+ const bytes = await this.readWorkspacePathBytes(target.path);
182
+ if (!bytes) {
183
+ return false;
184
+ }
185
+ this.currentTextValue = new TextDecoder('utf-8').decode(bytes);
186
+ this.currentPathTypeValue = isLikelyBinary(bytes) ? 'binary' : nextType;
187
+ this.emit('reload', ['selection'], target.path);
188
+ return true;
189
+ }
190
+ async readPathBytes(archivePath) {
191
+ const target = this.findPath(archivePath);
192
+ if (!target) {
193
+ return undefined;
194
+ }
195
+ return this.readWorkspacePathBytes(target.path);
196
+ }
197
+ async addAsset(archivePath, fileBytes) {
198
+ this.assertEditable('add asset');
199
+ this.commitPendingTextToWorkspace();
200
+ const asset = await MdzPackagerCore.createWorkspaceAssetFromFile(fileBytes, archivePath);
201
+ this.upsertWorkspaceAsset(asset);
202
+ await this.reloadPreservingCurrentText(await this.serializeWorkspaceBytes());
203
+ this.dirtyValue = true;
204
+ this.emit('edit', ['asset'], archivePath);
205
+ }
206
+ async replaceAsset(archivePath, fileBytes) {
207
+ this.assertEditable('replace asset');
208
+ if (!this.findPath(archivePath)) {
209
+ return false;
210
+ }
211
+ await this.addAsset(archivePath, fileBytes);
212
+ return true;
213
+ }
214
+ async removeAsset(archivePath, options = {}) {
215
+ this.assertEditable('remove asset');
216
+ const target = this.findPath(archivePath);
217
+ if (!target || !this.workspaceValue.assets.some((asset) => asset.path.toLowerCase() === target.path.toLowerCase())) {
218
+ return false;
219
+ }
220
+ this.commitPendingTextToWorkspace();
221
+ if (options.requireOrphaned) {
222
+ const orphaned = this.workspaceValue.orphanedAssets?.orphanedAssetPaths ?? this.contentValue.orphanedAssetPaths;
223
+ if (!new Set(orphaned.map((path) => path.toLowerCase())).has(target.path.toLowerCase())) {
224
+ return false;
225
+ }
226
+ }
227
+ this.workspaceValue.assets = this.workspaceValue.assets.filter((asset) => asset.path.toLowerCase() !== target.path.toLowerCase());
228
+ await this.reloadPreservingCurrentText(await this.serializeWorkspaceBytes(), target.path);
229
+ this.dirtyValue = true;
230
+ this.emit('edit', ['asset'], target.path);
231
+ return true;
232
+ }
233
+ listAssets() {
234
+ return this.workspaceValue.assets.slice();
235
+ }
236
+ async pasteImage(options) {
237
+ this.assertEditable('paste image');
238
+ if (this.sourceFormatValue === 'markdown'
239
+ || !isEditableTextPath(this.currentPathTypeValue, this.currentPathValue)
240
+ || this.currentPathTypeValue !== 'markdown') {
241
+ return null;
242
+ }
243
+ const extension = extensionForMime(options.mimeType);
244
+ const archivePath = nextPastedImagePath(this.snapshot(), extension);
245
+ const markdownPath = relativeMarkdownAssetPath(this.currentPathValue, archivePath);
246
+ const markdownImage = `![Pasted image](${markdownPath})`;
247
+ const start = Math.max(0, Math.min(options.selectionStart, this.currentTextValue.length));
248
+ const end = Math.max(start, Math.min(options.selectionEnd, this.currentTextValue.length));
249
+ const text = `${this.currentTextValue.slice(0, start)}${markdownImage}${this.currentTextValue.slice(end)}`;
250
+ const cursor = start + markdownImage.length;
251
+ this.currentTextValue = text;
252
+ this.commitPendingTextToWorkspace();
253
+ this.upsertWorkspaceAsset(await MdzPackagerCore.createWorkspaceAssetFromFile(options.bytes, archivePath));
254
+ await this.reloadPreservingCurrentText(await this.serializeWorkspaceBytes());
255
+ this.dirtyValue = true;
256
+ this.emit('edit', ['document', 'asset'], archivePath);
257
+ return {
258
+ archivePath,
259
+ markdownPath,
260
+ markdownImage,
261
+ text,
262
+ cursor
263
+ };
264
+ }
265
+ async setManifestTitle(newTitle) {
266
+ this.assertEditable('set manifest title');
267
+ this.commitPendingTextToWorkspace();
268
+ this.workspaceValue.manifest = MdzPackagerCore.updateManifest(this.workspaceValue.manifest, { title: newTitle });
269
+ this.workspaceValue.title = newTitle;
270
+ await this.reloadPreservingCurrentText(await this.serializeWorkspaceBytes());
271
+ this.dirtyValue = true;
272
+ this.emit('edit', ['manifest'], 'manifest.json');
273
+ }
274
+ async saveToBytes() {
275
+ this.assertEditable('save');
276
+ const nextArchiveBytes = await this.archiveBytesWithPendingText();
277
+ await this.reload(nextArchiveBytes);
278
+ this.dirtyValue = false;
279
+ return this.outputBytes();
280
+ }
281
+ async exportBytes() {
282
+ const archiveBytes = await this.archiveBytesWithPendingText();
283
+ return this.outputBytes(archiveBytes);
284
+ }
285
+ async serialize() {
286
+ return bytesToBlob(await this.exportBytes(), this.sourceFormatValue);
287
+ }
288
+ async flush() {
289
+ const archiveBytes = await this.archiveBytesWithPendingText();
290
+ await this.reloadPreservingCurrentText(archiveBytes);
291
+ return this.editorSnapshot(this.outputBytes());
292
+ }
293
+ async getCurrentSnapshot() {
294
+ const archiveBytes = await this.archiveBytesWithPendingText();
295
+ return this.editorSnapshot(this.outputBytes(archiveBytes));
296
+ }
297
+ markPersisted() {
298
+ if (!this.dirtyValue) {
299
+ return;
300
+ }
301
+ this.dirtyValue = false;
302
+ this.emit('reload', ['persistence']);
303
+ }
304
+ manifest() {
305
+ return this.sourceFormatValue === 'mdz' ? this.contentValue.manifest : null;
306
+ }
307
+ async archiveBytesWithPendingText() {
308
+ if (!isEditableTextPath(this.currentPathTypeValue, this.currentPathValue)) {
309
+ return this.archiveBytes;
310
+ }
311
+ this.commitPendingTextToWorkspace();
312
+ return this.serializeWorkspaceBytes();
313
+ }
314
+ outputBytes(archiveBytes = this.archiveBytes) {
315
+ return this.sourceFormatValue === 'markdown'
316
+ ? new TextEncoder().encode(this.currentTextValue)
317
+ : archiveBytes;
318
+ }
319
+ async reload(bytes) {
320
+ this.archiveBytes = bytes;
321
+ this.workspaceValue = await MdzArchiveCore.openWorkspace(bytes, {
322
+ includeOrphanedAssetAnalysis: true
323
+ });
324
+ this.contentValue = await openedArchiveFromWorkspace(this.workspaceValue);
325
+ this.currentTextValue = this.contentValue.markdownText;
326
+ this.currentPathValue = this.contentValue.entryPoint;
327
+ this.currentPathTypeValue = 'markdown';
328
+ this.liveOrphanedPaths = null;
329
+ }
330
+ async reloadPreservingCurrentText(bytes, removedPath) {
331
+ const currentText = this.currentTextValue;
332
+ const currentPath = this.currentPathValue;
333
+ const currentPathType = this.currentPathTypeValue;
334
+ this.archiveBytes = bytes;
335
+ this.workspaceValue = await MdzArchiveCore.openWorkspace(bytes, {
336
+ includeOrphanedAssetAnalysis: true
337
+ });
338
+ this.contentValue = await openedArchiveFromWorkspace(this.workspaceValue);
339
+ this.liveOrphanedPaths = null;
340
+ if (removedPath && currentPath.toLowerCase() === removedPath.toLowerCase()) {
341
+ this.currentTextValue = this.contentValue.markdownText;
342
+ this.currentPathValue = this.contentValue.entryPoint;
343
+ this.currentPathTypeValue = 'markdown';
344
+ return;
345
+ }
346
+ this.currentTextValue = currentText;
347
+ this.currentPathValue = currentPath;
348
+ this.currentPathTypeValue = currentPathType;
349
+ }
350
+ findPath(archivePath) {
351
+ return this.contentValue.paths.find((entry) => entry.path.toLowerCase() === archivePath.toLowerCase());
352
+ }
353
+ commitPendingTextToWorkspace() {
354
+ if (!isEditableTextPath(this.currentPathTypeValue, this.currentPathValue)) {
355
+ return;
356
+ }
357
+ const document = this.workspaceValue.documents.find((doc) => doc.path.toLowerCase() === this.currentPathValue.toLowerCase());
358
+ if (document) {
359
+ document.text = this.currentTextValue;
360
+ return;
361
+ }
362
+ const asset = this.workspaceValue.assets.find((item) => item.path.toLowerCase() === this.currentPathValue.toLowerCase());
363
+ if (asset) {
364
+ const bytes = new TextEncoder().encode(this.currentTextValue);
365
+ asset.bytes = bytes;
366
+ asset.byteSize = bytes.byteLength;
367
+ delete asset.readBytes;
368
+ delete asset.readDataUri;
369
+ }
370
+ }
371
+ async serializeWorkspaceBytes() {
372
+ return blobToBytes((await MdzPackagerCore.buildWorkspace(this.workspaceValue)).blob);
373
+ }
374
+ upsertWorkspaceAsset(asset) {
375
+ const lower = asset.path.toLowerCase();
376
+ this.workspaceValue.assets = [
377
+ ...this.workspaceValue.assets.filter((existing) => existing.path.toLowerCase() !== lower),
378
+ asset
379
+ ].sort((a, b) => a.path.localeCompare(b.path, undefined, { sensitivity: 'base' }));
380
+ }
381
+ async readWorkspacePathBytes(archivePath) {
382
+ if (archivePath.toLowerCase() === 'manifest.json' && this.workspaceValue.manifest) {
383
+ return new TextEncoder().encode(JSON.stringify(this.workspaceValue.manifest, null, 2));
384
+ }
385
+ const document = this.workspaceValue.documents.find((doc) => doc.path.toLowerCase() === archivePath.toLowerCase());
386
+ if (document) {
387
+ return new TextEncoder().encode(document.text);
388
+ }
389
+ const asset = this.workspaceValue.assets.find((item) => item.path.toLowerCase() === archivePath.toLowerCase());
390
+ if (asset?.bytes) {
391
+ const bytes = asset.bytes instanceof Uint8Array
392
+ ? asset.bytes
393
+ : new Uint8Array(await new Blob([asset.bytes]).arrayBuffer());
394
+ return bytes;
395
+ }
396
+ if (asset?.readBytes) {
397
+ return asset.readBytes();
398
+ }
399
+ return readBinaryFileFromArchive(this.archiveBytes, archivePath);
400
+ }
401
+ editorSnapshot(bytes) {
402
+ return {
403
+ workspace: this.workspaceValue,
404
+ bytes: bytesToBlob(bytes, this.sourceFormatValue),
405
+ state: this.hostState()
406
+ };
407
+ }
408
+ assertEditable(operation) {
409
+ if (this.modeValue === 'read-only') {
410
+ throw new MdzipReadOnlyError(operation);
411
+ }
412
+ }
413
+ computeLiveOrphanedPaths(markdownText) {
414
+ const baseDir = this.currentPathValue.includes('/')
415
+ ? this.currentPathValue.slice(0, this.currentPathValue.lastIndexOf('/') + 1)
416
+ : '';
417
+ const referenced = referencedImagePaths(markdownText, baseDir);
418
+ return this.contentValue.paths
419
+ .filter((e) => e.isImage && !referenced.has(e.path))
420
+ .map((e) => e.path);
421
+ }
422
+ emit(reason, changes, path) {
423
+ const event = {
424
+ reason,
425
+ changes,
426
+ ...(path ? { path } : {}),
427
+ snapshot: this.snapshot()
428
+ };
429
+ for (const listener of this.listeners) {
430
+ listener(event);
431
+ }
432
+ }
433
+ }
434
+ // Extract all image archive paths referenced in markdown text.
435
+ // Handles relative paths by resolving against baseDir (the directory of the current file).
436
+ function referencedImagePaths(markdown, baseDir) {
437
+ const refs = new Set();
438
+ const regex = /!\[[^\]]*\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g;
439
+ let match;
440
+ while ((match = regex.exec(markdown)) !== null) {
441
+ const raw = (match[1] ?? '').replace(/^<|>$/g, '').split(/[?#]/)[0] ?? '';
442
+ const decoded = decodeURIComponent(raw);
443
+ // Store both the raw form and the baseDir-resolved form so either lookup hits.
444
+ refs.add(decoded);
445
+ refs.add(decoded.replace(/^\.\//, ''));
446
+ const resolved = decoded.startsWith('/') ? decoded.slice(1) : `${baseDir}${decoded.replace(/^\.\//, '')}`;
447
+ refs.add(resolved);
448
+ }
449
+ return refs;
450
+ }
451
+ function pathTypeForEntry(entry) {
452
+ if (entry.isImage) {
453
+ return 'image';
454
+ }
455
+ if (entry.isMarkdown) {
456
+ return 'markdown';
457
+ }
458
+ return 'text';
459
+ }
460
+ function isLikelyBinary(bytes) {
461
+ if (bytes.length === 0) {
462
+ return false;
463
+ }
464
+ let suspicious = 0;
465
+ const sampleSize = Math.min(bytes.length, 2048);
466
+ for (let i = 0; i < sampleSize; i += 1) {
467
+ const value = bytes[i];
468
+ if (value === 0) {
469
+ return true;
470
+ }
471
+ if (value < 9 || (value > 13 && value < 32)) {
472
+ suspicious += 1;
473
+ }
474
+ }
475
+ return suspicious / sampleSize > 0.15;
476
+ }
477
+ function isEditableTextPath(currentPathType, archivePath) {
478
+ if (currentPathType !== 'markdown' && currentPathType !== 'text') {
479
+ return false;
480
+ }
481
+ const lower = archivePath.toLowerCase();
482
+ const fileName = lower.includes('/') ? lower.slice(lower.lastIndexOf('/') + 1) : lower;
483
+ return fileName !== 'manifest.json';
484
+ }
485
+ function fileNameFromPath(path) {
486
+ const normalized = path.replace(/\\/g, '/');
487
+ return normalized.slice(normalized.lastIndexOf('/') + 1) || 'document.md';
488
+ }
489
+ function mdzFileNameFromMarkdown(fileName) {
490
+ if (/\.(?:md|markdown|mdown|mkd)$/i.test(fileName)) {
491
+ return fileName.replace(/\.(?:md|markdown|mdown|mkd)$/i, '.mdz');
492
+ }
493
+ return fileName.toLowerCase().endsWith('.mdz') ? fileName : `${fileName}.mdz`;
494
+ }
495
+ function extensionForMime(mimeType) {
496
+ switch (mimeType.toLowerCase()) {
497
+ case 'image/jpeg':
498
+ return 'jpg';
499
+ case 'image/gif':
500
+ return 'gif';
501
+ case 'image/webp':
502
+ return 'webp';
503
+ case 'image/svg+xml':
504
+ return 'svg';
505
+ case 'image/png':
506
+ default:
507
+ return 'png';
508
+ }
509
+ }
510
+ function nextPastedImagePath(state, extension) {
511
+ const baseDir = state.currentPath.includes('/')
512
+ ? state.currentPath.slice(0, state.currentPath.lastIndexOf('/') + 1)
513
+ : '';
514
+ const folder = `${baseDir}images/`;
515
+ const seed = `pasted-${Date.now()}`;
516
+ const existing = new Set(state.content.paths.map((entry) => entry.path.toLowerCase()));
517
+ let candidate = `${folder}${seed}.${extension}`;
518
+ let counter = 1;
519
+ while (existing.has(candidate.toLowerCase())) {
520
+ candidate = `${folder}${seed}-${counter}.${extension}`;
521
+ counter += 1;
522
+ }
523
+ return candidate;
524
+ }
525
+ function relativeMarkdownAssetPath(markdownPath, archivePath) {
526
+ const baseDir = markdownPath.includes('/')
527
+ ? markdownPath.slice(0, markdownPath.lastIndexOf('/') + 1)
528
+ : '';
529
+ return archivePath.startsWith(baseDir) ? archivePath.slice(baseDir.length) : archivePath;
530
+ }
531
+ export function inferMdzipSourceFormat(bytes, fileName) {
532
+ const lowerName = fileName?.trim().toLowerCase() ?? '';
533
+ if (/\.(?:md|markdown|mdown|mkd)$/.test(lowerName)) {
534
+ return 'markdown';
535
+ }
536
+ if (lowerName.endsWith('.mdz')) {
537
+ return 'mdz';
538
+ }
539
+ return hasZipSignature(bytes) ? 'mdz' : 'markdown';
540
+ }
541
+ function hasZipSignature(bytes) {
542
+ return bytes.length >= 4
543
+ && bytes[0] === 0x50
544
+ && bytes[1] === 0x4b
545
+ && ((bytes[2] === 0x03 && bytes[3] === 0x04)
546
+ || (bytes[2] === 0x05 && bytes[3] === 0x06)
547
+ || (bytes[2] === 0x07 && bytes[3] === 0x08));
548
+ }
549
+ function bytesToBlob(bytes, sourceFormat = 'mdz') {
550
+ const buffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
551
+ return new Blob([buffer], {
552
+ type: sourceFormat === 'markdown' ? 'text/markdown;charset=utf-8' : 'application/vnd.mdzip'
553
+ });
554
+ }
555
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@mdzip/editor",
3
+ "version": "1.2.1",
4
+ "description": "Framework-independent MDZip workspace engine.",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "generate:icons": "node scripts/generate-icons.mjs",
20
+ "prebuild": "npm run generate:icons",
21
+ "build": "tsc -p tsconfig.json",
22
+ "test": "npm run build && node --test tests/*.test.mjs"
23
+ },
24
+ "dependencies": {
25
+ "@codemirror/commands": "^6.8.0",
26
+ "@codemirror/lang-markdown": "^6.3.2",
27
+ "@codemirror/language": "^6.11.0",
28
+ "@codemirror/state": "^6.5.2",
29
+ "@codemirror/view": "^6.37.2",
30
+ "@lezer/highlight": "^1.2.1",
31
+ "highlight.js": "^11.10.0",
32
+ "isomorphic-dompurify": "^2.36.0",
33
+ "lucide": "^1.17.0",
34
+ "marked": "^15.0.12",
35
+ "mdzip-core-js": "^1.2.0"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ }
40
+ }