@crashbytes/react-version-compare 1.0.4 → 1.0.5

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/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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"}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACM,SAAUA,oBAAoBA,CAACC,KAAU,EAAA;EAC7C,OACEA,KAAK,IACL,OAAOA,KAAK,KAAK,QAAQ,IACzBA,KAAK,CAACC,QAAQ,KAAKC,oBAAM,CAACC,QAAQ,IAClCC,KAAK,CAACC,OAAO,CAACL,KAAK,CAACM,OAAO,CAAC;AAEhC;AAEA;AACM,SAAUC,gBAAgBA,CAACC,QAAkB,EAAA;EACjD,MAAMC,eAAe,GAAIC,IAA2B,IAAY;AAC9D,IAAA,IAAIA,IAAI,CAACT,QAAQ,KAAK,MAAM,EAAE;MAC5B,OAAQS,IAAa,CAACV,KAAK;AAC7B,IAAA;AACA,IAAA,IAAI,SAAS,IAAIU,IAAI,IAAIA,IAAI,CAACJ,OAAO,EAAE;AACrC,MAAA,OAAOI,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,KAAK,IAAIH,eAAe,CAACG,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;AACnE,IAAA;AACA,IAAA,OAAO,EAAE;EACX,CAAC;EACD,OAAOJ,eAAe,CAACD,QAAQ,CAAC;AAClC;AAEA;AACM,SAAUM,wBAAwBA,CAACN,QAAkB,EAAA;EACzD,MAAMO,MAAM,GAA6D,EAAE;EAC3E,MAAMN,eAAe,GAAIC,IAA2B,IAAU;AAC5D,IAAA,IAAIA,IAAI,CAACT,QAAQ,KAAK,MAAM,EAAE;AAC9B,IAAA,IAAI,SAAS,IAAIS,IAAI,IAAIA,IAAI,CAACJ,OAAO,EAAE;MACrC,MAAMU,WAAW,GAAGN,IAAI,CAACJ,OAAO,CAACK,GAAG,CAACC,KAAK,IACxCA,KAAK,CAACX,QAAQ,KAAK,MAAM,GAAIW,KAAc,CAACZ,KAAK,GAAG,EAAE,CACvD,CAACa,IAAI,CAAC,EAAE,CAAC;AACV,MAAA,IAAII,WAAW,GAAWP,IAAI,CAACT,QAAQ;AACvC,MAAA,IAAIiB,YAAgC;MACpC,QAAQR,IAAI,CAACT,QAAQ;QACnB,KAAKC,oBAAM,CAACiB,SAAS;AAAEF,UAAAA,WAAW,GAAG,SAAS;AAAEC,UAAAA,YAAY,GAAG,CAAC;AAAE,UAAA;QAClE,KAAKhB,oBAAM,CAACkB,SAAS;AAAEH,UAAAA,WAAW,GAAG,SAAS;AAAEC,UAAAA,YAAY,GAAG,CAAC;AAAE,UAAA;QAClE,KAAKhB,oBAAM,CAACmB,SAAS;AAAEJ,UAAAA,WAAW,GAAG,SAAS;AAAEC,UAAAA,YAAY,GAAG,CAAC;AAAE,UAAA;QAClE,KAAKhB,oBAAM,CAACoB,SAAS;AAAEL,UAAAA,WAAW,GAAG,SAAS;AAAEC,UAAAA,YAAY,GAAG,CAAC;AAAE,UAAA;QAClE,KAAKhB,oBAAM,CAACqB,SAAS;AAAEN,UAAAA,WAAW,GAAG,SAAS;AAAEC,UAAAA,YAAY,GAAG,CAAC;AAAE,UAAA;QAClE,KAAKhB,oBAAM,CAACsB,SAAS;AAAEP,UAAAA,WAAW,GAAG,SAAS;AAAEC,UAAAA,YAAY,GAAG,CAAC;AAAE,UAAA;QAClE,KAAKhB,oBAAM,CAACuB,SAAS;AAAER,UAAAA,WAAW,GAAG,MAAM;AAAE,UAAA;QAC7C,KAAKf,oBAAM,CAACwB,OAAO;AAAET,UAAAA,WAAW,GAAG,MAAM;AAAE,UAAA;QAC3C,KAAKf,oBAAM,CAACyB,OAAO;AAAEV,UAAAA,WAAW,GAAG,eAAe;AAAE,UAAA;QACpD,KAAKf,oBAAM,CAAC0B,SAAS;AAAEX,UAAAA,WAAW,GAAG,WAAW;AAAE,UAAA;QAClD,KAAKf,oBAAM,CAAC2B,KAAK;AAAEZ,UAAAA,WAAW,GAAG,OAAO;AAAE,UAAA;QAC1C,KAAKf,oBAAM,CAAC4B,KAAK;AAAEb,UAAAA,WAAW,GAAG,OAAO;AAAE,UAAA;AAC1C,QAAA;UAASA,WAAW,GAAGP,IAAI,CAACT,QAAQ,CAAC8B,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGtB,IAAI,CAACT,QAAQ,CAACgC,KAAK,CAAC,CAAC,CAAC;AACvF;AACA,MAAA,IAAIjB,WAAW,CAACkB,IAAI,EAAE,EAAE;QACtBnB,MAAM,CAACoB,IAAI,CAAC;AAAEC,UAAAA,IAAI,EAAEnB,WAAW;AAAEX,UAAAA,OAAO,EAAEU,WAAW,CAACkB,IAAI,EAAE;AAAEG,UAAAA,KAAK,EAAEnB;AAAY,SAAE,CAAC;AACtF,MAAA;AACAR,MAAAA,IAAI,CAACJ,OAAO,CAACgC,OAAO,CAAC1B,KAAK,IAAG;QAC3B,IAAIA,KAAK,CAACX,QAAQ,KAAK,MAAM,EAAEQ,eAAe,CAACG,KAAK,CAAC;AACvD,MAAA,CAAC,CAAC;AACJ,IAAA;EACF,CAAC;AACD,EAAA,IAAIJ,QAAQ,CAACF,OAAO,EAAEE,QAAQ,CAACF,OAAO,CAACgC,OAAO,CAAC5B,IAAI,IAAID,eAAe,CAACC,IAAI,CAAC,CAAC;AAC7E,EAAA,OAAOK,MAAM;AACf;AAEA;AACO,eAAewB,oBAAoBA,CACxCC,OAAiB,EACjBC,MAAgB,EAChBC,WAAiC,EACjCC,aAAsB,EACtBC,gBAA0F,EAAA;AAE1F;AACA,EAAA,MAAMC,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC;AACvC,EAAA,MAAMC,IAAI,GAAGD,UAAU,CAACE,OAAO,IAAIF,UAAU;EAC7C,MAAM;IAAEG,SAAS;AAAEC,IAAAA;AAAU,GAAE,GAAGH,IAAI;EAEtC,IAAIJ,WAAW,KAAK,WAAW,EAAE;AAC/B,IAAA,MAAMQ,aAAa,GAAGpC,wBAAwB,CAAC0B,OAAO,CAAC;AACvD,IAAA,MAAMW,YAAY,GAAGrC,wBAAwB,CAAC2B,MAAM,CAAC;AAErD,IAAA,MAAMW,IAAI,GAAGH,UAAU,CACrBC,aAAa,EACbC,YAAY,EACZ;MACEE,UAAU,EAAEA,CAACC,CAAM,EAAEC,CAAM,KACzBD,CAAC,CAAClB,IAAI,KAAKmB,CAAC,CAACnB,IAAI,IACjBkB,CAAC,CAAChD,OAAO,KAAKiD,CAAC,CAACjD,OAAO,IACvBgD,CAAC,CAACjB,KAAK,KAAKkB,CAAC,CAAClB;AACjB,KAAA,CACF;IAED,MAAMmB,aAAa,GAAU,EAAE;IAC/B,MAAMC,aAAa,GAAU,EAAE;IAE/B,IAAIC,OAAO,GAAG,CAAC;IACf,IAAIC,MAAM,GAAG,CAAC;AAEdP,IAAAA,IAAI,CAACd,OAAO,CAAEsB,IAAS,IAAI;MACzB,IAAIA,IAAI,CAACC,KAAK,EAAE;QACdD,IAAI,CAAC5D,KAAK,CAACsC,OAAO,CAAC,CAACwB,OAAY,EAAEC,CAAS,KAAI;AAC7CP,UAAAA,aAAa,CAACrB,IAAI,CAChB6B,cAAA,CAAA,KAAA,EAAA;AAAsCC,YAAAA,SAAS,EAAC;AAAiB,WAAA,EAAvD,CAAA,WAAA,EAAcN,MAAM,GAAGI,CAAC,CAAA,CAAE,CAAgC,CACrE;AACDN,UAAAA,aAAa,CAACtB,IAAI,CAChB+B,eAAA,CAAA,KAAA,EAAA;AAAqCD,YAAAA,SAAS,EAAC,iBAAiB;AAAAE,YAAAA,QAAA,EAAA,CAC9DH,cAAA,CAAA,MAAA,EAAA;AAAMC,cAAAA,SAAS,EAAC,qBAAqB;cAAAE,QAAA,EAAEL,OAAO,CAAC1B;aAAI,CAAQ,EAC1D0B,OAAO,CAACzB,KAAK,IAAI6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,sBAAsB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAIL,OAAO,CAACzB,KAAK;cAAQ,EACjF6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,wBAAwB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAIL,OAAO,CAACxD,OAAO;AAAA,aAAA,CAAQ;AAAA,WAAA,EAH3D,CAAA,UAAA,EAAaqD,MAAM,GAAGI,CAAC,CAAA,CAAE,CAI7B,CACP;AACH,QAAA,CAAC,CAAC;AACFJ,QAAAA,MAAM,IAAIC,IAAI,CAACQ,KAAK,IAAI,CAAC;AAC3B,MAAA,CAAC,MAAM,IAAIR,IAAI,CAACS,OAAO,EAAE;QACvBT,IAAI,CAAC5D,KAAK,CAACsC,OAAO,CAAC,CAACgC,QAAa,EAAEP,CAAS,KAAI;AAC9CP,UAAAA,aAAa,CAACrB,IAAI,CAChB+B,eAAA,CAAA,KAAA,EAAA;AAAyCD,YAAAA,SAAS,EAAC,mBAAmB;AAAAE,YAAAA,QAAA,EAAA,CACpEH,cAAA,CAAA,MAAA,EAAA;AAAMC,cAAAA,SAAS,EAAC,qBAAqB;cAAAE,QAAA,EAAEG,QAAQ,CAAClC;aAAI,CAAQ,EAC3DkC,QAAQ,CAACjC,KAAK,IAAI6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,sBAAsB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAIG,QAAQ,CAACjC,KAAK;cAAQ,EACnF6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,wBAAwB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAIG,QAAQ,CAAChE,OAAO;AAAA,aAAA,CAAQ;AAAA,WAAA,EAH5D,CAAA,aAAA,EAAgBoD,OAAO,GAAGK,CAAC,CAAA,CAAE,CAIjC,CACP;AACDN,UAAAA,aAAa,CAACtB,IAAI,CAChB6B,cAAA,CAAA,KAAA,EAAA;AAAsCC,YAAAA,SAAS,EAAC;AAAiB,WAAA,EAAvD,CAAA,UAAA,EAAaP,OAAO,GAAGK,CAAC,CAAA,CAAE,CAAgC,CACrE;AACH,QAAA,CAAC,CAAC;AACFL,QAAAA,OAAO,IAAIE,IAAI,CAACQ,KAAK,IAAI,CAAC;AAC5B,MAAA,CAAC,MAAM;QACLR,IAAI,CAAC5D,KAAK,CAACsC,OAAO,CAAC,CAACiC,IAAS,EAAER,CAAS,KAAI;AAC1CP,UAAAA,aAAa,CAACrB,IAAI,CAChB+B,eAAA,CAAA,KAAA,EAAA;AAA2CD,YAAAA,SAAS,EAAC,qBAAqB;AAAAE,YAAAA,QAAA,EAAA,CACxEH,cAAA,CAAA,MAAA,EAAA;AAAMC,cAAAA,SAAS,EAAC,qBAAqB;cAAAE,QAAA,EAAEI,IAAI,CAACnC;aAAI,CAAQ,EACvDmC,IAAI,CAAClC,KAAK,IAAI6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,sBAAsB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAII,IAAI,CAAClC,KAAK;cAAQ,EAC3E6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,wBAAwB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAII,IAAI,CAACjE,OAAO;AAAA,aAAA,CAAQ;AAAA,WAAA,EAHxD,CAAA,eAAA,EAAkBoD,OAAO,GAAGK,CAAC,CAAA,CAAE,CAInC,CACP;AACDN,UAAAA,aAAa,CAACtB,IAAI,CAChB+B,eAAA,CAAA,KAAA,EAAA;AAAyCD,YAAAA,SAAS,EAAC,qBAAqB;AAAAE,YAAAA,QAAA,EAAA,CACtEH,cAAA,CAAA,MAAA,EAAA;AAAMC,cAAAA,SAAS,EAAC,qBAAqB;cAAAE,QAAA,EAAEI,IAAI,CAACnC;aAAI,CAAQ,EACvDmC,IAAI,CAAClC,KAAK,IAAI6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,sBAAsB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAII,IAAI,CAAClC,KAAK;cAAQ,EAC3E6B,eAAA,CAAA,MAAA,EAAA;AAAMD,cAAAA,SAAS,EAAC,wBAAwB;AAAAE,cAAAA,QAAA,EAAA,CAAA,IAAA,EAAII,IAAI,CAACjE,OAAO;AAAA,aAAA,CAAQ;AAAA,WAAA,EAHxD,CAAA,cAAA,EAAiBqD,MAAM,GAAGI,CAAC,CAAA,CAAE,CAIjC,CACP;AACH,QAAA,CAAC,CAAC;AACFL,QAAAA,OAAO,IAAIE,IAAI,CAACQ,KAAK,IAAI,CAAC;AAC1BT,QAAAA,MAAM,IAAIC,IAAI,CAACQ,KAAK,IAAI,CAAC;AAC3B,MAAA;AACF,IAAA,CAAC,CAAC;IAEF,OAAO;MAAEZ,aAAa;AAAEC,MAAAA;KAAe;AACzC,EAAA,CAAC,MAAM;AACL;AACA,IAAA,MAAMe,QAAQ,GAAGjE,gBAAgB,CAACiC,OAAO,CAAC;AAC1C,IAAA,MAAMiC,OAAO,GAAGlE,gBAAgB,CAACkC,MAAM,CAAC;AACxC,IAAA,OAAOG,gBAAgB,CAAC4B,QAAQ,EAAEC,OAAO,CAAC;AAC5C,EAAA;AACF;;ACrJA,SAAS7B,gBAAgBA,CAAC8B,IAAY,EAAEC,GAAW,EAAA;EACjD,MAAMC,UAAU,GAAG9B,eAAI,CAACE,SAAS,CAAC0B,IAAI,EAAEC,GAAG,CAAC;EAC5C,MAAMnB,aAAa,GAAU,EAAE;EAC/B,MAAMC,aAAa,GAAU,EAAE;AAC/B,EAAA,KAAK,MAAMG,IAAI,IAAIgB,UAAU,EAAE;IAC7B,IAAIhB,IAAI,CAACS,OAAO,EAAE;AAChBb,MAAAA,aAAa,CAACrB,IAAI,CAChB6B,cAAA,CAAA,MAAA,EAAA;AAAiCC,QAAAA,SAAS,EAAC,cAAc;QAAAE,QAAA,EACtDP,IAAI,CAAC5D;AAAK,OAAA,EADFwD,aAAa,CAACqB,MAAM,CAExB,CACR;AACH,IAAA,CAAC,MAAM,IAAIjB,IAAI,CAACC,KAAK,EAAE;AACrBJ,MAAAA,aAAa,CAACtB,IAAI,CAChB6B,cAAA,CAAA,MAAA,EAAA;AAAiCC,QAAAA,SAAS,EAAC,YAAY;QAAAE,QAAA,EACpDP,IAAI,CAAC5D;AAAK,OAAA,EADFyD,aAAa,CAACoB,MAAM,CAExB,CACR;AACH,IAAA,CAAC,MAAM;AACLrB,MAAAA,aAAa,CAACrB,IAAI,CAChB6B,cAAA,CAAA,MAAA,EAAA;AAAiCC,QAAAA,SAAS,EAAC,gBAAgB;QAAAE,QAAA,EACxDP,IAAI,CAAC5D;AAAK,OAAA,EADFwD,aAAa,CAACqB,MAAM,CAExB,CACR;AACDpB,MAAAA,aAAa,CAACtB,IAAI,CAChB6B,cAAA,CAAA,MAAA,EAAA;AAAiCC,QAAAA,SAAS,EAAC,gBAAgB;QAAAE,QAAA,EACxDP,IAAI,CAAC5D;AAAK,OAAA,EADFyD,aAAa,CAACoB,MAAM,CAExB,CACR;AACH,IAAA;AACF,EAAA;EACA,OAAO;IAAErB,aAAa;AAAEC,IAAAA;GAAe;AACzC;AAEA,SAASqB,eAAeA,CAACC,QAAkB,EAAEC,QAAkB,EAAA;AAC7D,EAAA,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACJ,QAAQ,CAACF,MAAM,EAAEG,QAAQ,CAACH,MAAM,CAAC;EAC5D,MAAMrB,aAAa,GAAU,EAAE;EAC/B,MAAMC,aAAa,GAAU,EAAE;EAC/B,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkB,SAAS,EAAElB,CAAC,EAAE,EAAE;AAClC,IAAA,MAAMW,IAAI,GAAGK,QAAQ,CAAChB,CAAC,CAAC,IAAI,EAAE;AAC9B,IAAA,MAAMY,GAAG,GAAGK,QAAQ,CAACjB,CAAC,CAAC,IAAI,EAAE;IAC7B,IAAIW,IAAI,KAAKC,GAAG,EAAE;AAChBnB,MAAAA,aAAa,CAACrB,IAAI,CAChB6B,cAAA,CAAA,KAAA,EAAA;AAAuBC,QAAAA,SAAS,EAAC,qBAAqB;AAAAE,QAAAA,QAAA,EAAEO;SAA9C,CAAA,KAAA,EAAQX,CAAC,CAAA,CAAE,CAA8C,CACpE;AACDN,MAAAA,aAAa,CAACtB,IAAI,CAChB6B,cAAA,CAAA,KAAA,EAAA;AAAsBC,QAAAA,SAAS,EAAC,qBAAqB;AAAAE,QAAAA,QAAA,EAAEQ;SAA7C,CAAA,IAAA,EAAOZ,CAAC,CAAA,CAAE,CAA6C,CAClE;AACH,IAAA,CAAC,MAAM;AACLP,MAAAA,aAAa,CAACrB,IAAI,CAChB6B,cAAA,CAAA,KAAA,EAAA;AAAuBC,QAAAA,SAAS,EAAES,IAAI,GAAG,mBAAmB,GAAG,iBAAiB;AAAAP,QAAAA,QAAA,EAAGO;AAAI,OAAA,EAA7E,CAAA,KAAA,EAAQX,CAAC,CAAA,CAAE,CAAyE,CAC/F;AACDN,MAAAA,aAAa,CAACtB,IAAI,CAChB6B,cAAA,CAAA,KAAA,EAAA;AAAsBC,QAAAA,SAAS,EAAEU,GAAG,GAAG,iBAAiB,GAAG,iBAAiB;AAAAR,QAAAA,QAAA,EAAGQ;AAAG,OAAA,EAAxE,CAAA,IAAA,EAAOZ,CAAC,CAAA,CAAE,CAAqE,CAC1F;AACH,IAAA;AACF,EAAA;EACA,OAAO;IAAEP,aAAa;AAAEC,IAAAA;GAAe;AACzC;AAWO,MAAM2B,OAAO,GAA2BA,CAAC;EAC9CL,QAAQ;EACRC,QAAQ;AACRf,EAAAA,SAAS,GAAG,EAAE;AACdoB,EAAAA,QAAQ,GAAG,cAAc;AACzB1C,EAAAA,aAAa,GAAG,IAAI;AACpBD,EAAAA,WAAW,GAAG;AAAM,CACrB,KAAI;EACH,MAAM4C,kBAAkB,GAAG,OAAOP,QAAQ,KAAK,QAAQ,IAAI,OAAOC,QAAQ,KAAK,QAAQ;AACvF,EAAA,MAAMO,iBAAiB,GAAGnF,KAAK,CAACC,OAAO,CAAC0E,QAAQ,CAAC,IAAI3E,KAAK,CAACC,OAAO,CAAC2E,QAAQ,CAAC;EAC5E,MAAMQ,sBAAsB,GAAGzF,oBAAoB,CAACgF,QAAQ,CAAC,IAAIhF,oBAAoB,CAACiF,QAAQ,CAAC;EAE/F,MAAM,CAACS,eAAe,EAAEC,kBAAkB,CAAC,GAAGC,cAAQ,CAAwD,IAAI,CAAC;AAEnHC,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIC,SAAS,GAAG,KAAK;AACrB,IAAA,IAAIL,sBAAsB,EAAE;AAC1BE,MAAAA,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACzBnD,MAAAA,oBAAoB,CAClBwC,QAAoB,EACpBC,QAAoB,EACpBtC,WAAW,EACXC,aAAa,EACbC,gBAAgB,CACjB,CAACkD,IAAI,CAAC/E,MAAM,IAAG;AACd,QAAA,IAAI,CAAC8E,SAAS,EAAEH,kBAAkB,CAAC3E,MAAM,CAAC;AAC5C,MAAA,CAAC,CAAC;AACJ,IAAA;AACA,IAAA,OAAO,MAAK;AAAG8E,MAAAA,SAAS,GAAG,IAAI;IAAE,CAAC;AAClC;AACF,EAAA,CAAC,EAAE,CAACd,QAAQ,EAAEC,QAAQ,EAAEtC,WAAW,EAAEC,aAAa,EAAE6C,sBAAsB,CAAC,CAAC;EAE5E,IAAIhC,aAAa,GAAU,EAAE;AAAEC,IAAAA,aAAa,GAAU,EAAE;AACxD,EAAA,IAAI6B,kBAAkB,EAAE;IACtB,CAAC;MAAE9B,aAAa;AAAEC,MAAAA;AAAa,KAAE,GAAGb,gBAAgB,CAACmC,QAAkB,EAAEC,QAAkB,CAAC;EAC9F,CAAC,MAAM,IAAIO,iBAAiB,EAAE;IAC5B,CAAC;MAAE/B,aAAa;AAAEC,MAAAA;AAAa,KAAE,GAAGqB,eAAe,CAACC,QAAoB,EAAEC,QAAoB,CAAC;EACjG,CAAC,MAAM,IAAIQ,sBAAsB,EAAE;AACjC,IAAA,IAAIC,eAAe,EAAE;MACnBjC,aAAa,GAAGiC,eAAe,CAACjC,aAAa;MAC7CC,aAAa,GAAGgC,eAAe,CAAChC,aAAa;AAC/C,IAAA,CAAC,MAAM;AACLD,MAAAA,aAAa,GAAG,CAACQ,cAAA,CAAA,KAAA,EAAA;AAAAG,QAAAA,QAAA,EAAA;OAAA,EAAS,SAAS,CAAiB,CAAC;AACrDV,MAAAA,aAAa,GAAG,CAACO,cAAA,CAAA,KAAA,EAAA;AAAAG,QAAAA,QAAA,EAAA;OAAA,EAAS,SAAS,CAAiB,CAAC;AACvD,IAAA;AACF,EAAA;EAEA,IACE,CAACmB,kBAAkB,IACnB,CAACC,iBAAiB,IAClB,CAACC,sBAAsB,EACvB;IACA,OACExB;MAAKC,SAAS,EAAE,CAAA,cAAA,EAAiBA,SAAS,CAAA,CAAE;AAAAE,MAAAA,QAAA,EAAA;AAAA,KAAA,CAEtC;AAEV,EAAA;EAEA,IAAIkB,QAAQ,KAAK,QAAQ,EAAE;IACzB,OACErB,cAAA,CAAA,KAAA,EAAA;MAAKC,SAAS,EAAE,CAAA,eAAA,EAAkBA,SAAS,CAAA,CAAE;AAAAE,MAAAA,QAAA,EAC3CD,eAAA,CAAA,KAAA,EAAA;AAAKD,QAAAA,SAAS,EAAC,iBAAiB;mBAC7BT,aAAa,EACbC,aAAa;OAAA;AACV,KAAA,CACF;AAEV,EAAA;EAGA,OACES;IAAKD,SAAS,EAAE,CAAA,qBAAA,EAAwBA,SAAS,CAAA,CAAE;AAAAE,IAAAA,QAAA,EAAA,CACjDD,eAAA,CAAA,KAAA,EAAA;AAAKD,MAAAA,SAAS,EAAC,eAAe;AAAAE,MAAAA,QAAA,EAAA,CAC5BH,cAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,gCAAgC;;QAAe,EAC9DD,cAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,kCAAkC;AAAAE,QAAAA,QAAA,EAC9CX;AAAa,OAAA,CACV;AAAA,KAAA,CACF,EACNU,eAAA,CAAA,KAAA,EAAA;AAAKD,MAAAA,SAAS,EAAC,eAAe;AAAAE,MAAAA,QAAA,EAAA,CAC5BH,cAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,gCAAgC;;QAAe,EAC9DD,cAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,kCAAkC;AAAAE,QAAAA,QAAA,EAC9CV;AAAa,OAAA,CACV;AAAA,KAAA,CACF;AAAA,GAAA,CACF;AAEV;;;;;"}
@@ -1 +1 @@
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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"}
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.4",
3
+ "version": "1.0.5",
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",
@@ -60,42 +60,42 @@
60
60
  "react-dom": ">=16.8.0"
61
61
  },
62
62
  "dependencies": {
63
- "@contentful/rich-text-types": "^17.0.1",
64
- "diff": "^8.0.1",
63
+ "@contentful/rich-text-types": "^17.2.5",
64
+ "diff": "^8.0.3",
65
65
  "tslib": "^2.8.1"
66
66
  },
67
67
  "devDependencies": {
68
- "@babel/core": "^7.27.1",
69
- "@babel/preset-env": "^7.27.2",
70
- "@babel/preset-react": "^7.27.1",
71
- "@babel/preset-typescript": "^7.27.1",
72
- "@rollup/plugin-babel": "^6.0.4",
73
- "@rollup/plugin-commonjs": "^28.0.3",
74
- "@rollup/plugin-node-resolve": "^16.0.1",
75
- "@rollup/plugin-typescript": "^12.1.2",
76
- "@storybook/addon-docs": "^9.0.15",
77
- "@storybook/addon-onboarding": "^9.0.15",
78
- "@storybook/react-vite": "^9.0.15",
79
- "@testing-library/jest-dom": "^6.1.0",
80
- "@testing-library/react": "^14.0.0",
81
- "@testing-library/user-event": "^14.5.0",
82
- "@types/jest": "^29.5.0",
83
- "@types/react": "^18.2.0",
84
- "@types/react-dom": "^18.2.0",
85
- "@vitejs/plugin-react": "^4.6.0",
86
- "babel-jest": "^29.7.0",
68
+ "@babel/core": "^7.29.0",
69
+ "@babel/preset-env": "^7.29.0",
70
+ "@babel/preset-react": "^7.28.5",
71
+ "@babel/preset-typescript": "^7.28.5",
72
+ "@rollup/plugin-babel": "^6.1.0",
73
+ "@rollup/plugin-commonjs": "^29.0.0",
74
+ "@rollup/plugin-node-resolve": "^16.0.3",
75
+ "@rollup/plugin-typescript": "^12.3.0",
76
+ "@storybook/addon-docs": "^10.2.7",
77
+ "@storybook/addon-onboarding": "^10.2.7",
78
+ "@storybook/react-vite": "^10.2.7",
79
+ "@testing-library/jest-dom": "^6.9.1",
80
+ "@testing-library/react": "^16.3.2",
81
+ "@testing-library/user-event": "^14.6.1",
82
+ "@types/jest": "^30.0.0",
83
+ "@types/react": "^19.2.13",
84
+ "@types/react-dom": "^19.2.3",
85
+ "@vitejs/plugin-react": "^5.1.3",
86
+ "babel-jest": "^30.2.0",
87
87
  "gh-pages": "^6.3.0",
88
88
  "identity-obj-proxy": "^3.0.0",
89
- "jest": "^29.7.0",
90
- "jest-environment-jsdom": "^29.7.0",
91
- "react": "^18.2.0",
92
- "react-dom": "^18.2.0",
93
- "rollup": "^4.40.2",
94
- "rollup-plugin-dts": "^6.2.1",
89
+ "jest": "^30.2.0",
90
+ "jest-environment-jsdom": "^30.2.0",
91
+ "react": "^19.2.4",
92
+ "react-dom": "^19.2.4",
93
+ "rollup": "^4.57.1",
94
+ "rollup-plugin-dts": "^6.3.0",
95
95
  "rollup-plugin-peer-deps-external": "^2.2.4",
96
96
  "rollup-plugin-postcss": "^4.0.2",
97
- "storybook": "^9.0.15",
98
- "typescript": "^5.8.3",
99
- "vite": "^7.0.2"
97
+ "storybook": "^10.2.7",
98
+ "typescript": "^5.9.3",
99
+ "vite": "^7.3.1"
100
100
  }
101
101
  }