@teriusu/rich-editor 0.4.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 (90) hide show
  1. package/README.md +178 -0
  2. package/dist/components/BubbleToolbar.svelte +299 -0
  3. package/dist/components/BubbleToolbar.svelte.d.ts +9 -0
  4. package/dist/components/BubbleToolbar.svelte.d.ts.map +1 -0
  5. package/dist/components/FixedToolbar.svelte +892 -0
  6. package/dist/components/FixedToolbar.svelte.d.ts +11 -0
  7. package/dist/components/FixedToolbar.svelte.d.ts.map +1 -0
  8. package/dist/components/InputModal.svelte +102 -0
  9. package/dist/components/InputModal.svelte.d.ts +11 -0
  10. package/dist/components/InputModal.svelte.d.ts.map +1 -0
  11. package/dist/components/PdfViewer.svelte +152 -0
  12. package/dist/components/PdfViewer.svelte.d.ts +8 -0
  13. package/dist/components/PdfViewer.svelte.d.ts.map +1 -0
  14. package/dist/components/SlashCommandMenu.svelte +315 -0
  15. package/dist/components/SlashCommandMenu.svelte.d.ts +14 -0
  16. package/dist/components/SlashCommandMenu.svelte.d.ts.map +1 -0
  17. package/dist/components/TableBubbleMenu.svelte +472 -0
  18. package/dist/components/TableBubbleMenu.svelte.d.ts +8 -0
  19. package/dist/components/TableBubbleMenu.svelte.d.ts.map +1 -0
  20. package/dist/components/TipTapEditor.svelte +649 -0
  21. package/dist/components/TipTapEditor.svelte.d.ts +17 -0
  22. package/dist/components/TipTapEditor.svelte.d.ts.map +1 -0
  23. package/dist/extensions/Column.d.ts +3 -0
  24. package/dist/extensions/Column.d.ts.map +1 -0
  25. package/dist/extensions/Column.js +20 -0
  26. package/dist/extensions/Columns.d.ts +11 -0
  27. package/dist/extensions/Columns.d.ts.map +1 -0
  28. package/dist/extensions/Columns.js +103 -0
  29. package/dist/extensions/Columns.test.d.ts +2 -0
  30. package/dist/extensions/Columns.test.d.ts.map +1 -0
  31. package/dist/extensions/Columns.test.js +62 -0
  32. package/dist/extensions/FileAttachment.d.ts +24 -0
  33. package/dist/extensions/FileAttachment.d.ts.map +1 -0
  34. package/dist/extensions/FileAttachment.js +190 -0
  35. package/dist/extensions/FileAttachment.test.d.ts +2 -0
  36. package/dist/extensions/FileAttachment.test.d.ts.map +1 -0
  37. package/dist/extensions/FileAttachment.test.js +63 -0
  38. package/dist/extensions/FixedDetails.d.ts +2 -0
  39. package/dist/extensions/FixedDetails.d.ts.map +1 -0
  40. package/dist/extensions/FixedDetails.js +100 -0
  41. package/dist/extensions/FixedDetails.test.d.ts +2 -0
  42. package/dist/extensions/FixedDetails.test.d.ts.map +1 -0
  43. package/dist/extensions/FixedDetails.test.js +40 -0
  44. package/dist/extensions/Indent.d.ts +11 -0
  45. package/dist/extensions/Indent.d.ts.map +1 -0
  46. package/dist/extensions/Indent.js +87 -0
  47. package/dist/extensions/Indent.test.d.ts +2 -0
  48. package/dist/extensions/Indent.test.d.ts.map +1 -0
  49. package/dist/extensions/Indent.test.js +78 -0
  50. package/dist/extensions/PdfBlock.d.ts +3 -0
  51. package/dist/extensions/PdfBlock.d.ts.map +1 -0
  52. package/dist/extensions/PdfBlock.js +301 -0
  53. package/dist/extensions/PdfBlock.test.d.ts +2 -0
  54. package/dist/extensions/PdfBlock.test.d.ts.map +1 -0
  55. package/dist/extensions/PdfBlock.test.js +51 -0
  56. package/dist/extensions/VideoBlock.d.ts +16 -0
  57. package/dist/extensions/VideoBlock.d.ts.map +1 -0
  58. package/dist/extensions/VideoBlock.js +87 -0
  59. package/dist/extensions/VideoBlock.test.d.ts +2 -0
  60. package/dist/extensions/VideoBlock.test.d.ts.map +1 -0
  61. package/dist/extensions/VideoBlock.test.js +54 -0
  62. package/dist/index.d.ts +20 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +20 -0
  65. package/dist/styles/editor.css +698 -0
  66. package/dist/types.d.ts +44 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +1 -0
  69. package/dist/utils/cn.d.ts +3 -0
  70. package/dist/utils/cn.d.ts.map +1 -0
  71. package/dist/utils/cn.js +5 -0
  72. package/dist/utils/cn.test.d.ts +2 -0
  73. package/dist/utils/cn.test.d.ts.map +1 -0
  74. package/dist/utils/cn.test.js +28 -0
  75. package/dist/utils/escape-html.d.ts +2 -0
  76. package/dist/utils/escape-html.d.ts.map +1 -0
  77. package/dist/utils/escape-html.js +7 -0
  78. package/dist/utils/escape-html.test.d.ts +2 -0
  79. package/dist/utils/escape-html.test.d.ts.map +1 -0
  80. package/dist/utils/escape-html.test.js +25 -0
  81. package/dist/utils/pdf.d.ts +9 -0
  82. package/dist/utils/pdf.d.ts.map +1 -0
  83. package/dist/utils/pdf.js +33 -0
  84. package/dist/utils/sanitize.d.ts +9 -0
  85. package/dist/utils/sanitize.d.ts.map +1 -0
  86. package/dist/utils/sanitize.js +115 -0
  87. package/dist/utils/sanitize.test.d.ts +2 -0
  88. package/dist/utils/sanitize.test.d.ts.map +1 -0
  89. package/dist/utils/sanitize.test.js +206 -0
  90. package/package.json +76 -0
@@ -0,0 +1,54 @@
1
+ import { describe, it, expect, afterEach } from 'vitest';
2
+ import { Editor } from '@tiptap/core';
3
+ import StarterKit from '@tiptap/starter-kit';
4
+ import { VideoBlock } from './VideoBlock';
5
+ describe('VideoBlock extension', () => {
6
+ let editor;
7
+ function createEditor(content = '<p></p>') {
8
+ editor = new Editor({
9
+ element: document.createElement('div'),
10
+ extensions: [StarterKit, VideoBlock],
11
+ content
12
+ });
13
+ return editor;
14
+ }
15
+ afterEach(() => {
16
+ editor?.destroy();
17
+ });
18
+ it('registers with name "videoBlock"', () => {
19
+ createEditor();
20
+ const ext = editor.extensionManager.extensions.find((e) => e.name === 'videoBlock');
21
+ expect(ext).toBeDefined();
22
+ });
23
+ it('parses <div data-video-src="url">', () => {
24
+ createEditor('<div data-video-src="https://example.com/video.mp4" data-video-name="demo"></div>');
25
+ const doc = editor.getJSON();
26
+ const videoNode = doc.content?.find((n) => n.type === 'videoBlock');
27
+ expect(videoNode).toBeDefined();
28
+ expect(videoNode?.attrs?.src).toBe('https://example.com/video.mp4');
29
+ expect(videoNode?.attrs?.name).toBe('demo');
30
+ });
31
+ it('renders correct HTML', () => {
32
+ createEditor('<div data-video-src="https://example.com/video.mp4" data-video-name="demo"></div>');
33
+ const html = editor.getHTML();
34
+ expect(html).toContain('data-video-src="https://example.com/video.mp4"');
35
+ expect(html).toContain('data-video-name="demo"');
36
+ });
37
+ it('defaults name to empty string', () => {
38
+ createEditor('<div data-video-src="https://example.com/video.mp4"></div>');
39
+ const doc = editor.getJSON();
40
+ const videoNode = doc.content?.find((n) => n.type === 'videoBlock');
41
+ expect(videoNode?.attrs?.name).toBe('');
42
+ });
43
+ it('inserts via setVideoBlock command', () => {
44
+ createEditor();
45
+ editor.commands.setVideoBlock({
46
+ src: 'https://example.com/v.mp4',
47
+ name: 'My Video'
48
+ });
49
+ const doc = editor.getJSON();
50
+ const videoNode = doc.content?.find((n) => n.type === 'videoBlock');
51
+ expect(videoNode).toBeDefined();
52
+ expect(videoNode?.attrs?.src).toBe('https://example.com/v.mp4');
53
+ });
54
+ });
@@ -0,0 +1,20 @@
1
+ export { default as TipTapEditor } from "./components/TipTapEditor.svelte";
2
+ export { default as FixedToolbar } from "./components/FixedToolbar.svelte";
3
+ export { default as BubbleToolbar } from "./components/BubbleToolbar.svelte";
4
+ export { default as SlashCommandMenu } from "./components/SlashCommandMenu.svelte";
5
+ export { default as InputModal } from "./components/InputModal.svelte";
6
+ export { default as PdfViewer } from "./components/PdfViewer.svelte";
7
+ export { default as TableBubbleMenu } from "./components/TableBubbleMenu.svelte";
8
+ export { PdfBlock } from "./extensions/PdfBlock";
9
+ export { Indent } from "./extensions/Indent";
10
+ export { FixedDetails } from "./extensions/FixedDetails";
11
+ export { FileAttachment } from "./extensions/FileAttachment";
12
+ export type { FileResolver, FileResolveResult } from "./extensions/FileAttachment";
13
+ export { VideoBlock } from "./extensions/VideoBlock";
14
+ export { Columns } from "./extensions/Columns";
15
+ export { Column } from "./extensions/Column";
16
+ export { sanitizeHtml, stripHtmlToExcerpt, transformLegacyHtml } from "./utils/sanitize";
17
+ export { configurePdfJs, getPdfJs } from "./utils/pdf";
18
+ export { cn } from "./utils/cn";
19
+ export type { TipTapEditorProps, UploadHandler, ToolbarMode, FixedToolbarProps, BlockHandleProps, SlashCommandMenuProps, PdfViewerProps, SlashMenuItem, } from "./types";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGjF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAGhC,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,aAAa,GACd,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ // 컴포넌트
2
+ export { default as TipTapEditor } from "./components/TipTapEditor.svelte";
3
+ export { default as FixedToolbar } from "./components/FixedToolbar.svelte";
4
+ export { default as BubbleToolbar } from "./components/BubbleToolbar.svelte";
5
+ export { default as SlashCommandMenu } from "./components/SlashCommandMenu.svelte";
6
+ export { default as InputModal } from "./components/InputModal.svelte";
7
+ export { default as PdfViewer } from "./components/PdfViewer.svelte";
8
+ export { default as TableBubbleMenu } from "./components/TableBubbleMenu.svelte";
9
+ // 익스텐션
10
+ export { PdfBlock } from "./extensions/PdfBlock";
11
+ export { Indent } from "./extensions/Indent";
12
+ export { FixedDetails } from "./extensions/FixedDetails";
13
+ export { FileAttachment } from "./extensions/FileAttachment";
14
+ export { VideoBlock } from "./extensions/VideoBlock";
15
+ export { Columns } from "./extensions/Columns";
16
+ export { Column } from "./extensions/Column";
17
+ // 유틸리티
18
+ export { sanitizeHtml, stripHtmlToExcerpt, transformLegacyHtml } from "./utils/sanitize";
19
+ export { configurePdfJs, getPdfJs } from "./utils/pdf";
20
+ export { cn } from "./utils/cn";