@mp-lb/mdkit 0.2.2 → 0.2.3-main.20.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 (44) hide show
  1. package/dist/collaboration/useMdKitCollaboration.d.ts +1 -1
  2. package/dist/document/MdKitConflictPanel.d.ts +1 -1
  3. package/dist/document/MdKitConflictPanel.js +1 -1
  4. package/dist/document/MdKitDocumentToolbar.d.ts +3 -3
  5. package/dist/document/MdKitDocumentToolbar.js +1 -1
  6. package/dist/document/useMdKitDocument.d.ts +1 -1
  7. package/dist/fastify.d.ts +3 -3
  8. package/dist/fastify.js +1 -1
  9. package/dist/index.d.ts +27 -25
  10. package/dist/index.js +13 -12
  11. package/dist/markdown/MarkdownBubbleMenu.js +1 -1
  12. package/dist/markdown/MdKitEditor.d.ts +2 -2
  13. package/dist/markdown/MdKitEditor.js +2 -2
  14. package/dist/markdown/MdKitView.js +1 -1
  15. package/dist/markdown/TiptapMarkdownSurface.d.ts +2 -2
  16. package/dist/markdown/TiptapMarkdownSurface.js +33 -25
  17. package/dist/markdown/createMdKitTiptapExtensions.d.ts +8 -0
  18. package/dist/markdown/createMdKitTiptapExtensions.js +27 -0
  19. package/dist/markdown/prepareMarkdownForEditorHydration.js +1 -1
  20. package/dist/markdown/preserveMarkdownWhitespace.js +1 -1
  21. package/dist/theme/MdKitThemeEditor.d.ts +1 -1
  22. package/dist/transport/fastify.d.ts +1 -1
  23. package/dist/transport/fastify.js +1 -1
  24. package/dist/transport/http.d.ts +1 -1
  25. package/dist/transport/index.d.ts +5 -5
  26. package/dist/transport/index.js +2 -2
  27. package/dist/transport/rest.d.ts +1 -1
  28. package/dist/transport/store.d.ts +1 -1
  29. package/dist/transport/trpcClient.d.ts +2 -2
  30. package/dist/transport/trpcServer.d.ts +1 -1
  31. package/dist/trpc/client.d.ts +3 -3
  32. package/dist/trpc/client.js +1 -1
  33. package/dist/trpc/server.d.ts +3 -3
  34. package/dist/trpc/server.js +1 -1
  35. package/dist/trpc.d.ts +3 -3
  36. package/dist/trpc.js +1 -1
  37. package/dist/versioning/VersionHistoryPanel.d.ts +2 -2
  38. package/dist/versioning/VersionHistoryPanel.js +1 -1
  39. package/dist/versioning/useMdKitDocumentVersions.d.ts +1 -1
  40. package/dist/yjs/MdKitMarkdownYjs.d.ts +12 -0
  41. package/dist/yjs/MdKitMarkdownYjs.js +40 -0
  42. package/dist/yjs/index.d.ts +2 -0
  43. package/dist/yjs/index.js +1 -0
  44. package/package.json +10 -2
@@ -1,4 +1,4 @@
1
- import type { MdKitCollaborationParticipant, MdKitCollaborationSession } from "../document/documentTypes";
1
+ import type { MdKitCollaborationParticipant, MdKitCollaborationSession } from "../document/documentTypes.js";
2
2
  export type UseMdKitCollaborationOptions = {
3
3
  collaborator: MdKitCollaborationParticipant;
4
4
  documentId: string | null;
@@ -1,4 +1,4 @@
1
- import type { MdKitDocumentController } from "./useMdKitDocument";
1
+ import type { MdKitDocumentController } from "./useMdKitDocument.js";
2
2
  export type MdKitConflictPanelProps = {
3
3
  className?: string;
4
4
  document: MdKitDocumentController;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { joinClassNames } from "../ui/joinClassNames";
3
+ import { joinClassNames } from "../ui/joinClassNames.js";
4
4
  export const MdKitConflictPanel = ({ className, document, title = "Document conflict", }) => {
5
5
  const [pendingAction, setPendingAction] = useState(null);
6
6
  const [activePreview, setActivePreview] = useState("remote");
@@ -1,6 +1,6 @@
1
- import type { MdKitCollaborationSession } from "./documentTypes";
2
- import type { MdKitDocumentController } from "./useMdKitDocument";
3
- import type { MdKitDocumentVersionsController } from "../versioning/useMdKitDocumentVersions";
1
+ import type { MdKitCollaborationSession } from "./documentTypes.js";
2
+ import type { MdKitDocumentController } from "./useMdKitDocument.js";
3
+ import type { MdKitDocumentVersionsController } from "../versioning/useMdKitDocumentVersions.js";
4
4
  export type MdKitDocumentToolbarProps = {
5
5
  className?: string;
6
6
  collaboration?: MdKitCollaborationSession | null;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { joinClassNames } from "../ui/joinClassNames";
3
+ import { joinClassNames } from "../ui/joinClassNames.js";
4
4
  const formatUpdatedAt = (updatedAt) => {
5
5
  if (!updatedAt) {
6
6
  return "Never saved";
@@ -1,4 +1,4 @@
1
- import type { MdKitDocumentAdapter, MdKitDocumentVersionToken } from "./documentTypes";
1
+ import type { MdKitDocumentAdapter, MdKitDocumentVersionToken } from "./documentTypes.js";
2
2
  export type UseMdKitDocumentOptions = {
3
3
  adapter: Pick<MdKitDocumentAdapter, "readDocument" | "writeDocument" | "resyncDocument">;
4
4
  debounceMs?: number;
package/dist/fastify.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { registerMdKitFastify } from "./transport/fastify";
2
- export type { RegisterMdKitFastifyOptions } from "./transport/fastify";
3
- export type { MdKitRestoreDocumentVersionInput, MdKitTransportStore, } from "./transport/store";
1
+ export { registerMdKitFastify } from "./transport/fastify.js";
2
+ export type { RegisterMdKitFastifyOptions } from "./transport/fastify.js";
3
+ export type { MdKitRestoreDocumentVersionInput, MdKitTransportStore, } from "./transport/store.js";
package/dist/fastify.js CHANGED
@@ -1 +1 @@
1
- export { registerMdKitFastify } from "./transport/fastify";
1
+ export { registerMdKitFastify } from "./transport/fastify.js";
package/dist/index.d.ts CHANGED
@@ -1,25 +1,27 @@
1
- export { useMdKitCollaboration } from "./collaboration/useMdKitCollaboration";
2
- export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./core/documentEngine";
3
- export { useMdKitDocument } from "./document/useMdKitDocument";
4
- export { MdKitConflictPanel } from "./document/MdKitConflictPanel";
5
- export { MdKitDocumentToolbar } from "./document/MdKitDocumentToolbar";
6
- export { MdKitEditor } from "./markdown/MdKitEditor";
7
- export { MdKitView } from "./markdown/MdKitView";
8
- export { MdKitThemeEditor } from "./theme/MdKitThemeEditor";
9
- export { createMdKitRestAdapter } from "./transport/rest";
10
- export { createMdKitEditorThemeStyle, darkMdKitEditorTheme, defaultMdKitEditorTheme, } from "./theme/editorTheme";
11
- export { VersionHistoryPanel } from "./versioning/VersionHistoryPanel";
12
- export { useMdKitDocumentVersions } from "./versioning/useMdKitDocumentVersions";
13
- export type { CreateMdKitDocumentRecordInput, MdKitDocumentRecord, RestoreMdKitDocumentVersionInput, RestoreMdKitDocumentVersionResult, WriteMdKitDocumentRecordInput, WriteMdKitDocumentRecordResult, } from "./core/documentEngine";
14
- export type { MdKitCollaborationParticipant, MdKitCollaborationSession, MdKitCollaborationStatus, MdKitDocumentAdapter, MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentVersionToken, MdKitDocumentWriteInput, MdKitDocumentWriteResult, } from "./document/documentTypes";
15
- export type { MdKitDocumentConflictDetails, MdKitDocumentController, } from "./document/useMdKitDocument";
16
- export type { MdKitConflictPanelProps } from "./document/MdKitConflictPanel";
17
- export type { MdKitDocumentToolbarProps } from "./document/MdKitDocumentToolbar";
18
- export type { MdKitEditorProps } from "./markdown/MdKitEditor";
19
- export type { MdKitEditorDebugEvent } from "./markdown/editorDebug";
20
- export type { MdKitViewProps } from "./markdown/MdKitView";
21
- export type { MdKitThemeEditorProps } from "./theme/MdKitThemeEditor";
22
- export type { CreateMdKitRestAdapterOptions } from "./transport/rest";
23
- export type { MdKitEditorTheme, MdKitEditorThemeStyle, } from "./theme/editorTheme";
24
- export type { MdKitDocumentVersionsController, UseMdKitDocumentVersionsOptions, } from "./versioning/useMdKitDocumentVersions";
25
- export type { VersionHistoryPanelProps } from "./versioning/VersionHistoryPanel";
1
+ export { useMdKitCollaboration } from "./collaboration/useMdKitCollaboration.js";
2
+ export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./core/documentEngine.js";
3
+ export { useMdKitDocument } from "./document/useMdKitDocument.js";
4
+ export { MdKitConflictPanel } from "./document/MdKitConflictPanel.js";
5
+ export { MdKitDocumentToolbar } from "./document/MdKitDocumentToolbar.js";
6
+ export { MdKitEditor } from "./markdown/MdKitEditor.js";
7
+ export { MdKitView } from "./markdown/MdKitView.js";
8
+ export { MdKitThemeEditor } from "./theme/MdKitThemeEditor.js";
9
+ export { createMdKitRestAdapter } from "./transport/rest.js";
10
+ export { createMdKitEditorThemeStyle, darkMdKitEditorTheme, defaultMdKitEditorTheme, } from "./theme/editorTheme.js";
11
+ export { VersionHistoryPanel } from "./versioning/VersionHistoryPanel.js";
12
+ export { useMdKitDocumentVersions } from "./versioning/useMdKitDocumentVersions.js";
13
+ export { yjs } from "./yjs/index.js";
14
+ export type { CreateMdKitDocumentRecordInput, MdKitDocumentRecord, RestoreMdKitDocumentVersionInput, RestoreMdKitDocumentVersionResult, WriteMdKitDocumentRecordInput, WriteMdKitDocumentRecordResult, } from "./core/documentEngine.js";
15
+ export type { MdKitCollaborationParticipant, MdKitCollaborationSession, MdKitCollaborationStatus, MdKitDocumentAdapter, MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentVersionToken, MdKitDocumentWriteInput, MdKitDocumentWriteResult, } from "./document/documentTypes.js";
16
+ export type { MdKitDocumentConflictDetails, MdKitDocumentController, } from "./document/useMdKitDocument.js";
17
+ export type { MdKitConflictPanelProps } from "./document/MdKitConflictPanel.js";
18
+ export type { MdKitDocumentToolbarProps } from "./document/MdKitDocumentToolbar.js";
19
+ export type { MdKitEditorProps } from "./markdown/MdKitEditor.js";
20
+ export type { MdKitEditorDebugEvent } from "./markdown/editorDebug.js";
21
+ export type { MdKitViewProps } from "./markdown/MdKitView.js";
22
+ export type { MdKitThemeEditorProps } from "./theme/MdKitThemeEditor.js";
23
+ export type { CreateMdKitRestAdapterOptions } from "./transport/rest.js";
24
+ export type { MdKitEditorTheme, MdKitEditorThemeStyle, } from "./theme/editorTheme.js";
25
+ export type { MdKitDocumentVersionsController, UseMdKitDocumentVersionsOptions, } from "./versioning/useMdKitDocumentVersions.js";
26
+ export type { VersionHistoryPanelProps } from "./versioning/VersionHistoryPanel.js";
27
+ export type { MdKitMarkdownYjsOptions } from "./yjs/index.js";
package/dist/index.js CHANGED
@@ -1,12 +1,13 @@
1
- export { useMdKitCollaboration } from "./collaboration/useMdKitCollaboration";
2
- export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./core/documentEngine";
3
- export { useMdKitDocument } from "./document/useMdKitDocument";
4
- export { MdKitConflictPanel } from "./document/MdKitConflictPanel";
5
- export { MdKitDocumentToolbar } from "./document/MdKitDocumentToolbar";
6
- export { MdKitEditor } from "./markdown/MdKitEditor";
7
- export { MdKitView } from "./markdown/MdKitView";
8
- export { MdKitThemeEditor } from "./theme/MdKitThemeEditor";
9
- export { createMdKitRestAdapter } from "./transport/rest";
10
- export { createMdKitEditorThemeStyle, darkMdKitEditorTheme, defaultMdKitEditorTheme, } from "./theme/editorTheme";
11
- export { VersionHistoryPanel } from "./versioning/VersionHistoryPanel";
12
- export { useMdKitDocumentVersions } from "./versioning/useMdKitDocumentVersions";
1
+ export { useMdKitCollaboration } from "./collaboration/useMdKitCollaboration.js";
2
+ export { createMdKitDocumentRecord, detectMdKitDocumentConflict, normalizeMdKitVersionToken, restoreMdKitDocumentVersion, writeMdKitDocumentRecord, } from "./core/documentEngine.js";
3
+ export { useMdKitDocument } from "./document/useMdKitDocument.js";
4
+ export { MdKitConflictPanel } from "./document/MdKitConflictPanel.js";
5
+ export { MdKitDocumentToolbar } from "./document/MdKitDocumentToolbar.js";
6
+ export { MdKitEditor } from "./markdown/MdKitEditor.js";
7
+ export { MdKitView } from "./markdown/MdKitView.js";
8
+ export { MdKitThemeEditor } from "./theme/MdKitThemeEditor.js";
9
+ export { createMdKitRestAdapter } from "./transport/rest.js";
10
+ export { createMdKitEditorThemeStyle, darkMdKitEditorTheme, defaultMdKitEditorTheme, } from "./theme/editorTheme.js";
11
+ export { VersionHistoryPanel } from "./versioning/VersionHistoryPanel.js";
12
+ export { useMdKitDocumentVersions } from "./versioning/useMdKitDocumentVersions.js";
13
+ export { yjs } from "./yjs/index.js";
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEditorState } from "@tiptap/react";
3
3
  import { BubbleMenu } from "@tiptap/react/menus";
4
4
  import { Bold, Code2, Heading1, Heading2, Italic, Link2, List, ListOrdered, Quote, Strikethrough, } from "lucide-react";
5
- import { joinClassNames } from "../ui/joinClassNames";
5
+ import { joinClassNames } from "../ui/joinClassNames.js";
6
6
  const toolbarActiveStateIsEqual = (left, right) => {
7
7
  if (!right) {
8
8
  return false;
@@ -1,6 +1,6 @@
1
1
  import type { CSSProperties } from "react";
2
- import type { MdKitCollaborationSession } from "../document/documentTypes";
3
- import type { MdKitEditorDebugEvent } from "./editorDebug";
2
+ import type { MdKitCollaborationSession } from "../document/documentTypes.js";
3
+ import type { MdKitEditorDebugEvent } from "./editorDebug.js";
4
4
  type MdKitEditorBaseProps = {
5
5
  className?: string;
6
6
  fillHeight?: boolean;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { joinClassNames } from "../ui/joinClassNames";
3
- import { TiptapMarkdownSurface } from "./TiptapMarkdownSurface";
2
+ import { joinClassNames } from "../ui/joinClassNames.js";
3
+ import { TiptapMarkdownSurface } from "./TiptapMarkdownSurface.js";
4
4
  export const MdKitEditor = (props) => {
5
5
  const { className, fillHeight = false, readOnly = false, style, ...surfaceProps } = props;
6
6
  return (_jsx("div", { className: joinClassNames("mp-lb-mdkit-markdown-editor", fillHeight && "mp-lb-mdkit-markdown-editor-fill-height", className), "data-read-only": readOnly ? "true" : undefined, style: style, children: _jsx(TiptapMarkdownSurface, { readOnly: readOnly, ...surfaceProps }, props.instanceKey) }));
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import ReactMarkdown from "react-markdown";
3
3
  import remarkGfm from "remark-gfm";
4
- import { joinClassNames } from "../ui/joinClassNames";
4
+ import { joinClassNames } from "../ui/joinClassNames.js";
5
5
  export const MdKitView = ({ className, fillHeight = false, placeholder, style, value, }) => {
6
6
  const renderedValue = value.trim().length > 0 ? value : (placeholder ?? "");
7
7
  return (_jsx("div", { className: joinClassNames("mp-lb-mdkit-markdown-editor", "mp-lb-mdkit-markdown-view", fillHeight && "mp-lb-mdkit-markdown-editor-fill-height", className), "data-read-only": "true", style: style, children: _jsx("div", { className: "mp-lb-mdkit-editor-shell", children: _jsx("div", { className: "mp-lb-mdkit-editor-surface", children: renderedValue.length > 0 ? (_jsx("div", { className: "mp-lb-mdkit-tiptap mp-lb-mdkit-view-content", children: _jsx(ReactMarkdown, { components: {
@@ -1,5 +1,5 @@
1
- import type { MdKitCollaborationSession } from "../document/documentTypes";
2
- import type { MdKitEditorDebugEvent } from "./editorDebug";
1
+ import type { MdKitCollaborationSession } from "../document/documentTypes.js";
2
+ import type { MdKitEditorDebugEvent } from "./editorDebug.js";
3
3
  type LocalTiptapMarkdownSurfaceProps = {
4
4
  collaboration?: null;
5
5
  onChange?: (markdown: string) => void;
@@ -2,13 +2,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useMemo, useRef } from "react";
3
3
  import Collaboration from "@tiptap/extension-collaboration";
4
4
  import CollaborationCaret from "@tiptap/extension-collaboration-caret";
5
- import { Markdown } from "@tiptap/markdown";
6
- import Placeholder from "@tiptap/extension-placeholder";
7
5
  import { EditorContent, useEditor } from "@tiptap/react";
8
- import StarterKit from "@tiptap/starter-kit";
9
- import { MarkdownBubbleMenu } from "./MarkdownBubbleMenu";
10
- import { normalizeMarkdownSerialization } from "./normalizeMarkdownSerialization";
11
- import { prepareMarkdownForEditorHydration } from "./prepareMarkdownForEditorHydration";
6
+ import { createMdKitTiptapExtensions } from "./createMdKitTiptapExtensions.js";
7
+ import { MarkdownBubbleMenu } from "./MarkdownBubbleMenu.js";
8
+ import { normalizeMarkdownSerialization } from "./normalizeMarkdownSerialization.js";
9
+ import { prepareMarkdownForEditorHydration } from "./prepareMarkdownForEditorHydration.js";
12
10
  const describeElement = (element) => {
13
11
  const classes = element instanceof HTMLElement && element.className
14
12
  ? `.${String(element.className).trim().replace(/\s+/g, ".")}`
@@ -123,26 +121,9 @@ export const TiptapMarkdownSurface = (props) => {
123
121
  },
124
122
  },
125
123
  extensions: [
126
- StarterKit.configure({
127
- heading: { levels: [1, 2] },
128
- link: {
129
- HTMLAttributes: {
130
- rel: "noopener noreferrer",
131
- target: "_blank",
132
- },
133
- autolink: true,
134
- linkOnPaste: true,
135
- openOnClick: true,
136
- },
137
- undoRedo: hasCollaboration ? false : undefined,
138
- }),
139
- Placeholder.configure({
124
+ ...createMdKitTiptapExtensions({
140
125
  placeholder,
141
- }),
142
- Markdown.configure({
143
- markedOptions: {
144
- gfm: true,
145
- },
126
+ undoRedo: !hasCollaboration,
146
127
  }),
147
128
  ...(collaborationDocument
148
129
  ? [
@@ -191,6 +172,33 @@ export const TiptapMarkdownSurface = (props) => {
191
172
  useEffect(() => {
192
173
  editor?.setEditable(!readOnly);
193
174
  }, [editor, readOnly]);
175
+ useEffect(() => {
176
+ if (!editor) {
177
+ return;
178
+ }
179
+ const blurEditorOnExternalPointerDown = (event) => {
180
+ if (editor.isDestroyed) {
181
+ return;
182
+ }
183
+ const target = event.target;
184
+ if (!(target instanceof Element)) {
185
+ return;
186
+ }
187
+ if (editorSurfaceRef.current?.contains(target) ||
188
+ target.closest(".mp-lb-mdkit-toolbar")) {
189
+ return;
190
+ }
191
+ editor.commands.blur();
192
+ };
193
+ document.addEventListener("pointerdown", blurEditorOnExternalPointerDown, {
194
+ capture: true,
195
+ });
196
+ return () => {
197
+ document.removeEventListener("pointerdown", blurEditorOnExternalPointerDown, {
198
+ capture: true,
199
+ });
200
+ };
201
+ }, [editor]);
194
202
  useEffect(() => {
195
203
  if (!editor) {
196
204
  return;
@@ -0,0 +1,8 @@
1
+ import type { Extensions } from "@tiptap/core";
2
+ type CreateMdKitTiptapExtensionsOptions = {
3
+ placeholder?: string;
4
+ undoRedo?: boolean;
5
+ };
6
+ export declare const defaultMdKitMarkdownPlaceholder = "Start writing...";
7
+ export declare const createMdKitTiptapExtensions: ({ placeholder, undoRedo, }?: CreateMdKitTiptapExtensionsOptions) => Extensions;
8
+ export {};
@@ -0,0 +1,27 @@
1
+ import { Markdown } from "@tiptap/markdown";
2
+ import Placeholder from "@tiptap/extension-placeholder";
3
+ import StarterKit from "@tiptap/starter-kit";
4
+ export const defaultMdKitMarkdownPlaceholder = "Start writing...";
5
+ export const createMdKitTiptapExtensions = ({ placeholder = defaultMdKitMarkdownPlaceholder, undoRedo = true, } = {}) => [
6
+ StarterKit.configure({
7
+ heading: { levels: [1, 2] },
8
+ link: {
9
+ HTMLAttributes: {
10
+ rel: "noopener noreferrer",
11
+ target: "_blank",
12
+ },
13
+ autolink: true,
14
+ linkOnPaste: true,
15
+ openOnClick: true,
16
+ },
17
+ undoRedo: undoRedo ? undefined : false,
18
+ }),
19
+ Placeholder.configure({
20
+ placeholder,
21
+ }),
22
+ Markdown.configure({
23
+ markedOptions: {
24
+ gfm: true,
25
+ },
26
+ }),
27
+ ];
@@ -1,4 +1,4 @@
1
- import { getMarkdownFenceRanges, isInsideMarkdownFence, } from "./markdownFenceRanges";
1
+ import { getMarkdownFenceRanges, isInsideMarkdownFence, } from "./markdownFenceRanges.js";
2
2
  const expandedBlankLineRunPattern = /\n{3,}/g;
3
3
  export const prepareMarkdownForEditorHydration = (markdown) => {
4
4
  const fenceRanges = getMarkdownFenceRanges(markdown);
@@ -1,4 +1,4 @@
1
- import { getMarkdownFenceRanges, isInsideMarkdownFence, } from "./markdownFenceRanges";
1
+ import { getMarkdownFenceRanges, isInsideMarkdownFence, } from "./markdownFenceRanges.js";
2
2
  const tokenizeMarkdownBlocks = (markdown) => {
3
3
  const ranges = getMarkdownFenceRanges(markdown);
4
4
  const tokens = [];
@@ -1,4 +1,4 @@
1
- import type { MdKitEditorTheme } from "./editorTheme";
1
+ import type { MdKitEditorTheme } from "./editorTheme.js";
2
2
  export type MdKitThemeEditorProps = {
3
3
  className?: string;
4
4
  onChange: (theme: MdKitEditorTheme) => void;
@@ -1,5 +1,5 @@
1
1
  import type { FastifyInstance } from "fastify";
2
- import type { MdKitTransportStore } from "./store";
2
+ import type { MdKitTransportStore } from "./store.js";
3
3
  export type RegisterMdKitFastifyOptions = {
4
4
  prefix?: string;
5
5
  store: MdKitTransportStore;
@@ -1,4 +1,4 @@
1
- import { createMdKitHttpHandlers } from "./http";
1
+ import { createMdKitHttpHandlers } from "./http.js";
2
2
  const send = async (reply, response) => {
3
3
  const { body, status } = await response;
4
4
  return reply.status(status).send(body);
@@ -1,4 +1,4 @@
1
- import type { MdKitTransportStore } from "./store";
1
+ import type { MdKitTransportStore } from "./store.js";
2
2
  export type MdKitHttpRequest = {
3
3
  body?: unknown;
4
4
  params?: Record<string, unknown>;
@@ -1,5 +1,5 @@
1
- export { createMdKitHttpHandlers } from "./http";
2
- export { createMdKitRestAdapter } from "./rest";
3
- export type { MdKitHttpHandlers, MdKitHttpRequest, MdKitHttpResponse, } from "./http";
4
- export type { CreateMdKitRestAdapterOptions } from "./rest";
5
- export type { MdKitRestoreDocumentVersionInput, MdKitTransportStore, } from "./store";
1
+ export { createMdKitHttpHandlers } from "./http.js";
2
+ export { createMdKitRestAdapter } from "./rest.js";
3
+ export type { MdKitHttpHandlers, MdKitHttpRequest, MdKitHttpResponse, } from "./http.js";
4
+ export type { CreateMdKitRestAdapterOptions } from "./rest.js";
5
+ export type { MdKitRestoreDocumentVersionInput, MdKitTransportStore, } from "./store.js";
@@ -1,2 +1,2 @@
1
- export { createMdKitHttpHandlers } from "./http";
2
- export { createMdKitRestAdapter } from "./rest";
1
+ export { createMdKitHttpHandlers } from "./http.js";
2
+ export { createMdKitRestAdapter } from "./rest.js";
@@ -1,4 +1,4 @@
1
- import type { MdKitDocumentAdapter } from "../document/documentTypes";
1
+ import type { MdKitDocumentAdapter } from "../document/documentTypes.js";
2
2
  export type CreateMdKitRestAdapterOptions = {
3
3
  baseUrl: string;
4
4
  fetch?: typeof fetch;
@@ -1,4 +1,4 @@
1
- import type { MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentWriteInput, MdKitDocumentWriteResult } from "../document/documentTypes";
1
+ import type { MdKitDocumentSnapshot, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary, MdKitDocumentWriteInput, MdKitDocumentWriteResult } from "../document/documentTypes.js";
2
2
  export type MdKitTransportStore = {
3
3
  readDocument(documentId: string): Promise<MdKitDocumentSnapshot> | MdKitDocumentSnapshot;
4
4
  writeDocument(input: MdKitDocumentWriteInput): Promise<MdKitDocumentWriteResult> | MdKitDocumentWriteResult;
@@ -1,6 +1,6 @@
1
1
  import { createTRPCProxyClient } from "@trpc/client";
2
- import type { MdKitDocumentAdapter } from "../document/documentTypes";
3
- import type { MdKitTrpcRouter } from "./trpcServer";
2
+ import type { MdKitDocumentAdapter } from "../document/documentTypes.js";
3
+ import type { MdKitTrpcRouter } from "./trpcServer.js";
4
4
  export type CreateMdKitTrpcClientAdapterOptions = {
5
5
  url: string;
6
6
  };
@@ -1,4 +1,4 @@
1
- import type { MdKitTransportStore } from "./store";
1
+ import type { MdKitTransportStore } from "./store.js";
2
2
  export declare const createMdKitTrpcRouter: (store: MdKitTransportStore) => import("@trpc/server").TRPCBuiltRouter<{
3
3
  ctx: object;
4
4
  meta: object;
@@ -1,3 +1,3 @@
1
- export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "../transport/trpcClient";
2
- export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, } from "../transport/trpcClient";
3
- export type { MdKitTrpcRouter } from "../transport/trpcServer";
1
+ export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "../transport/trpcClient.js";
2
+ export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, } from "../transport/trpcClient.js";
3
+ export type { MdKitTrpcRouter } from "../transport/trpcServer.js";
@@ -1 +1 @@
1
- export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "../transport/trpcClient";
1
+ export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "../transport/trpcClient.js";
@@ -1,3 +1,3 @@
1
- export { createMdKitTrpcRouter } from "../transport/trpcServer";
2
- export type { MdKitTrpcRouter } from "../transport/trpcServer";
3
- export type { MdKitRestoreDocumentVersionInput, MdKitTransportStore, } from "../transport/store";
1
+ export { createMdKitTrpcRouter } from "../transport/trpcServer.js";
2
+ export type { MdKitTrpcRouter } from "../transport/trpcServer.js";
3
+ export type { MdKitRestoreDocumentVersionInput, MdKitTransportStore, } from "../transport/store.js";
@@ -1 +1 @@
1
- export { createMdKitTrpcRouter } from "../transport/trpcServer";
1
+ export { createMdKitTrpcRouter } from "../transport/trpcServer.js";
package/dist/trpc.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "./transport/trpcClient";
2
- export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, } from "./transport/trpcClient";
3
- export type { MdKitTrpcRouter } from "./transport/trpcServer";
1
+ export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "./transport/trpcClient.js";
2
+ export type { CreateMdKitTrpcAdapterOptions, CreateMdKitTrpcClientAdapterOptions, } from "./transport/trpcClient.js";
3
+ export type { MdKitTrpcRouter } from "./transport/trpcServer.js";
package/dist/trpc.js CHANGED
@@ -1 +1 @@
1
- export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "./transport/trpcClient";
1
+ export { createMdKitTrpcAdapter, createMdKitTrpcClient, createMdKitTrpcClientAdapter, } from "./transport/trpcClient.js";
@@ -1,5 +1,5 @@
1
- import type { MdKitDocumentVersionDetail } from "../document/documentTypes";
2
- import type { MdKitDocumentVersionsController } from "./useMdKitDocumentVersions";
1
+ import type { MdKitDocumentVersionDetail } from "../document/documentTypes.js";
2
+ import type { MdKitDocumentVersionsController } from "./useMdKitDocumentVersions.js";
3
3
  export type VersionHistoryPanelProps = {
4
4
  className?: string;
5
5
  controller: MdKitDocumentVersionsController;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { joinClassNames } from "../ui/joinClassNames";
3
+ import { joinClassNames } from "../ui/joinClassNames.js";
4
4
  const getVersionLabel = (version) => {
5
5
  if (version.label) {
6
6
  return version.label;
@@ -1,4 +1,4 @@
1
- import type { MdKitDocumentAdapter, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary } from "../document/documentTypes";
1
+ import type { MdKitDocumentAdapter, MdKitDocumentVersionDetail, MdKitDocumentVersionSummary } from "../document/documentTypes.js";
2
2
  export type UseMdKitDocumentVersionsOptions = {
3
3
  adapter: Pick<MdKitDocumentAdapter, "listDocumentVersions" | "readDocumentVersion">;
4
4
  documentId: string | null;
@@ -0,0 +1,12 @@
1
+ import * as Y from "yjs";
2
+ export type MdKitMarkdownYjsOptions = {
3
+ fragmentName?: string;
4
+ };
5
+ export declare const replaceMdKitYjsMarkdown: (ydoc: Y.Doc, markdown: string, options?: MdKitMarkdownYjsOptions) => Uint8Array;
6
+ export declare const markdownToMdKitYjs: (markdown: string, options?: MdKitMarkdownYjsOptions) => Uint8Array;
7
+ export declare const mdKitYjsToMarkdown: (yjsState: Uint8Array, options?: MdKitMarkdownYjsOptions) => string;
8
+ export declare const yjs: {
9
+ markdownToMdKitYjs: (markdown: string, options?: MdKitMarkdownYjsOptions) => Uint8Array;
10
+ mdKitYjsToMarkdown: (yjsState: Uint8Array, options?: MdKitMarkdownYjsOptions) => string;
11
+ replaceMdKitYjsMarkdown: (ydoc: Y.Doc, markdown: string, options?: MdKitMarkdownYjsOptions) => Uint8Array;
12
+ };
@@ -0,0 +1,40 @@
1
+ import { getSchema } from "@tiptap/core";
2
+ import { MarkdownManager } from "@tiptap/markdown";
3
+ import { prosemirrorJSONToYXmlFragment, yXmlFragmentToProsemirrorJSON, } from "@tiptap/y-tiptap";
4
+ import * as Y from "yjs";
5
+ import { createMdKitTiptapExtensions } from "../markdown/createMdKitTiptapExtensions.js";
6
+ import { normalizeMarkdownSerialization } from "../markdown/normalizeMarkdownSerialization.js";
7
+ import { prepareMarkdownForEditorHydration } from "../markdown/prepareMarkdownForEditorHydration.js";
8
+ const defaultMdKitYjsFragmentName = "default";
9
+ const getMdKitYjsFragmentName = (options) => options?.fragmentName ?? defaultMdKitYjsFragmentName;
10
+ const createMdKitMarkdownManager = () => new MarkdownManager({
11
+ extensions: createMdKitTiptapExtensions(),
12
+ markedOptions: {
13
+ gfm: true,
14
+ },
15
+ });
16
+ const createMdKitProseMirrorSchema = () => getSchema(createMdKitTiptapExtensions());
17
+ const markdownToProseMirrorJson = (markdown) => createMdKitMarkdownManager().parse(prepareMarkdownForEditorHydration(markdown));
18
+ const proseMirrorJsonToMarkdown = (json) => normalizeMarkdownSerialization(createMdKitMarkdownManager().serialize(json));
19
+ export const replaceMdKitYjsMarkdown = (ydoc, markdown, options) => {
20
+ const fragment = ydoc.getXmlFragment(getMdKitYjsFragmentName(options));
21
+ const schema = createMdKitProseMirrorSchema();
22
+ const json = markdownToProseMirrorJson(markdown);
23
+ prosemirrorJSONToYXmlFragment(schema, json, fragment);
24
+ return Y.encodeStateAsUpdate(ydoc);
25
+ };
26
+ export const markdownToMdKitYjs = (markdown, options) => {
27
+ const ydoc = new Y.Doc();
28
+ return replaceMdKitYjsMarkdown(ydoc, markdown, options);
29
+ };
30
+ export const mdKitYjsToMarkdown = (yjsState, options) => {
31
+ const ydoc = new Y.Doc();
32
+ Y.applyUpdate(ydoc, yjsState);
33
+ const json = yXmlFragmentToProsemirrorJSON(ydoc.getXmlFragment(getMdKitYjsFragmentName(options)));
34
+ return proseMirrorJsonToMarkdown(json);
35
+ };
36
+ export const yjs = {
37
+ markdownToMdKitYjs,
38
+ mdKitYjsToMarkdown,
39
+ replaceMdKitYjsMarkdown,
40
+ };
@@ -0,0 +1,2 @@
1
+ export { markdownToMdKitYjs, mdKitYjsToMarkdown, replaceMdKitYjsMarkdown, yjs, } from "./MdKitMarkdownYjs.js";
2
+ export type { MdKitMarkdownYjsOptions } from "./MdKitMarkdownYjs.js";
@@ -0,0 +1 @@
1
+ export { markdownToMdKitYjs, mdKitYjsToMarkdown, replaceMdKitYjsMarkdown, yjs, } from "./MdKitMarkdownYjs.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mp-lb/mdkit",
3
- "version": "0.2.2",
3
+ "version": "0.2.3-main.20.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -34,6 +34,11 @@
34
34
  "import": "./dist/trpc.js",
35
35
  "types": "./dist/trpc.d.ts"
36
36
  },
37
+ "./yjs": {
38
+ "source": "./src/yjs/index.ts",
39
+ "import": "./dist/yjs/index.js",
40
+ "types": "./dist/yjs/index.d.ts"
41
+ },
37
42
  "./styles.css": "./src/styles.css",
38
43
  "./trpc/client": {
39
44
  "source": "./src/trpc/client.ts",
@@ -70,13 +75,16 @@
70
75
  },
71
76
  "dependencies": {
72
77
  "@hocuspocus/provider": "^2.15.0",
78
+ "@tiptap/core": "^3.14.0",
73
79
  "@tiptap/extension-collaboration": "^3.14.0",
74
80
  "@tiptap/extension-collaboration-caret": "^3.14.0",
75
81
  "@tiptap/extension-link": "^3.14.0",
76
82
  "@tiptap/extension-placeholder": "^3.14.0",
77
83
  "@tiptap/markdown": "^3.20.1",
84
+ "@tiptap/pm": "^3.14.0",
78
85
  "@tiptap/react": "^3.14.0",
79
86
  "@tiptap/starter-kit": "^3.14.0",
87
+ "@tiptap/y-tiptap": "^3.0.2",
80
88
  "lucide-react": "^0.554.0",
81
89
  "react-markdown": "10.1.0",
82
90
  "remark-gfm": "4.0.1",
@@ -100,7 +108,7 @@
100
108
  },
101
109
  "scripts": {
102
110
  "dev": "tsc --watch --project tsconfig.json",
103
- "build": "tsc --project tsconfig.json",
111
+ "build": "tsc --project tsconfig.json && node scripts/add-js-extensions.mjs",
104
112
  "docs:build": "vitepress build docs",
105
113
  "docs:dev": "node scripts/load-docs-env.mjs dev",
106
114
  "docs:preview": "node scripts/load-docs-env.mjs preview",