@markitdownjs/react 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.
@@ -0,0 +1,25 @@
1
+ import type { ConversionResult } from '@markitdownjs/shared';
2
+ export interface DocumentDropzoneProps {
3
+ onConvert: (result: ConversionResult) => void;
4
+ onError?: (error: Error) => void;
5
+ accept?: string[];
6
+ disabled?: boolean;
7
+ className?: string;
8
+ }
9
+ export declare function DocumentDropzone({ onConvert, onError, accept, disabled, className, }: DocumentDropzoneProps): import("react").JSX.Element;
10
+ export interface DocumentPreviewProps {
11
+ result: ConversionResult;
12
+ className?: string;
13
+ }
14
+ export declare function DocumentPreview({ result, className }: DocumentPreviewProps): import("react").JSX.Element;
15
+ export interface MarkdownViewerProps {
16
+ markdown: string;
17
+ className?: string;
18
+ }
19
+ export declare function MarkdownViewer({ markdown, className }: MarkdownViewerProps): import("react").JSX.Element;
20
+ export interface ConversionProgressProps {
21
+ progress: number;
22
+ className?: string;
23
+ }
24
+ export declare function ConversionProgress({ progress, className }: ConversionProgressProps): import("react").JSX.Element;
25
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,MAA6F,EAC7F,QAAgB,EAChB,SAAc,GACf,EAAE,qBAAqB,+BAkFvB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,SAAc,EAAE,EAAE,oBAAoB,+BAqC/E;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,mBAAmB,+BAoB/E;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,SAAc,EAAE,EAAE,uBAAuB,+BA2BvF"}
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useRef } from 'react';
3
+ import { useDocumentParser } from './hooks.js';
4
+ export function DocumentDropzone({ onConvert, onError, accept = ['.pdf', '.docx', '.pptx', '.xlsx', '.html', '.csv', '.json', '.xml', '.txt', '.md'], disabled = false, className = '', }) {
5
+ const { convert, isConverting, progress, error } = useDocumentParser();
6
+ const [isDragOver, setIsDragOver] = useState(false);
7
+ const inputRef = useRef(null);
8
+ const handleFile = useCallback(async (file) => {
9
+ try {
10
+ const result = await convert(file);
11
+ onConvert(result);
12
+ }
13
+ catch (err) {
14
+ const e = err instanceof Error ? err : new Error(String(err));
15
+ onError?.(e);
16
+ }
17
+ }, [convert, onConvert, onError]);
18
+ const handleDragOver = useCallback((e) => {
19
+ e.preventDefault();
20
+ e.stopPropagation();
21
+ if (!disabled)
22
+ setIsDragOver(true);
23
+ }, [disabled]);
24
+ const handleDragLeave = useCallback((e) => {
25
+ e.preventDefault();
26
+ e.stopPropagation();
27
+ setIsDragOver(false);
28
+ }, []);
29
+ const handleDrop = useCallback((e) => {
30
+ e.preventDefault();
31
+ e.stopPropagation();
32
+ setIsDragOver(false);
33
+ if (disabled)
34
+ return;
35
+ const file = e.dataTransfer.files[0];
36
+ if (file)
37
+ handleFile(file);
38
+ }, [disabled, handleFile]);
39
+ const handleInputChange = useCallback((e) => {
40
+ const file = e.target.files?.[0];
41
+ if (file)
42
+ handleFile(file);
43
+ e.target.value = '';
44
+ }, [handleFile]);
45
+ return (_jsxs("div", { onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, onClick: () => !disabled && inputRef.current?.click(), className: className, style: {
46
+ border: `2px dashed ${isDragOver ? '#3b82f6' : '#d1d5db'}`,
47
+ borderRadius: '8px',
48
+ padding: '32px',
49
+ textAlign: 'center',
50
+ cursor: disabled ? 'not-allowed' : 'pointer',
51
+ backgroundColor: isDragOver ? '#eff6ff' : 'transparent',
52
+ opacity: disabled ? 0.5 : 1,
53
+ transition: 'all 0.2s',
54
+ }, children: [_jsx("input", { ref: inputRef, type: "file", accept: accept.join(','), onChange: handleInputChange, disabled: disabled, style: { display: 'none' } }), isConverting ? (_jsx(ConversionProgress, { progress: progress })) : (_jsx("p", { style: { margin: 0, color: '#6b7280' }, children: "Drag and drop a document here, or click to browse" })), error && (_jsx("p", { style: { margin: '8px 0 0', color: '#ef4444', fontSize: '14px' }, children: error.message }))] }));
55
+ }
56
+ export function DocumentPreview({ result, className = '' }) {
57
+ return (_jsxs("div", { className: className, children: [result.metadata.title && (_jsx("h2", { style: { margin: '0 0 8px', fontSize: '1.25rem', fontWeight: 600 }, children: result.metadata.title })), result.metadata.author && (_jsxs("p", { style: { margin: '0 0 4px', color: '#6b7280', fontSize: '14px' }, children: ["By ", result.metadata.author] })), result.metadata.wordCount != null && (_jsxs("p", { style: { margin: '0 0 16px', color: '#9ca3af', fontSize: '13px' }, children: [result.metadata.wordCount.toLocaleString(), " words"] })), _jsx("pre", { style: {
58
+ margin: 0,
59
+ padding: '16px',
60
+ backgroundColor: '#f9fafb',
61
+ border: '1px solid #e5e7eb',
62
+ borderRadius: '6px',
63
+ overflow: 'auto',
64
+ maxHeight: '400px',
65
+ fontSize: '14px',
66
+ lineHeight: 1.5,
67
+ whiteSpace: 'pre-wrap',
68
+ fontFamily: 'ui-monospace, monospace',
69
+ }, children: result.markdown })] }));
70
+ }
71
+ export function MarkdownViewer({ markdown, className = '' }) {
72
+ const html = markdown
73
+ .replace(/&/g, '&')
74
+ .replace(/</g, '&lt;')
75
+ .replace(/>/g, '&gt;')
76
+ .replace(/^### (.+)$/gm, '<h3>$1</h3>')
77
+ .replace(/^## (.+)$/gm, '<h2>$1</h2>')
78
+ .replace(/^# (.+)$/gm, '<h1>$1</h1>')
79
+ .replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
80
+ .replace(/\*(.+?)\*/g, '<em>$1</em>')
81
+ .replace(/`(.+?)`/g, '<code>$1</code>')
82
+ .replace(/\n/g, '<br/>');
83
+ return (_jsx("div", { className: className, style: { lineHeight: 1.6, fontSize: '15px' }, dangerouslySetInnerHTML: { __html: html } }));
84
+ }
85
+ export function ConversionProgress({ progress, className = '' }) {
86
+ return (_jsxs("div", { className: className, children: [_jsx("div", { style: {
87
+ width: '100%',
88
+ height: '6px',
89
+ backgroundColor: '#e5e7eb',
90
+ borderRadius: '3px',
91
+ overflow: 'hidden',
92
+ }, children: _jsx("div", { style: {
93
+ height: '100%',
94
+ width: `${Math.min(100, Math.max(0, progress))}%`,
95
+ backgroundColor: '#3b82f6',
96
+ borderRadius: '3px',
97
+ transition: 'width 0.3s ease',
98
+ } }) }), _jsxs("p", { style: { margin: '8px 0 0', fontSize: '13px', color: '#6b7280' }, children: ["Converting... ", Math.round(progress), "%"] })] }));
99
+ }
100
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ConversionResult, ConversionOptions } from '@markitdownjs/shared';
2
+ interface UseDocumentParserReturn {
3
+ convert: (file: File, options?: ConversionOptions) => Promise<ConversionResult>;
4
+ result: ConversionResult | null;
5
+ isConverting: boolean;
6
+ error: Error | null;
7
+ progress: number;
8
+ reset: () => void;
9
+ }
10
+ export declare function useDocumentParser(): UseDocumentParserReturn;
11
+ interface UseMarkdownConversionReturn {
12
+ markdown: string | null;
13
+ isConverting: boolean;
14
+ error: Error | null;
15
+ convertToMarkdown: (file: File) => Promise<string>;
16
+ convertToJson: (file: File) => Promise<string>;
17
+ }
18
+ export declare function useMarkdownConversion(): UseMarkdownConversionReturn;
19
+ export {};
20
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAgB,MAAM,sBAAsB,CAAC;AAE9F,UAAU,uBAAuB;IAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChF,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,iBAAiB,IAAI,uBAAuB,CAqD3D;AAED,UAAU,2BAA2B;IACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAChD;AAED,wBAAgB,qBAAqB,IAAI,2BAA2B,CAwCnE"}
package/dist/hooks.js ADDED
@@ -0,0 +1,96 @@
1
+ import { useState, useCallback, useRef, useEffect } from 'react';
2
+ export function useDocumentParser() {
3
+ const [result, setResult] = useState(null);
4
+ const [isConverting, setIsConverting] = useState(false);
5
+ const [error, setError] = useState(null);
6
+ const [progress, setProgress] = useState(0);
7
+ const abortRef = useRef(null);
8
+ const convert = useCallback(async (file, options) => {
9
+ abortRef.current?.abort();
10
+ abortRef.current = new AbortController();
11
+ setIsConverting(true);
12
+ setError(null);
13
+ setProgress(0);
14
+ setResult(null);
15
+ try {
16
+ const { MarkItDown } = await import('@markitdownjs/core');
17
+ const parser = new MarkItDown();
18
+ const conversionResult = await parser.convert({
19
+ data: file,
20
+ fileName: file.name,
21
+ mimeType: file.type || undefined,
22
+ options: {
23
+ ...options,
24
+ signal: abortRef.current.signal,
25
+ onProgress: (info) => setProgress(info.percentage),
26
+ },
27
+ });
28
+ setResult(conversionResult);
29
+ return conversionResult;
30
+ }
31
+ catch (err) {
32
+ const error = err instanceof Error ? err : new Error(String(err));
33
+ setError(error);
34
+ throw error;
35
+ }
36
+ finally {
37
+ setIsConverting(false);
38
+ }
39
+ }, []);
40
+ const reset = useCallback(() => {
41
+ abortRef.current?.abort();
42
+ setResult(null);
43
+ setError(null);
44
+ setProgress(0);
45
+ setIsConverting(false);
46
+ }, []);
47
+ useEffect(() => {
48
+ return () => {
49
+ abortRef.current?.abort();
50
+ };
51
+ }, []);
52
+ return { convert, result, isConverting, error, progress, reset };
53
+ }
54
+ export function useMarkdownConversion() {
55
+ const [markdown, setMarkdown] = useState(null);
56
+ const [isConverting, setIsConverting] = useState(false);
57
+ const [error, setError] = useState(null);
58
+ const convertToMarkdown = useCallback(async (file) => {
59
+ setIsConverting(true);
60
+ setError(null);
61
+ try {
62
+ const { MarkItDown } = await import('@markitdownjs/core');
63
+ const parser = new MarkItDown();
64
+ const md = await parser.convertToMarkdown(file);
65
+ setMarkdown(md);
66
+ return md;
67
+ }
68
+ catch (err) {
69
+ const e = err instanceof Error ? err : new Error(String(err));
70
+ setError(e);
71
+ throw e;
72
+ }
73
+ finally {
74
+ setIsConverting(false);
75
+ }
76
+ }, []);
77
+ const convertToJson = useCallback(async (file) => {
78
+ setIsConverting(true);
79
+ setError(null);
80
+ try {
81
+ const { MarkItDown } = await import('@markitdownjs/core');
82
+ const parser = new MarkItDown();
83
+ return await parser.convertToJson(file);
84
+ }
85
+ catch (err) {
86
+ const e = err instanceof Error ? err : new Error(String(err));
87
+ setError(e);
88
+ throw e;
89
+ }
90
+ finally {
91
+ setIsConverting(false);
92
+ }
93
+ }, []);
94
+ return { markdown, isConverting, error, convertToMarkdown, convertToJson };
95
+ }
96
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { useDocumentParser, useMarkdownConversion } from './hooks.js';
2
+ export { DocumentDropzone, DocumentPreview, MarkdownViewer, ConversionProgress, } from './components.js';
3
+ export { MarkItDownProvider, useMarkItDown } from './provider.js';
4
+ export type { DocumentDropzoneProps, DocumentPreviewProps, MarkdownViewerProps, ConversionProgressProps, } from './components.js';
5
+ export type { MarkItDownProviderProps } from './provider.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { useDocumentParser, useMarkdownConversion } from './hooks.js';
2
+ export { DocumentDropzone, DocumentPreview, MarkdownViewer, ConversionProgress, } from './components.js';
3
+ export { MarkItDownProvider, useMarkItDown } from './provider.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { ConversionInput, ConversionResult } from '@markitdownjs/shared';
3
+ interface MarkItDownContextValue {
4
+ convert: (input: ConversionInput) => Promise<ConversionResult>;
5
+ convertToMarkdown: (input: ConversionInput) => Promise<string>;
6
+ convertToJson: (input: ConversionInput) => Promise<string>;
7
+ }
8
+ export interface MarkItDownProviderProps {
9
+ children: ReactNode;
10
+ }
11
+ export declare function MarkItDownProvider({ children }: MarkItDownProviderProps): import("react").JSX.Element;
12
+ export declare function useMarkItDown(): MarkItDownContextValue;
13
+ export {};
14
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,UAAU,sBAAsB;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/D,iBAAiB,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,aAAa,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAID,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,uBAAuB,+BA+BvE;AAED,wBAAgB,aAAa,IAAI,sBAAsB,CAMtD"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useRef, useCallback } from 'react';
3
+ const MarkItDownContext = createContext(null);
4
+ export function MarkItDownProvider({ children }) {
5
+ const parserRef = useRef(null);
6
+ const getParser = useCallback(async () => {
7
+ if (!parserRef.current) {
8
+ const { MarkItDown } = await import('@markitdownjs/core');
9
+ parserRef.current = new MarkItDown();
10
+ }
11
+ return parserRef.current;
12
+ }, []);
13
+ const convert = useCallback(async (input) => {
14
+ const parser = await getParser();
15
+ return parser.convert(input);
16
+ }, [getParser]);
17
+ const convertToMarkdown = useCallback(async (input) => {
18
+ const parser = await getParser();
19
+ return parser.convertToMarkdown(input);
20
+ }, [getParser]);
21
+ const convertToJson = useCallback(async (input) => {
22
+ const parser = await getParser();
23
+ return parser.convertToJson(input);
24
+ }, [getParser]);
25
+ return (_jsx(MarkItDownContext.Provider, { value: { convert, convertToMarkdown, convertToJson }, children: children }));
26
+ }
27
+ export function useMarkItDown() {
28
+ const context = useContext(MarkItDownContext);
29
+ if (!context) {
30
+ throw new Error('useMarkItDown must be used within a MarkItDownProvider');
31
+ }
32
+ return context;
33
+ }
34
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAkB,MAAM,OAAO,CAAC;AASvF,MAAM,iBAAiB,GAAG,aAAa,CAAgC,IAAI,CAAC,CAAC;AAM7E,MAAM,UAAU,kBAAkB,CAAC,EAAE,QAAQ,EAA2B;IACtE,MAAM,SAAS,GAAG,MAAM,CAAiD,IAAI,CAAC,CAAC;IAE/E,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC1D,SAAS,CAAC,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,KAAsB,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EAAE,KAAsB,EAAE,EAAE;QACrE,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,KAAsB,EAAE,EAAE;QACjE,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAC7E,QAAQ,GACkB,CAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@markitdownjs/react",
3
+ "version": "0.1.0",
4
+ "description": "React hooks and components for MarkItDownJS document conversion",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "dependencies": {
20
+ "@markitdownjs/shared": "0.1.0"
21
+ },
22
+ "peerDependencies": {
23
+ "react": ">=18.0.0"
24
+ },
25
+ "devDependencies": {
26
+ "typescript": "^5.5.0",
27
+ "react": "^18.2.0",
28
+ "@types/react": "^18.2.0",
29
+ "@markitdownjs/core": "0.1.0"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc --project tsconfig.json",
33
+ "dev": "tsc --watch --project tsconfig.json",
34
+ "typecheck": "tsc --noEmit",
35
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
36
+ }
37
+ }