@mdzip/editor-react 1.3.1 → 1.3.8

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 CHANGED
@@ -1,3 +1,8 @@
1
+ [![MDZip logo][mdzip-logo]][mdzip-url]
2
+
3
+ [mdzip-logo]: https://raw.githubusercontent.com/mdzip-project/mdzip-editor/main/resources/mdzip-mark.svg
4
+ [mdzip-url]: https://mdzip.org
5
+
1
6
  # @mdzip/editor-react
2
7
 
3
8
  React component wrapper for the MDZip workspace editor.
@@ -34,6 +39,28 @@ export function Viewer({ bytes }: { bytes: Uint8Array }) {
34
39
 
35
40
  The parent element must have an explicit height. The component expands to fill it.
36
41
 
42
+ ## Archive Diff
43
+
44
+ ```tsx
45
+ import { MdzipDiff } from '@mdzip/editor-react/diff-view';
46
+
47
+ <div style={{ height: 600 }}>
48
+ <MdzipDiff
49
+ before={{ bytes: baseBytes, label: 'Git base' }}
50
+ after={{ bytes: workingBytes, label: 'Working tree' }}
51
+ initialPath="index.md"
52
+ toolbarActions={[{ id: 'refresh', label: 'Refresh', icon: 'refresh', run: refresh }]}
53
+ />
54
+ </div>
55
+ ```
56
+
57
+ `MdzipDiff` is read-only and updates the existing comparison view when its
58
+ props change. A ref exposes `openPath`, `openPreviousChange`, `openNextChange`,
59
+ `setShowUnchanged`, `setNavigationVisible`, and `setToolbarActions`. The
60
+ built-in toolbar adds Previous/Next change buttons and a Show-unchanged
61
+ toggle; pass a `controls` prop (`{ navigation?, changeTraversal?,
62
+ showUnchanged? }`) to opt any of them out.
63
+
37
64
  ## Editor Mode
38
65
 
39
66
  ```tsx
@@ -61,6 +88,36 @@ The parent element must have an explicit height. The component expands to fill i
61
88
  | `initialColorScheme` | `MdzipColorScheme` | — | `'light'` or `'dark'` |
62
89
  | `navigationMode` | `MdzipNavigationMode` | — | Package navigation mode |
63
90
  | `navigationButtonActive` | `boolean` | — | Whether the navigation button is shown |
91
+ | `markdownRenderer` | `MdzipMarkdownRenderer` | — | Custom markdown renderer (keep the reference stable, e.g. `useMemo`) |
92
+ | `markdownExtensions` | `readonly MdzipMarkdownRenderExtension[]` | `[]` | Markdown pipeline extensions, diffed by `name` — inline arrays are safe |
93
+ | `entryRenderers` | `readonly MdzipEntryRenderer[]` | `[]` | Entry renderers claiming the content area for matching entries, diffed by `id` — inline arrays are safe |
94
+ | `renderEntry` | `(context) => ReactNode \| undefined` | — | Catch-all entry renderer: return a node to claim the selected entry, `undefined` to delegate |
95
+ | `renderEntryPriority` | `number` | `0` | Matching priority of `renderEntry` relative to `entryRenderers` |
96
+
97
+ Rendering prop changes apply in place — they never recreate the workspace
98
+ view. See the `@mdzip/editor` Rendering Extensibility docs for the contracts
99
+ and lifecycle rules.
100
+
101
+ ### Native entry rendering
102
+
103
+ ```tsx
104
+ <MdzipWorkspace
105
+ bytes={bytes}
106
+ renderEntry={(context) =>
107
+ context.path.toLowerCase() === 'manifest.json'
108
+ ? <ManifestEditor
109
+ manifest={context.manifest}
110
+ editable={context.mode === 'editable'}
111
+ onManifestChange={context.updateManifest}
112
+ />
113
+ : undefined}
114
+ />
115
+ ```
116
+
117
+ The wrapper owns the React root: it mounts when the entry is claimed,
118
+ re-renders on context updates and on every parent commit (entry content
119
+ stays live with parent state — inline closures are safe and never
120
+ re-mount), and unmounts on selection change.
64
121
 
65
122
  ## Callbacks
66
123
 
@@ -73,6 +130,8 @@ The parent element must have an explicit height. The component expands to fill i
73
130
  | `onDirtyChanged` | `(snapshot: MdzipWorkspaceSnapshot) => void` | Called when the dirty flag changes |
74
131
  | `onValidationChanged` | `(snapshot: MdzipWorkspaceSnapshot) => void` | Called when validation state changes |
75
132
  | `onColorSchemeChanged` | `(colorScheme: MdzipColorScheme) => void` | Called when the color scheme changes |
133
+ | `onPreviewRendered` | `(snapshot: MdzipWorkspaceSnapshot) => void` | Called when the preview HTML is mounted |
134
+ | `onAssetsHydrated` | `(snapshot: MdzipWorkspaceSnapshot) => void` | Called once the mounted preview's images have loaded |
76
135
  | `onFailed` | `(error: unknown) => void` | Called on unrecoverable errors |
77
136
  | `onConversionRequested` | `(action: MdzipConversionAction) => boolean \| Promise<boolean>` | Host hook for the markdown→MDZ conversion flow (nav button, Insert Image, or image paste on a plain `.md`). Return/resolve `true` to take over and suppress the built-in conversion dialog |
78
137
 
@@ -84,7 +143,9 @@ rename/move, duplicate, replace, download, copy markdown link, set entry point,
84
143
  image, and delete. Files can also be dragged between folders, and OS files can be dropped
85
144
  onto the pane to add them as assets. Copy and Download remain available in read-only mode.
86
145
  The same operations are exposed imperatively: `removeFile`, `renameFile`, `setEntryPoint`,
87
- and `setCoverImage` on the handle.
146
+ and `setCoverImage` on the handle. The handle also exposes `whenRendered()`, which resolves
147
+ once the current preview (including its images) is mounted — useful for revealing or
148
+ animating read-only preview content.
88
149
 
89
150
  ## Imperative API
90
151
 
@@ -0,0 +1,22 @@
1
+ import { type MdzipDiffControlsOptions, type MdzipDiffSelectionEvent, type MdzipDiffSideInput, type MdzipDiffToolbarAction } from '@mdzip/editor/diff-view';
2
+ export interface MdzipDiffProps {
3
+ before: MdzipDiffSideInput;
4
+ after: MdzipDiffSideInput;
5
+ initialPath?: string;
6
+ showUnchanged?: boolean;
7
+ navigationVisible?: boolean;
8
+ controls?: MdzipDiffControlsOptions;
9
+ toolbarActions?: readonly MdzipDiffToolbarAction[];
10
+ onSelectionChanged?: (event: MdzipDiffSelectionEvent) => void;
11
+ onFailed?: (error: Error) => void;
12
+ }
13
+ export interface MdzipDiffHandle {
14
+ openPath(path: string): Promise<boolean>;
15
+ openPreviousChange(): Promise<boolean>;
16
+ openNextChange(): Promise<boolean>;
17
+ setShowUnchanged(show: boolean): void;
18
+ setNavigationVisible(visible: boolean): void;
19
+ setToolbarActions(actions: readonly MdzipDiffToolbarAction[]): void;
20
+ }
21
+ export declare const MdzipDiff: import("react").ForwardRefExoticComponent<MdzipDiffProps & import("react").RefAttributes<MdzipDiffHandle>>;
22
+ //# sourceMappingURL=diff-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-view.d.ts","sourceRoot":"","sources":["../src/diff-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,cAAc,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACnD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,iBAAiB,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,GAAG,IAAI,CAAC;CACrE;AAED,eAAO,MAAM,SAAS,4GAoFpB,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
3
+ import { MdzipDiffView } from '@mdzip/editor/diff-view';
4
+ export const MdzipDiff = forwardRef(function MdzipDiff(props, forwardedRef) {
5
+ const hostRef = useRef(null);
6
+ const viewRef = useRef(null);
7
+ const callbacksRef = useRef({
8
+ onSelectionChanged: props.onSelectionChanged,
9
+ onFailed: props.onFailed
10
+ });
11
+ callbacksRef.current = {
12
+ onSelectionChanged: props.onSelectionChanged,
13
+ onFailed: props.onFailed
14
+ };
15
+ const firstOpenRef = useRef(true);
16
+ const initialOptionsRef = useRef({
17
+ before: props.before,
18
+ after: props.after,
19
+ initialPath: props.initialPath,
20
+ showUnchanged: props.showUnchanged,
21
+ navigationVisible: props.navigationVisible,
22
+ controls: props.controls,
23
+ toolbarActions: props.toolbarActions
24
+ });
25
+ useImperativeHandle(forwardedRef, () => ({
26
+ openPath: (path) => viewRef.current?.openPath(path) ?? Promise.resolve(false),
27
+ openPreviousChange: () => viewRef.current?.openPreviousChange() ?? Promise.resolve(false),
28
+ openNextChange: () => viewRef.current?.openNextChange() ?? Promise.resolve(false),
29
+ setShowUnchanged: (show) => viewRef.current?.setShowUnchanged(show),
30
+ setNavigationVisible: (visible) => viewRef.current?.setNavigationVisible(visible),
31
+ setToolbarActions: (actions) => viewRef.current?.setToolbarActions(actions)
32
+ }), []);
33
+ useEffect(() => {
34
+ if (!hostRef.current)
35
+ return;
36
+ const initial = initialOptionsRef.current;
37
+ const view = new MdzipDiffView(hostRef.current, {
38
+ before: initial.before,
39
+ after: initial.after,
40
+ initialPath: initial.initialPath,
41
+ showUnchanged: initial.showUnchanged,
42
+ navigationVisible: initial.navigationVisible,
43
+ controls: initial.controls,
44
+ toolbarActions: initial.toolbarActions,
45
+ onSelectionChanged: (event) => callbacksRef.current.onSelectionChanged?.(event),
46
+ onFailed: (error) => callbacksRef.current.onFailed?.(error)
47
+ });
48
+ viewRef.current = view;
49
+ return () => {
50
+ view.destroy();
51
+ viewRef.current = null;
52
+ };
53
+ }, []);
54
+ useEffect(() => {
55
+ if (firstOpenRef.current) {
56
+ firstOpenRef.current = false;
57
+ return;
58
+ }
59
+ void viewRef.current?.open({
60
+ before: props.before,
61
+ after: props.after,
62
+ initialPath: props.initialPath,
63
+ onSelectionChanged: (event) => callbacksRef.current.onSelectionChanged?.(event),
64
+ onFailed: (error) => callbacksRef.current.onFailed?.(error)
65
+ });
66
+ }, [
67
+ props.before,
68
+ props.after,
69
+ props.initialPath
70
+ ]);
71
+ useEffect(() => {
72
+ viewRef.current?.setShowUnchanged(props.showUnchanged ?? true);
73
+ }, [props.showUnchanged]);
74
+ useEffect(() => {
75
+ viewRef.current?.setNavigationVisible(props.navigationVisible ?? true);
76
+ }, [props.navigationVisible]);
77
+ useEffect(() => {
78
+ viewRef.current?.setToolbarActions(props.toolbarActions ?? []);
79
+ }, [props.toolbarActions]);
80
+ return _jsx("div", { ref: hostRef, style: { height: '100%', overflow: 'hidden' } });
81
+ });
82
+ //# sourceMappingURL=diff-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-view.js","sourceRoot":"","sources":["../src/diff-view.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,11 @@
1
- import type { MdzipControlPolicy, MdzipControlPreset, MdzipColorScheme, MdzipConversionAction, MdzipDocumentChangeEvent, MdzipEditorCommand, MdzipEditorSnapshot, MdzipNavigationMode, MdzipRemoveAssetOptions, MdzipSourceFormat, MdzipWorkspaceChange, MdzipWorkspaceLayout, MdzipWorkspaceMode, MdzipWorkspaceSave, MdzipWorkspaceSnapshot, MdzWorkspace, MdzWorkspaceAsset } from '@mdzip/editor';
1
+ import { type ReactNode } from 'react';
2
+ import type { MdzipControlPolicy, MdzipControlPreset, MdzipColorScheme, MdzipConversionAction, MdzipConversionContext, MdzipDocumentChangeEvent, MdzipEditorCommand, MdzipEditorSnapshot, MdzipEntryRenderContext, MdzipEntryRenderer, MdzipMarkdownRenderExtension, MdzipMarkdownRenderer, MdzipNavigationMode, MdzipRemoveAssetOptions, MdzipSourceFormat, MdzipWorkspaceChange, MdzipWorkspaceLayout, MdzipWorkspaceMode, MdzipWorkspaceSave, MdzipWorkspaceSnapshot, MdzWorkspace, MdzWorkspaceAsset } from '@mdzip/editor';
3
+ /**
4
+ * Catch-all entry render function. Returning a React node claims the entry's
5
+ * content area; returning `undefined` delegates to the next registered entry
6
+ * renderer or the built-in rendering.
7
+ */
8
+ export type MdzipRenderEntry = (context: MdzipEntryRenderContext) => ReactNode | undefined;
2
9
  export interface MdzipWorkspaceProps {
3
10
  bytes?: Uint8Array | null;
4
11
  workspace?: MdzWorkspace | null;
@@ -21,12 +28,36 @@ export interface MdzipWorkspaceProps {
21
28
  onDirtyChanged?: (snapshot: MdzipWorkspaceSnapshot) => void;
22
29
  onValidationChanged?: (snapshot: MdzipWorkspaceSnapshot) => void;
23
30
  onColorSchemeChanged?: (colorScheme: MdzipColorScheme) => void;
31
+ /** Fires when the preview HTML for the current selection is mounted. */
32
+ onPreviewRendered?: (snapshot: MdzipWorkspaceSnapshot) => void;
33
+ /** Fires once the mounted preview's images have finished loading. */
34
+ onAssetsHydrated?: (snapshot: MdzipWorkspaceSnapshot) => void;
24
35
  onFailed?: (error: unknown) => void;
25
36
  /**
26
37
  * Host hook for the markdown→MDZ conversion flow. Return/resolve `true`
27
38
  * to take over (the built-in conversion dialog is suppressed).
28
39
  */
29
- onConversionRequested?: (action: MdzipConversionAction) => boolean | Promise<boolean>;
40
+ onConversionRequested?: (action: MdzipConversionAction, context: MdzipConversionContext) => boolean | Promise<boolean>;
41
+ /**
42
+ * Custom markdown renderer. Keep the reference stable (module scope or
43
+ * useMemo): identity changes apply via a cheap preview re-render, never a
44
+ * workspace rebuild.
45
+ */
46
+ markdownRenderer?: MdzipMarkdownRenderer;
47
+ /** Markdown pipeline extensions, diffed by `name` — inline arrays are safe. */
48
+ markdownExtensions?: readonly MdzipMarkdownRenderExtension[];
49
+ /** Entry renderers, diffed by `id`/`priority` — inline arrays are safe. */
50
+ entryRenderers?: readonly MdzipEntryRenderer[];
51
+ /**
52
+ * Catch-all entry render function. Return a React node to claim the
53
+ * selected entry's content area, or `undefined` to delegate to
54
+ * `entryRenderers` and the built-in rendering. The wrapper owns the React
55
+ * root lifecycle, and the content stays live with parent state — inline
56
+ * closures are safe and never re-mount.
57
+ */
58
+ renderEntry?: MdzipRenderEntry;
59
+ /** Matching priority of `renderEntry` relative to `entryRenderers`. Default 0. */
60
+ renderEntryPriority?: number;
30
61
  }
31
62
  export interface MdzipWorkspaceHandle {
32
63
  canExecuteCommand(command: MdzipEditorCommand): boolean;
@@ -35,6 +66,7 @@ export interface MdzipWorkspaceHandle {
35
66
  flush(): Promise<MdzipEditorSnapshot | null>;
36
67
  serialize(): Promise<Blob | null>;
37
68
  getCurrentSnapshot(): Promise<MdzipEditorSnapshot | null>;
69
+ whenRendered(): Promise<void>;
38
70
  markPersisted(): void;
39
71
  addAsset(archivePath: string, fileBytes: Uint8Array): Promise<void>;
40
72
  replaceAsset(archivePath: string, fileBytes: Uint8Array): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,9 +1,78 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
3
+ import { createRoot } from 'react-dom/client';
3
4
  import { MdzipWorkspaceView } from '@mdzip/editor';
4
- export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, workspace, fileName = 'document.mdz', mode = 'read-only', sourceFormat, controls = 'viewer', initialLayout, initialColorScheme, navigationMode, navigationButtonActive, onChanged, onSaved, onWorkspaceChanged, onDocumentChanged, onAssetChanged, onManifestChanged, onSnapshotChanged, onSelectionChanged, onDirtyChanged, onValidationChanged, onColorSchemeChanged, onFailed, onConversionRequested, }, forwardedRef) {
5
+ import { PACKAGE_INFO } from './package-info.js';
6
+ // Identity-insensitive key for the rendering props: extensions and entry
7
+ // renderers are diffed by their stable name/id (and priority), so inline
8
+ // array literals with equivalent contents never trigger an update.
9
+ function renderingConfigKey(extensions, entryRenderers) {
10
+ return JSON.stringify([
11
+ (extensions ?? []).map((extension) => extension.name),
12
+ (entryRenderers ?? []).map((renderer) => [renderer.id, renderer.priority ?? 0]),
13
+ ]);
14
+ }
15
+ /**
16
+ * Adapts the `renderEntry` render prop onto the framework-independent
17
+ * `MdzipEntryRenderer` contract. The wrapper owns the React root: it is
18
+ * created on mount, re-rendered on context updates and on every parent
19
+ * commit (so entry content stays live with parent state), and unmounted on
20
+ * destroy. The latest `renderEntry` closure is always read through this
21
+ * adapter, so new function identities never re-mount anything.
22
+ */
23
+ class ReactEntryAdapter {
24
+ constructor() {
25
+ this.id = 'mdzip-react-render-entry';
26
+ this.priority = 0;
27
+ this.root = null;
28
+ this.context = null;
29
+ }
30
+ matches(context) {
31
+ return this.renderEntry ? this.renderEntry(context) !== undefined : false;
32
+ }
33
+ mount(container, context) {
34
+ this.context = context;
35
+ this.root = createRoot(container);
36
+ this.renderIntoRoot();
37
+ return {
38
+ update: (next) => {
39
+ this.context = next;
40
+ this.renderIntoRoot();
41
+ },
42
+ destroy: () => {
43
+ const root = this.root;
44
+ this.root = null;
45
+ this.context = null;
46
+ // React warns when a root unmounts synchronously while another tree
47
+ // renders; the core may destroy during a render-triggered teardown.
48
+ queueMicrotask(() => root?.unmount());
49
+ }
50
+ };
51
+ }
52
+ setRenderEntry(renderEntry) {
53
+ this.renderEntry = renderEntry;
54
+ this.renderIntoRoot();
55
+ }
56
+ renderIntoRoot() {
57
+ if (this.root && this.context) {
58
+ this.root.render(this.renderEntry?.(this.context) ?? null);
59
+ }
60
+ }
61
+ }
62
+ function composeEntryRenderers(entryRenderers, adapter, renderEntry) {
63
+ const explicit = entryRenderers ?? [];
64
+ // Stable sort in the core keeps explicit renderers ahead of the catch-all
65
+ // at equal priority.
66
+ return renderEntry ? [...explicit, adapter] : explicit;
67
+ }
68
+ export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, workspace, fileName = 'document.mdz', mode = 'read-only', sourceFormat, controls = 'viewer', initialLayout, initialColorScheme, navigationMode, navigationButtonActive, onChanged, onSaved, onWorkspaceChanged, onDocumentChanged, onAssetChanged, onManifestChanged, onSnapshotChanged, onSelectionChanged, onDirtyChanged, onValidationChanged, onColorSchemeChanged, onPreviewRendered, onAssetsHydrated, onFailed, onConversionRequested, markdownRenderer, markdownExtensions, entryRenderers, renderEntry, renderEntryPriority, }, forwardedRef) {
5
69
  const ref = useRef(null);
6
70
  const viewRef = useRef(null);
71
+ const adapterRef = useRef(null);
72
+ if (!adapterRef.current) {
73
+ adapterRef.current = new ReactEntryAdapter();
74
+ }
75
+ adapterRef.current.priority = renderEntryPriority ?? 0;
7
76
  // Callbacks and content are read through refs at event/recreate time so
8
77
  // that new prop identities (e.g. inline handlers) never force a view
9
78
  // rebuild — only the view-config props below do.
@@ -19,6 +88,8 @@ export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, worksp
19
88
  onDirtyChanged,
20
89
  onValidationChanged,
21
90
  onColorSchemeChanged,
91
+ onPreviewRendered,
92
+ onAssetsHydrated,
22
93
  onFailed,
23
94
  onConversionRequested,
24
95
  });
@@ -34,11 +105,23 @@ export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, worksp
34
105
  onDirtyChanged,
35
106
  onValidationChanged,
36
107
  onColorSchemeChanged,
108
+ onPreviewRendered,
109
+ onAssetsHydrated,
37
110
  onFailed,
38
111
  onConversionRequested,
39
112
  };
40
113
  const contentRef = useRef({ bytes, workspace, mode, sourceFormat, fileName });
41
114
  contentRef.current = { bytes, workspace, mode, sourceFormat, fileName };
115
+ // Latest rendering props, read at view-create and apply time so prop
116
+ // identity changes alone never rebuild the workspace view.
117
+ const renderingRef = useRef({ markdownRenderer, markdownExtensions, entryRenderers, renderEntry });
118
+ renderingRef.current = { markdownRenderer, markdownExtensions, entryRenderers, renderEntry };
119
+ const renderingKey = renderingConfigKey(markdownExtensions, composeEntryRenderers(entryRenderers, adapterRef.current, renderEntry));
120
+ // Keep the mounted entry content live with parent state: every commit
121
+ // re-renders the adapter's root with the latest renderEntry closure.
122
+ useEffect(() => {
123
+ adapterRef.current?.setRenderEntry(renderEntry);
124
+ });
42
125
  useImperativeHandle(forwardedRef, () => ({
43
126
  canExecuteCommand: (command) => viewRef.current?.canExecuteCommand(command) ?? false,
44
127
  executeCommand: (command, file) => viewRef.current?.executeCommand(command, file) ?? Promise.resolve(false),
@@ -46,6 +129,7 @@ export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, worksp
46
129
  flush: () => viewRef.current?.flush() ?? Promise.resolve(null),
47
130
  serialize: () => viewRef.current?.serialize() ?? Promise.resolve(null),
48
131
  getCurrentSnapshot: () => viewRef.current?.getCurrentSnapshot() ?? Promise.resolve(null),
132
+ whenRendered: () => viewRef.current?.whenRendered() ?? Promise.resolve(),
49
133
  markPersisted: () => viewRef.current?.markPersisted(),
50
134
  addAsset: (archivePath, fileBytes) => viewRef.current?.addAsset(archivePath, fileBytes) ?? Promise.resolve(),
51
135
  replaceAsset: (archivePath, fileBytes) => viewRef.current?.replaceAsset(archivePath, fileBytes) ?? Promise.resolve(false),
@@ -62,6 +146,7 @@ export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, worksp
62
146
  if (!ref.current)
63
147
  return;
64
148
  const view = new MdzipWorkspaceView(ref.current, {
149
+ libraries: [PACKAGE_INFO],
65
150
  controls,
66
151
  initialLayout,
67
152
  initialColorScheme,
@@ -78,10 +163,15 @@ export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, worksp
78
163
  onDirtyChanged: (snapshot) => callbacksRef.current.onDirtyChanged?.(snapshot),
79
164
  onValidationChanged: (snapshot) => callbacksRef.current.onValidationChanged?.(snapshot),
80
165
  onColorSchemeChanged: (colorScheme) => callbacksRef.current.onColorSchemeChanged?.(colorScheme),
166
+ onPreviewRendered: (snapshot) => callbacksRef.current.onPreviewRendered?.(snapshot),
167
+ onAssetsHydrated: (snapshot) => callbacksRef.current.onAssetsHydrated?.(snapshot),
81
168
  onFailed: (e) => callbacksRef.current.onFailed?.(e),
82
169
  // A hook returning false falls back to the built-in dialog, same as no
83
170
  // hook at all, so the always-present delegate is behavior-preserving.
84
- onConversionRequested: (action) => callbacksRef.current.onConversionRequested?.(action) ?? false,
171
+ onConversionRequested: (action, context) => callbacksRef.current.onConversionRequested?.(action, context) ?? false,
172
+ markdownRenderer: renderingRef.current.markdownRenderer,
173
+ markdownExtensions: renderingRef.current.markdownExtensions,
174
+ entryRenderers: composeEntryRenderers(renderingRef.current.entryRenderers, adapterRef.current, renderingRef.current.renderEntry),
85
175
  });
86
176
  viewRef.current = view;
87
177
  if (firstCreateRef.current) {
@@ -118,6 +208,25 @@ export const MdzipWorkspace = forwardRef(function MdzipWorkspace({ bytes, worksp
118
208
  void viewRef.current.open(bytes, { mode, sourceFormat, fileName });
119
209
  }
120
210
  }, [bytes, workspace, mode, sourceFormat, fileName]);
211
+ // Rendering config updates apply in place — never a view rebuild. Arrays
212
+ // re-apply only when their name/id key changes; the renderer re-applies on
213
+ // identity change (a cheap preview re-render). The first run is skipped:
214
+ // view creation already received the current values.
215
+ const renderingAppliedRef = useRef(false);
216
+ useEffect(() => {
217
+ const view = viewRef.current;
218
+ if (!view)
219
+ return;
220
+ if (!renderingAppliedRef.current) {
221
+ renderingAppliedRef.current = true;
222
+ return;
223
+ }
224
+ view.setRenderingOptions({
225
+ markdownRenderer: renderingRef.current.markdownRenderer ?? null,
226
+ markdownExtensions: renderingRef.current.markdownExtensions ?? [],
227
+ entryRenderers: composeEntryRenderers(renderingRef.current.entryRenderers, adapterRef.current, renderingRef.current.renderEntry),
228
+ });
229
+ }, [markdownRenderer, renderingKey]);
121
230
  return _jsx("div", { ref: ref, style: { height: '100%', overflow: 'hidden' } });
122
231
  });
123
232
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const PACKAGE_INFO: {
2
+ readonly name: "@mdzip/editor-react";
3
+ readonly version: "1.3.8";
4
+ readonly repositoryUrl: "https://github.com/mdzip-project/mdzip-editor/tree/main/packages/editor-react";
5
+ readonly description: "React wrapper for the MDZip workspace editor.";
6
+ };
7
+ //# sourceMappingURL=package-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-info.d.ts","sourceRoot":"","sources":["../src/package-info.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY;;;;;CAKf,CAAC"}
@@ -0,0 +1,8 @@
1
+ // Generated from package.json. Do not edit by hand.
2
+ export const PACKAGE_INFO = {
3
+ "name": "@mdzip/editor-react",
4
+ "version": "1.3.8",
5
+ "repositoryUrl": "https://github.com/mdzip-project/mdzip-editor/tree/main/packages/editor-react",
6
+ "description": "React wrapper for the MDZip workspace editor."
7
+ };
8
+ //# sourceMappingURL=package-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-info.js","sourceRoot":"","sources":["../src/package-info.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,qBAAqB;IAC7B,SAAS,EAAE,OAAO;IAClB,eAAe,EAAE,+EAA+E;IAChG,aAAa,EAAE,+CAA+C;CACtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mdzip/editor-react",
3
- "version": "1.3.1",
3
+ "version": "1.3.8",
4
4
  "description": "React wrapper for the MDZip workspace editor.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -19,16 +19,23 @@
19
19
  ".": {
20
20
  "types": "./dist/index.d.ts",
21
21
  "import": "./dist/index.js"
22
+ },
23
+ "./diff-view": {
24
+ "types": "./dist/diff-view.d.ts",
25
+ "import": "./dist/diff-view.js"
22
26
  }
23
27
  },
24
28
  "files": [
25
29
  "dist"
26
30
  ],
27
31
  "scripts": {
28
- "build": "tsc -p tsconfig.json"
32
+ "generate:package-info": "node ../../scripts/generate-package-info.mjs",
33
+ "prebuild": "npm run generate:package-info",
34
+ "build": "tsc -p tsconfig.json",
35
+ "test": "vitest run"
29
36
  },
30
37
  "dependencies": {
31
- "@mdzip/editor": "^1.3.0"
38
+ "@mdzip/editor": "^1.3.8"
32
39
  },
33
40
  "peerDependencies": {
34
41
  "react": ">=18.0.0",