markdown-wysiwyg-editor 0.1.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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +204 -0
  3. package/dist/components/LinkContextMenu.d.ts +21 -0
  4. package/dist/components/LinkContextMenu.d.ts.map +1 -0
  5. package/dist/components/MarkdownEditor.d.ts +4 -0
  6. package/dist/components/MarkdownEditor.d.ts.map +1 -0
  7. package/dist/components/MarkdownEditor.test.d.ts +2 -0
  8. package/dist/components/MarkdownEditor.test.d.ts.map +1 -0
  9. package/dist/components/MarkdownSyntaxStatus.d.ts +9 -0
  10. package/dist/components/MarkdownSyntaxStatus.d.ts.map +1 -0
  11. package/dist/components/MarkdownToolbar.d.ts +15 -0
  12. package/dist/components/MarkdownToolbar.d.ts.map +1 -0
  13. package/dist/components/TableContextMenu.d.ts +18 -0
  14. package/dist/components/TableContextMenu.d.ts.map +1 -0
  15. package/dist/components/TableEdgeControls.d.ts +11 -0
  16. package/dist/components/TableEdgeControls.d.ts.map +1 -0
  17. package/dist/components/TableToolbar.d.ts +13 -0
  18. package/dist/components/TableToolbar.d.ts.map +1 -0
  19. package/dist/constants/editor.d.ts +4 -0
  20. package/dist/constants/editor.d.ts.map +1 -0
  21. package/dist/converters/JsonToMarkdownConverter.d.ts +65 -0
  22. package/dist/converters/JsonToMarkdownConverter.d.ts.map +1 -0
  23. package/dist/converters/MarkdownTipTapConverter.d.ts +28 -0
  24. package/dist/converters/MarkdownTipTapConverter.d.ts.map +1 -0
  25. package/dist/extensions/CodeBlockNodeView.d.ts +3 -0
  26. package/dist/extensions/CodeBlockNodeView.d.ts.map +1 -0
  27. package/dist/extensions/CustomCodeBlock.d.ts +2 -0
  28. package/dist/extensions/CustomCodeBlock.d.ts.map +1 -0
  29. package/dist/extensions/LinkClickExtension.d.ts +7 -0
  30. package/dist/extensions/LinkClickExtension.d.ts.map +1 -0
  31. package/dist/extensions/MarkdownPasteExtension.d.ts +6 -0
  32. package/dist/extensions/MarkdownPasteExtension.d.ts.map +1 -0
  33. package/dist/extensions/MarkdownShortcutsExtension.d.ts +3 -0
  34. package/dist/extensions/MarkdownShortcutsExtension.d.ts.map +1 -0
  35. package/dist/extensions/TableForceExtension.d.ts +7 -0
  36. package/dist/extensions/TableForceExtension.d.ts.map +1 -0
  37. package/dist/extensions/TableHoverExtension.d.ts +7 -0
  38. package/dist/extensions/TableHoverExtension.d.ts.map +1 -0
  39. package/dist/extensions/TableResizeEnhancement.d.ts +7 -0
  40. package/dist/extensions/TableResizeEnhancement.d.ts.map +1 -0
  41. package/dist/extensions/TableRightClickExtension.d.ts +4 -0
  42. package/dist/extensions/TableRightClickExtension.d.ts.map +1 -0
  43. package/dist/hooks/useEditorState.d.ts +14 -0
  44. package/dist/hooks/useEditorState.d.ts.map +1 -0
  45. package/dist/hooks/useTableToolbar.d.ts +13 -0
  46. package/dist/hooks/useTableToolbar.d.ts.map +1 -0
  47. package/dist/index.css +1 -0
  48. package/dist/index.d.ts +19 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +37164 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/types/editor.d.ts +6 -0
  53. package/dist/types/editor.d.ts.map +1 -0
  54. package/dist/types/index.d.ts +81 -0
  55. package/dist/types/index.d.ts.map +1 -0
  56. package/dist/utils/logger.d.ts +13 -0
  57. package/dist/utils/logger.d.ts.map +1 -0
  58. package/dist/utils/pasteHandler.d.ts +18 -0
  59. package/dist/utils/pasteHandler.d.ts.map +1 -0
  60. package/dist/utils/security.d.ts +3 -0
  61. package/dist/utils/security.d.ts.map +1 -0
  62. package/dist/utils/selectionUtils.d.ts +21 -0
  63. package/dist/utils/selectionUtils.d.ts.map +1 -0
  64. package/package.json +99 -0
@@ -0,0 +1,6 @@
1
+ import { Editor } from '@tiptap/core';
2
+ export interface ExtendedEditor extends Editor {
3
+ __isProcessing?: boolean;
4
+ __preventUpdate?: boolean;
5
+ }
6
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/types/editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B"}
@@ -0,0 +1,81 @@
1
+ import { JSONContent, Editor } from '@tiptap/core';
2
+ /**
3
+ * Language option for code blocks
4
+ */
5
+ export interface ILanguageOption {
6
+ value: string;
7
+ label: string;
8
+ }
9
+ /**
10
+ * Selection information
11
+ */
12
+ export interface ISelectionInfo {
13
+ selectedText: string;
14
+ markdownSyntax: string;
15
+ nodeType: string;
16
+ marks: string[];
17
+ from?: number;
18
+ to?: number;
19
+ }
20
+ /**
21
+ * Main editor props
22
+ */
23
+ export interface IMarkdownEditorProps {
24
+ value?: string;
25
+ onChange?: (value: string) => void;
26
+ initialContent?: string;
27
+ onMarkdownChange?: (markdown: string) => void;
28
+ editable?: boolean;
29
+ placeholder?: string;
30
+ enableMermaid?: boolean;
31
+ enableImage?: boolean;
32
+ enableTable?: boolean;
33
+ enableCodeBlock?: boolean;
34
+ enableLink?: boolean;
35
+ mermaidLib?: unknown;
36
+ className?: string;
37
+ style?: React.CSSProperties;
38
+ onBlur?: () => void;
39
+ onFocus?: () => void;
40
+ onContentChange?: (content: JSONContent) => void;
41
+ onSelectionChange?: (selectionInfo: ISelectionInfo | null) => void;
42
+ onEditorReady?: (editor: Editor) => void;
43
+ extensions?: unknown[];
44
+ supportedLanguages?: ILanguageOption[];
45
+ showSyntaxStatus?: boolean;
46
+ showToolbar?: boolean;
47
+ enableVerticalScroll?: boolean;
48
+ autoHeight?: boolean;
49
+ showDownloadButton?: boolean;
50
+ downloadFilename?: string;
51
+ showPasteDebug?: boolean;
52
+ }
53
+ /**
54
+ * Default text labels (for i18n replacement)
55
+ */
56
+ export declare const DEFAULT_TEXTS: {
57
+ placeholder: string;
58
+ deleteButton: string;
59
+ renderButton: string;
60
+ cancelButton: string;
61
+ editSource: string;
62
+ downloadImage: string;
63
+ fullscreen: string;
64
+ closeFullscreen: string;
65
+ insertTable: string;
66
+ insertCodeBlock: string;
67
+ insertImage: string;
68
+ insertLink: string;
69
+ bold: string;
70
+ italic: string;
71
+ strikethrough: string;
72
+ code: string;
73
+ heading1: string;
74
+ heading2: string;
75
+ heading3: string;
76
+ bulletList: string;
77
+ orderedList: string;
78
+ blockquote: string;
79
+ horizontalRule: string;
80
+ };
81
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAEnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAGnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAG9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAG5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGzC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,eAAe,EAAE,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;CAwBzB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Simple console wrapper for logging
3
+ * Replaces @logger dependency
4
+ */
5
+ export interface ILogger {
6
+ debug: (...args: unknown[]) => void;
7
+ info: (...args: unknown[]) => void;
8
+ warn: (...args: unknown[]) => void;
9
+ error: (...args: unknown[]) => void;
10
+ }
11
+ export declare const createLogger: (context: string) => ILogger;
12
+ export declare const createContextLogger: (context: string) => ILogger;
13
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,OAK7C,CAAC;AAGH,eAAO,MAAM,mBAAmB,YARM,MAAM,KAAG,OAQA,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { ExtendedEditor } from '../types/editor';
2
+ import { ILogger } from './logger';
3
+ type SetProcessing = (processing: boolean) => void;
4
+ type SetProgress = (progress: {
5
+ processed: number;
6
+ total: number;
7
+ }) => void;
8
+ interface HandleMarkdownPasteParams {
9
+ editor: ExtendedEditor;
10
+ plainText: string;
11
+ logger: ILogger;
12
+ setIsProcessing: SetProcessing;
13
+ setProcessingProgress: SetProgress;
14
+ largeTextThreshold: number;
15
+ }
16
+ export declare const handleMarkdownPaste: ({ editor, plainText, logger, setIsProcessing, setProcessingProgress, largeTextThreshold, }: HandleMarkdownPasteParams) => Promise<void>;
17
+ export {};
18
+ //# sourceMappingURL=pasteHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pasteHandler.d.ts","sourceRoot":"","sources":["../../src/utils/pasteHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,KAAK,aAAa,GAAG,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;AAEnD,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC;AAE5E,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,aAAa,CAAC;IAC/B,qBAAqB,EAAE,WAAW,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,mBAAmB,GAAU,4FAOvC,yBAAyB,KAAG,OAAO,CAAC,IAAI,CAyC1C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const isValidUrl: (url: string) => boolean;
2
+ export declare const sanitizeText: (text: string) => string;
3
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/utils/security.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,OAOxC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAM3C,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Editor } from '@tiptap/react';
2
+ import { ISelectionInfo } from '../types/index';
3
+ export declare class SelectionUtils {
4
+ /**
5
+ * 現在の選択範囲からMarkdown構文情報を抽出
6
+ */
7
+ static getSelectionMarkdownSyntax(editor: Editor | null): ISelectionInfo | null;
8
+ /**
9
+ * ノード情報からMarkdown構文を生成
10
+ */
11
+ private static getNodeMarkdownInfo;
12
+ /**
13
+ * カーソル位置の親ノードの情報を取得
14
+ */
15
+ static getCurrentNodeInfo(editor: Editor | null): {
16
+ nodeType: string;
17
+ level?: number;
18
+ } | null;
19
+ }
20
+ export type { ISelectionInfo };
21
+ //# sourceMappingURL=selectionUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/selectionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI;IAgC/E;;OAEG;IAEH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAsHlC;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAY9F;AAED,YAAY,EAAE,cAAc,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "markdown-wysiwyg-editor",
3
+ "version": "0.1.0",
4
+ "description": "Lightweight Markdown WYSIWYG editor with TipTap,Mermaid support",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./style.css": "./dist/index.css"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "scripts": {
22
+ "dev": "vite",
23
+ "build": "tsc && vite build",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "lint": "eslint src --ext .ts,.tsx",
27
+ "prepublishOnly": "pnpm build && pnpm test"
28
+ },
29
+ "keywords": [
30
+ "markdown",
31
+ "wysiwyg",
32
+ "editor",
33
+ "tiptap",
34
+ "mermaid",
35
+ "react",
36
+ "typescript"
37
+ ],
38
+ "author": "Your Name",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/yourusername/markdown-wysiwyg.git"
42
+ },
43
+ "license": "MIT",
44
+ "engines": {
45
+ "node": ">=18.0.0"
46
+ },
47
+ "dependencies": {
48
+ "@tiptap/core": "^3.3.0",
49
+ "@tiptap/extension-character-count": "^3.3.0",
50
+ "@tiptap/extension-code-block-lowlight": "^3.3.0",
51
+ "@tiptap/extension-image": "^3.3.0",
52
+ "@tiptap/extension-link": "^3.3.0",
53
+ "@tiptap/extension-placeholder": "^3.3.0",
54
+ "@tiptap/extension-table": "^3.3.0",
55
+ "@tiptap/extension-table-cell": "^3.3.0",
56
+ "@tiptap/extension-table-header": "^3.3.0",
57
+ "@tiptap/extension-table-row": "^3.3.0",
58
+ "@tiptap/extension-typography": "^3.3.0",
59
+ "@tiptap/react": "^3.3.0",
60
+ "@tiptap/starter-kit": "^3.3.0",
61
+ "lowlight": "^3.3.0",
62
+ "prosemirror-state": "^1.4.3",
63
+ "lucide-react": "^0.452.0",
64
+ "uuid": "^11.0.3"
65
+ },
66
+ "peerDependencies": {
67
+ "mermaid": "^11.0.0",
68
+ "react": "^18.0.0 || ^19.0.0",
69
+ "react-dom": "^18.0.0 || ^19.0.0"
70
+ },
71
+ "peerDependenciesMeta": {
72
+ "mermaid": {
73
+ "optional": true
74
+ }
75
+ },
76
+ "devDependencies": {
77
+ "@testing-library/dom": "^10.4.1",
78
+ "@testing-library/react": "^16.3.0",
79
+ "@types/node": "^22.0.0",
80
+ "@types/react": "^19.0.0",
81
+ "@types/react-dom": "^19.0.0",
82
+ "@types/uuid": "^10.0.0",
83
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
84
+ "@typescript-eslint/parser": "^8.0.0",
85
+ "@vitejs/plugin-react": "^4.3.0",
86
+ "eslint": "^9.0.0",
87
+ "eslint-plugin-react": "^7.37.0",
88
+ "eslint-plugin-react-hooks": "^5.0.0",
89
+ "eslint-plugin-react-refresh": "^0.4.24",
90
+ "globals": "^16.5.0",
91
+ "jsdom": "^27.2.0",
92
+ "typescript": "^5.6.0",
93
+ "typescript-eslint": "^8.47.0",
94
+ "vite": "^6.0.0",
95
+ "vite-plugin-dts": "^4.3.0",
96
+ "vitest": "^2.1.0"
97
+ },
98
+ "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387"
99
+ }