@crashbytes/react-version-compare 1.0.2 → 1.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/components/Compare.tsx"],"sourcesContent":["import { diffWords, diffArrays } from 'diff';\nimport React from 'react';\nimport { Document, Block, Inline, Text, BLOCKS } from '@contentful/rich-text-types';\n\n// Utility functions for Contentful Rich Text\nconst extractPlainText = (document: Document): string => {\n const extractFromNode = (node: Block | Inline | Text): string => {\n if (node.nodeType === 'text') {\n return (node as Text).value;\n }\n \n if ('content' in node && node.content) {\n return node.content.map(child => extractFromNode(child)).join('');\n }\n \n return '';\n };\n \n return extractFromNode(document);\n};\n\nconst extractStructuredContent = (document: Document): Array<{ type: string; content: string; level?: number }> => {\n const result: Array<{ type: string; content: string; level?: number }> = [];\n \n const extractFromNode = (node: Block | Inline | Text): void => {\n if (node.nodeType === 'text') {\n // Skip standalone text nodes as they're usually part of a parent structure\n return;\n }\n \n if ('content' in node && node.content) {\n const textContent = node.content.map(child => \n child.nodeType === 'text' ? (child as Text).value : ''\n ).join('');\n \n // Map node types to user-friendly names and extract heading levels\n let displayType: string = node.nodeType;\n let headingLevel: number | undefined;\n \n switch (node.nodeType) {\n case BLOCKS.HEADING_1:\n displayType = 'Heading';\n headingLevel = 1;\n break;\n case BLOCKS.HEADING_2:\n displayType = 'Heading';\n headingLevel = 2;\n break;\n case BLOCKS.HEADING_3:\n displayType = 'Heading';\n headingLevel = 3;\n break;\n case BLOCKS.HEADING_4:\n displayType = 'Heading';\n headingLevel = 4;\n break;\n case BLOCKS.HEADING_5:\n displayType = 'Heading';\n headingLevel = 5;\n break;\n case BLOCKS.HEADING_6:\n displayType = 'Heading';\n headingLevel = 6;\n break;\n case BLOCKS.PARAGRAPH:\n displayType = 'Text';\n break;\n case BLOCKS.UL_LIST:\n displayType = 'List';\n break;\n case BLOCKS.OL_LIST:\n displayType = 'Numbered List';\n break;\n case BLOCKS.LIST_ITEM:\n displayType = 'List Item';\n break;\n case BLOCKS.QUOTE:\n displayType = 'Quote';\n break;\n case BLOCKS.TABLE:\n displayType = 'Table';\n break;\n default:\n displayType = node.nodeType.charAt(0).toUpperCase() + node.nodeType.slice(1);\n }\n \n if (textContent.trim()) {\n result.push({\n type: displayType,\n content: textContent.trim(),\n level: headingLevel\n });\n }\n \n // Recursively process child nodes for nested structures like list items\n node.content.forEach(child => {\n if (child.nodeType !== 'text') {\n extractFromNode(child);\n }\n });\n }\n };\n \n if (document.content) {\n document.content.forEach(node => extractFromNode(node));\n }\n \n return result;\n};\n\nconst isContentfulDocument = (value: any): value is Document => {\n return value && typeof value === 'object' && value.nodeType === BLOCKS.DOCUMENT && Array.isArray(value.content);\n};\n\n// Types\nexport interface CompareProps {\n original: string | string[] | Document;\n modified: string | string[] | Document;\n className?: string;\n viewMode?: 'side-by-side' | 'inline';\n caseSensitive?: boolean;\n compareMode?: 'text' | 'structure'; // New prop for Contentful documents\n}\n\nexport const Compare: React.FC<CompareProps> = ({\n original,\n modified,\n className = '',\n viewMode = 'side-by-side',\n caseSensitive = true,\n compareMode = 'text', // Default to text comparison\n}) => {\n // Handle string comparison\n const renderStringDiff = (orig: string, mod: string) => {\n const diff = diffWords(orig, mod, { ignoreCase: !caseSensitive });\n const originalParts: any[] = [];\n const modifiedParts: any[] = [];\n for (const part of diff) {\n if (part.removed) {\n originalParts.push(\n <span key={originalParts.length} className=\"diff-removed\">\n {part.value}\n </span>\n );\n } else if (part.added) {\n modifiedParts.push(\n <span key={modifiedParts.length} className=\"diff-added\">\n {part.value}\n </span>\n );\n } else {\n originalParts.push(\n <span key={originalParts.length} className=\"diff-unchanged\">\n {part.value}\n </span>\n );\n modifiedParts.push(\n <span key={modifiedParts.length} className=\"diff-unchanged\">\n {part.value}\n </span>\n );\n }\n }\n return { originalParts, modifiedParts };\n };\n\n // Handle array comparison\n const renderArrayDiff = (orig: string[], mod: string[]) => {\n let origArr = orig;\n let modArr = mod;\n if (!caseSensitive) {\n origArr = orig.map((s) => (typeof s === 'string' ? s.toLowerCase() : s));\n modArr = mod.map((s) => (typeof s === 'string' ? s.toLowerCase() : s));\n }\n const diff = diffArrays(origArr, modArr);\n const originalParts: any[] = [];\n const modifiedParts: any[] = [];\n for (const part of diff) {\n if (part.removed) {\n part.value.forEach((item: string, index: number) => {\n originalParts.push(\n <div key={`${originalParts.length}-${index}`} className=\"diff-removed-line\">\n {orig[origArr.indexOf(item, originalParts.length)] ?? item}\n </div>\n );\n });\n } else if (part.added) {\n part.value.forEach((item: string, index: number) => {\n modifiedParts.push(\n <div key={`${modifiedParts.length}-${index}`} className=\"diff-added-line\">\n {mod[modArr.indexOf(item, modifiedParts.length)] ?? item}\n </div>\n );\n });\n } else {\n part.value.forEach((item: string, index: number) => {\n originalParts.push(\n <div key={`${originalParts.length}-${index}`} className=\"diff-unchanged-line\">\n {orig[origArr.indexOf(item, originalParts.length)] ?? item}\n </div>\n );\n modifiedParts.push(\n <div key={`${modifiedParts.length}-${index}`} className=\"diff-unchanged-line\">\n {mod[modArr.indexOf(item, modifiedParts.length)] ?? item}\n </div>\n );\n });\n }\n }\n return { originalParts, modifiedParts };\n };\n\n // Handle Contentful document comparison\n const renderContentfulDiff = (origDoc: Document, modDoc: Document) => {\n if (compareMode === 'structure') {\n // Compare structural elements\n const origStructure = extractStructuredContent(origDoc);\n const modStructure = extractStructuredContent(modDoc);\n \n // Create a more sophisticated comparison that can handle changes within the same structure type\n const maxLength = Math.max(origStructure.length, modStructure.length);\n const originalParts: any[] = [];\n const modifiedParts: any[] = [];\n \n for (let i = 0; i < maxLength; i++) {\n const origItem = origStructure[i];\n const modItem = modStructure[i];\n \n if (!origItem && modItem) {\n // Added item\n modifiedParts.push(\n <div key={`added-${i}`} className=\"diff-added-line\">\n <span className=\"diff-structure-type\">{modItem.type}</span>\n {modItem.level && <span className=\"diff-structure-level\"> H{modItem.level}</span>}\n <span className=\"diff-structure-content\">: {modItem.content}</span>\n </div>\n );\n } else if (origItem && !modItem) {\n // Removed item\n originalParts.push(\n <div key={`removed-${i}`} className=\"diff-removed-line\">\n <span className=\"diff-structure-type\">{origItem.type}</span>\n {origItem.level && <span className=\"diff-structure-level\"> H{origItem.level}</span>}\n <span className=\"diff-structure-content\">: {origItem.content}</span>\n </div>\n );\n } else if (origItem && modItem) {\n // Compare items at the same position\n const sameType = origItem.type === modItem.type && origItem.level === modItem.level;\n \n if (sameType && origItem.content !== modItem.content) {\n // Same structure type but different content - show word-level diff\n const wordDiff = diffWords(origItem.content, modItem.content, { ignoreCase: !caseSensitive });\n \n const origContentParts: any[] = [];\n const modContentParts: any[] = [];\n \n for (const part of wordDiff) {\n if (part.removed) {\n origContentParts.push(\n <span key={origContentParts.length} className=\"diff-removed\">\n {part.value}\n </span>\n );\n } else if (part.added) {\n modContentParts.push(\n <span key={modContentParts.length} className=\"diff-added\">\n {part.value}\n </span>\n );\n } else {\n origContentParts.push(\n <span key={origContentParts.length} className=\"diff-unchanged\">\n {part.value}\n </span>\n );\n modContentParts.push(\n <span key={modContentParts.length} className=\"diff-unchanged\">\n {part.value}\n </span>\n );\n }\n }\n \n originalParts.push(\n <div key={`orig-${i}`} className=\"diff-unchanged-line\">\n <span className=\"diff-structure-type\">{origItem.type}</span>\n {origItem.level && <span className=\"diff-structure-level\"> H{origItem.level}</span>}\n <span className=\"diff-structure-content\">: {origContentParts}</span>\n </div>\n );\n modifiedParts.push(\n <div key={`mod-${i}`} className=\"diff-unchanged-line\">\n <span className=\"diff-structure-type\">{modItem.type}</span>\n {modItem.level && <span className=\"diff-structure-level\"> H{modItem.level}</span>}\n <span className=\"diff-structure-content\">: {modContentParts}</span>\n </div>\n );\n } else if (sameType && origItem.content === modItem.content) {\n // Completely unchanged\n originalParts.push(\n <div key={`unchanged-orig-${i}`} className=\"diff-unchanged-line\">\n <span className=\"diff-structure-type\">{origItem.type}</span>\n {origItem.level && <span className=\"diff-structure-level\"> H{origItem.level}</span>}\n <span className=\"diff-structure-content\">: {origItem.content}</span>\n </div>\n );\n modifiedParts.push(\n <div key={`unchanged-mod-${i}`} className=\"diff-unchanged-line\">\n <span className=\"diff-structure-type\">{modItem.type}</span>\n {modItem.level && <span className=\"diff-structure-level\"> H{modItem.level}</span>}\n <span className=\"diff-structure-content\">: {modItem.content}</span>\n </div>\n );\n } else {\n // Different structure types - show as removed and added\n originalParts.push(\n <div key={`changed-orig-${i}`} className=\"diff-removed-line\">\n <span className=\"diff-structure-type\">{origItem.type}</span>\n {origItem.level && <span className=\"diff-structure-level\"> H{origItem.level}</span>}\n <span className=\"diff-structure-content\">: {origItem.content}</span>\n </div>\n );\n modifiedParts.push(\n <div key={`changed-mod-${i}`} className=\"diff-added-line\">\n <span className=\"diff-structure-type\">{modItem.type}</span>\n {modItem.level && <span className=\"diff-structure-level\"> H{modItem.level}</span>}\n <span className=\"diff-structure-content\">: {modItem.content}</span>\n </div>\n );\n }\n }\n }\n \n return { originalParts, modifiedParts };\n } else {\n // Text-based comparison of Contentful documents\n const origText = extractPlainText(origDoc);\n const modText = extractPlainText(modDoc);\n return renderStringDiff(origText, modText);\n }\n };\n\n const isStringComparison = typeof original === 'string' && typeof modified === 'string';\n const isArrayComparison = Array.isArray(original) && Array.isArray(modified);\n const isContentfulComparison = isContentfulDocument(original) && isContentfulDocument(modified);\n\n if (!isStringComparison && !isArrayComparison && !isContentfulComparison) {\n return (\n <div className={`compare-error ${className}`}>\n Error: Both inputs must be either strings, arrays of strings, or Contentful documents\n </div>\n );\n }\n\n let originalParts: any[], modifiedParts: any[];\n if (isStringComparison) {\n ({ originalParts, modifiedParts } = renderStringDiff(original as string, modified as string));\n } else if (isArrayComparison) {\n ({ originalParts, modifiedParts } = renderArrayDiff(original as string[], modified as string[]));\n } else if (isContentfulComparison) {\n ({ originalParts, modifiedParts } = renderContentfulDiff(original as Document, modified as Document));\n } else {\n // This should never happen due to the check above, but provide a fallback\n originalParts = [];\n modifiedParts = [];\n }\n\n if (viewMode === 'inline') {\n return (\n <div className={`compare-inline ${className}`}>\n <div className=\"compare-content\">\n {originalParts}\n {modifiedParts}\n </div>\n </div>\n );\n }\n\n return (\n <div className={`compare-side-by-side ${className}`}>\n <div className=\"compare-panel\">\n <div className=\"compare-header original-header\">Original</div>\n <div className=\"compare-content original-content\">\n {originalParts}\n </div>\n </div>\n <div className=\"compare-panel\">\n <div className=\"compare-header modified-header\">Modified</div>\n <div className=\"compare-content modified-content\">\n {modifiedParts}\n </div>\n </div>\n </div>\n );\n};\n\nexport default Compare;"],"names":["extractPlainText","document","extractFromNode","node","nodeType","value","content","map","child","join","extractStructuredContent","result","textContent","displayType","headingLevel","BLOCKS","HEADING_1","HEADING_2","HEADING_3","HEADING_4","HEADING_5","HEADING_6","PARAGRAPH","UL_LIST","OL_LIST","LIST_ITEM","QUOTE","TABLE","charAt","toUpperCase","slice","trim","push","type","level","forEach","isContentfulDocument","DOCUMENT","Array","isArray","Compare","original","modified","className","viewMode","caseSensitive","compareMode","renderStringDiff","orig","mod","diff","diffWords","ignoreCase","originalParts","modifiedParts","part","removed","_jsx","children","length","added","renderArrayDiff","origArr","modArr","s","toLowerCase","diffArrays","item","index","indexOf","renderContentfulDiff","origDoc","modDoc","origStructure","modStructure","maxLength","Math","max","i","origItem","modItem","_jsxs","sameType","wordDiff","origContentParts","modContentParts","origText","modText","isStringComparison","isArrayComparison","isContentfulComparison"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/components/contentfulDiff.tsx","../../src/components/Compare.tsx"],"sourcesContent":["import React from 'react';\nimport { BLOCKS, Document, Block, Inline, Text } from '@contentful/rich-text-types';\n\n// Exported type guard for Contentful documents\nexport function isContentfulDocument(value: any): value is Document {\n return (\n value &&\n typeof value === 'object' &&\n value.nodeType === BLOCKS.DOCUMENT &&\n Array.isArray(value.content)\n );\n}\n\n// Extract plain text from Contentful document\nexport function extractPlainText(document: Document): string {\n const extractFromNode = (node: Block | Inline | Text): string => {\n if (node.nodeType === 'text') {\n return (node as Text).value;\n }\n if ('content' in node && node.content) {\n return node.content.map(child => extractFromNode(child)).join('');\n }\n return '';\n };\n return extractFromNode(document);\n}\n\n// Extract structured content for structure diff\nexport function extractStructuredContent(document: Document): Array<{ type: string; content: string; level?: number }> {\n const result: Array<{ type: string; content: string; level?: number }> = [];\n const extractFromNode = (node: Block | Inline | Text): void => {\n if (node.nodeType === 'text') return;\n if ('content' in node && node.content) {\n const textContent = node.content.map(child =>\n child.nodeType === 'text' ? (child as Text).value : ''\n ).join('');\n let displayType: string = node.nodeType;\n let headingLevel: number | undefined;\n switch (node.nodeType) {\n case BLOCKS.HEADING_1: displayType = 'Heading'; headingLevel = 1; break;\n case BLOCKS.HEADING_2: displayType = 'Heading'; headingLevel = 2; break;\n case BLOCKS.HEADING_3: displayType = 'Heading'; headingLevel = 3; break;\n case BLOCKS.HEADING_4: displayType = 'Heading'; headingLevel = 4; break;\n case BLOCKS.HEADING_5: displayType = 'Heading'; headingLevel = 5; break;\n case BLOCKS.HEADING_6: displayType = 'Heading'; headingLevel = 6; break;\n case BLOCKS.PARAGRAPH: displayType = 'Text'; break;\n case BLOCKS.UL_LIST: displayType = 'List'; break;\n case BLOCKS.OL_LIST: displayType = 'Numbered List'; break;\n case BLOCKS.LIST_ITEM: displayType = 'List Item'; break;\n case BLOCKS.QUOTE: displayType = 'Quote'; break;\n case BLOCKS.TABLE: displayType = 'Table'; break;\n default: displayType = node.nodeType.charAt(0).toUpperCase() + node.nodeType.slice(1);\n }\n if (textContent.trim()) {\n result.push({ type: displayType, content: textContent.trim(), level: headingLevel });\n }\n node.content.forEach(child => {\n if (child.nodeType !== 'text') extractFromNode(child);\n });\n }\n };\n if (document.content) document.content.forEach(node => extractFromNode(node));\n return result;\n}\n\n// Main Contentful diff renderer\nexport async function renderContentfulDiff(\n origDoc: Document,\n modDoc: Document,\n compareMode: 'text' | 'structure',\n caseSensitive: boolean,\n renderStringDiff: (a: string, b: string) => { originalParts: any[]; modifiedParts: any[] }\n) {\n // Dynamically import diff for Vite/ESM compatibility\n const DiffModule = await import('diff');\n const Diff = DiffModule.default ?? DiffModule;\n const { diffWords, diffArrays } = Diff;\n\n if (compareMode === 'structure') {\n const origStructure = extractStructuredContent(origDoc);\n const modStructure = extractStructuredContent(modDoc);\n\n const diff = diffArrays(\n origStructure,\n modStructure,\n {\n comparator: (a: any, b: any) =>\n a.type === b.type &&\n a.content === b.content &&\n a.level === b.level\n }\n );\n\n const originalParts: any[] = [];\n const modifiedParts: any[] = [];\n\n let origIdx = 0;\n let modIdx = 0;\n\n diff.forEach((part: any) => {\n if (part.added) {\n part.value.forEach((modItem: any, i: number) => {\n originalParts.push(\n <div key={`blank-orig-${modIdx + i}`} className=\"diff-blank-line\" />\n );\n modifiedParts.push(\n <div key={`added-mod-${modIdx + i}`} className=\"diff-added-line\">\n <span className=\"diff-structure-type\">{modItem.type}</span>\n {modItem.level && <span className=\"diff-structure-level\"> H{modItem.level}</span>}\n <span className=\"diff-structure-content\">: {modItem.content}</span>\n </div>\n );\n });\n modIdx += part.count || 0;\n } else if (part.removed) {\n part.value.forEach((origItem: any, i: number) => {\n originalParts.push(\n <div key={`removed-orig-${origIdx + i}`} className=\"diff-removed-line\">\n <span className=\"diff-structure-type\">{origItem.type}</span>\n {origItem.level && <span className=\"diff-structure-level\"> H{origItem.level}</span>}\n <span className=\"diff-structure-content\">: {origItem.content}</span>\n </div>\n );\n modifiedParts.push(\n <div key={`blank-mod-${origIdx + i}`} className=\"diff-blank-line\" />\n );\n });\n origIdx += part.count || 0;\n } else {\n part.value.forEach((item: any, i: number) => {\n originalParts.push(\n <div key={`unchanged-orig-${origIdx + i}`} className=\"diff-unchanged-line\">\n <span className=\"diff-structure-type\">{item.type}</span>\n {item.level && <span className=\"diff-structure-level\"> H{item.level}</span>}\n <span className=\"diff-structure-content\">: {item.content}</span>\n </div>\n );\n modifiedParts.push(\n <div key={`unchanged-mod-${modIdx + i}`} className=\"diff-unchanged-line\">\n <span className=\"diff-structure-type\">{item.type}</span>\n {item.level && <span className=\"diff-structure-level\"> H{item.level}</span>}\n <span className=\"diff-structure-content\">: {item.content}</span>\n </div>\n );\n });\n origIdx += part.count || 0;\n modIdx += part.count || 0;\n }\n });\n\n return { originalParts, modifiedParts };\n } else {\n // Text-based comparison of Contentful documents\n const origText = extractPlainText(origDoc);\n const modText = extractPlainText(modDoc);\n return renderStringDiff(origText, modText);\n }\n}","import React, { useEffect, useState } from 'react';\nimport { Document } from '@contentful/rich-text-types';\nimport {\n isContentfulDocument,\n renderContentfulDiff\n} from './contentfulDiff';\nimport * as Diff from 'diff';\n\nfunction renderStringDiff(orig: string, mod: string) {\n const difference = Diff.diffWords(orig, mod);\n const originalParts: any[] = [];\n const modifiedParts: any[] = [];\n for (const part of difference) {\n if (part.removed) {\n originalParts.push(\n <span key={originalParts.length} className=\"diff-removed\">\n {part.value}\n </span>\n );\n } else if (part.added) {\n modifiedParts.push(\n <span key={modifiedParts.length} className=\"diff-added\">\n {part.value}\n </span>\n );\n } else {\n originalParts.push(\n <span key={originalParts.length} className=\"diff-unchanged\">\n {part.value}\n </span>\n );\n modifiedParts.push(\n <span key={modifiedParts.length} className=\"diff-unchanged\">\n {part.value}\n </span>\n );\n }\n }\n return { originalParts, modifiedParts };\n}\n\nfunction renderArrayDiff(original: string[], modified: string[]) {\n const maxLength = Math.max(original.length, modified.length);\n const originalParts: any[] = [];\n const modifiedParts: any[] = [];\n for (let i = 0; i < maxLength; i++) {\n const orig = original[i] ?? '';\n const mod = modified[i] ?? '';\n if (orig === mod) {\n originalParts.push(\n <div key={`orig-${i}`} className=\"diff-unchanged-line\">{orig}</div>\n );\n modifiedParts.push(\n <div key={`mod-${i}`} className=\"diff-unchanged-line\">{mod}</div>\n );\n } else {\n originalParts.push(\n <div key={`orig-${i}`} className={orig ? \"diff-removed-line\" : \"diff-blank-line\"}>{orig}</div>\n );\n modifiedParts.push(\n <div key={`mod-${i}`} className={mod ? \"diff-added-line\" : \"diff-blank-line\"}>{mod}</div>\n );\n }\n }\n return { originalParts, modifiedParts };\n}\n\nexport interface CompareProps {\n original: string | string[] | Document;\n modified: string | string[] | Document;\n className?: string;\n viewMode?: 'side-by-side' | 'inline';\n caseSensitive?: boolean;\n compareMode?: 'text' | 'structure';\n}\n\nexport const Compare: React.FC<CompareProps> = ({\n original,\n modified,\n className = '',\n viewMode = 'side-by-side',\n caseSensitive = true,\n compareMode = 'text',\n}) => {\n const isStringComparison = typeof original === 'string' && typeof modified === 'string';\n const isArrayComparison = Array.isArray(original) && Array.isArray(modified);\n const isContentfulComparison = isContentfulDocument(original) && isContentfulDocument(modified);\n\n const [contentfulParts, setContentfulParts] = useState<{ originalParts: any[]; modifiedParts: any[] } | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n if (isContentfulComparison) {\n setContentfulParts(null); // reset while loading\n renderContentfulDiff(\n original as Document,\n modified as Document,\n compareMode,\n caseSensitive,\n renderStringDiff\n ).then(result => {\n if (!cancelled) setContentfulParts(result);\n });\n }\n return () => { cancelled = true; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [original, modified, compareMode, caseSensitive, isContentfulComparison]);\n\n let originalParts: any[] = [], modifiedParts: any[] = [];\n if (isStringComparison) {\n ({ originalParts, modifiedParts } = renderStringDiff(original as string, modified as string));\n } else if (isArrayComparison) {\n ({ originalParts, modifiedParts } = renderArrayDiff(original as string[], modified as string[]));\n } else if (isContentfulComparison) {\n if (contentfulParts) {\n originalParts = contentfulParts.originalParts;\n modifiedParts = contentfulParts.modifiedParts;\n } else {\n originalParts = [<div key=\"loading\">Loading...</div>];\n modifiedParts = [<div key=\"loading\">Loading...</div>];\n }\n }\n\n if (\n !isStringComparison &&\n !isArrayComparison &&\n !isContentfulComparison\n ) {\n return (\n <div className={`compare-error ${className}`}>\n Error: Invalid input for comparison.\n </div>\n );\n }\n\n if (viewMode === 'inline') {\n return (\n <div className={`compare-inline ${className}`}>\n <div className=\"compare-content\">\n {originalParts}\n {modifiedParts}\n </div>\n </div>\n );\n }\n \n\n return (\n <div className={`compare-side-by-side ${className}`}>\n <div className=\"compare-panel\">\n <div className=\"compare-header original-header\">Original</div>\n <div className=\"compare-content original-content\">\n {originalParts}\n </div>\n </div>\n <div className=\"compare-panel\">\n <div className=\"compare-header modified-header\">Modified</div>\n <div className=\"compare-content modified-content\">\n {modifiedParts}\n </div>\n </div>\n </div>\n );\n};\n\nexport default Compare;"],"names":["isContentfulDocument","value","nodeType","BLOCKS","DOCUMENT","Array","isArray","content","extractPlainText","document","extractFromNode","node","map","child","join","extractStructuredContent","result","textContent","displayType","headingLevel","HEADING_1","HEADING_2","HEADING_3","HEADING_4","HEADING_5","HEADING_6","PARAGRAPH","UL_LIST","OL_LIST","LIST_ITEM","QUOTE","TABLE","charAt","toUpperCase","slice","trim","push","type","level","forEach","renderContentfulDiff","origDoc","modDoc","compareMode","caseSensitive","renderStringDiff","DiffModule","Diff","default","diffWords","diffArrays","origStructure","modStructure","diff","comparator","a","b","originalParts","modifiedParts","origIdx","modIdx","part","added","modItem","i","_jsx","className","_jsxs","children","count","removed","origItem","item","origText","modText","orig","mod","difference","length","renderArrayDiff","original","modified","maxLength","Math","max","Compare","viewMode","isStringComparison","isArrayComparison","isContentfulComparison","contentfulParts","setContentfulParts","useState","useEffect","cancelled","then"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crashbytes/react-version-compare",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "A React component for comparing strings and arrays with precise word-level and item-level highlighting of differences.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -15,7 +15,8 @@
15
15
  "scripts": {
16
16
  "build": "rollup -c && cp src/styles/Compare.css dist/styles.css",
17
17
  "dev": "rollup -c -w",
18
- "test": "jest",
18
+ "test": "jest --no-coverage",
19
+ "test:coverage": "jest --coverage",
19
20
  "test:watch": "jest --watch",
20
21
  "clean": "rm -rf dist",
21
22
  "prepublishOnly": "npm run clean && npm run build",