@viswa-test/test-citation 0.0.390 → 0.0.391
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.
- package/dist/cjs/features/CognitiveCompare/CitationAnchor.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CitationAnchor.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CitationRenderer.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CitationRenderer.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveCompare.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveCompare.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveCompareConstants.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveCompareConstants.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveComparehelpers.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveComparehelpers.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitivePopup.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitivePopup.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CompareContext.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CompareContext.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/WebGptPanel.js +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/WebGptPanel.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/LHSSectionRow.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/LHSSectionRow.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/RHSSectionRow.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/RHSSectionRow.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SectionAccordion.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SectionAccordion.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SubSectionAccordion.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SubSectionAccordion.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SvgConnectors.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SvgConnectors.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/memoizedMarkdown.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/memoizedMarkdown.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useCompareData.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useCompareData.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useLinesCalculator.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useLinesCalculator.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useSideBySide.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useSideBySide.js.map +1 -1
- package/dist/cjs/features/PdfViewer/PdfToolbar.js +1 -1
- package/dist/cjs/features/PdfViewer/PdfToolbar.js.map +1 -1
- package/dist/cjs/features/PdfViewer/PdfViewer.css.js +1 -1
- package/dist/cjs/features/PdfViewer/PdfViewer.js +1 -1
- package/dist/cjs/features/PdfViewer/PdfViewer.js.map +1 -1
- package/dist/cjs/features/PdfViewer/rotationManager.js +1 -1
- package/dist/cjs/features/PdfViewer/rotationManager.js.map +1 -1
- package/dist/cjs/features/PdfViewer/usePdfHighlight.js +1 -1
- package/dist/cjs/features/PdfViewer/usePdfHighlight.js.map +1 -1
- package/dist/cjs/features/PdfViewer/zoomStateManager.js +2 -0
- package/dist/cjs/features/PdfViewer/zoomStateManager.js.map +1 -0
- package/dist/cjs/features/SegmentReviewComponents/CognitiveScoreBadge.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/CognitiveScoreBadge.js.map +1 -1
- package/dist/cjs/features/SegmentReviewComponents/reviewStepAdapters.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/reviewStepAdapters.js.map +1 -1
- package/dist/features/CognitiveCompare/CitationAnchor.js +1 -1
- package/dist/features/CognitiveCompare/CitationAnchor.js.map +1 -1
- package/dist/features/CognitiveCompare/CitationRenderer.js +1 -1
- package/dist/features/CognitiveCompare/CitationRenderer.js.map +1 -1
- package/dist/features/CognitiveCompare/CognitiveCompare.js +1 -1
- package/dist/features/CognitiveCompare/CognitiveCompare.js.map +1 -1
- package/dist/features/CognitiveCompare/CognitiveCompareConstants.js +1 -1
- package/dist/features/CognitiveCompare/CognitiveCompareConstants.js.map +1 -1
- package/dist/features/CognitiveCompare/CognitiveComparehelpers.js +1 -1
- package/dist/features/CognitiveCompare/CognitiveComparehelpers.js.map +1 -1
- package/dist/features/CognitiveCompare/CognitivePopup.js +1 -1
- package/dist/features/CognitiveCompare/CognitivePopup.js.map +1 -1
- package/dist/features/CognitiveCompare/CompareContext.js +1 -1
- package/dist/features/CognitiveCompare/CompareContext.js.map +1 -1
- package/dist/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js +1 -1
- package/dist/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js.map +1 -1
- package/dist/features/CognitiveCompare/Guidelines/components/WebGptPanel.js +1 -1
- package/dist/features/CognitiveCompare/Guidelines/components/WebGptPanel.js.map +1 -1
- package/dist/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js +1 -1
- package/dist/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js.map +1 -1
- package/dist/features/CognitiveCompare/components/LHSSectionRow.js +1 -1
- package/dist/features/CognitiveCompare/components/LHSSectionRow.js.map +1 -1
- package/dist/features/CognitiveCompare/components/RHSSectionRow.js +1 -1
- package/dist/features/CognitiveCompare/components/RHSSectionRow.js.map +1 -1
- package/dist/features/CognitiveCompare/components/SectionAccordion.js +1 -1
- package/dist/features/CognitiveCompare/components/SectionAccordion.js.map +1 -1
- package/dist/features/CognitiveCompare/components/SubSectionAccordion.js +1 -1
- package/dist/features/CognitiveCompare/components/SubSectionAccordion.js.map +1 -1
- package/dist/features/CognitiveCompare/components/SvgConnectors.js +1 -1
- package/dist/features/CognitiveCompare/components/SvgConnectors.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/memoizedMarkdown.js +1 -1
- package/dist/features/CognitiveCompare/hooks/memoizedMarkdown.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/useCompareData.js +1 -1
- package/dist/features/CognitiveCompare/hooks/useCompareData.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/useLinesCalculator.js +1 -1
- package/dist/features/CognitiveCompare/hooks/useLinesCalculator.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/useSideBySide.js +1 -1
- package/dist/features/CognitiveCompare/hooks/useSideBySide.js.map +1 -1
- package/dist/features/PdfViewer/PdfToolbar.js +1 -1
- package/dist/features/PdfViewer/PdfToolbar.js.map +1 -1
- package/dist/features/PdfViewer/PdfViewer.css.js +1 -1
- package/dist/features/PdfViewer/PdfViewer.js +1 -1
- package/dist/features/PdfViewer/PdfViewer.js.map +1 -1
- package/dist/features/PdfViewer/rotationManager.js +1 -1
- package/dist/features/PdfViewer/rotationManager.js.map +1 -1
- package/dist/features/PdfViewer/usePdfHighlight.js +1 -1
- package/dist/features/PdfViewer/usePdfHighlight.js.map +1 -1
- package/dist/features/PdfViewer/zoomStateManager.js +2 -0
- package/dist/features/PdfViewer/zoomStateManager.js.map +1 -0
- package/dist/features/SegmentReviewComponents/CognitiveScoreBadge.js +1 -1
- package/dist/features/SegmentReviewComponents/CognitiveScoreBadge.js.map +1 -1
- package/dist/features/SegmentReviewComponents/reviewStepAdapters.js +1 -1
- package/dist/features/SegmentReviewComponents/reviewStepAdapters.js.map +1 -1
- package/dist/types/features/CognitiveCompare/CitationAnchor.d.ts +0 -2
- package/dist/types/features/CognitiveCompare/CitationAnchor.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CitationRenderer.d.ts +1 -8
- package/dist/types/features/CognitiveCompare/CitationRenderer.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompare.d.ts +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompare.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompareConstants.d.ts +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompareConstants.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompareTypes.d.ts +3 -12
- package/dist/types/features/CognitiveCompare/CognitiveCompareTypes.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveComparehelpers.d.ts +0 -12
- package/dist/types/features/CognitiveCompare/CognitiveComparehelpers.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitivePopup.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CompareContext.d.ts +2 -9
- package/dist/types/features/CognitiveCompare/CompareContext.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/Guidelines/components/GuidelinePanel.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/Guidelines/components/WebGptPanel.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.d.ts +1 -14
- package/dist/types/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/LHSSectionRow.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/RHSSectionRow.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/SectionAccordion.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/SubSectionAccordion.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/SvgConnectors.d.ts +3 -2
- package/dist/types/features/CognitiveCompare/components/SvgConnectors.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/memoizedMarkdown.d.ts +1 -2
- package/dist/types/features/CognitiveCompare/hooks/memoizedMarkdown.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useCompareData.d.ts +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useCompareData.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useLinesCalculator.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useSideBySide.d.ts.map +1 -1
- package/dist/types/features/PdfViewer/PdfToolbar.d.ts.map +1 -1
- package/dist/types/features/PdfViewer/PdfViewer.d.ts.map +1 -1
- package/dist/types/features/PdfViewer/rotationManager.d.ts.map +1 -1
- package/dist/types/features/PdfViewer/usePdfHighlight.d.ts +1 -2
- package/dist/types/features/PdfViewer/usePdfHighlight.d.ts.map +1 -1
- package/dist/types/features/PdfViewer/zoomStateManager.d.ts +21 -0
- package/dist/types/features/PdfViewer/zoomStateManager.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{ChevronDown as i}from"lucide-react";import{ButtonCognitiveIcon as n}from"../../../assests/svg/ButtonCognitiveIcon.js";import{getBentArrowPath as o,DEVIATION_BADGE_SEPARATOR as s}from"../CognitiveComparehelpers.js";import
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{ChevronDown as i}from"lucide-react";import{ButtonCognitiveIcon as n}from"../../../assests/svg/ButtonCognitiveIcon.js";import{getBentArrowPath as o,DEVIATION_BADGE_SEPARATOR as s}from"../CognitiveComparehelpers.js";import l from"./ThreeDotsLoader.js";import a from"./connectedLines.js";import{Box as r,Tooltip as c}from"@mui/material";function d({svgContainerRef:d,svgDimensions:p,isResizing:g,overallConnector:u,rootDeviationStyle:h,lines:y,isSideBySide:m,activeSideBySideSection:x,isArrowVisible:f,maintainRelativeOrder:b,proposedSections:v,existingSections:S,cognitivePopup:C,activeBadgeId:I,closeCognitivePopup:B,setActiveBadgeId:R,openCognitivePopupFromState:w,buildSectionPopupState:$,connectedLines:P,pathRefs:M,isGuidelineMode:j,deviationAnalysisStatus:D}){const L=[...y].sort((e,t)=>Number(Boolean(t.isMappingContinuation))-Number(Boolean(e.isMappingContinuation)));return e("svg",{ref:d,style:{position:"absolute",top:0,left:0,width:p.width||"100%",height:p.height||"100%",pointerEvents:"none",zIndex:10,overflow:"visible",opacity:g?0:1,transition:"opacity 0.15s ease-in-out"},children:[u&&t("g",{children:t("line",{x1:u.x1,y1:u.y,x2:u.x2,y2:u.y,stroke:h.badgeBorder,strokeWidth:"1.5"})}),L.map(a=>{const d=a.x1+.5*(a.x2-a.x1),p=(a.y1+a.y2)/2,g=d;if("Not Defined"===a.style.label&&!a.hasCognitive)return null;if(a.isSubSection?m&&x===a.subSectionKeyPath&&f:m&&x===a.sectionIdx&&f)return null;if(b)return null;const u=a.isMappingContinuation?`M ${g} ${a.y1} L ${g} ${a.y2} L ${a.x2} ${a.y2}`:a.isSubSection?o(a.x1,a.y1,a.x2,a.y2):`M ${a.x1} ${a.y1} L ${a.x2} ${a.y2}`;let h=v[a.sectionIdx]||{title:"",content:""},y=S[a.targetRightIdx??a.sectionIdx]||{title:"",content:""};if(a.isSubSection&&a.subSectionKeyPath){const e=a.subSectionKeyPath.includes(s)?a.subSectionKeyPath.split(s):[],t=e[2]||a.subSectionKeyPath,i=e[3]||t,n=t.split("-").map(Number),o=i.split("-").map(Number);let l=null,r=null;n.length>0&&(l=v[n[0]]||null),o.length>0&&(r=S[o[0]]||null);const c=l?.title||"",d=r?.title||"";for(let e=1;e<n.length;e+=1)l?.subsections&&(l=l.subsections[n[e]]||null);for(let e=1;e<o.length;e+=1)r?.subsections&&(r=r.subsections[o[e]]||null);l&&(h={...l,title:c||l.title}),r&&(y={...r,title:d||r.title})}const P=!h.cognitiveData?.isMissingRationale||Boolean(h.cognitiveData?.decisioning?.length),M=h.evaluationResult?.cognitive_decisioning?.decisioning_factors?.length||!1,j=P||M,L=null!=h.evaluationResult||null!=y.evaluationResult,k=("mapping_ready"===D||"deviations_streaming"===D)&&!L,K="complete"!==D||L?null:"Same";return e("g",{children:[t("path",{d:u,fill:"none",stroke:a.style.badgeBorder||"#E2E8F0",strokeWidth:"1.5"}),!a.isMappingContinuation&&t("foreignObject",{x:d-100,y:p-14,width:"200",height:"28",style:{pointerEvents:"auto",overflow:"visible"},children:t(r,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:e(r,{onClick:e=>{e.stopPropagation(),j&&(C.open&&I===a.id?B():(R(a.id),w($(e.currentTarget,h,y,a.sectionIdx,!1,a.style))))},sx:{display:"inline-flex",alignItems:"center",gap:"4px",fontSize:"11px",bgcolor:a.style.badgeBg,color:a.style.badgeText,border:`1px solid ${a.style.badgeBorder}`,borderRadius:"12px",px:1.5,py:.5,fontWeight:600,textAlign:"center",whiteSpace:"nowrap",cursor:j?"pointer":"default"},children:[k?t(c,{title:"Deviation data generation in progress",placement:"top",arrow:!0,children:t(r,{component:"span",sx:{display:"inline-flex",alignItems:"center"},children:t(l,{color:a.style.badgeText})})}):null==a.style.label?K:"0"===String(a.style.label)?"Same":a.style.label,t(r,{component:"span",sx:{width:14,height:14,display:"flex",alignItems:"center","& svg":{width:"14px",height:"14px"}},children:t(n,{})}),j&&t(i,{size:11,style:{transform:C.open&&I===a.id?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.25s ease"}})]})})})]},a.id)}),t(a,{maintainRelativeOrder:b,connectedLines:P,pathRefs:M,isGuidelineMode:j})]})}export{d as default};
|
|
2
2
|
//# sourceMappingURL=SvgConnectors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SvgConnectors.js","sources":["../../../../src/features/CognitiveCompare/components/SvgConnectors.tsx"],"sourcesContent":["import { ChevronDown } from \"lucide-react\";\nimport { ButtonCognitiveIcon } from \"../../../assests/svg/ButtonCognitiveIcon\";\nimport { DEVIATION_BADGE_SEPARATOR, getBentArrowPath } from \"../CognitiveComparehelpers\";\nimport { DEFAULT_DEVIAION_COLOR } from \"../CognitiveCompareConstants\";\nimport ThreeDotsLoader from \"./ThreeDotsLoader\";\nimport ConnectedLinesComp from \"./connectedLines\";\nimport { Box } from \"@mui/material\";\nimport {\n SectionBlock,\n SectionPopupState,\n StyleVariant,\n} from \"../CognitiveCompareTypes\";\n\ntype SvgConnectorLine = {\n id: string;\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n style: StyleVariant;\n sectionIdx: number | string;\n targetRightIdx?: number;\n isSubSection?: boolean;\n isMappingContinuation?: boolean;\n subSectionKeyPath?: string;\n hasCognitive?: boolean;\n};\n\ntype SvgConnectorsProps = {\n svgContainerRef: React.MutableRefObject<SVGSVGElement | null>;\n svgDimensions: { width: number; height: number };\n isResizing: boolean;\n overallConnector: { x1: number; x2: number; y: number } | null;\n rootDeviationStyle: { badgeBorder: string };\n lines: Record<string, any>[];\n isSideBySide: boolean;\n activeSideBySideSection: number | string | null;\n isArrowVisible: boolean;\n maintainRelativeOrder: boolean | undefined;\n proposedSections: SectionBlock[];\n existingSections: SectionBlock[];\n cognitivePopup: SectionPopupState;\n activeBadgeId: string | null;\n closeCognitivePopup: () => void;\n setActiveBadgeId: React.Dispatch<React.SetStateAction<string | null>>;\n openCognitivePopupFromState: (nextPopup: SectionPopupState) => void;\n buildSectionPopupState: (\n anchorEl: HTMLElement | null,\n baseSec: SectionBlock | null,\n refSec: SectionBlock | null,\n sectionIdx: number | string,\n isOrphan?: boolean,\n style?: StyleVariant | null,\n rootNode?: boolean,\n ) => SectionPopupState;\n connectedLines: Record<string, any>[];\n pathRefs: React.MutableRefObject<Record<string, SVGPathElement | null>>;\n isGuidelineMode ?: boolean;\n};\n\nexport default function SvgConnectors({\n svgContainerRef,\n svgDimensions,\n isResizing,\n overallConnector,\n rootDeviationStyle,\n lines,\n isSideBySide,\n activeSideBySideSection,\n isArrowVisible,\n maintainRelativeOrder,\n proposedSections,\n existingSections,\n cognitivePopup,\n activeBadgeId,\n closeCognitivePopup,\n setActiveBadgeId,\n openCognitivePopupFromState,\n buildSectionPopupState,\n connectedLines,\n pathRefs,\n isGuidelineMode,\n}: SvgConnectorsProps) {\n const orderedLines = [...lines].sort(\n (left, right) =>\n Number(Boolean(right.isMappingContinuation)) -\n Number(Boolean(left.isMappingContinuation)),\n );\n\n return (\n <svg\n ref={svgContainerRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: svgDimensions.width || \"100%\",\n height: svgDimensions.height || \"100%\",\n pointerEvents: \"none\",\n zIndex: 10,\n overflow: \"visible\",\n opacity: isResizing ? 0 : 1,\n transition: \"opacity 0.15s ease-in-out\",\n }}\n >\n {overallConnector && (\n <g>\n <line\n x1={overallConnector.x1}\n y1={overallConnector.y}\n x2={overallConnector.x2}\n y2={overallConnector.y}\n stroke={rootDeviationStyle.badgeBorder}\n strokeWidth=\"1.5\"\n />\n </g>\n )}\n\n {orderedLines.map((line) => {\n const bendX = line.x1 + (line.x2 - line.x1) * 0.5;\n const midY = (line.y1 + line.y2) / 2;\n const continuationJunctionX = bendX;\n\n if (line.style.label === \"Not Defined\" && !line.hasCognitive) {\n return null;\n }\n\n const isActive = line.isSubSection\n ? isSideBySide &&\n activeSideBySideSection === line.subSectionKeyPath &&\n isArrowVisible\n : isSideBySide &&\n activeSideBySideSection === line.sectionIdx &&\n isArrowVisible;\n\n if (isActive) {\n return null;\n }\n\n if (maintainRelativeOrder) {\n return null;\n }\n\n const pathD = line.isMappingContinuation\n ? `M ${continuationJunctionX} ${line.y1} L ${continuationJunctionX} ${line.y2} L ${line.x2} ${line.y2}`\n : !line.isSubSection\n ? `M ${line.x1} ${line.y1} L ${line.x2} ${line.y2}`\n : getBentArrowPath(line.x1, line.y1, line.x2, line.y2);\n\n let baseSec = proposedSections[line.sectionIdx as number] || { title: \"\", content: \"\" };\n let refSec = existingSections[line.targetRightIdx ?? (line.sectionIdx as number)] || {\n title: \"\",\n content: \"\",\n };\n\n if (line.isSubSection && line.subSectionKeyPath) {\n const pathParts = line.subSectionKeyPath.includes(DEVIATION_BADGE_SEPARATOR)\n ? line.subSectionKeyPath.split(DEVIATION_BADGE_SEPARATOR)\n : [];\n const leftPath = pathParts[2] || line.subSectionKeyPath;\n const rightPath = pathParts[3] || leftPath;\n const leftPathParts = leftPath.split(\"-\").map(Number);\n const rightPathParts = rightPath.split(\"-\").map(Number);\n let leftSection: SectionBlock | null = null;\n let rightSection: SectionBlock | null = null;\n\n if (leftPathParts.length > 0) {\n leftSection = proposedSections[leftPathParts[0]] || null;\n }\n if (rightPathParts.length > 0) {\n rightSection = existingSections[rightPathParts[0]] || null;\n }\n\n const rootParentTitle = leftSection?.title || \"\";\n const rootRefParentTitle = rightSection?.title || \"\";\n\n for (let i = 1; i < leftPathParts.length; i += 1) {\n if (leftSection?.subsections) leftSection = leftSection.subsections[leftPathParts[i]] || null;\n }\n for (let i = 1; i < rightPathParts.length; i += 1) {\n if (rightSection?.subsections) rightSection = rightSection.subsections[rightPathParts[i]] || null;\n }\n\n if (leftSection) baseSec = { ...leftSection, title: rootParentTitle || leftSection.title };\n if (rightSection) refSec = { ...rightSection, title: rootRefParentTitle || rightSection.title };\n }\n\n const isMappingCD =\n !baseSec.cognitiveData?.isMissingRationale ||\n Boolean(baseSec.cognitiveData?.decisioning?.length);\n const isDeviationCD =\n baseSec.evaluationResult?.cognitive_decisioning?.decisioning_factors?.length || false;\n const hasMapping = isMappingCD || isDeviationCD;\n\n return (\n <g key={line.id}>\n <path\n d={pathD}\n fill=\"none\"\n stroke={line.style.badgeBorder || \"#E2E8F0\"}\n strokeWidth=\"1.5\"\n />\n {!line.isMappingContinuation && (\n <foreignObject\n x={bendX - 100}\n y={midY - 14}\n width=\"200\"\n height=\"28\"\n style={{ pointerEvents: \"auto\", overflow: \"visible\" }}\n >\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100%\",\n }}\n >\n <Box\n onClick={(e) => {\n e.stopPropagation();\n if (!hasMapping) return;\n if (cognitivePopup.open && activeBadgeId === line.id) {\n closeCognitivePopup();\n return;\n }\n\n setActiveBadgeId(line.id);\n openCognitivePopupFromState(\n buildSectionPopupState(\n e.currentTarget as HTMLElement,\n baseSec,\n refSec,\n line.sectionIdx,\n false,\n line.style,\n ),\n );\n }}\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n fontSize: \"11px\",\n bgcolor: line.style.badgeBg,\n color: line.style.badgeText,\n border: `1px solid ${line.style.badgeBorder}`,\n borderRadius: \"12px\",\n px: 1.5,\n py: 0.5,\n fontWeight: 600,\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n cursor: !hasMapping ? \"default\" : \"pointer\",\n }}\n >\n {line.style.badgeText === DEFAULT_DEVIAION_COLOR && line.style.label == null\n ? <ThreeDotsLoader color={line.style.badgeText} />\n : line.style.label == null\n ? null\n : String(line.style.label) === \"0\"\n ? \"Same\"\n : line.style.label}\n <Box\n component=\"span\"\n sx={{\n width: 14,\n height: 14,\n display: \"flex\",\n alignItems: \"center\",\n \"& svg\": { width: \"14px\", height: \"14px\" },\n }}\n >\n <ButtonCognitiveIcon />\n </Box>\n\n {hasMapping && (\n <ChevronDown\n size={11}\n style={{\n transform:\n cognitivePopup.open && activeBadgeId === line.id\n ? \"rotate(180deg)\"\n : \"rotate(0deg)\",\n transition: \"transform 0.25s ease\",\n }}\n />\n )}\n </Box>\n </Box>\n </foreignObject>\n )}\n </g>\n );\n })}\n\n <ConnectedLinesComp \n maintainRelativeOrder={maintainRelativeOrder} \n connectedLines={connectedLines} \n pathRefs={pathRefs} \n isGuidelineMode={isGuidelineMode}\n />\n </svg>\n );\n}\n"],"names":["SvgConnectors","svgContainerRef","svgDimensions","isResizing","overallConnector","rootDeviationStyle","lines","isSideBySide","activeSideBySideSection","isArrowVisible","maintainRelativeOrder","proposedSections","existingSections","cognitivePopup","activeBadgeId","closeCognitivePopup","setActiveBadgeId","openCognitivePopupFromState","buildSectionPopupState","connectedLines","pathRefs","isGuidelineMode","orderedLines","sort","left","right","Number","Boolean","isMappingContinuation","jsxs","ref","style","position","top","width","height","pointerEvents","zIndex","overflow","opacity","transition","children","jsx","x1","y1","y","x2","y2","stroke","badgeBorder","strokeWidth","map","line","bendX","midY","continuationJunctionX","label","hasCognitive","isSubSection","subSectionKeyPath","sectionIdx","pathD","getBentArrowPath","baseSec","title","content","refSec","targetRightIdx","pathParts","includes","DEVIATION_BADGE_SEPARATOR","split","leftPath","rightPath","leftPathParts","rightPathParts","leftSection","rightSection","length","rootParentTitle","rootRefParentTitle","i","subsections","isMappingCD","cognitiveData","isMissingRationale","decisioning","isDeviationCD","evaluationResult","cognitive_decisioning","decisioning_factors","hasMapping","d","fill","x","Box","sx","display","justifyContent","alignItems","onClick","e","stopPropagation","open","id","currentTarget","gap","fontSize","bgcolor","badgeBg","color","badgeText","border","borderRadius","px","py","fontWeight","textAlign","whiteSpace","cursor","DEFAULT_DEVIAION_COLOR","ThreeDotsLoader","String","component","ButtonCognitiveIcon","ChevronDown","size","transform","ConnectedLinesComp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SvgConnectors.js","sources":["../../../../src/features/CognitiveCompare/components/SvgConnectors.tsx"],"sourcesContent":["import { ChevronDown } from \"lucide-react\";\nimport { ButtonCognitiveIcon } from \"../../../assests/svg/ButtonCognitiveIcon\";\nimport { DEVIATION_BADGE_SEPARATOR, getBentArrowPath } from \"../CognitiveComparehelpers\";\nimport ThreeDotsLoader from \"./ThreeDotsLoader\";\nimport ConnectedLinesComp from \"./connectedLines\";\nimport { Box, Tooltip } from \"@mui/material\";\nimport {\n DeviationAnalysisStatus,\n SectionBlock,\n SectionPopupState,\n StyleVariant,\n} from \"../CognitiveCompareTypes\";\n\ntype SvgConnectorLine = {\n id: string;\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n style: StyleVariant;\n sectionIdx: number | string;\n targetRightIdx?: number;\n isSubSection?: boolean;\n isMappingContinuation?: boolean;\n subSectionKeyPath?: string;\n hasCognitive?: boolean;\n};\n\ntype SvgConnectorsProps = {\n svgContainerRef: React.MutableRefObject<SVGSVGElement | null>;\n svgDimensions: { width: number; height: number };\n isResizing: boolean;\n overallConnector: { x1: number; x2: number; y: number } | null;\n rootDeviationStyle: { badgeBorder: string };\n lines: Record<string, any>[];\n isSideBySide: boolean;\n activeSideBySideSection: number | string | null;\n isArrowVisible: boolean;\n maintainRelativeOrder: boolean | undefined;\n proposedSections: SectionBlock[];\n existingSections: SectionBlock[];\n cognitivePopup: SectionPopupState;\n activeBadgeId: string | null;\n closeCognitivePopup: () => void;\n setActiveBadgeId: React.Dispatch<React.SetStateAction<string | null>>;\n openCognitivePopupFromState: (nextPopup: SectionPopupState) => void;\n buildSectionPopupState: (\n anchorEl: HTMLElement | null,\n baseSec: SectionBlock | null,\n refSec: SectionBlock | null,\n sectionIdx: number | string,\n isOrphan?: boolean,\n style?: StyleVariant | null,\n rootNode?: boolean,\n ) => SectionPopupState;\n connectedLines: Record<string, any>[];\n pathRefs: React.MutableRefObject<Record<string, SVGPathElement | null>>;\n isGuidelineMode ?: boolean;\n deviationAnalysisStatus: DeviationAnalysisStatus;\n};\n\nexport default function SvgConnectors({\n svgContainerRef,\n svgDimensions,\n isResizing,\n overallConnector,\n rootDeviationStyle,\n lines,\n isSideBySide,\n activeSideBySideSection,\n isArrowVisible,\n maintainRelativeOrder,\n proposedSections,\n existingSections,\n cognitivePopup,\n activeBadgeId,\n closeCognitivePopup,\n setActiveBadgeId,\n openCognitivePopupFromState,\n buildSectionPopupState,\n connectedLines,\n pathRefs,\n isGuidelineMode,\n deviationAnalysisStatus,\n}: SvgConnectorsProps) {\n const orderedLines = [...lines].sort(\n (left, right) =>\n Number(Boolean(right.isMappingContinuation)) -\n Number(Boolean(left.isMappingContinuation)),\n );\n\n return (\n <svg\n ref={svgContainerRef}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: svgDimensions.width || \"100%\",\n height: svgDimensions.height || \"100%\",\n pointerEvents: \"none\",\n zIndex: 10,\n overflow: \"visible\",\n opacity: isResizing ? 0 : 1,\n transition: \"opacity 0.15s ease-in-out\",\n }}\n >\n {overallConnector && (\n <g>\n <line\n x1={overallConnector.x1}\n y1={overallConnector.y}\n x2={overallConnector.x2}\n y2={overallConnector.y}\n stroke={rootDeviationStyle.badgeBorder}\n strokeWidth=\"1.5\"\n />\n </g>\n )}\n\n {orderedLines.map((line) => {\n const bendX = line.x1 + (line.x2 - line.x1) * 0.5;\n const midY = (line.y1 + line.y2) / 2;\n const continuationJunctionX = bendX;\n\n if (line.style.label === \"Not Defined\" && !line.hasCognitive) {\n return null;\n }\n\n const isActive = line.isSubSection\n ? isSideBySide &&\n activeSideBySideSection === line.subSectionKeyPath &&\n isArrowVisible\n : isSideBySide &&\n activeSideBySideSection === line.sectionIdx &&\n isArrowVisible;\n\n if (isActive) {\n return null;\n }\n\n if (maintainRelativeOrder) {\n return null;\n }\n\n const pathD = line.isMappingContinuation\n ? `M ${continuationJunctionX} ${line.y1} L ${continuationJunctionX} ${line.y2} L ${line.x2} ${line.y2}`\n : !line.isSubSection\n ? `M ${line.x1} ${line.y1} L ${line.x2} ${line.y2}`\n : getBentArrowPath(line.x1, line.y1, line.x2, line.y2);\n\n let baseSec = proposedSections[line.sectionIdx as number] || { title: \"\", content: \"\" };\n let refSec = existingSections[line.targetRightIdx ?? (line.sectionIdx as number)] || {\n title: \"\",\n content: \"\",\n };\n\n if (line.isSubSection && line.subSectionKeyPath) {\n const pathParts = line.subSectionKeyPath.includes(DEVIATION_BADGE_SEPARATOR)\n ? line.subSectionKeyPath.split(DEVIATION_BADGE_SEPARATOR)\n : [];\n const leftPath = pathParts[2] || line.subSectionKeyPath;\n const rightPath = pathParts[3] || leftPath;\n const leftPathParts = leftPath.split(\"-\").map(Number);\n const rightPathParts = rightPath.split(\"-\").map(Number);\n let leftSection: SectionBlock | null = null;\n let rightSection: SectionBlock | null = null;\n\n if (leftPathParts.length > 0) {\n leftSection = proposedSections[leftPathParts[0]] || null;\n }\n if (rightPathParts.length > 0) {\n rightSection = existingSections[rightPathParts[0]] || null;\n }\n\n const rootParentTitle = leftSection?.title || \"\";\n const rootRefParentTitle = rightSection?.title || \"\";\n\n for (let i = 1; i < leftPathParts.length; i += 1) {\n if (leftSection?.subsections) leftSection = leftSection.subsections[leftPathParts[i]] || null;\n }\n for (let i = 1; i < rightPathParts.length; i += 1) {\n if (rightSection?.subsections) rightSection = rightSection.subsections[rightPathParts[i]] || null;\n }\n\n if (leftSection) baseSec = { ...leftSection, title: rootParentTitle || leftSection.title };\n if (rightSection) refSec = { ...rightSection, title: rootRefParentTitle || rightSection.title };\n }\n\n const isMappingCD =\n !baseSec.cognitiveData?.isMissingRationale ||\n Boolean(baseSec.cognitiveData?.decisioning?.length);\n const isDeviationCD =\n baseSec.evaluationResult?.cognitive_decisioning?.decisioning_factors?.length || false;\n const hasMapping = isMappingCD || isDeviationCD;\n const hasDeviationResult =\n baseSec.evaluationResult != null ||\n refSec.evaluationResult != null;\n const isDeviationGenerationInProgress =\n deviationAnalysisStatus === \"mapping_ready\" ||\n deviationAnalysisStatus === \"deviations_streaming\";\n const shouldShowDeviationLoader =\n isDeviationGenerationInProgress && !hasDeviationResult;\n const fallbackLabel =\n deviationAnalysisStatus === \"complete\" && !hasDeviationResult\n ? \"Same\"\n : null;\n\n return (\n <g key={line.id}>\n <path\n d={pathD}\n fill=\"none\"\n stroke={line.style.badgeBorder || \"#E2E8F0\"}\n strokeWidth=\"1.5\"\n />\n {!line.isMappingContinuation && (\n <foreignObject\n x={bendX - 100}\n y={midY - 14}\n width=\"200\"\n height=\"28\"\n style={{ pointerEvents: \"auto\", overflow: \"visible\" }}\n >\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n height: \"100%\",\n }}\n >\n <Box\n onClick={(e) => {\n e.stopPropagation();\n if (!hasMapping) return;\n if (cognitivePopup.open && activeBadgeId === line.id) {\n closeCognitivePopup();\n return;\n }\n\n setActiveBadgeId(line.id);\n openCognitivePopupFromState(\n buildSectionPopupState(\n e.currentTarget as HTMLElement,\n baseSec,\n refSec,\n line.sectionIdx,\n false,\n line.style,\n ),\n );\n }}\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n fontSize: \"11px\",\n bgcolor: line.style.badgeBg,\n color: line.style.badgeText,\n border: `1px solid ${line.style.badgeBorder}`,\n borderRadius: \"12px\",\n px: 1.5,\n py: 0.5,\n fontWeight: 600,\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n cursor: !hasMapping ? \"default\" : \"pointer\",\n }}\n >\n {shouldShowDeviationLoader\n ? (\n <Tooltip title=\"Deviation data generation in progress\" placement=\"top\" arrow>\n <Box component=\"span\" sx={{ display: \"inline-flex\", alignItems: \"center\" }}>\n <ThreeDotsLoader color={line.style.badgeText} />\n </Box>\n </Tooltip>\n )\n : line.style.label == null\n ? fallbackLabel\n : String(line.style.label) === \"0\"\n ? \"Same\"\n : line.style.label}\n <Box\n component=\"span\"\n sx={{\n width: 14,\n height: 14,\n display: \"flex\",\n alignItems: \"center\",\n \"& svg\": { width: \"14px\", height: \"14px\" },\n }}\n >\n <ButtonCognitiveIcon />\n </Box>\n\n {hasMapping && (\n <ChevronDown\n size={11}\n style={{\n transform:\n cognitivePopup.open && activeBadgeId === line.id\n ? \"rotate(180deg)\"\n : \"rotate(0deg)\",\n transition: \"transform 0.25s ease\",\n }}\n />\n )}\n </Box>\n </Box>\n </foreignObject>\n )}\n </g>\n );\n })}\n\n <ConnectedLinesComp \n maintainRelativeOrder={maintainRelativeOrder} \n connectedLines={connectedLines} \n pathRefs={pathRefs} \n isGuidelineMode={isGuidelineMode}\n />\n </svg>\n );\n}\n"],"names":["SvgConnectors","svgContainerRef","svgDimensions","isResizing","overallConnector","rootDeviationStyle","lines","isSideBySide","activeSideBySideSection","isArrowVisible","maintainRelativeOrder","proposedSections","existingSections","cognitivePopup","activeBadgeId","closeCognitivePopup","setActiveBadgeId","openCognitivePopupFromState","buildSectionPopupState","connectedLines","pathRefs","isGuidelineMode","deviationAnalysisStatus","orderedLines","sort","left","right","Number","Boolean","isMappingContinuation","jsxs","ref","style","position","top","width","height","pointerEvents","zIndex","overflow","opacity","transition","children","jsx","x1","y1","y","x2","y2","stroke","badgeBorder","strokeWidth","map","line","bendX","midY","continuationJunctionX","label","hasCognitive","isSubSection","subSectionKeyPath","sectionIdx","pathD","getBentArrowPath","baseSec","title","content","refSec","targetRightIdx","pathParts","includes","DEVIATION_BADGE_SEPARATOR","split","leftPath","rightPath","leftPathParts","rightPathParts","leftSection","rightSection","length","rootParentTitle","rootRefParentTitle","i","subsections","isMappingCD","cognitiveData","isMissingRationale","decisioning","isDeviationCD","evaluationResult","cognitive_decisioning","decisioning_factors","hasMapping","hasDeviationResult","shouldShowDeviationLoader","fallbackLabel","d","fill","x","Box","sx","display","justifyContent","alignItems","onClick","e","stopPropagation","open","id","currentTarget","gap","fontSize","bgcolor","badgeBg","color","badgeText","border","borderRadius","px","py","fontWeight","textAlign","whiteSpace","cursor","Tooltip","placement","arrow","component","ThreeDotsLoader","String","ButtonCognitiveIcon","ChevronDown","size","transform","ConnectedLinesComp"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{Box as i,Typography as n}from"@mui/material";import o,{useRef as l,useMemo as a,useLayoutEffect as s}from"react";import{DEFAULT_DEVIAION_COLOR as d}from"../CognitiveCompareConstants.js";import{EllipsisVertical as c}from"lucide-react";import h from"react-markdown";import{findRedlineTextAnchorRange as p,findTextMatchRange as g,mixHexColors as m,areMarkdownPropsEqual as u}from"../CognitiveComparehelpers.js";import{findTextRangeWithFormatting as f}from"../utils/normalizeInlineMarkdown.js";import b from"rehype-raw";import x from"remark-gfm";import{normalizeRedlineMarkdown as y}from"../utils/normalizeRedlineMarkdown.js";import{normalizeCompactedGfmTables as v}from"../utils/normalizeCompactedGfmTables.js";const S=e=>"function"==typeof e?e:e?.default||e,E=[S(x)],k=[S(b)],C=o.memo(({content:u,overlayContent:b,fallbackContent:x,sxStyles:S,deviationBadges:C=[],highlights:w=[],maintainRelativeOrder:B=!0,highlightBg:F,suppressHighlightBg:$=!1,collisionKey:z})=>{const A=l(null),T=!!b,W=a(()=>C.reduce((e,t)=>({...e,[t.id]:t}),{}),[C]),I=l({badgeMap:W,highlightBg:F,hideHighlightBg:T,suppressHighlightBg:$});I.current={badgeMap:W,highlightBg:F,hideHighlightBg:T,suppressHighlightBg:$};const M=(e,t)=>o.Children.map(e,e=>{if(!o.isValidElement(e))return e;const r=e.props?.children?M(e.props.children,t):e.props.children,i=o.cloneElement(e,{...e.props,children:r});return t(i)}),j=a(()=>({mark:({children:t,...r})=>{const{badgeMap:i,highlightBg:n,hideHighlightBg:o,suppressHighlightBg:l}=I.current,a=r["data-badge-id"],s=a?i[a]:null,d=r["data-highlight-color"]??s?.style?.highlightBg??s?.style?.badgeBg??n,c="true"===r["data-is-suggested-deviation-fix"]||l;return e("span",{style:{...c?{}:{backgroundColor:d},borderRadius:"2px",display:"inline",boxDecorationBreak:"clone",WebkitBoxDecorationBreak:"clone",backgroundClip:"padding-box",padding:"0 1px",...o?{color:"transparent"}:{}},children:t})},br:()=>e("br",{}),span:({children:r,...n})=>{const{badgeMap:o}=I.current,l=n["data-badge-id"];if(!l)return e("span",{...n,children:r});const a=o[l];if(!a)return e("span",{...n,children:r});const s="number"==typeof a.stackIndex?a.stackIndex:0,h=`translateY(calc(-20% + ${12*s}px + var(--badge-nudge, 0px)))`;return t(i,{component:"span",sx:{position:"static",display:"inline"},children:[t(i,{ref:a.badgeRef,className:"deviation-badge","data-side":a.side||"right",sx:{fontStyle:"normal",position:"absolute",zIndex:30+s,display:"inline-flex",alignItems:"stretch",fontSize:"10px",bgcolor:a.style?.badgeBg||"#EEF2FF",color:a.style?.badgeText||d,border:`1px solid ${a.style?.badgeBorder||"#C7D2FE"}`,borderRadius:"12px",fontWeight:600,whiteSpace:"nowrap",boxShadow:"0 1px 3px rgba(0,0,0,0.07)",overflow:"hidden",transition:"none",..."left"===a.side?{right:"-16px",transform:`${h} translateX(calc(100% + 8px))`}:{left:"-16px",transform:`${h} translateX(calc(-100% - 8px))`},...a.isConnected&&a.style&&{outline:`2px solid ${a.style.badgeBorder}`,outlineOffset:"1px"}},children:[t(i,{onClick:e=>{e.stopPropagation(),a.onSummaryClick&&a.onSummaryClick(e)},sx:{display:"flex",alignItems:"center",px:1,py:.3,cursor:"pointer","&:hover":{bgcolor:"rgba(0,0,0,0.04)"}},children:[e(i,{component:"span",sx:{fontSize:"10px",fontWeight:700},children:a.label}),("left"===a.side||a.isOrphan)&&e(i,{component:"span",sx:{fontSize:"10px",pl:.5,ml:.5,borderLeft:`1px solid ${a.style?.badgeBorder||"#C7D2FE"}`},children:null!=a.score&&"N/A"!==a.score&&"NA"!==a.score&&0!==a.score?`${a.score}`:"N/A"===a.score||"NA"===a.score?"N/A":"Same"})]}),("left"===a.side||a.isOrphan)&&e(i,{onClick:e=>{e.stopPropagation(),a.onClick&&a.onClick(e)},sx:{display:"flex",alignItems:"center",px:.5,borderLeft:`1px solid ${a.style?.badgeBorder||"#C7D2FE"}`,cursor:"pointer","&:hover":{bgcolor:"rgba(0,0,0,0.06)"}},children:e(c,{size:12,color:a.style?.badgeText||"#3730A3"})})]}),r]})},table:({children:t})=>e(i,{sx:{display:"block",width:"100%",maxWidth:"100%",minWidth:0,boxSizing:"border-box",contain:"inline-size",overflowX:"auto",overflowY:"hidden",overscrollBehaviorX:"contain",WebkitOverflowScrolling:"touch",my:1},children:e(i,{component:"table",sx:{width:"600px",minWidth:"600px",tableLayout:"fixed",borderCollapse:"collapse",fontSize:"inherit"},children:t})}),thead:({children:t})=>e(i,{component:"thead",children:t}),tbody:({children:t})=>e(i,{component:"tbody",children:t}),tr:({children:t})=>e(i,{component:"tr",sx:{borderBottom:"1px solid #E5E7EB"},children:t}),th:({children:t})=>e(i,{component:"th",sx:{border:"1px solid #E5E7EB",padding:"8px",textAlign:"left",verticalAlign:"top",fontWeight:600,backgroundColor:"#F9FAFB",whiteSpace:"normal",wordBreak:"break-word",overflowWrap:"anywhere"},children:t}),td:({children:t})=>e(i,{component:"td",sx:{border:"1px solid #E5E7EB",padding:"8px",verticalAlign:"top",whiteSpace:"normal",wordBreak:"break-word",overflowWrap:"anywhere"},children:t}),code:({children:t})=>e("span",{style:{fontFamily:"inherit",fontSize:"inherit"},children:t}),pre:({children:t})=>e("span",{style:{fontFamily:"inherit",fontSize:"inherit",display:"block",whiteSpace:"pre-wrap"},children:t}),updated:({children:t})=>e(r,{children:t}),deleted:({children:t})=>{const r=M(t,e=>o.cloneElement(e,{"data-is-suggested-deviation-fix":"true"}));return e("span",{style:{boxShadow:"inset 0 1px 0 #EF4444, inset 0 -1px 0 #EF4444",backgroundColor:"#FCCCCC",textDecoration:"line-through"},children:r})},changed:({children:t})=>{const r=M(t,e=>o.cloneElement(e,{"data-is-suggested-deviation-fix":"true"}));return e("span",{style:{boxShadow:"inset 0 1px 0 #2F59FF, inset 0 -1px 0 #2F59FF",backgroundColor:"#D5E8FF"},children:r})},ul:({children:t,...r})=>e(i,{component:"ul",sx:{mt:1,mb:1,pl:3,listStyleType:"disc"},...r,children:t}),ol:({children:t,...r})=>e(i,{component:"ol",sx:{mt:1,mb:1,pl:3,listStyleType:"decimal"},...r,children:t}),li:({children:t,...r})=>e(i,{component:"li",sx:{mb:.5,display:"list-item"},...r,children:t})}),[]),q=e=>{if(!e||"string"!=typeof e)return"";let t=v(e);t=t.replace(/((?:<\/?(?:updated|changed|deleted|manual)\b[^>]*>\s*)+)([*+\-] |\d+\. )/gi,"$2$1"),t=t.replace(/\\(['"])/g,"$1").replace(/\\n/g,"\n").replace(/\\\./g,".").replace(/\r\n/g,"\n"),t=t.replace(/^([ \t]*)(\d+\.)(\s{2,})/gm,(e,t,r,i)=>`${t}${r.slice(0,-1)}\\.${i}`),t=t.replace(/^(\d+\.)\s*\n+(\s+)(\S)/gm,(e,t,r,i)=>`${t} ${i}`),t=t.replace(/([^\n])\n(#{1,6} )/g,"$1\n\n$2"),t=t.replace(/([^\n])\n([ \t]*(?:[#*+\-] |\d+\. ))/g,"$1\n\n$2"),t=t.replace(/\n{3,}/g,"\n\n"),t=t.replace(/^[ \t]+(?![ \t]*([\*\-\+] |\d+\. ))/gm,e=>e.replace(/ /g," ").replace(/\t/g," "));const r=t.split(/(\n{2,})/);return t=r.map(e=>/^\n+$/.test(e)||/\|.*\|/.test(e)&&/\|[\s:|-]+\|/.test(e)||/^#{1,6} /.test(e.trimStart())?e:e.replace(/\n(?=[^\n])/g,(t,r)=>{const i=e.slice(r+1);return/^[ \t]*([#>|\-*+]|\d+\.)/.test(i)?"\n":" "})).join(""),t.trim()},H=a(()=>C.map(e=>({id:e.id,connected:e.isConnected,stackIndex:e.stackIndex,size:e.size})),[C]),O=e=>q(y(e||"")),P=a(()=>{let e=q(y(u||""));const t=x?q(y(x)):"",r=(C||[]).map(e=>({id:e?.id,highlight:O(e?.highlight||""),highlightColor:e?.style?.highlightBg||e?.style?.badgeBg||F})).filter(e=>e.id&&e.highlight);if(t&&r.length>0){const i=(e,t)=>$?p(e,t):g(e,t,!1),n=r.some(({highlight:t})=>!i(e,t)),o=r.every(({highlight:e})=>!!i(t,e));n&&o&&(e=t)}const i={};r.forEach(e=>{i[e.highlight]||(i[e.highlight]=[]),i[e.highlight].push(e)});const n=(e,t="",r,i=[])=>{let n=!1;const o=e=>{const o=((e,t="",r)=>{const i=e.match(/^(\s*)([\s\S]*?)(\s*)$/);if(!i)return e;const n=i[1]??"",o=i[2]??"",l=i[3]??"";return o?n+((e="",t)=>`<mark${e?` data-badge-id="${e}"`:""}${t?` data-highlight-color="${t}"`:""}>`)(t,r)+o+"</mark>"+l:e})(e,t,r);let l=o;if(!n&&i.length>0){n=!0;let e="",t="";i.forEach(r=>{e+=(e=>`<span data-badge-id="${e}">`)(r.id),t="</span>"+t}),l=e+o+t}return""+l};return e.split(/(\n+)/).map(e=>{if(/^\n+$/.test(e))return e;if(!e.trim())return e;return""===e.replace(/[|:\-\s]/g,"")&&e.includes("-")?e:e.includes("|")?e.split(/(\|)/).map(e=>"|"!==e&&e.trim()?o(e):e).join(""):o(e)}).join("")},o=[];Object.entries(i).forEach(([t,r])=>{let i=$?p(e,t):g(e,t,!1);if(i||$||(i=f(e,t)),!i)return;const n=e.slice(i.start,i.end)!==t;let l=r[0].highlightColor;for(let e=1;e<r.length;e++)l=m(l,r[e].highlightColor||"");o.push({highlight:t,start:i.start,end:i.end,badges:r,color:l,usedLooseMatch:n})});const l=new Set(Object.keys(i));(w||[]).forEach(t=>{if(!t)return;const r=O(t);if(!r||l.has(r))return;const i=$?p(e,r):g(e,r,!1);if(!i)return;const n=e.slice(i.start,i.end)!==r,a=e.slice(0,i.start);(a.match(/</g)||[]).length===(a.match(/>/g)||[]).length&&o.push({highlight:r,start:i.start,end:i.end,badges:[],color:F||"",usedLooseMatch:n})}),o.sort((e,t)=>e.start-t.start||t.end-e.end);const a=[],s={};o.forEach((e,t)=>{let r=e.start,i=e.end;for(const n of a){const o=n.start,l=n.end,a=r<l&&i>l&&r>=o,d=r<o&&i>o&&i<=l;if(r>=o&&i<=l){e.orphaned=!0,s[t]=n.matchIdx;break}a&&(r=l),d&&(i=o)}e.trimmedStart=r,e.trimmedEnd=i,!e.orphaned&&r<i&&a.push({start:r,end:i,matchIdx:t})});const d={};Object.entries(s).forEach(([e,t])=>{const r=Number(e);d[t]||(d[t]=[]),d[t].push(r)});return o.map((e,t)=>({...e,idx:t})).filter(e=>!e.orphaned).sort((e,t)=>(t.trimmedStart??t.start)-(e.trimmedStart??e.start)).forEach(t=>{const r=t.trimmedStart??t.start,i=t.trimmedEnd??t.end;if(r>=i)return;const l=e.slice(r,i),a=((e,t,r,i)=>{if(!r.length)return e;const l=r.map(e=>o[e]).sort((e,t)=>e.start-t.start);let a="",s=0;return l.forEach(r=>{const o=Math.max(s,r.start-t),l=Math.max(o,r.end-t);if(o>=l)return;const d=m(i,r.color||"");a+=e.slice(s,o),a+=n(e.slice(o,l),r.badges?.[0]?.id||"",d,r.badges||[]),s=l}),a+=e.slice(s),a})(t.usedLooseMatch||r!==t.start||i!==t.end?l:t.highlight,t.start,d[t.idx]||[],t.color),s=n(a,t.badges?.[0]?.id||"",t.color,t.badges||[]);e=e.slice(0,r)+s+e.slice(i)}),e},[u,x,C,w,F,$]),R=a(()=>b?q(y(b||"")):"",[b]),D=!!b,N={...S,"& *":{fontFamily:"inherit"},"& code, & pre, & kbd, & samp":{fontFamily:"inherit !important",fontSize:"inherit",background:"none",padding:0,border:"none",whiteSpace:"pre-wrap"},"& p, & li, & ul, & ol":{position:"static",overflow:"visible",whiteSpace:"pre-wrap",lineHeight:"1.5"},position:"relative",fontFamily:"system-ui, -apple-system, sans-serif",fontSize:"inherit",fontWeight:"400",lineHeight:"1.5",width:"100%",maxWidth:"100%",minWidth:0,boxSizing:"border-box",overflow:"visible",whiteSpace:"normal",gridArea:"1 / 1",padding:"3px"},L={...N,zIndex:2,...D?{color:"transparent",userSelect:"none",pointerEvents:"none","& .deviation-badge":{pointerEvents:"auto",visibility:"visible"},"& table":{visibility:"hidden"}}:{}},X={...N,zIndex:1,pointerEvents:"auto"};return s(()=>{if(!A.current)return;const e=()=>{const e=Array.from(A.current.querySelectorAll(".deviation-badge"));if(0===e.length)return;e.forEach(e=>{e.style.setProperty("--badge-nudge","0px")});const t=A.current.getBoundingClientRect(),r=t.bottom-4,i=t.top+4,n=A.current.querySelector('div[data-layer="base"]')||A.current.querySelector("div")?.firstElementChild,o=D?A.current.querySelector('div[data-layer="overlay"]')||A.current.querySelector("div")?.lastElementChild:null,l=n?Array.from(n.querySelectorAll(".deviation-badge")):[],a=o?Array.from(o.querySelectorAll(".deviation-badge")):[],s=e.length>0?e.filter(e=>"left"===e.dataset.side):l.filter(e=>"left"===e.dataset.side),d=e.length>0?e.filter(e=>"left"!==e.dataset.side):l.filter(e=>"left"!==e.dataset.side),c=e=>{if(0===e.length)return;const t=e.map(e=>{const t=e.getBoundingClientRect();return{el:e,naturalTop:t.top,height:t.height,currentTop:t.top}});t.sort((e,t)=>e.naturalTop-t.naturalTop);const n=[];let o=[];t.forEach(e=>{if(0===o.length)o.push(e);else{const t=o[o.length-1],r=t.currentTop+t.height;e.naturalTop<r+8?(e.currentTop=r+8,o.push(e)):(n.push(o),o=[e])}}),o.length>0&&n.push(o),n.forEach(e=>{const t=e[e.length-1],n=t.currentTop+t.height;if(n>r){const t=n-r,o=e[0].currentTop-i,l=Math.max(0,Math.min(t,o));e.forEach(e=>{e.currentTop-=l})}}),n.flat().forEach(e=>{const t=e.currentTop-e.naturalTop;e.el.style.setProperty("--badge-nudge",`${t}px`)})};if(D&&(l.length>0||a.length>0)){const e=l.filter(e=>"left"===e.dataset.side),t=l.filter(e=>"left"!==e.dataset.side),r=a.filter(e=>"left"===e.dataset.side),i=a.filter(e=>"left"!==e.dataset.side);c(e),c(t),c(r),c(i)}else c(s),c(d)},t=requestAnimationFrame(()=>{requestAnimationFrame(()=>{e()})}),r=new ResizeObserver(()=>{requestAnimationFrame(e)});return r.observe(A.current),()=>{r.disconnect(),cancelAnimationFrame(t)}},[P,z,H]),t(i,{ref:A,sx:{position:"relative",display:"grid",gridTemplateColumns:"minmax(0, 1fr)",width:"100%",maxWidth:"100%",minWidth:0},children:[e(n,{component:"div",sx:L,children:e(h,{components:j,remarkPlugins:E,rehypePlugins:k,children:P.replace(/#{3}/g,"")})}),D&&e(n,{component:"div",sx:X,children:e(h,{components:j,remarkPlugins:E,rehypePlugins:k,children:R})})]})},u);export{C as MemoizedMarkdown};
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{Box as n,Typography as i}from"@mui/material";import o,{useRef as a,useMemo as l,useLayoutEffect as s}from"react";import{DEFAULT_DEVIAION_COLOR as d}from"../CognitiveCompareConstants.js";import{EllipsisVertical as c}from"lucide-react";import h from"react-markdown";import{mixHexColors as p,areMarkdownPropsEqual as g}from"../CognitiveComparehelpers.js";import m from"rehype-raw";import u from"remark-gfm";const f=e=>"function"==typeof e?e:e?.default||e,x=[f(u)],b=[f(m)],y=o.memo(({content:g,overlayContent:m,sxStyles:u,deviationBadges:f=[],highlights:y=[],maintainRelativeOrder:v=!0,highlightBg:w,suppressHighlightBg:E=!1,collisionKey:S})=>{const k=a(null),C=!!m,B=l(()=>f.reduce((e,t)=>({...e,[t.id]:t}),{}),[f]),F=a({badgeMap:B,highlightBg:w,hideHighlightBg:C,suppressHighlightBg:E});F.current={badgeMap:B,highlightBg:w,hideHighlightBg:C,suppressHighlightBg:E};const $=(e,t)=>o.Children.map(e,e=>{if(!o.isValidElement(e))return e;const r=e.props?.children?$(e.props.children,t):e.props.children,n=o.cloneElement(e,{...e.props,children:r});return t(n)}),z=l(()=>({mark:({children:t,...r})=>{const{badgeMap:n,highlightBg:i,hideHighlightBg:o,suppressHighlightBg:a}=F.current,l=r["data-badge-id"],s=l?n[l]:null,d=r["data-highlight-color"]??s?.style?.highlightBg??s?.style?.badgeBg??i,c="true"===r["data-is-suggested-deviation-fix"]||a;return e("span",{style:{...c?{}:{backgroundColor:d},borderRadius:"2px",display:"inline",boxDecorationBreak:"clone",WebkitBoxDecorationBreak:"clone",backgroundClip:"padding-box",padding:"0 1px",...o?{color:"transparent"}:{}},children:t})},span:({children:r,...i})=>{const{badgeMap:o}=F.current,a=i["data-badge-id"];if(!a)return e("span",{...i,children:r});const l=o[a];if(!l)return e("span",{...i,children:r});const s="number"==typeof l.stackIndex?l.stackIndex:0,h=`translateY(calc(-20% + ${12*s}px + var(--badge-nudge, 0px)))`;return t(n,{component:"span",sx:{position:"static",display:"inline"},children:[t(n,{ref:l.badgeRef,className:"deviation-badge","data-side":l.side||"right",sx:{fontStyle:"normal",position:"absolute",zIndex:30+s,display:"inline-flex",alignItems:"stretch",fontSize:"10px",bgcolor:l.style?.badgeBg||"#EEF2FF",color:l.style?.badgeText||d,border:`1px solid ${l.style?.badgeBorder||"#C7D2FE"}`,borderRadius:"12px",fontWeight:600,whiteSpace:"nowrap",boxShadow:"0 1px 3px rgba(0,0,0,0.07)",overflow:"hidden",transition:"none",..."left"===l.side?{right:"-16px",transform:`${h} translateX(calc(100% + 8px))`}:{left:"-16px",transform:`${h} translateX(calc(-100% - 8px))`},...l.isConnected&&l.style&&{outline:`2px solid ${l.style.badgeBorder}`,outlineOffset:"1px"}},children:[t(n,{onClick:e=>{e.stopPropagation(),l.onSummaryClick&&l.onSummaryClick(e)},sx:{display:"flex",alignItems:"center",px:1,py:.3,cursor:"pointer","&:hover":{bgcolor:"rgba(0,0,0,0.04)"}},children:[e(n,{component:"span",sx:{fontSize:"10px",fontWeight:700},children:l.label}),("left"===l.side||l.isOrphan)&&e(n,{component:"span",sx:{fontSize:"10px",pl:.5,ml:.5,borderLeft:`1px solid ${l.style?.badgeBorder||"#C7D2FE"}`},children:null!=l.score&&"N/A"!==l.score&&"NA"!==l.score&&0!==l.score?`${l.score}`:"N/A"===l.score||"NA"===l.score?"N/A":"Same"})]}),("left"===l.side||l.isOrphan)&&e(n,{onClick:e=>{e.stopPropagation(),l.onClick&&l.onClick(e)},sx:{display:"flex",alignItems:"center",px:.5,borderLeft:`1px solid ${l.style?.badgeBorder||"#C7D2FE"}`,cursor:"pointer","&:hover":{bgcolor:"rgba(0,0,0,0.06)"}},children:e(c,{size:12,color:l.style?.badgeText||"#3730A3"})})]}),r]})},table:({children:t})=>e(n,{sx:{display:"block",width:"100%",maxWidth:"100%",minWidth:0,boxSizing:"border-box",contain:"inline-size",overflowX:"auto",overflowY:"hidden",overscrollBehaviorX:"contain",WebkitOverflowScrolling:"touch",my:1},children:e(n,{component:"table",sx:{width:"600px",minWidth:"600px",tableLayout:"fixed",borderCollapse:"collapse",fontSize:"inherit"},children:t})}),thead:({children:t})=>e(n,{component:"thead",children:t}),tbody:({children:t})=>e(n,{component:"tbody",children:t}),tr:({children:t})=>e(n,{component:"tr",sx:{borderBottom:"1px solid #E5E7EB"},children:t}),th:({children:t})=>e(n,{component:"th",sx:{border:"1px solid #E5E7EB",padding:"8px",textAlign:"left",verticalAlign:"top",fontWeight:600,backgroundColor:"#F9FAFB",whiteSpace:"normal",wordBreak:"break-word",overflowWrap:"anywhere"},children:t}),td:({children:t})=>e(n,{component:"td",sx:{border:"1px solid #E5E7EB",padding:"8px",verticalAlign:"top",whiteSpace:"normal",wordBreak:"break-word",overflowWrap:"anywhere"},children:t}),code:({children:t})=>e("span",{style:{fontFamily:"inherit",fontSize:"inherit"},children:t}),pre:({children:t})=>e("span",{style:{fontFamily:"inherit",fontSize:"inherit",display:"block",whiteSpace:"pre-wrap"},children:t}),updated:({children:t})=>e(r,{children:t}),deleted:({children:t})=>{const r=$(t,e=>o.cloneElement(e,{"data-is-suggested-deviation-fix":"true"}));return e("span",{style:{boxShadow:"inset 0 1px 0 #EF4444, inset 0 -1px 0 #EF4444",backgroundColor:"#FCCCCC",textDecoration:"line-through"},children:r})},changed:({children:t})=>{const r=$(t,e=>o.cloneElement(e,{"data-is-suggested-deviation-fix":"true"}));return e("span",{style:{boxShadow:"inset 0 1px 0 #2F59FF, inset 0 -1px 0 #2F59FF",backgroundColor:"#D5E8FF"},children:r})},ul:({children:t,...r})=>e(n,{component:"ul",sx:{mt:1,mb:1,pl:3,listStyleType:"disc"},...r,children:t}),ol:({children:t,...r})=>e(n,{component:"ol",sx:{mt:1,mb:1,pl:3,listStyleType:"decimal"},...r,children:t}),li:({children:t,...r})=>e(n,{component:"li",sx:{mb:.5,display:"list-item"},...r,children:t})}),[]),A=e=>{if(!e||"string"!=typeof e)return"";let t=e;t=t.replace(/((?:<\/?[a-z]+[^>]*>\s*)+)([*+\-] |\d+\. )/gi,"$2$1"),t=t.replace(/\\(['"])/g,"$1").replace(/\\n/g,"\n").replace(/\\\./g,".").replace(/\r\n/g,"\n"),t=t.replace(/^(\d+\.)(\s{2,})/gm,(e,t,r)=>`${t.slice(0,-1)}\\.${r}`),t=t.replace(/^(\d+\.)\s*\n+(\s+)(\S)/gm,(e,t,r,n)=>`${t} ${n}`),t=t.replace(/([^\n])\n(#{1,6} )/g,"$1\n\n$2"),t=t.replace(/([^\n])\n([ \t]*(?:[#*+\-] |\d+\. ))/g,"$1\n\n$2"),t=t.replace(/\n{3,}/g,"\n\n"),t=t.replace(/^[ \t]+(?![ \t]*([\*\-\+] |\d+\. ))/gm,e=>e.replace(/ /g," ").replace(/\t/g," "));const r=t.split(/(\n{2,})/);return t=r.map(e=>/^\n+$/.test(e)||/\|.*\|/.test(e)&&/\|[\s:|-]+\|/.test(e)||/^#{1,6} /.test(e.trimStart())?e:e.replace(/\n(?=[^\n])/g,(t,r)=>{const n=e.slice(r+1);return/^[ \t]*([#>|\-*+]|\d+\.)/.test(n)?"\n":" "})).join(""),t.trim()},T=e=>e.replace(/[\.,;:]/g," "),W=l(()=>f.map(e=>({id:e.id,connected:e.isConnected,stackIndex:e.stackIndex,size:e.size})),[f]),O=l(()=>{let e=A(g||"");const t=E?T(e):e,r=(f||[]).map(e=>({id:e?.id,highlight:A(e?.highlight||""),highlightColor:e?.style?.highlightBg||e?.style?.badgeBg||w})).filter(e=>e.id&&e.highlight),n={};r.forEach(e=>{n[e.highlight]||(n[e.highlight]=[]),n[e.highlight].push(e)});const i=(e,t="",r,n=[])=>{let i=!1;const o=e=>{const o=((e,t="",r)=>{const n=e.match(/^(\s*)([\s\S]*?)(\s*)$/);if(!n)return e;const i=n[1]??"",o=n[2]??"",a=n[3]??"";return o?i+((e="",t)=>`<mark${e?` data-badge-id="${e}"`:""}${t?` data-highlight-color="${t}"`:""}>`)(t,r)+o+"</mark>"+a:e})(e,t,r);let a=o;if(!i&&n.length>0){i=!0;let e="",t="";n.forEach(r=>{e+=(e=>`<span data-badge-id="${e}">`)(r.id),t="</span>"+t}),a=e+o+t}return""+a};return e.split(/(\n+)/).map(e=>{if(/^\n+$/.test(e))return e;if(!e.trim())return e;return""===e.replace(/[|:\-\s]/g,"")&&e.includes("-")?e:e.includes("|")?e.split(/(\|)/).map(e=>"|"!==e&&e.trim()?o(e):e).join(""):o(e)}).join("")},o=[];Object.entries(n).forEach(([r,n])=>{let i=e.indexOf(r),a=!1;if(-1===i&&E){const e=T(r);i=t.indexOf(e),-1!==i&&(a=!0)}if(-1===i)return;let l=n[0].highlightColor;for(let e=1;e<n.length;e++)l=p(l,n[e].highlightColor||"");o.push({highlight:r,start:i,end:i+r.length,badges:n,color:l,usedLooseMatch:a})});const a=new Set(Object.keys(n));(y||[]).forEach(r=>{if(!r)return;const n=A(r);if(!n||a.has(n))return;let i=e.indexOf(n),l=!1;if(-1===i&&E){const e=T(n);i=t.indexOf(e),-1!==i&&(l=!0)}if(-1===i)return;const s=e.slice(0,i);(s.match(/</g)||[]).length===(s.match(/>/g)||[]).length&&o.push({highlight:n,start:i,end:i+n.length,badges:[],color:w||"",usedLooseMatch:l})}),o.sort((e,t)=>e.start-t.start||t.end-e.end);const l=[],s={};o.forEach((e,t)=>{let r=e.start,n=e.end;for(const i of l){const o=i.start,a=i.end,l=r<a&&n>a&&r>=o,d=r<o&&n>o&&n<=a;if(r>=o&&n<=a){e.orphaned=!0,s[t]=i.matchIdx;break}l&&(r=a),d&&(n=o)}e.trimmedStart=r,e.trimmedEnd=n,!e.orphaned&&r<n&&l.push({start:r,end:n,matchIdx:t})});const d={};Object.entries(s).forEach(([e,t])=>{const r=Number(e);d[t]||(d[t]=[]),d[t].push(r)});return o.map((e,t)=>({...e,idx:t})).filter(e=>!e.orphaned).sort((e,t)=>(t.trimmedStart??t.start)-(e.trimmedStart??e.start)).forEach(t=>{const r=t.trimmedStart??t.start,n=t.trimmedEnd??t.end;if(r>=n)return;const a=e.slice(r,n),l=((e,t,r,n)=>{if(!r.length)return e;const a=r.map(e=>o[e]).sort((e,t)=>e.start-t.start);let l="",s=0;return a.forEach(r=>{const o=Math.max(s,r.start-t),a=Math.max(o,r.end-t);if(o>=a)return;const d=p(n,r.color||"");l+=e.slice(s,o),l+=i(e.slice(o,a),r.badges?.[0]?.id||"",d,r.badges||[]),s=a}),l+=e.slice(s),l})(t.usedLooseMatch||r!==t.start||n!==t.end?a:t.highlight,t.start,d[t.idx]||[],t.color),s=i(l,t.badges?.[0]?.id||"",t.color,t.badges||[]);e=e.slice(0,r)+s+e.slice(n)}),e},[g,f,y,w,E]),I=l(()=>m?A(m||""):"",[m]),M=!!m,j={"& *":{fontFamily:"inherit"},"& code, & pre, & kbd, & samp":{fontFamily:"inherit !important",fontSize:"inherit",background:"none",padding:0,border:"none",whiteSpace:"pre-wrap"},"& p, & li, & ul, & ol":{position:"static",overflow:"visible",whiteSpace:"pre-wrap"}},P={...u,...j,position:"relative",width:"100%",maxWidth:"100%",minWidth:0,boxSizing:"border-box",overflow:"visible",whiteSpace:"normal",gridArea:"1 / 1",zIndex:2,...M?{color:"transparent",userSelect:"none",pointerEvents:"none","& .deviation-badge":{pointerEvents:"auto"},"& table":{visibility:"hidden",margin:"0 !important"},"& th, & td":{padding:"0 !important",border:"none !important",backgroundColor:"transparent !important"},"& tr":{border:"none !important"},"& p:empty":{display:"none"}}:{}},D={...u,...j,position:"relative",width:"100%",maxWidth:"100%",minWidth:0,boxSizing:"border-box",overflow:"visible",whiteSpace:"normal",gridArea:"1 / 1",zIndex:1,pointerEvents:"auto"};return s(()=>{if(!k.current)return;const e=()=>{const e=Array.from(k.current.querySelectorAll(".deviation-badge"));if(0===e.length)return;e.forEach(e=>{e.style.setProperty("--badge-nudge","0px")});const t=e.filter(e=>"left"===e.dataset.side),r=e.filter(e=>"left"!==e.dataset.side),n=k.current.getBoundingClientRect(),i=n.bottom-4,o=n.top+4,a=e=>{if(0===e.length)return;const t=e.map(e=>{const t=e.getBoundingClientRect();return{el:e,naturalTop:t.top,height:t.height,currentTop:t.top}});t.sort((e,t)=>e.naturalTop-t.naturalTop);const r=[];let n=[];t.forEach(e=>{if(0===n.length)n.push(e);else{const t=n[n.length-1],i=t.currentTop+t.height;e.naturalTop<i+8?(e.currentTop=i+8,n.push(e)):(r.push(n),n=[e])}}),n.length>0&&r.push(n),r.forEach(e=>{const t=e[e.length-1],r=t.currentTop+t.height;if(r>i){const t=r-i,n=e[0].currentTop-o,a=Math.max(0,Math.min(t,n));e.forEach(e=>{e.currentTop-=a})}}),r.flat().forEach(e=>{const t=e.currentTop-e.naturalTop;e.el.style.setProperty("--badge-nudge",`${t}px`)})};a(t),a(r)},t=requestAnimationFrame(()=>{requestAnimationFrame(()=>{e()})}),r=new ResizeObserver(()=>{requestAnimationFrame(e)});return r.observe(k.current),()=>{r.disconnect(),cancelAnimationFrame(t)}},[O,S,W]),t(n,{ref:k,sx:{position:"relative",display:"grid",gridTemplateColumns:"minmax(0, 1fr)",width:"100%",maxWidth:"100%",minWidth:0},children:[e(i,{component:"div",sx:{...P,padding:"3px"},children:e(h,{components:z,remarkPlugins:x,rehypePlugins:b,children:O.replace(/#{3}/g,"")})}),M&&e(i,{component:"div",sx:D,children:e(h,{components:z,remarkPlugins:x,rehypePlugins:b,children:I})})]})},g);export{y as MemoizedMarkdown};
|
|
2
2
|
//# sourceMappingURL=memoizedMarkdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoizedMarkdown.js","sources":["../../../../src/features/CognitiveCompare/hooks/memoizedMarkdown.tsx"],"sourcesContent":["import { Box, Typography } from \"@mui/material\";\nimport React, { useMemo, useRef, useLayoutEffect, ReactElement, ReactNode } from \"react\";\nimport { DEFAULT_DEVIAION_COLOR } from \"../CognitiveCompareConstants\";\nimport { EllipsisVertical } from \"lucide-react\";\nimport ReactMarkdown from \"react-markdown\";\nimport {\n areMarkdownPropsEqual,\n findTextMatchRange,\n findRedlineTextAnchorRange,\n mixHexColors,\n} from \"../CognitiveComparehelpers\";\nimport { findTextRangeWithFormatting } from \"../utils/normalizeInlineMarkdown\";\nimport rehypeRaw from \"rehype-raw\";\nimport { HighlightMatch } from \"../CognitiveCompareTypes\";\nimport remarkGfm from \"remark-gfm\";\nimport { normalizeRedlineMarkdown } from \"../utils/normalizeRedlineMarkdown\";\nimport { normalizeCompactedGfmTables } from \"../utils/normalizeCompactedGfmTables\";\n\n// Ensures plugins work regardless of how the bundler exports them (ESM vs CJS)\nconst resolvePlugin = (plugin: any) => typeof plugin === \"function\" ? plugin : plugin?.default || plugin;\nconst remarkPlugins = [resolvePlugin(remarkGfm)];\nconst rehypePlugins = [resolvePlugin(rehypeRaw)];\n\ntype TransformFn = (element: ReactElement) => ReactElement;\nexport const MemoizedMarkdown = React.memo(({ \n content, \n overlayContent,\n fallbackContent,\n sxStyles, \n deviationBadges = [], \n highlights = [],\n maintainRelativeOrder = true,\n highlightBg,\n suppressHighlightBg = false,\n collisionKey\n}: { \n content: string; \n overlayContent?: string;\n fallbackContent?: string;\n sxStyles: any; \n deviationBadges?: any[]; \n highlights?: string[]; \n maintainRelativeOrder?: boolean;\n highlightBg: string;\n suppressHighlightBg?: boolean;\n collisionKey?: string | number;\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const hideHighlightBg = !!overlayContent;\n\n const badgeMap = useMemo(\n () => deviationBadges.reduce((acc, badge) => ({ ...acc, [badge.id]: badge }), {} as Record<string, any>),\n [deviationBadges],\n );\n\n const dynamicPropsRef = useRef({ badgeMap, highlightBg, hideHighlightBg, suppressHighlightBg });\n dynamicPropsRef.current = { badgeMap, highlightBg, hideHighlightBg, suppressHighlightBg };\n\n const mapChildrenDeep = (\n children: ReactNode,\n transform: TransformFn\n ): ReactNode => {\n return React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) {\n return child;\n }\n\n const newChildren = child.props?.children\n ? mapChildrenDeep(child.props.children, transform)\n : child.props.children;\n\n const cloned = React.cloneElement(child, {\n ...child.props,\n children: newChildren,\n });\n\n return transform(cloned);\n });\n }\n\n const components = useMemo(() => ({\n mark: ({ children, ...props }: any) => {\n const { badgeMap, highlightBg, hideHighlightBg, suppressHighlightBg } = dynamicPropsRef.current;\n const badgeId = props[\"data-badge-id\"];\n const badge = badgeId ? badgeMap[badgeId] : null;\n const overrideBg = props[\"data-highlight-color\"];\n const bg =\n overrideBg\n ?? badge?.style?.highlightBg\n ?? badge?.style?.badgeBg\n ?? highlightBg;\n \n const shouldHideBg = props[\"data-is-suggested-deviation-fix\"] === \"true\" || suppressHighlightBg;\n \n return (\n <span style={{\n ...(!shouldHideBg ? { backgroundColor: bg } : {}),\n borderRadius: \"2px\",\n display: \"inline\",\n boxDecorationBreak: \"clone\",\n WebkitBoxDecorationBreak: \"clone\",\n backgroundClip: \"padding-box\",\n padding: \"0 1px\",\n ...(hideHighlightBg ? { color: \"transparent\" } : {})\n }}>\n {children}\n </span>\n );\n },\n br: () => <br />,\n span: ({ children, ...props }: any) => {\n const { badgeMap } = dynamicPropsRef.current;\n const badgeId = props[\"data-badge-id\"];\n if (!badgeId) return <span {...props}>{children}</span>;\n\n const badge = badgeMap[badgeId];\n if (!badge) return <span {...props}>{children}</span>;\n\n const stackIndex = typeof badge.stackIndex === \"number\" ? badge.stackIndex : 0;\n const stackOffset = stackIndex * 12;\n const translateY = `translateY(calc(-20% + ${stackOffset}px + var(--badge-nudge, 0px)))`;\n\n return (\n <Box component=\"span\" sx={{ position: \"static\", display: \"inline\" }}>\n <Box\n ref={badge.badgeRef}\n className=\"deviation-badge\"\n data-side={badge.side || \"right\"}\n sx={{\n fontStyle: \"normal\",\n position: \"absolute\",\n zIndex: 30 + stackIndex,\n display: \"inline-flex\",\n alignItems: \"stretch\",\n fontSize: \"10px\",\n bgcolor: badge.style?.badgeBg || \"#EEF2FF\",\n color: badge.style?.badgeText || DEFAULT_DEVIAION_COLOR,\n border: `1px solid ${badge.style?.badgeBorder || \"#C7D2FE\"}`,\n borderRadius: \"12px\",\n fontWeight: 600,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.07)\",\n overflow: \"hidden\",\n transition: \"none\",\n ...(badge.side === \"left\"\n ? { right: \"-16px\", transform: `${translateY} translateX(calc(100% + 8px))` }\n : { left: \"-16px\", transform: `${translateY} translateX(calc(-100% - 8px))` }),\n ...(badge.isConnected && badge.style && { outline: `2px solid ${badge.style.badgeBorder}`, outlineOffset: \"1px\" })\n }}\n >\n <Box\n onClick={(e) => {\n e.stopPropagation();\n if (badge.onSummaryClick) badge.onSummaryClick(e);\n }}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n px: 1,\n py: 0.3,\n cursor: \"pointer\",\n \"&:hover\": { bgcolor: \"rgba(0,0,0,0.04)\" },\n }}\n >\n <Box component=\"span\" sx={{ fontSize: \"10px\", fontWeight: 700 }}>\n {badge.label}\n </Box>\n {(badge.side === \"left\" || badge.isOrphan) && (\n <Box\n component=\"span\"\n sx={{\n fontSize: \"10px\",\n pl: 0.5,\n ml: 0.5,\n borderLeft: `1px solid ${badge.style?.badgeBorder || \"#C7D2FE\"}`,\n }}\n >\n {(badge.score != null && badge.score !== \"N/A\" && badge.score !== \"NA\" && badge.score !== 0)\n ? `${badge.score}`\n : (badge.score === \"N/A\" || badge.score === \"NA\")\n ? \"N/A\"\n : \"Same\"}\n </Box>\n )}\n </Box>\n\n {(badge.side === \"left\" || badge.isOrphan) && (\n <Box\n onClick={(e) => {\n e.stopPropagation();\n if (badge.onClick) badge.onClick(e);\n }}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n px: 0.5,\n borderLeft: `1px solid ${badge.style?.badgeBorder || \"#C7D2FE\"}`,\n cursor: \"pointer\",\n \"&:hover\": { bgcolor: \"rgba(0,0,0,0.06)\" },\n }}\n >\n <EllipsisVertical size={12} color={badge.style?.badgeText || \"#3730A3\"} />\n </Box>\n )}\n </Box>\n {children}\n </Box>\n );\n },\n table: ({ children }: any) => (\n <Box\n sx={{\n display: \"block\",\n width: \"100%\",\n maxWidth: \"100%\",\n minWidth: 0,\n boxSizing: \"border-box\",\n contain: \"inline-size\",\n overflowX: \"auto\",\n overflowY: \"hidden\",\n overscrollBehaviorX: \"contain\",\n WebkitOverflowScrolling: \"touch\",\n my: 1,\n }}\n >\n <Box\n component=\"table\"\n sx={{\n width: \"600px\",\n minWidth: \"600px\",\n tableLayout: \"fixed\",\n borderCollapse: \"collapse\",\n fontSize: \"inherit\",\n }}\n >\n {children}\n </Box>\n </Box>\n ),\n thead: ({ children }: any) => <Box component=\"thead\">{children}</Box>,\n tbody: ({ children }: any) => <Box component=\"tbody\">{children}</Box>,\n tr: ({ children }: any) => <Box component=\"tr\" sx={{ borderBottom: \"1px solid #E5E7EB\" }}>{children}</Box>,\n th: ({ children }: any) => <Box component=\"th\" sx={{ border: \"1px solid #E5E7EB\", padding: \"8px\", textAlign: \"left\", verticalAlign: \"top\", fontWeight: 600, backgroundColor: \"#F9FAFB\", whiteSpace: \"normal\", wordBreak: \"break-word\", overflowWrap: \"anywhere\" }}>{children}</Box>,\n td: ({ children }: any) => <Box component=\"td\" sx={{ border: \"1px solid #E5E7EB\", padding: \"8px\", verticalAlign: \"top\", whiteSpace: \"normal\", wordBreak: \"break-word\", overflowWrap: \"anywhere\" }}>{children}</Box>,\n code: ({ children }: any) => <span style={{ fontFamily: \"inherit\", fontSize: \"inherit\" }}>{children}</span>,\n pre: ({ children }: any) => <span style={{ fontFamily: \"inherit\", fontSize: \"inherit\", display: \"block\", whiteSpace: \"pre-wrap\" }}>{children}</span>,\n updated: ({ children }: any) => <>{children}</>,\n\n deleted: ({ children }: any) => {\n const updatedChildren = mapChildrenDeep(children, (el) => React.cloneElement(el, { \"data-is-suggested-deviation-fix\": \"true\" }));\n return <span style={{ boxShadow: \"inset 0 1px 0 #EF4444, inset 0 -1px 0 #EF4444\", backgroundColor: \"#FCCCCC\", textDecoration: \"line-through\" }}>{updatedChildren}</span>;\n },\n\n changed: ({ children }: any) => {\n const updatedChildren = mapChildrenDeep(children, (el) => React.cloneElement(el, { \"data-is-suggested-deviation-fix\": \"true\" }));\n return <span style={{ boxShadow: \"inset 0 1px 0 #2F59FF, inset 0 -1px 0 #2F59FF\", backgroundColor: \"#D5E8FF\" }}>{updatedChildren}</span>;\n },\n\n ul: ({ children, ...props }: any) => <Box component=\"ul\" sx={{ mt: 1, mb: 1, pl: 3, listStyleType: \"disc\" }} {...props}>{children}</Box>,\n ol: ({ children, ...props }: any) => <Box component=\"ol\" sx={{ mt: 1, mb: 1, pl: 3, listStyleType: \"decimal\" }} {...props}>{children}</Box>,\n li: ({ children, ...props }: any) => <Box component=\"li\" sx={{ mb: 0.5, display: \"list-item\" }} {...props}>{children}</Box>,\n }),\n []\n );\n\n const normalizeMarkdownText = (rawText: string): string => {\n if (!rawText || typeof rawText !== \"string\") return \"\";\n\n let text = normalizeCompactedGfmTables(rawText);\n\n text = text.replace(\n /((?:<\\/?(?:updated|changed|deleted|manual)\\b[^>]*>\\s*)+)([*+\\-] |\\d+\\. )/gi,\n \"$2$1\",\n );\n text = text\n .replace(/\\\\(['\"])/g, \"$1\")\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\\\./g, \".\") \n .replace(/\\r\\n/g, \"\\n\");\n \n // Redline wrapper removal can leave boundary indentation before a\n // numbered clause (` <deleted>4. ...`). Preserve that indentation while\n // escaping the marker so content and backend highlights normalize to\n // the same string before the final trim.\n text = text.replace(\n /^([ \\t]*)(\\d+\\.)(\\s{2,})/gm,\n (_, indent, num, spaces) =>\n `${indent}${num.slice(0, -1)}\\\\.${spaces}`,\n );\n text = text.replace(/^(\\d+\\.)\\s*\\n+(\\s+)(\\S)/gm, (_, marker, _indent, firstChar) => `${marker} ${firstChar}`);\n text = text.replace(/([^\\n])\\n(#{1,6} )/g, \"$1\\n\\n$2\");\n \n // Check for blank line before assign bullets\n text = text.replace(/([^\\n])\\n([ \\t]*(?:[#*+\\-] |\\d+\\. ))/g, \"$1\\n\\n$2\");\n\n text = text.replace(/\\n{3,}/g, \"\\n\\n\");\n\n // This protects the indentation required for markdown lists.\n text = text.replace(/^[ \\t]+(?![ \\t]*([\\*\\-\\+] |\\d+\\. ))/gm, (match) => {\n return match.replace(/ /g, \"\\u00A0\").replace(/\\t/g, \"\\u00A0\\u00A0\\u00A0\\u00A0\");\n });\n\n const parts = text.split(/(\\n{2,})/);\n text = parts.map((chunk) => {\n if (/^\\n+$/.test(chunk)) return chunk;\n if (/\\|.*\\|/.test(chunk) && /\\|[\\s:|-]+\\|/.test(chunk)) return chunk;\n if (/^#{1,6} /.test(chunk.trimStart())) return chunk;\n \n return chunk.replace(/\\n(?=[^\\n])/g, (_, offset) => {\n const remainingLine = chunk.slice(offset + 1);\n // If it is a bullet/number/table/heading, DO NOT collapse the newline\n const isStructural = /^[ \\t]*([#>|\\-*+]|\\d+\\.)/.test(remainingLine);\n return isStructural ? \"\\n\" : \" \";\n });\n }).join(\"\");\n\n // CRITICAL: Removed the duplicate `text = text.replace(/^[ \\t]+/gm...)` block from here!\n\n return text.trim();\n };\n\n const collisionDependency = useMemo(() => deviationBadges.map((badge) => ({\n id: badge.id,\n connected: badge.isConnected,\n stackIndex: badge.stackIndex,\n size: badge.size,\n })), [deviationBadges]);\n\n const buildMarkOpen = (badgeId: string = \"\", color?: string) => {\n const colorAttr = color ? ` data-highlight-color=\"${color}\"` : \"\";\n const badgeAttr = badgeId ? ` data-badge-id=\"${badgeId}\"` : \"\";\n return `<mark${badgeAttr}${colorAttr}>`;\n };\n \n const buildMarkClose = () => `</mark>`;\n const buildSpanOpen = (badgeId: string) => `<span data-badge-id=\"${badgeId}\">`;\n const buildSpanClose = () => `</span>`;\n\n const wrapWithMark = (value: string, badgeId: string = \"\", highlightColor?: string) => {\n const match = value.match(/^(\\s*)([\\s\\S]*?)(\\s*)$/);\n if (!match) return value;\n const leading = match[1] ?? \"\";\n const body = match[2] ?? \"\";\n const trailing = match[3] ?? \"\";\n if (!body) return value;\n return leading + buildMarkOpen(badgeId, highlightColor) + body + buildMarkClose() + trailing;\n };\n\n const normalizeHighlightText = (value: string): string =>\n normalizeMarkdownText(normalizeRedlineMarkdown(value || \"\"));\n\n const contentToRender = useMemo(() => {\n // 2. CRITICAL: Removed safeStringify here. Pure strings only to prevent encoded brackets.\n let normalizedContent = normalizeMarkdownText(\n normalizeRedlineMarkdown(content || \"\"),\n );\n const normalizedFallbackContent = fallbackContent\n ? normalizeMarkdownText(normalizeRedlineMarkdown(fallbackContent))\n : \"\";\n\n const badgeEntries = (deviationBadges || [])\n .map((badge: any) => ({\n id: badge?.id,\n // Content passes through table reconciliation before matching, so\n // highlights must use the same pipeline. This is especially\n // important for redlines whose deleted text ends in a GFM table.\n highlight: normalizeHighlightText(badge?.highlight || \"\"),\n highlightColor: badge?.style?.highlightBg || badge?.style?.badgeBg || highlightBg,\n }))\n .filter((entry: any) => entry.id && entry.highlight);\n\n // Fixed/redlined clauses can no longer contain the original deviation\n // text contiguously. Prefer the current content, but when at least one\n // badge cannot anchor there and every badge can anchor in change_history,\n // use that history as the invisible badge-positioning layer.\n if (normalizedFallbackContent && badgeEntries.length > 0) {\n const findAnchor = (anchorContent: string, highlight: string) =>\n suppressHighlightBg\n ? findRedlineTextAnchorRange(anchorContent, highlight)\n : findTextMatchRange(anchorContent, highlight, false);\n const hasPrimaryMiss = badgeEntries.some(\n ({ highlight }: any) => !findAnchor(normalizedContent, highlight),\n );\n const allMatchFallback = badgeEntries.every(\n ({ highlight }: any) => !!findAnchor(normalizedFallbackContent, highlight),\n );\n\n if (hasPrimaryMiss && allMatchFallback) {\n normalizedContent = normalizedFallbackContent;\n }\n }\n\n const groupedBadges: Record<string, any[]> = {};\n badgeEntries.forEach((entry) => {\n if (!groupedBadges[entry.highlight]) groupedBadges[entry.highlight] = [];\n groupedBadges[entry.highlight].push(entry);\n });\n\n const createMarkedHighlight = (text: string, badgeId: string = \"\", highlightColor?: string, badges: any[] = []) => {\n let spanEmitted = false;\n\n const wrapSegment = (segment: string): string => {\n const mark = wrapWithMark(segment, badgeId, highlightColor);\n let wrapped = mark;\n \n if (!spanEmitted && badges.length > 0) {\n spanEmitted = true;\n let spansOpen = \"\";\n let spansClose = \"\";\n \n // Emit spans for ALL badges in the group, not just badges[0]\n badges.forEach((b) => {\n spansOpen += buildSpanOpen(b.id);\n spansClose = buildSpanClose() + spansClose;\n });\n \n wrapped = spansOpen + mark + spansClose;\n }\n \n return \"\\u200B\" + wrapped;\n };\n\n return text\n .split(/(\\n+)/)\n .map((part) => {\n if (/^\\n+$/.test(part)) return part;\n if (!part.trim()) return part;\n const strippedForSeparatorCheck = part.replace(/[|:\\-\\s]/g, \"\");\n if (strippedForSeparatorCheck === \"\" && part.includes(\"-\")) return part;\n if (part.includes(\"|\")) {\n return part.split(/(\\|)/).map((cell) => {\n if (cell === \"|\" || !cell.trim()) return cell;\n return wrapSegment(cell);\n }).join(\"\");\n }\n return wrapSegment(part);\n })\n .join(\"\");\n };\n\n const allMatches: HighlightMatch[] = [];\n\n Object.entries(groupedBadges).forEach(([highlight, badges]) => {\n let range = suppressHighlightBg\n ? findRedlineTextAnchorRange(normalizedContent, highlight)\n : findTextMatchRange(normalizedContent, highlight, false);\n \n if (!range && !suppressHighlightBg) {\n range = findTextRangeWithFormatting(normalizedContent, highlight);\n }\n if (!range) return;\n const usedLooseMatch =\n normalizedContent.slice(range.start, range.end) !== highlight;\n\n let color = badges[0].highlightColor;\n for (let i = 1; i < badges.length; i++) {\n color = mixHexColors(color, badges[i].highlightColor || \"\");\n }\n\n allMatches.push({\n highlight,\n start: range.start,\n end: range.end,\n badges,\n color,\n usedLooseMatch,\n });\n });\n\n const badgeHighlightSet = new Set(Object.keys(groupedBadges));\n\n (highlights || []).forEach((highlight) => {\n if (!highlight) return;\n const cleanHighlight = normalizeHighlightText(highlight);\n if (!cleanHighlight || badgeHighlightSet.has(cleanHighlight)) return;\n\n const range = suppressHighlightBg\n ? findRedlineTextAnchorRange(normalizedContent, cleanHighlight)\n : findTextMatchRange(normalizedContent, cleanHighlight, false);\n if (!range) return;\n const usedLooseMatch =\n normalizedContent.slice(range.start, range.end) !== cleanHighlight;\n\n const before = normalizedContent.slice(0, range.start);\n const openTags = (before.match(/</g) || []).length;\n const closeTags = (before.match(/>/g) || []).length;\n \n if (openTags === closeTags) {\n allMatches.push({\n highlight: cleanHighlight,\n start: range.start,\n end: range.end,\n badges: [],\n color: highlightBg || \"\",\n usedLooseMatch,\n } as unknown as HighlightMatch);\n }\n });\n\n allMatches.sort((a, b) => a.start - b.start || b.end - a.end);\n\n const claimedRanges: Array<{ start: number; end: number; matchIdx: number }> = [];\n const containedBy: Record<number, number> = {};\n\n allMatches.forEach((match, i) => {\n let start = match.start;\n let end = match.end;\n\n for (const claimed of claimedRanges) {\n const cStart = claimed.start;\n const cEnd = claimed.end;\n const fullyContained = start >= cStart && end <= cEnd;\n const partialOverlapRight = start < cEnd && end > cEnd && start >= cStart;\n const partialOverlapLeft = start < cStart && end > cStart && end <= cEnd;\n\n if (fullyContained) {\n match.orphaned = true;\n containedBy[i] = claimed.matchIdx;\n break;\n }\n if (partialOverlapRight) start = cEnd;\n if (partialOverlapLeft) end = cStart;\n }\n\n match.trimmedStart = start;\n match.trimmedEnd = end;\n\n if (!match.orphaned && start < end) {\n claimedRanges.push({ start, end, matchIdx: i });\n }\n });\n\n const childrenOf: Record<number, number[]> = {};\n Object.entries(containedBy).forEach(([childIdxStr, parentIdx]) => {\n const childIdx = Number(childIdxStr);\n if (!childrenOf[parentIdx]) childrenOf[parentIdx] = [];\n childrenOf[parentIdx].push(childIdx);\n });\n\n const injectChildren = (highlightText: string, parentAbsStart: number, childIndices: number[], parentColor: string) => {\n if (!childIndices.length) return highlightText;\n const children = childIndices.map((ci) => allMatches[ci]).sort((a, b) => a.start - b.start);\n let result = \"\";\n let cursor = 0;\n\n children.forEach((child) => {\n const relStart = Math.max(cursor, child.start - parentAbsStart);\n const relEnd = Math.max(relStart, child.end - parentAbsStart);\n if (relStart >= relEnd) return;\n\n const mixedColor = mixHexColors(parentColor, child.color || \"\");\n result += highlightText.slice(cursor, relStart);\n\n // Removed the redundant wrapperStart/wrapperEnd logic.\n // createMarkedHighlight now handles the spans natively and cleanly.\n result += createMarkedHighlight(\n highlightText.slice(relStart, relEnd), \n child.badges?.[0]?.id || \"\", \n mixedColor, \n child.badges || []\n );\n \n cursor = relEnd;\n });\n\n result += highlightText.slice(cursor);\n return result;\n };\n\n const finalMatches = allMatches.map((m, i) => ({ ...m, idx: i })).filter((m) => !m.orphaned).sort((a, b) => (b.trimmedStart ?? b.start) - (a.trimmedStart ?? a.start));\n\n finalMatches.forEach((match) => {\n const tStart = match.trimmedStart ?? match.start;\n const tEnd = match.trimmedEnd ?? match.end;\n if (tStart >= tEnd) return;\n\n const rawSlice = normalizedContent.slice(tStart, tEnd);\n const effectiveHighlight = match.usedLooseMatch || tStart !== match.start || tEnd !== match.end ? rawSlice : match.highlight;\n const withChildren = injectChildren(effectiveHighlight, match.start, childrenOf[match.idx!] || [], match.color);\n const markedText = createMarkedHighlight(withChildren, match.badges?.[0]?.id || \"\", match.color, match.badges || []);\n\n normalizedContent = normalizedContent.slice(0, tStart) + markedText + normalizedContent.slice(tEnd);\n });\n\n return normalizedContent;\n }, [content, fallbackContent, deviationBadges, highlights, highlightBg, suppressHighlightBg]);\n\n const overlayContentToRender = useMemo(() => {\n if (!overlayContent) return \"\";\n return normalizeMarkdownText(\n normalizeRedlineMarkdown(overlayContent || \"\"),\n );\n }, [overlayContent]);\n\n const hasOverlay = !!overlayContent;\n\n const sharedContentSx = {\n \"& *\": { fontFamily: \"inherit\" },\n \"& code, & pre, & kbd, & samp\": {\n fontFamily: \"inherit !important\",\n fontSize: \"inherit\",\n background: \"none\",\n padding: 0,\n border: \"none\",\n whiteSpace: \"pre-wrap\",\n },\n \"& p, & li, & ul, & ol\": { \n position: \"static\", \n overflow: \"visible\", \n whiteSpace: \"pre-wrap\",\n lineHeight: \"1.5\"\n },\n };\n\n const layerSx = {\n ...sxStyles,\n ...sharedContentSx,\n position: \"relative\",\n fontFamily: \"system-ui, -apple-system, sans-serif\",\n fontSize: \"inherit\",\n fontWeight: \"400\",\n lineHeight: \"1.5\",\n width: \"100%\",\n maxWidth: \"100%\",\n minWidth: 0,\n boxSizing: \"border-box\",\n overflow: \"visible\",\n whiteSpace: \"normal\",\n gridArea: \"1 / 1\",\n padding: \"3px\",\n };\n\n const baseSx = { ...layerSx, zIndex: 2, ...(hasOverlay ? {\n color: \"transparent\",\n userSelect: \"none\", \n pointerEvents: \"none\", \n \"& .deviation-badge\": { pointerEvents: \"auto\", visibility: \"visible\" },\n \"& table\": { visibility: \"hidden\" },\n } : {})\n };\n\n const overlaySx = { ...layerSx, zIndex: 1, pointerEvents: \"auto\" };\n\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n\n const resolveCollisions = () => {\n const badges = Array.from(\n containerRef.current!.querySelectorAll(\".deviation-badge\")\n ) as HTMLElement[];\n \n if (badges.length === 0) return;\n\n badges.forEach((b) => { b.style.setProperty(\"--badge-nudge\", \"0px\"); });\n\n const containerRect = containerRef.current!.getBoundingClientRect();\n const maxBottom = containerRect.bottom - 4;\n const minTop = containerRect.top + 4;\n\n // Separate badges by layer to ensure collision detection respects layer boundaries\n const baseLayer = containerRef.current!.querySelector('div[data-layer=\"base\"]') || containerRef.current!.querySelector('div')?.firstElementChild;\n const overlayLayer = hasOverlay ? containerRef.current!.querySelector('div[data-layer=\"overlay\"]') || containerRef.current!.querySelector('div')?.lastElementChild : null;\n \n const baseLayerBadges = baseLayer ? Array.from(baseLayer.querySelectorAll(\".deviation-badge\")) as HTMLElement[] : [];\n const overlayLayerBadges = overlayLayer ? Array.from(overlayLayer.querySelectorAll(\".deviation-badge\")) as HTMLElement[] : [];\n \n // If layer separation fails, fall back to side-based separation for backward compatibility\n const leftBadges = badges.length > 0 ? badges.filter((b) => b.dataset.side === \"left\") : baseLayerBadges.filter((b) => b.dataset.side === \"left\");\n const rightBadges = badges.length > 0 ? badges.filter((b) => b.dataset.side !== \"left\") : baseLayerBadges.filter((b) => b.dataset.side !== \"left\");\n\n const applyPushDownAndClamp = (sideBadges: HTMLElement[]) => {\n if (sideBadges.length === 0) return;\n\n const metrics = sideBadges.map((el) => {\n const rect = el.getBoundingClientRect();\n return { \n el, \n naturalTop: rect.top, \n height: rect.height,\n currentTop: rect.top\n };\n });\n\n metrics.sort((a, b) => a.naturalTop - b.naturalTop);\n\n const MIN_GAP = 8;\n const clusters: typeof metrics[] = [];\n let currentCluster: typeof metrics = [];\n\n metrics.forEach((item) => {\n if (currentCluster.length === 0) {\n currentCluster.push(item);\n } else {\n const prev = currentCluster[currentCluster.length - 1];\n const prevBottom = prev.currentTop + prev.height;\n\n if (item.naturalTop < prevBottom + MIN_GAP) {\n item.currentTop = prevBottom + MIN_GAP;\n currentCluster.push(item);\n } else {\n clusters.push(currentCluster);\n currentCluster = [item];\n }\n }\n });\n if (currentCluster.length > 0) clusters.push(currentCluster);\n\n clusters.forEach((cluster) => {\n const lastItem = cluster[cluster.length - 1];\n const clusterBottom = lastItem.currentTop + lastItem.height;\n\n if (clusterBottom > maxBottom) {\n const overflowAmount = clusterBottom - maxBottom;\n\n const firstItem = cluster[0];\n const availableTopSpace = firstItem.currentTop - minTop;\n \n const actualShiftUp = Math.max(0, Math.min(overflowAmount, availableTopSpace));\n\n cluster.forEach((item) => {\n item.currentTop -= actualShiftUp;\n });\n }\n });\n\n clusters.flat().forEach((item) => {\n const nudge = item.currentTop - item.naturalTop;\n item.el.style.setProperty(\"--badge-nudge\", `${nudge}px`);\n });\n };\n\n // Apply collision resolution separately for each layer when overlay exists\n if (hasOverlay && (baseLayerBadges.length > 0 || overlayLayerBadges.length > 0)) {\n const baseLeftBadges = baseLayerBadges.filter((b) => b.dataset.side === \"left\");\n const baseRightBadges = baseLayerBadges.filter((b) => b.dataset.side !== \"left\");\n const overlayLeftBadges = overlayLayerBadges.filter((b) => b.dataset.side === \"left\");\n const overlayRightBadges = overlayLayerBadges.filter((b) => b.dataset.side !== \"left\");\n \n applyPushDownAndClamp(baseLeftBadges);\n applyPushDownAndClamp(baseRightBadges);\n applyPushDownAndClamp(overlayLeftBadges);\n applyPushDownAndClamp(overlayRightBadges);\n } else {\n // Single layer or backward compatibility mode\n applyPushDownAndClamp(leftBadges);\n applyPushDownAndClamp(rightBadges);\n }\n };\n\n const raf1 = requestAnimationFrame(()=>{\n requestAnimationFrame(()=>{\n resolveCollisions();\n })\n });\n\n const resizeObserver = new ResizeObserver(() => {\n requestAnimationFrame(resolveCollisions);\n });\n resizeObserver.observe(containerRef.current);\n\n return () => {\n resizeObserver.disconnect();\n cancelAnimationFrame(raf1);\n }\n }, [contentToRender, collisionKey, collisionDependency]);\n\n return (\n <Box\n ref={containerRef}\n sx={{\n position: \"relative\",\n display: \"grid\",\n gridTemplateColumns: \"minmax(0, 1fr)\",\n width: \"100%\",\n maxWidth: \"100%\",\n minWidth: 0,\n }}\n >\n <Typography component=\"div\" sx={baseSx}>\n <ReactMarkdown\n components={components}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n >\n {/* 4. Removed safeStringify wrapper! It encodes < to < */}\n {contentToRender.replace(/#{3}/g, \"\")}\n </ReactMarkdown>\n </Typography>\n\n {hasOverlay && (\n <Typography component=\"div\" sx={overlaySx}>\n <ReactMarkdown\n components={components}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n >\n {overlayContentToRender}\n </ReactMarkdown>\n </Typography>\n )}\n </Box>\n );\n },\n areMarkdownPropsEqual\n);\n"],"names":["resolvePlugin","plugin","default","remarkPlugins","remarkGfm","rehypePlugins","rehypeRaw","MemoizedMarkdown","React","memo","content","overlayContent","fallbackContent","sxStyles","deviationBadges","highlights","maintainRelativeOrder","highlightBg","suppressHighlightBg","collisionKey","containerRef","useRef","hideHighlightBg","badgeMap","useMemo","reduce","acc","badge","id","dynamicPropsRef","current","mapChildrenDeep","children","transform","Children","map","child","isValidElement","newChildren","props","cloned","cloneElement","components","mark","badgeId","bg","style","badgeBg","shouldHideBg","jsx","backgroundColor","borderRadius","display","boxDecorationBreak","WebkitBoxDecorationBreak","backgroundClip","padding","color","br","span","stackIndex","translateY","jsxs","Box","component","sx","position","ref","badgeRef","className","side","fontStyle","zIndex","alignItems","fontSize","bgcolor","badgeText","DEFAULT_DEVIAION_COLOR","border","badgeBorder","fontWeight","whiteSpace","boxShadow","overflow","transition","right","left","isConnected","outline","outlineOffset","onClick","e","stopPropagation","onSummaryClick","px","py","cursor","label","isOrphan","pl","ml","borderLeft","score","EllipsisVertical","size","table","width","maxWidth","minWidth","boxSizing","contain","overflowX","overflowY","overscrollBehaviorX","WebkitOverflowScrolling","my","tableLayout","borderCollapse","thead","tbody","tr","borderBottom","th","textAlign","verticalAlign","wordBreak","overflowWrap","td","code","fontFamily","pre","updated","deleted","updatedChildren","el","textDecoration","changed","ul","mt","mb","listStyleType","ol","li","normalizeMarkdownText","rawText","text","normalizeCompactedGfmTables","replace","_","indent","num","spaces","slice","marker","_indent","firstChar","match","parts","split","chunk","test","trimStart","offset","remainingLine","join","trim","collisionDependency","connected","normalizeHighlightText","value","normalizeRedlineMarkdown","contentToRender","normalizedContent","normalizedFallbackContent","badgeEntries","highlight","highlightColor","filter","entry","length","findAnchor","anchorContent","findRedlineTextAnchorRange","findTextMatchRange","hasPrimaryMiss","some","allMatchFallback","every","groupedBadges","forEach","push","createMarkedHighlight","badges","spanEmitted","wrapSegment","segment","leading","body","trailing","buildMarkOpen","wrapWithMark","wrapped","spansOpen","spansClose","b","buildSpanOpen","part","includes","cell","allMatches","Object","entries","range","findTextRangeWithFormatting","usedLooseMatch","start","end","i","mixHexColors","badgeHighlightSet","Set","keys","cleanHighlight","has","before","sort","a","claimedRanges","containedBy","claimed","cStart","cEnd","partialOverlapRight","partialOverlapLeft","orphaned","matchIdx","trimmedStart","trimmedEnd","childrenOf","childIdxStr","parentIdx","childIdx","Number","m","idx","tStart","tEnd","rawSlice","withChildren","highlightText","parentAbsStart","childIndices","parentColor","ci","result","relStart","Math","max","relEnd","mixedColor","injectChildren","markedText","overlayContentToRender","hasOverlay","layerSx","background","lineHeight","gridArea","baseSx","userSelect","pointerEvents","visibility","overlaySx","useLayoutEffect","resolveCollisions","Array","from","querySelectorAll","setProperty","containerRect","getBoundingClientRect","maxBottom","bottom","minTop","top","baseLayer","querySelector","firstElementChild","overlayLayer","lastElementChild","baseLayerBadges","overlayLayerBadges","leftBadges","dataset","rightBadges","applyPushDownAndClamp","sideBadges","metrics","rect","naturalTop","height","currentTop","clusters","currentCluster","item","prev","prevBottom","cluster","lastItem","clusterBottom","overflowAmount","availableTopSpace","actualShiftUp","min","flat","nudge","baseLeftBadges","baseRightBadges","overlayLeftBadges","overlayRightBadges","raf1","requestAnimationFrame","resizeObserver","ResizeObserver","observe","disconnect","cancelAnimationFrame","gridTemplateColumns","Typography","ReactMarkdown","areMarkdownPropsEqual"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memoizedMarkdown.js","sources":["../../../../src/features/CognitiveCompare/hooks/memoizedMarkdown.tsx"],"sourcesContent":["import { Box, Typography } from \"@mui/material\";\nimport React, { useMemo, useRef, useLayoutEffect, ReactElement, ReactNode } from \"react\";\nimport { DEFAULT_DEVIAION_COLOR } from \"../CognitiveCompareConstants\";\nimport { EllipsisVertical } from \"lucide-react\";\nimport ReactMarkdown from \"react-markdown\";\nimport { areMarkdownPropsEqual, mixHexColors } from \"../CognitiveComparehelpers\";\nimport rehypeRaw from \"rehype-raw\";\nimport { HighlightMatch } from \"../CognitiveCompareTypes\";\nimport remarkGfm from \"remark-gfm\";\n\n// Ensures plugins work regardless of how the bundler exports them (ESM vs CJS)\nconst resolvePlugin = (plugin: any) => typeof plugin === \"function\" ? plugin : plugin?.default || plugin;\nconst remarkPlugins = [resolvePlugin(remarkGfm)];\nconst rehypePlugins = [resolvePlugin(rehypeRaw)];\n\ntype TransformFn = (element: ReactElement) => ReactElement;\nexport const MemoizedMarkdown = React.memo(({ \n content, \n overlayContent,\n sxStyles, \n deviationBadges = [], \n highlights = [],\n maintainRelativeOrder = true,\n highlightBg,\n suppressHighlightBg = false,\n collisionKey\n}: { \n content: string; \n overlayContent?: string;\n sxStyles: any; \n deviationBadges?: any[]; \n highlights?: string[]; \n maintainRelativeOrder?: boolean;\n highlightBg: string;\n suppressHighlightBg?: boolean;\n collisionKey?: string | number;\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const hideHighlightBg = !!overlayContent;\n\n const badgeMap = useMemo(\n () => deviationBadges.reduce((acc, badge) => ({ ...acc, [badge.id]: badge }), {} as Record<string, any>),\n [deviationBadges],\n );\n\n const dynamicPropsRef = useRef({ badgeMap, highlightBg, hideHighlightBg, suppressHighlightBg });\n dynamicPropsRef.current = { badgeMap, highlightBg, hideHighlightBg, suppressHighlightBg };\n\n const mapChildrenDeep = (\n children: ReactNode,\n transform: TransformFn\n ): ReactNode => {\n return React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) {\n return child;\n }\n\n const newChildren = child.props?.children\n ? mapChildrenDeep(child.props.children, transform)\n : child.props.children;\n\n const cloned = React.cloneElement(child, {\n ...child.props,\n children: newChildren,\n });\n\n return transform(cloned);\n });\n }\n\n const components = useMemo(() => ({\n mark: ({ children, ...props }: any) => {\n const { badgeMap, highlightBg, hideHighlightBg, suppressHighlightBg } = dynamicPropsRef.current;\n const badgeId = props[\"data-badge-id\"];\n const badge = badgeId ? badgeMap[badgeId] : null;\n const overrideBg = props[\"data-highlight-color\"];\n const bg =\n overrideBg\n ?? badge?.style?.highlightBg\n ?? badge?.style?.badgeBg\n ?? highlightBg;\n \n const shouldHideBg = props[\"data-is-suggested-deviation-fix\"] === \"true\" || suppressHighlightBg;\n \n return (\n <span style={{\n ...(!shouldHideBg ? { backgroundColor: bg } : {}),\n borderRadius: \"2px\",\n display: \"inline\",\n boxDecorationBreak: \"clone\",\n WebkitBoxDecorationBreak: \"clone\",\n backgroundClip: \"padding-box\",\n padding: \"0 1px\",\n ...(hideHighlightBg ? { color: \"transparent\" } : {})\n }}>\n {children}\n </span>\n );\n },\n span: ({ children, ...props }: any) => {\n const { badgeMap } = dynamicPropsRef.current;\n const badgeId = props[\"data-badge-id\"];\n if (!badgeId) return <span {...props}>{children}</span>;\n\n const badge = badgeMap[badgeId];\n if (!badge) return <span {...props}>{children}</span>;\n\n const stackIndex = typeof badge.stackIndex === \"number\" ? badge.stackIndex : 0;\n const stackOffset = stackIndex * 12;\n const translateY = `translateY(calc(-20% + ${stackOffset}px + var(--badge-nudge, 0px)))`;\n\n return (\n <Box component=\"span\" sx={{ position: \"static\", display: \"inline\" }}>\n <Box\n ref={badge.badgeRef}\n className=\"deviation-badge\"\n data-side={badge.side || \"right\"}\n sx={{\n fontStyle: \"normal\",\n position: \"absolute\",\n zIndex: 30 + stackIndex,\n display: \"inline-flex\",\n alignItems: \"stretch\",\n fontSize: \"10px\",\n bgcolor: badge.style?.badgeBg || \"#EEF2FF\",\n color: badge.style?.badgeText || DEFAULT_DEVIAION_COLOR,\n border: `1px solid ${badge.style?.badgeBorder || \"#C7D2FE\"}`,\n borderRadius: \"12px\",\n fontWeight: 600,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.07)\",\n overflow: \"hidden\",\n transition: \"none\",\n ...(badge.side === \"left\"\n ? { right: \"-16px\", transform: `${translateY} translateX(calc(100% + 8px))` }\n : { left: \"-16px\", transform: `${translateY} translateX(calc(-100% - 8px))` }),\n ...(badge.isConnected && badge.style && { outline: `2px solid ${badge.style.badgeBorder}`, outlineOffset: \"1px\" })\n }}\n >\n <Box\n onClick={(e) => {\n e.stopPropagation();\n if (badge.onSummaryClick) badge.onSummaryClick(e);\n }}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n px: 1,\n py: 0.3,\n cursor: \"pointer\",\n \"&:hover\": { bgcolor: \"rgba(0,0,0,0.04)\" },\n }}\n >\n <Box component=\"span\" sx={{ fontSize: \"10px\", fontWeight: 700 }}>\n {badge.label}\n </Box>\n {(badge.side === \"left\" || badge.isOrphan) && (\n <Box\n component=\"span\"\n sx={{\n fontSize: \"10px\",\n pl: 0.5,\n ml: 0.5,\n borderLeft: `1px solid ${badge.style?.badgeBorder || \"#C7D2FE\"}`,\n }}\n >\n {(badge.score != null && badge.score !== \"N/A\" && badge.score !== \"NA\" && badge.score !== 0)\n ? `${badge.score}`\n : (badge.score === \"N/A\" || badge.score === \"NA\")\n ? \"N/A\"\n : \"Same\"}\n </Box>\n )}\n </Box>\n\n {(badge.side === \"left\" || badge.isOrphan) && (\n <Box\n onClick={(e) => {\n e.stopPropagation();\n if (badge.onClick) badge.onClick(e);\n }}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n px: 0.5,\n borderLeft: `1px solid ${badge.style?.badgeBorder || \"#C7D2FE\"}`,\n cursor: \"pointer\",\n \"&:hover\": { bgcolor: \"rgba(0,0,0,0.06)\" },\n }}\n >\n <EllipsisVertical size={12} color={badge.style?.badgeText || \"#3730A3\"} />\n </Box>\n )}\n </Box>\n {children}\n </Box>\n );\n },\n table: ({ children }: any) => (\n <Box\n sx={{\n display: \"block\",\n width: \"100%\",\n maxWidth: \"100%\",\n minWidth: 0,\n boxSizing: \"border-box\",\n contain: \"inline-size\",\n overflowX: \"auto\",\n overflowY: \"hidden\",\n overscrollBehaviorX: \"contain\",\n WebkitOverflowScrolling: \"touch\",\n my: 1,\n }}\n >\n <Box\n component=\"table\"\n sx={{\n width: \"600px\",\n minWidth: \"600px\",\n tableLayout: \"fixed\",\n borderCollapse: \"collapse\",\n fontSize: \"inherit\",\n }}\n >\n {children}\n </Box>\n </Box>\n ),\n thead: ({ children }: any) => <Box component=\"thead\">{children}</Box>,\n tbody: ({ children }: any) => <Box component=\"tbody\">{children}</Box>,\n tr: ({ children }: any) => <Box component=\"tr\" sx={{ borderBottom: \"1px solid #E5E7EB\" }}>{children}</Box>,\n th: ({ children }: any) => <Box component=\"th\" sx={{ border: \"1px solid #E5E7EB\", padding: \"8px\", textAlign: \"left\", verticalAlign: \"top\", fontWeight: 600, backgroundColor: \"#F9FAFB\", whiteSpace: \"normal\", wordBreak: \"break-word\", overflowWrap: \"anywhere\" }}>{children}</Box>,\n td: ({ children }: any) => <Box component=\"td\" sx={{ border: \"1px solid #E5E7EB\", padding: \"8px\", verticalAlign: \"top\", whiteSpace: \"normal\", wordBreak: \"break-word\", overflowWrap: \"anywhere\" }}>{children}</Box>,\n code: ({ children }: any) => <span style={{ fontFamily: \"inherit\", fontSize: \"inherit\" }}>{children}</span>,\n pre: ({ children }: any) => <span style={{ fontFamily: \"inherit\", fontSize: \"inherit\", display: \"block\", whiteSpace: \"pre-wrap\" }}>{children}</span>,\n updated: ({ children }: any) => <>{children}</>,\n\n deleted: ({ children }: any) => {\n const updatedChildren = mapChildrenDeep(children, (el) => React.cloneElement(el, { \"data-is-suggested-deviation-fix\": \"true\" }));\n return <span style={{ boxShadow: \"inset 0 1px 0 #EF4444, inset 0 -1px 0 #EF4444\", backgroundColor: \"#FCCCCC\", textDecoration: \"line-through\" }}>{updatedChildren}</span>;\n },\n\n changed: ({ children }: any) => {\n const updatedChildren = mapChildrenDeep(children, (el) => React.cloneElement(el, { \"data-is-suggested-deviation-fix\": \"true\" }));\n return <span style={{ boxShadow: \"inset 0 1px 0 #2F59FF, inset 0 -1px 0 #2F59FF\", backgroundColor: \"#D5E8FF\" }}>{updatedChildren}</span>;\n },\n\n ul: ({ children, ...props }: any) => <Box component=\"ul\" sx={{ mt: 1, mb: 1, pl: 3, listStyleType: \"disc\" }} {...props}>{children}</Box>,\n ol: ({ children, ...props }: any) => <Box component=\"ol\" sx={{ mt: 1, mb: 1, pl: 3, listStyleType: \"decimal\" }} {...props}>{children}</Box>,\n li: ({ children, ...props }: any) => <Box component=\"li\" sx={{ mb: 0.5, display: \"list-item\" }} {...props}>{children}</Box>,\n }),\n []\n );\n\n const normalizeMarkdownText = (rawText: string): string => {\n if (!rawText || typeof rawText !== \"string\") return \"\";\n\n let text = rawText;\n\n // This converts `<updated><changed> * text` into `* <updated><changed>text to show bullet points in change_history as well`\n text = text.replace(/((?:<\\/?[a-z]+[^>]*>\\s*)+)([*+\\-] |\\d+\\. )/gi, \"$2$1\");\n\n text = text\n .replace(/\\\\(['\"])/g, \"$1\")\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\\\./g, \".\") \n .replace(/\\r\\n/g, \"\\n\");\n \n text = text.replace(/^(\\d+\\.)(\\s{2,})/gm, (_, num, spaces) => `${num.slice(0, -1)}\\\\.${spaces}`);\n text = text.replace(/^(\\d+\\.)\\s*\\n+(\\s+)(\\S)/gm, (_, marker, _indent, firstChar) => `${marker} ${firstChar}`);\n text = text.replace(/([^\\n])\\n(#{1,6} )/g, \"$1\\n\\n$2\");\n \n // Check for blank line before assign bullets\n text = text.replace(/([^\\n])\\n([ \\t]*(?:[#*+\\-] |\\d+\\. ))/g, \"$1\\n\\n$2\");\n\n text = text.replace(/\\n{3,}/g, \"\\n\\n\");\n\n // This protects the indentation required for markdown lists.\n text = text.replace(/^[ \\t]+(?![ \\t]*([\\*\\-\\+] |\\d+\\. ))/gm, (match) => {\n return match.replace(/ /g, \"\\u00A0\").replace(/\\t/g, \"\\u00A0\\u00A0\\u00A0\\u00A0\");\n });\n\n const parts = text.split(/(\\n{2,})/);\n text = parts.map((chunk) => {\n if (/^\\n+$/.test(chunk)) return chunk;\n if (/\\|.*\\|/.test(chunk) && /\\|[\\s:|-]+\\|/.test(chunk)) return chunk;\n if (/^#{1,6} /.test(chunk.trimStart())) return chunk;\n \n return chunk.replace(/\\n(?=[^\\n])/g, (_, offset) => {\n const remainingLine = chunk.slice(offset + 1);\n // If it is a bullet/number/table/heading, DO NOT collapse the newline\n const isStructural = /^[ \\t]*([#>|\\-*+]|\\d+\\.)/.test(remainingLine);\n return isStructural ? \"\\n\" : \" \";\n });\n }).join(\"\");\n\n // CRITICAL: Removed the duplicate `text = text.replace(/^[ \\t]+/gm...)` block from here!\n\n return text.trim();\n };\n\n const normalizePunctuationForMatch = (text: string) => text.replace(/[\\.,;:]/g, \" \");\n\n const collisionDependency = useMemo(() => deviationBadges.map((badge) => ({\n id: badge.id,\n connected: badge.isConnected,\n stackIndex: badge.stackIndex,\n size: badge.size,\n })), [deviationBadges]);\n\n const buildMarkOpen = (badgeId: string = \"\", color?: string) => {\n const colorAttr = color ? ` data-highlight-color=\"${color}\"` : \"\";\n const badgeAttr = badgeId ? ` data-badge-id=\"${badgeId}\"` : \"\";\n return `<mark${badgeAttr}${colorAttr}>`;\n };\n \n const buildMarkClose = () => `</mark>`;\n const buildSpanOpen = (badgeId: string) => `<span data-badge-id=\"${badgeId}\">`;\n const buildSpanClose = () => `</span>`;\n\n const wrapWithMark = (value: string, badgeId: string = \"\", highlightColor?: string) => {\n const match = value.match(/^(\\s*)([\\s\\S]*?)(\\s*)$/);\n if (!match) return value;\n const leading = match[1] ?? \"\";\n const body = match[2] ?? \"\";\n const trailing = match[3] ?? \"\";\n if (!body) return value;\n return leading + buildMarkOpen(badgeId, highlightColor) + body + buildMarkClose() + trailing;\n };\n\n const contentToRender = useMemo(() => {\n // 2. CRITICAL: Removed safeStringify here. Pure strings only to prevent encoded brackets.\n let normalizedContent = normalizeMarkdownText(content || \"\");\n\n const matchContent = suppressHighlightBg ? normalizePunctuationForMatch(normalizedContent) : normalizedContent;\n\n const badgeEntries = (deviationBadges || [])\n .map((badge: any) => ({\n id: badge?.id,\n highlight: normalizeMarkdownText(badge?.highlight || \"\"),\n highlightColor: badge?.style?.highlightBg || badge?.style?.badgeBg || highlightBg,\n }))\n .filter((entry: any) => entry.id && entry.highlight);\n\n const groupedBadges: Record<string, any[]> = {};\n badgeEntries.forEach((entry) => {\n if (!groupedBadges[entry.highlight]) groupedBadges[entry.highlight] = [];\n groupedBadges[entry.highlight].push(entry);\n });\n\n const createMarkedHighlight = (text: string, badgeId: string = \"\", highlightColor?: string, badges: any[] = []) => {\n let spanEmitted = false;\n\n const wrapSegment = (segment: string): string => {\n const mark = wrapWithMark(segment, badgeId, highlightColor);\n let wrapped = mark;\n \n if (!spanEmitted && badges.length > 0) {\n spanEmitted = true;\n let spansOpen = \"\";\n let spansClose = \"\";\n \n // Emit spans for ALL badges in the group, not just badges[0]\n badges.forEach((b) => {\n spansOpen += buildSpanOpen(b.id);\n spansClose = buildSpanClose() + spansClose;\n });\n \n wrapped = spansOpen + mark + spansClose;\n }\n \n return \"\\u200B\" + wrapped;\n };\n\n return text\n .split(/(\\n+)/)\n .map((part) => {\n if (/^\\n+$/.test(part)) return part;\n if (!part.trim()) return part;\n const strippedForSeparatorCheck = part.replace(/[|:\\-\\s]/g, \"\");\n if (strippedForSeparatorCheck === \"\" && part.includes(\"-\")) return part;\n if (part.includes(\"|\")) {\n return part.split(/(\\|)/).map((cell) => {\n if (cell === \"|\" || !cell.trim()) return cell;\n return wrapSegment(cell);\n }).join(\"\");\n }\n return wrapSegment(part);\n })\n .join(\"\");\n };\n\n const allMatches: HighlightMatch[] = [];\n\n Object.entries(groupedBadges).forEach(([highlight, badges]) => {\n let idx = normalizedContent.indexOf(highlight);\n let usedLooseMatch = false;\n\n if (idx === -1 && suppressHighlightBg) {\n const matchHighlight = normalizePunctuationForMatch(highlight);\n idx = matchContent.indexOf(matchHighlight);\n if (idx !== -1) usedLooseMatch = true;\n }\n\n if (idx === -1) return;\n\n let color = badges[0].highlightColor;\n for (let i = 1; i < badges.length; i++) {\n color = mixHexColors(color, badges[i].highlightColor || \"\");\n }\n\n allMatches.push({ highlight, start: idx, end: idx + highlight.length, badges, color, usedLooseMatch });\n });\n\n const badgeHighlightSet = new Set(Object.keys(groupedBadges));\n\n (highlights || []).forEach((highlight) => {\n if (!highlight) return;\n const cleanHighlight = normalizeMarkdownText(highlight);\n if (!cleanHighlight || badgeHighlightSet.has(cleanHighlight)) return;\n\n let idx = normalizedContent.indexOf(cleanHighlight);\n let usedLooseMatch = false;\n\n if (idx === -1 && suppressHighlightBg) {\n const matchHighlight = normalizePunctuationForMatch(cleanHighlight);\n idx = matchContent.indexOf(matchHighlight);\n if (idx !== -1) usedLooseMatch = true;\n }\n\n if (idx === -1) return;\n\n const before = normalizedContent.slice(0, idx);\n const openTags = (before.match(/</g) || []).length;\n const closeTags = (before.match(/>/g) || []).length;\n \n if (openTags === closeTags) {\n allMatches.push({\n highlight: cleanHighlight, start: idx, end: idx + cleanHighlight.length, badges: [], color: highlightBg || \"\", usedLooseMatch,\n } as unknown as HighlightMatch);\n }\n });\n\n allMatches.sort((a, b) => a.start - b.start || b.end - a.end);\n\n const claimedRanges: Array<{ start: number; end: number; matchIdx: number }> = [];\n const containedBy: Record<number, number> = {};\n\n allMatches.forEach((match, i) => {\n let start = match.start;\n let end = match.end;\n\n for (const claimed of claimedRanges) {\n const cStart = claimed.start;\n const cEnd = claimed.end;\n const fullyContained = start >= cStart && end <= cEnd;\n const partialOverlapRight = start < cEnd && end > cEnd && start >= cStart;\n const partialOverlapLeft = start < cStart && end > cStart && end <= cEnd;\n\n if (fullyContained) {\n match.orphaned = true;\n containedBy[i] = claimed.matchIdx;\n break;\n }\n if (partialOverlapRight) start = cEnd;\n if (partialOverlapLeft) end = cStart;\n }\n\n match.trimmedStart = start;\n match.trimmedEnd = end;\n\n if (!match.orphaned && start < end) {\n claimedRanges.push({ start, end, matchIdx: i });\n }\n });\n\n const childrenOf: Record<number, number[]> = {};\n Object.entries(containedBy).forEach(([childIdxStr, parentIdx]) => {\n const childIdx = Number(childIdxStr);\n if (!childrenOf[parentIdx]) childrenOf[parentIdx] = [];\n childrenOf[parentIdx].push(childIdx);\n });\n\n const injectChildren = (highlightText: string, parentAbsStart: number, childIndices: number[], parentColor: string) => {\n if (!childIndices.length) return highlightText;\n const children = childIndices.map((ci) => allMatches[ci]).sort((a, b) => a.start - b.start);\n let result = \"\";\n let cursor = 0;\n\n children.forEach((child) => {\n const relStart = Math.max(cursor, child.start - parentAbsStart);\n const relEnd = Math.max(relStart, child.end - parentAbsStart);\n if (relStart >= relEnd) return;\n\n const mixedColor = mixHexColors(parentColor, child.color || \"\");\n result += highlightText.slice(cursor, relStart);\n\n // Removed the redundant wrapperStart/wrapperEnd logic.\n // createMarkedHighlight now handles the spans natively and cleanly.\n result += createMarkedHighlight(\n highlightText.slice(relStart, relEnd), \n child.badges?.[0]?.id || \"\", \n mixedColor, \n child.badges || []\n );\n \n cursor = relEnd;\n });\n\n result += highlightText.slice(cursor);\n return result;\n };\n\n const finalMatches = allMatches.map((m, i) => ({ ...m, idx: i })).filter((m) => !m.orphaned).sort((a, b) => (b.trimmedStart ?? b.start) - (a.trimmedStart ?? a.start));\n\n finalMatches.forEach((match) => {\n const tStart = match.trimmedStart ?? match.start;\n const tEnd = match.trimmedEnd ?? match.end;\n if (tStart >= tEnd) return;\n\n const rawSlice = normalizedContent.slice(tStart, tEnd);\n const effectiveHighlight = match.usedLooseMatch || tStart !== match.start || tEnd !== match.end ? rawSlice : match.highlight;\n const withChildren = injectChildren(effectiveHighlight, match.start, childrenOf[match.idx!] || [], match.color);\n const markedText = createMarkedHighlight(withChildren, match.badges?.[0]?.id || \"\", match.color, match.badges || []);\n\n normalizedContent = normalizedContent.slice(0, tStart) + markedText + normalizedContent.slice(tEnd);\n });\n\n return normalizedContent;\n }, [content, deviationBadges, highlights, highlightBg, suppressHighlightBg]);\n\n const overlayContentToRender = useMemo(() => {\n if (!overlayContent) return \"\";\n return normalizeMarkdownText(overlayContent || \"\");\n }, [overlayContent]);\n\n const hasOverlay = !!overlayContent;\n\n const sharedContentSx = {\n \"& *\": { fontFamily: \"inherit\" },\n \"& code, & pre, & kbd, & samp\": {\n fontFamily: \"inherit !important\",\n fontSize: \"inherit\",\n background: \"none\",\n padding: 0,\n border: \"none\",\n whiteSpace: \"pre-wrap\",\n },\n \"& p, & li, & ul, & ol\": { position: \"static\", overflow: \"visible\", whiteSpace: \"pre-wrap\" },\n };\n\n const baseSx = { ...sxStyles, ...sharedContentSx, position: \"relative\", width: \"100%\", maxWidth: \"100%\", minWidth: 0, boxSizing: \"border-box\", overflow: \"visible\", whiteSpace: \"normal\", gridArea: \"1 / 1\", zIndex: 2, ...(hasOverlay ? {\n color: \"transparent\",\n userSelect: \"none\", \n pointerEvents: \"none\", \n \"& .deviation-badge\": { pointerEvents: \"auto\" },\n \"& table\": { visibility: \"hidden\", margin: \"0 !important\" },\n \"& th, & td\": { padding: \"0 !important\", border: \"none !important\", backgroundColor: \"transparent !important\" },\n \"& tr\": { border: \"none !important\" },\n \"& p:empty\": { display: \"none\" }\n } : {})\n };\n\n const overlaySx = { ...sxStyles, ...sharedContentSx, position: \"relative\", width: \"100%\", maxWidth: \"100%\", minWidth: 0, boxSizing: \"border-box\", overflow: \"visible\", whiteSpace: \"normal\", gridArea: \"1 / 1\", zIndex: 1, pointerEvents: \"auto\" };\n\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n\n const resolveCollisions = () => {\n const badges = Array.from(\n containerRef.current!.querySelectorAll(\".deviation-badge\")\n ) as HTMLElement[];\n \n if (badges.length === 0) return;\n\n badges.forEach((b) => { b.style.setProperty(\"--badge-nudge\", \"0px\"); });\n\n const leftBadges = badges.filter((b) => b.dataset.side === \"left\");\n const rightBadges = badges.filter((b) => b.dataset.side !== \"left\");\n\n const containerRect = containerRef.current!.getBoundingClientRect();\n const maxBottom = containerRect.bottom - 4;\n const minTop = containerRect.top + 4;\n\n const applyPushDownAndClamp = (sideBadges: HTMLElement[]) => {\n if (sideBadges.length === 0) return;\n\n const metrics = sideBadges.map((el) => {\n const rect = el.getBoundingClientRect();\n return { \n el, \n naturalTop: rect.top, \n height: rect.height,\n currentTop: rect.top\n };\n });\n\n metrics.sort((a, b) => a.naturalTop - b.naturalTop);\n\n const MIN_GAP = 8;\n const clusters: typeof metrics[] = [];\n let currentCluster: typeof metrics = [];\n\n metrics.forEach((item) => {\n if (currentCluster.length === 0) {\n currentCluster.push(item);\n } else {\n const prev = currentCluster[currentCluster.length - 1];\n const prevBottom = prev.currentTop + prev.height;\n\n if (item.naturalTop < prevBottom + MIN_GAP) {\n item.currentTop = prevBottom + MIN_GAP;\n currentCluster.push(item);\n } else {\n clusters.push(currentCluster);\n currentCluster = [item];\n }\n }\n });\n if (currentCluster.length > 0) clusters.push(currentCluster);\n\n clusters.forEach((cluster) => {\n const lastItem = cluster[cluster.length - 1];\n const clusterBottom = lastItem.currentTop + lastItem.height;\n\n if (clusterBottom > maxBottom) {\n const overflowAmount = clusterBottom - maxBottom;\n\n const firstItem = cluster[0];\n const availableTopSpace = firstItem.currentTop - minTop;\n \n const actualShiftUp = Math.max(0, Math.min(overflowAmount, availableTopSpace));\n\n cluster.forEach((item) => {\n item.currentTop -= actualShiftUp;\n });\n }\n });\n\n clusters.flat().forEach((item) => {\n const nudge = item.currentTop - item.naturalTop;\n item.el.style.setProperty(\"--badge-nudge\", `${nudge}px`);\n });\n };\n\n applyPushDownAndClamp(leftBadges);\n applyPushDownAndClamp(rightBadges);\n };\n\n const raf1 = requestAnimationFrame(()=>{\n requestAnimationFrame(()=>{\n resolveCollisions();\n })\n });\n\n const resizeObserver = new ResizeObserver(() => {\n requestAnimationFrame(resolveCollisions);\n });\n resizeObserver.observe(containerRef.current);\n\n return () => {\n resizeObserver.disconnect();\n cancelAnimationFrame(raf1);\n }\n }, [contentToRender, collisionKey, collisionDependency]);\n\n return (\n <Box\n ref={containerRef}\n sx={{\n position: \"relative\",\n display: \"grid\",\n gridTemplateColumns: \"minmax(0, 1fr)\",\n width: \"100%\",\n maxWidth: \"100%\",\n minWidth: 0,\n }}\n >\n <Typography component=\"div\" sx={{ ...baseSx, padding: \"3px\" }}>\n <ReactMarkdown\n components={components}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n >\n {/* 4. Removed safeStringify wrapper! It encodes < to < */}\n {contentToRender.replace(/#{3}/g, \"\")}\n </ReactMarkdown>\n </Typography>\n\n {hasOverlay && (\n <Typography component=\"div\" sx={overlaySx}>\n <ReactMarkdown\n components={components}\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n >\n {overlayContentToRender}\n </ReactMarkdown>\n </Typography>\n )}\n </Box>\n );\n },\n areMarkdownPropsEqual\n);"],"names":["resolvePlugin","plugin","default","remarkPlugins","remarkGfm","rehypePlugins","rehypeRaw","MemoizedMarkdown","React","memo","content","overlayContent","sxStyles","deviationBadges","highlights","maintainRelativeOrder","highlightBg","suppressHighlightBg","collisionKey","containerRef","useRef","hideHighlightBg","badgeMap","useMemo","reduce","acc","badge","id","dynamicPropsRef","current","mapChildrenDeep","children","transform","Children","map","child","isValidElement","newChildren","props","cloned","cloneElement","components","mark","badgeId","bg","style","badgeBg","shouldHideBg","jsx","backgroundColor","borderRadius","display","boxDecorationBreak","WebkitBoxDecorationBreak","backgroundClip","padding","color","span","stackIndex","translateY","jsxs","Box","component","sx","position","ref","badgeRef","className","side","fontStyle","zIndex","alignItems","fontSize","bgcolor","badgeText","DEFAULT_DEVIAION_COLOR","border","badgeBorder","fontWeight","whiteSpace","boxShadow","overflow","transition","right","left","isConnected","outline","outlineOffset","onClick","e","stopPropagation","onSummaryClick","px","py","cursor","label","isOrphan","pl","ml","borderLeft","score","EllipsisVertical","size","table","width","maxWidth","minWidth","boxSizing","contain","overflowX","overflowY","overscrollBehaviorX","WebkitOverflowScrolling","my","tableLayout","borderCollapse","thead","tbody","tr","borderBottom","th","textAlign","verticalAlign","wordBreak","overflowWrap","td","code","fontFamily","pre","updated","deleted","updatedChildren","el","textDecoration","changed","ul","mt","mb","listStyleType","ol","li","normalizeMarkdownText","rawText","text","replace","_","num","spaces","slice","marker","_indent","firstChar","match","parts","split","chunk","test","trimStart","offset","remainingLine","join","trim","normalizePunctuationForMatch","collisionDependency","connected","contentToRender","normalizedContent","matchContent","badgeEntries","highlight","highlightColor","filter","entry","groupedBadges","forEach","push","createMarkedHighlight","badges","spanEmitted","wrapSegment","segment","value","leading","body","trailing","buildMarkOpen","wrapWithMark","wrapped","length","spansOpen","spansClose","b","buildSpanOpen","part","includes","cell","allMatches","Object","entries","idx","indexOf","usedLooseMatch","matchHighlight","i","mixHexColors","start","end","badgeHighlightSet","Set","keys","cleanHighlight","has","before","sort","a","claimedRanges","containedBy","claimed","cStart","cEnd","partialOverlapRight","partialOverlapLeft","orphaned","matchIdx","trimmedStart","trimmedEnd","childrenOf","childIdxStr","parentIdx","childIdx","Number","m","tStart","tEnd","rawSlice","withChildren","highlightText","parentAbsStart","childIndices","parentColor","ci","result","relStart","Math","max","relEnd","mixedColor","injectChildren","markedText","overlayContentToRender","hasOverlay","sharedContentSx","background","baseSx","gridArea","userSelect","pointerEvents","visibility","margin","overlaySx","useLayoutEffect","resolveCollisions","Array","from","querySelectorAll","setProperty","leftBadges","dataset","rightBadges","containerRect","getBoundingClientRect","maxBottom","bottom","minTop","top","applyPushDownAndClamp","sideBadges","metrics","rect","naturalTop","height","currentTop","clusters","currentCluster","item","prev","prevBottom","cluster","lastItem","clusterBottom","overflowAmount","availableTopSpace","actualShiftUp","min","flat","nudge","raf1","requestAnimationFrame","resizeObserver","ResizeObserver","observe","disconnect","cancelAnimationFrame","gridTemplateColumns","Typography","ReactMarkdown","areMarkdownPropsEqual"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useMemo as e}from"react";import{safeStringify as t,isMissingStr as n,getRationale as i,resolveComparisonInputItems as o,getSideData as s,hasValue as r,DEVIATION_BADGE_SEPARATOR as a}from"../CognitiveComparehelpers.js";import{buildComparisonRows as d}from"../utils/buildComparisonRows.js";const c={id:"",title:"",similarity:0,sections:[]},l=(l,u,f,p,v=!0,_,I)=>{const g="string"==typeof f?f:JSON.stringify(f||{}),h=I??Boolean("string"==typeof _?_.trim():_&&(_.learnings_data||_.data?.artifactData?.userStorySnapshot)),{activeProposed:m,activeVariants:x,comparisonRows:b,parseError:y}=e(()=>{if(!l||0===Object.keys(l).length)return{activeProposed:{},activeVariants:[],comparisonRows:[],parseError:"Tree data is required"};const e=JSON.parse(g);try{const r=l.nodes||l;let a=[],c=[],f=[];const p=l.base_root_id,I=l.input_index_map||{0:"left",1:"right"},g=l[p]||r[p];if(!g||!1===g.display_node)return{activeProposed:{title:"No Data",sections:[]},activeVariants:[],comparisonRows:[],parseError:null};const m=l.content_mapping||{},x=e=>l[e]||r[e],b=(e,i,o)=>{if(!e||"object"!=typeof e)return e||null;if(e.deviations)return e;if(v)return e;const s=Object.keys(e).filter(e=>/^\d+$/.test(e));if(!s.length)return e;const r=s.sort((e,t)=>Number(e)-Number(t)),a={},d={};let c=null;return r.forEach(s=>{const r=e[s];if(!r||"object"!=typeof r)return;c||(c=r);const l="same"===t(r?.evaluation_outputs?.output_value).trim().toLowerCase(),u=!(r?.status&&"pending"!==r.status||l),f=r?.deviation_highlight||r?.web_search_answer?.deviation_highlight,p=e=>{const t=r?.cognitive_decisioning?.citations||r?.citations||{};return Object.values(t).map(t=>t?.[e]?.highlighted_text).filter(e=>"string"==typeof e&&e.trim().length>0)},v=(...e)=>{for(const t of e)if(Array.isArray(t)&&t.some(e=>!n(e)))return t;return[]},_=u?v(r?.deviation_highlights?.[i]||r?.deviation_highlights?.[I[0]],"string"==typeof f?[f]:[],p(i),p(I[0])):[],g=u?v(r?.deviation_highlights?.[o]||r?.deviation_highlights?.[I[1]],p(o),p(I[1])):[];a[s]={[I[0]]:_[0]||"",[I[1]]:g[0]||"",deviation_summary:r?.deviation_summary||"",deviation_title:r?.deviation_title,deviation_impact:r?.deviation_impact,deviation_explanation:r?.deviation_explanation,evaluation_outputs:r?.evaluation_outputs,cognitive_decisioning:r?.cognitive_decisioning,deviation_highlights:r?.deviation_highlights},d[s]=r}),{...e,deviation_title:c?.deviation_title||e?.deviation_title,deviation_impact:c?.deviation_impact||e?.deviation_impact,deviation_summary:c?.deviation_summary||e?.deviation_summary,deviation_explanation:c?.deviation_explanation||e?.deviation_explanation,evaluation_outputs:c?.evaluation_outputs||e?.evaluation_outputs,cognitive_decisioning:c?.cognitive_decisioning||e?.cognitive_decisioning,deviations:a,deviation_entries:d}},y=e=>{const t=new Map,n=e=>{e.forEach(e=>{e.id&&t.set(e.id,e),e.subsections?.length&&n(e.subsections)})};n(e);const i=(e,n)=>{let o=[];for(const s of e){const e=s.ref_parent_section_node_id;if(e&&t.has(e)&&e!==n?.id){const n=t.get(e);n.subsections||(n.subsections=[]),n.subsections.some(e=>e.id===s.id)||n.subsections.push(s)}else s.subsections?.length&&(s.subsections=i(s.subsections,s)),o.push(s)}return o},o=i(e),s=e=>{e.forEach(e=>{e.subsections&&e.subsections.length>0&&(e.subsections.sort((e,t)=>e.selfIndex<0&&t.selfIndex>=0?1:e.selfIndex>=0&&t.selfIndex<0?-1:(e.selfIndex||0)-(t.selfIndex||0)),s(e.subsections))})};return s(o),o},R=e=>{const t=e.comparison_inputs?Object.keys(e.comparison_inputs):[];let n=I[0],i=I[1];return t.length>0&&(n=t.includes(I[0])?I[0]:t[0],i=t.includes(I[1])?I[1]:t.length>1?t[1]:t[0]),{nodeLeftId:n,nodeRightId:i}},C=e=>e?.entity_id||e?.ref_parent_section_node_id||e?.parent_entity_id||null,E=(e,n,i,o)=>{const s=n.attributes||{},r=n.data||{},a=!1!==s.display_title,d=!1!==s.display_content,c=a?t(r.title||""):"",l=d?t(r.content||""):"",u=d?t(r.change_history||""):"",f=void 0!==s.display_index&&null!==s.display_index?Number(s.display_index):-1,p=C(s),v=!(!c.trim()&&!l.trim());return{id:`${e}::${n.contentId}`,nodeId:e,contentId:n.contentId,parentContentId:p,title:c,content:l,change_history:u,displayTitle:a,displayContent:d,subsections:[],...v?o:{score:void 0,relation:"not_defined"},evaluationResult:i,evaluationResults:i?[i]:[],selfIndex:f,refIndexes:[],refContentIds:[],ref_parent_section_node_id:p}},O=(e,t)=>{e.refIndexes=Array.from(new Set([...e.refIndexes||[],...t.refIndexes||[]])),e.refContentIds=Array.from(new Set([...e.refContentIds||[],...t.refContentIds||[]]));const n=new Set((e.subsections||[]).map(e=>e.id||e.contentId||e.nodeId));(t.subsections||[]).forEach(t=>{const i=t.id||t.contentId||t.nodeId;n.has(i)||(e.subsections=[...e.subsections||[],t],n.add(i))});const i=[...e.evaluationResults||(e.evaluationResult?[e.evaluationResult]:[]),...t.evaluationResults||(t.evaluationResult?[t.evaluationResult]:[])].filter(Boolean),o=new Set;return e.evaluationResults=i.filter(e=>{const t=e?.nodeId||JSON.stringify(Object.keys(e?.deviations||e||{}));return!o.has(t)&&(o.add(t),!0)}),!e.evaluationResult&&t.evaluationResult&&(e.evaluationResult=t.evaluationResult),!e.cognitiveData&&t.cognitiveData&&(e.cognitiveData=t.cognitiveData),e},j=(e,t)=>e.selfIndex<0&&t.selfIndex>=0?1:e.selfIndex>=0&&t.selfIndex<0?-1:e.selfIndex-t.selfIndex,N=(t,n)=>{const s=x(t);if(!s||!1===s.display_node)return[];if(h&&"1"===n)return[];const{nodeLeftId:r,nodeRightId:a}=R(s),d=i(s),c=e?.[t]?.evaluation_result||s.evaluation_result||null,l=b(c,r,a),u=l&&"object"==typeof l?{...l,nodeId:t}:l,f=o(s,n,I,m).map(e=>E(t,e,u,d));if(s.next){const e=Object.values(s.next).flatMap(e=>N(e,n));f.forEach(t=>{const n=e.filter(e=>!e.parentContentId||e.parentContentId===t.contentId||e.parentContentId===t.parentContentId);t.subsections=n.length?n:e})}return f};if(u){const t=(n,s=0)=>{let r=[],a=[];if(!n)return{refSections:r,baseSections:a};const d={},c={};let l=-1,u=-1;for(const r in n){const a=n[r],f=x(a);if(!f||!1===f.display_node)continue;const{nodeLeftId:p,nodeRightId:v}=R(f),_=i(f),g=e?.[a]?.evaluation_result||f.evaluation_result||null,y=b(g,p,v),C=y&&"object"==typeof y?{...y,nodeId:a}:y,{refSections:j,baseSections:N}=t(f.next,s+1),S=o(f,"0",I,m).map(e=>{const t=E(a,e,C,_);return-1===t.selfIndex&&(t.selfIndex=u--),t});let w=[];if(!h){const e=o(f,"1",I,m);w=e.map(e=>{const t=E(a,e,C,_);return-1===t.selfIndex&&(t.selfIndex=l--),t})}S.forEach(e=>{w.forEach(t=>{Number(t.selfIndex)>=0&&Number(e.selfIndex)>=0&&(t.refIndexes?.includes(Number(e.selfIndex))||t.refIndexes?.push(Number(e.selfIndex)),e.refIndexes?.includes(Number(t.selfIndex))||e.refIndexes?.push(Number(t.selfIndex))),e.contentId&&!t.refContentIds?.includes(e.contentId)&&t.refContentIds?.push(e.contentId),t.contentId&&!e.refContentIds?.includes(t.contentId)&&e.refContentIds?.push(t.contentId)})}),w.forEach(e=>{const t=j.filter(t=>!t.parentContentId||t.parentContentId===e.contentId||t.parentContentId===e.parentContentId||e.refContentIds?.includes(t.parentContentId));t.length>0&&(e.subsections=t);const n=0===s?String(e.selfIndex):`${e.selfIndex}_${e.contentId||a}`;d[n]=d[n]?O(d[n],e):e}),S.forEach(e=>{const t=N.filter(t=>!t.parentContentId||t.parentContentId===e.contentId||t.parentContentId===e.parentContentId||e.refContentIds?.includes(t.parentContentId));t.length>0&&(e.subsections=t);const n=0===s?String(e.selfIndex):`${e.selfIndex}_${e.contentId||a}`;c[n]=c[n]?O(c[n],e):e})}return r=Object.values(d),a=Object.values(c),r.sort(j),a.sort(j),{refSections:r,baseSections:a}},{refSections:n,baseSections:s}=t(g.next);h||(c=y(n)),a=s}else g.next&&Object.values(g.next).forEach(e=>{const t=x(e);if(!t||!1===t.display_node)return;const n=N(e,"0");if(h)return void a.push(...n);const i=y(N(e,"1"));f.push(...d(e,n,i))}),h||(a=f.map(e=>e.left),c=f.map(e=>e.right));const S=s(g,"0",I,m),w=s(g,"1",I,m),$={title:S.title||"Uploaded Contract",description:g.decision_scope_description||"",sections:a};return{activeProposed:$,activeVariants:[{id:"tree-variant-1",title:h?(()=>{if("string"!=typeof _&&_?.learnings_data&&Object.keys(_.learnings_data).length>0){const e=Object.keys(_.learnings_data)[0];return _.learnings_data[e]?.title||"Rulebook Guidelines"}return"string"!=typeof _&&_?.data?.artifactTitle||"Rulebook Guidelines"})():w.title||"Reference Template",similarity:0,sections:c,analysis:{rule_difference_comparison:{summary:{overall_score:0,overall_summary:g.decision_scope_description||""},fields:{}}}}],comparisonRows:f,parseError:null}}catch(e){return console.error("Data Transformation Error: ",e),{activeProposed:{},activeVariants:[],comparisonRows:[],parseError:e instanceof Error?e.message:"Unknown Parsing Error"}}},[l,u,g,v,_,h]),R=x?.[0]||c,C=e(()=>m?.sections||[],[m?.sections]),E=e(()=>R.sections||[],[R.sections]),O=C.length>0||E.length>0,j=e(()=>p.fields.filter(({key:e})=>(!O||"description"!==e)&&(r(m?.[e])||r(R[e]))),[m,R,O,p.fields]),{parentDeviationRecord:N,registry:S,deviationParentRegistry:w}=e(()=>{const e={},t={},i={};let o=0;const s=l?.input_index_map?.[0],r=l?.input_index_map?.[1],d=(e,t)=>{if(!u){const n="left"===t?C.indexOf(e):E.indexOf(e);return{rootKey:`${t}:${n}`,parentNum:n+1}}if("left"===t){const t=e.selfIndex,n=void 0!==t&&t>=0?t+1:C.indexOf(e)+1;return{rootKey:`left-root:${e.id}`,parentNum:n}}const n=e.selfIndex,i=C.find(e=>e.refIndexes?.includes(n));if(i){const e=i.selfIndex,t=void 0!==e&&e>=0?e+1:C.indexOf(i)+1;return{rootKey:`left-root:${i.id}`,parentNum:t}}const o=void 0!==n&&n>=0?n+1:E.indexOf(e)+1;return{rootKey:`right-orphan-root:${e.id}`,parentNum:o}},c=(e,t)=>{if(e&&t)return e.find(e=>e.id===t.id||e.nodeId&&e.nodeId===t.nodeId||e.contentId&&e.contentId===t.contentId)||void 0},f=(d,l,u,p,v,_,I)=>{if(l&&((e,o,d)=>{(e?.evaluationResults?.length?e.evaluationResults:e?.evaluationResult?[e.evaluationResult]:[]).forEach(c=>{const l=c?.deviations||{};Object.keys(l).sort().forEach(u=>{const f=l[u];if(!f)return;const p=!n(f[s]),v=!n(f[r]);if(p||v){const n=`${c?.nodeId||e.nodeId||e.id}${a}${u}`;void 0===t[n]&&(void 0===i[o]&&(i[o]=1),t[n]={index:i[o]++,rootKey:o,parentNum:d})}})})})(l,p,v),l&&!_){const t=I?.id||"fallback_parent_"+o++;e[t]||(e[t]=[]),e[t].push(l)}(l?.subsections||d?.subsections||u?.subsections||[]).forEach(e=>{const t=c(d?.subsections,e),n=c(u?.subsections,e);f(e,t,n,p,v,!1,l||I)})};C.forEach(e=>{const{rootKey:t,parentNum:n}=d(e,"left");let i=null;if(u){const t=e.refIndexes?.[0];i=E.find(e=>e.selfIndex===t)}else i=E[C.indexOf(e)];f(e,e,i,t,n,!0,e)}),h||E.forEach(e=>{const{rootKey:t,parentNum:n}=d(e,"right");t.startsWith("right-orphan-root:")&&f(e,null,e,t,n,!0,e)});const p=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.index])),v=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,t.parentNum]));return{parentDeviationRecord:e,registry:p,deviationParentRegistry:v}},[C,E,u,l,h]);return{isGuidelineMode:h,activeProposed:m,activeVariants:x,comparisonRows:b,existingRule:R,proposedSections:C,existingSections:E,visibleFields:j,parentDeviationRecord:N,deviationNumberRegistry:S,deviationParentRegistry:w,parseError:y}};export{l as useCognitiveTreeData};
|
|
1
|
+
import{useMemo as e}from"react";import{isMissingStr as t,safeStringify as n,getRationale as i,resolveComparisonInputItems as o,getSideData as s,hasValue as r,DEVIATION_BADGE_SEPARATOR as a}from"../CognitiveComparehelpers.js";import{buildComparisonRows as d}from"../utils/buildComparisonRows.js";const c={id:"",title:"",similarity:0,sections:[]},l=(l,u,f,p,v=!0,I)=>{const _="string"==typeof f?f:JSON.stringify(f||{}),h=Boolean(I&&(I.learnings_data||I.data?.artifactData?.userStorySnapshot)),{activeProposed:g,activeVariants:m,comparisonRows:x,parseError:b}=e(()=>{if(!l||0===Object.keys(l).length)return{activeProposed:{},activeVariants:[],comparisonRows:[],parseError:"Tree data is required"};const e=JSON.parse(_);try{const r=l.nodes||l;let a=[],c=[],f=[];const p=l.base_root_id,_=l.input_index_map||{0:"left",1:"right"},g=l[p]||r[p];if(!g||!1===g.display_node)return{activeProposed:{title:"No Data",sections:[]},activeVariants:[],comparisonRows:[],parseError:null};const m=l.content_mapping||{},x=e=>l[e]||r[e],b=(e,n,i)=>{if(!e||"object"!=typeof e)return e||null;if(e.deviations)return e;if(v)return e;const o=Object.keys(e).filter(e=>/^\d+$/.test(e));if(!o.length)return e;const s=o.sort((e,t)=>Number(e)-Number(t)),r={},a={};let d=null;return s.forEach(o=>{const s=e[o];if(!s||"object"!=typeof s)return;d||(d=s);const c=!s?.status||"pending"===s.status,l=s?.deviation_highlight||s?.web_search_answer?.deviation_highlight,u=e=>{const t=s?.cognitive_decisioning?.citations||s?.citations||{};return Object.values(t).map(t=>t?.[e]?.highlighted_text).filter(e=>"string"==typeof e&&e.trim().length>0)},f=(...e)=>{for(const n of e)if(Array.isArray(n)&&n.some(e=>!t(e)))return n;return[]},p=c?f(s?.deviation_highlights?.[n]||s?.deviation_highlights?.[_[0]],"string"==typeof l?[l]:[],u(n),u(_[0])):[],v=c?f(s?.deviation_highlights?.[i]||s?.deviation_highlights?.[_[1]],u(i),u(_[1])):[];r[o]={[_[0]]:p[0]||"",[_[1]]:v[0]||"",deviation_summary:s?.deviation_summary||"",deviation_title:s?.deviation_title,deviation_impact:s?.deviation_impact,deviation_explanation:s?.deviation_explanation,evaluation_outputs:s?.evaluation_outputs,cognitive_decisioning:s?.cognitive_decisioning,deviation_highlights:s?.deviation_highlights},a[o]=s}),{...e,deviation_title:d?.deviation_title||e?.deviation_title,deviation_impact:d?.deviation_impact||e?.deviation_impact,deviation_summary:d?.deviation_summary||e?.deviation_summary,deviation_explanation:d?.deviation_explanation||e?.deviation_explanation,evaluation_outputs:d?.evaluation_outputs||e?.evaluation_outputs,cognitive_decisioning:d?.cognitive_decisioning||e?.cognitive_decisioning,deviations:r,deviation_entries:a}},y=e=>{const t=new Map,n=e=>{e.forEach(e=>{e.id&&t.set(e.id,e),e.subsections?.length&&n(e.subsections)})};n(e);const i=(e,n)=>{let o=[];for(const s of e){const e=s.ref_parent_section_node_id;if(e&&t.has(e)&&e!==n?.id){const n=t.get(e);n.subsections||(n.subsections=[]),n.subsections.some(e=>e.id===s.id)||n.subsections.push(s)}else s.subsections?.length&&(s.subsections=i(s.subsections,s)),o.push(s)}return o},o=i(e),s=e=>{e.forEach(e=>{e.subsections&&e.subsections.length>0&&(e.subsections.sort((e,t)=>e.selfIndex<0&&t.selfIndex>=0?1:e.selfIndex>=0&&t.selfIndex<0?-1:(e.selfIndex||0)-(t.selfIndex||0)),s(e.subsections))})};return s(o),o},R=e=>{const t=e.comparison_inputs?Object.keys(e.comparison_inputs):[];let n=_[0],i=_[1];return t.length>0&&(n=t.includes(_[0])?_[0]:t[0],i=t.includes(_[1])?_[1]:t.length>1?t[1]:t[0]),{nodeLeftId:n,nodeRightId:i}},C=e=>e?.entity_id||e?.ref_parent_section_node_id||e?.parent_entity_id||null,E=(e,t,i,o)=>{const s=t.attributes||{},r=t.data||{},a=!1!==s.display_title,d=!1!==s.display_content,c=a?n(r.title||""):"",l=d?n(r.content||""):"",u=d?n(r.change_history||""):"",f=void 0!==s.display_index&&null!==s.display_index?Number(s.display_index):-1,p=C(s),v=!(!c.trim()&&!l.trim());return{id:`${e}::${t.contentId}`,nodeId:e,contentId:t.contentId,parentContentId:p,title:c,content:l,change_history:u,displayTitle:a,displayContent:d,subsections:[],...v?o:{score:void 0,relation:"not_defined"},evaluationResult:i,evaluationResults:i?[i]:[],selfIndex:f,refIndexes:[],refContentIds:[],ref_parent_section_node_id:p}},O=(e,t)=>{e.refIndexes=Array.from(new Set([...e.refIndexes||[],...t.refIndexes||[]])),e.refContentIds=Array.from(new Set([...e.refContentIds||[],...t.refContentIds||[]]));const n=new Set((e.subsections||[]).map(e=>e.id||e.contentId||e.nodeId));(t.subsections||[]).forEach(t=>{const i=t.id||t.contentId||t.nodeId;n.has(i)||(e.subsections=[...e.subsections||[],t],n.add(i))});const i=[...e.evaluationResults||(e.evaluationResult?[e.evaluationResult]:[]),...t.evaluationResults||(t.evaluationResult?[t.evaluationResult]:[])].filter(Boolean),o=new Set;return e.evaluationResults=i.filter(e=>{const t=e?.nodeId||JSON.stringify(Object.keys(e?.deviations||e||{}));return!o.has(t)&&(o.add(t),!0)}),!e.evaluationResult&&t.evaluationResult&&(e.evaluationResult=t.evaluationResult),!e.cognitiveData&&t.cognitiveData&&(e.cognitiveData=t.cognitiveData),e},j=(e,t)=>e.selfIndex<0&&t.selfIndex>=0?1:e.selfIndex>=0&&t.selfIndex<0?-1:e.selfIndex-t.selfIndex,N=(t,n)=>{const s=x(t);if(!s||!1===s.display_node)return[];if(h&&"1"===n)return[];const{nodeLeftId:r,nodeRightId:a}=R(s),d=i(s),c=e?.[t]?.evaluation_result||s.evaluation_result||null,l=b(c,r,a),u=l&&"object"==typeof l?{...l,nodeId:t}:l,f=o(s,n,_,m).map(e=>E(t,e,u,d));if(s.next){const e=Object.values(s.next).flatMap(e=>N(e,n));f.forEach(t=>{const n=e.filter(e=>!e.parentContentId||e.parentContentId===t.contentId||e.parentContentId===t.parentContentId);t.subsections=n.length?n:e})}return f};if(u){const t=(n,s=0)=>{let r=[],a=[];if(!n)return{refSections:r,baseSections:a};const d={},c={};let l=-1,u=-1;for(const r in n){const a=n[r],f=x(a);if(!f||!1===f.display_node)continue;const{nodeLeftId:p,nodeRightId:v}=R(f),I=i(f),g=e?.[a]?.evaluation_result||f.evaluation_result||null,y=b(g,p,v),C=y&&"object"==typeof y?{...y,nodeId:a}:y,{refSections:j,baseSections:N}=t(f.next,s+1),S=o(f,"0",_,m).map(e=>{const t=E(a,e,C,I);return-1===t.selfIndex&&(t.selfIndex=u--),t});let w=[];if(!h){const e=o(f,"1",_,m);w=e.map(e=>{const t=E(a,e,C,I);return-1===t.selfIndex&&(t.selfIndex=l--),t})}S.forEach(e=>{w.forEach(t=>{Number(t.selfIndex)>=0&&Number(e.selfIndex)>=0&&(t.refIndexes?.includes(Number(e.selfIndex))||t.refIndexes?.push(Number(e.selfIndex)),e.refIndexes?.includes(Number(t.selfIndex))||e.refIndexes?.push(Number(t.selfIndex))),e.contentId&&!t.refContentIds?.includes(e.contentId)&&t.refContentIds?.push(e.contentId),t.contentId&&!e.refContentIds?.includes(t.contentId)&&e.refContentIds?.push(t.contentId)})}),w.forEach(e=>{const t=j.filter(t=>!t.parentContentId||t.parentContentId===e.contentId||t.parentContentId===e.parentContentId||e.refContentIds?.includes(t.parentContentId));t.length>0&&(e.subsections=t);const n=0===s?String(e.selfIndex):`${e.selfIndex}_${e.contentId||a}`;d[n]=d[n]?O(d[n],e):e}),S.forEach(e=>{const t=N.filter(t=>!t.parentContentId||t.parentContentId===e.contentId||t.parentContentId===e.parentContentId||e.refContentIds?.includes(t.parentContentId));t.length>0&&(e.subsections=t);const n=0===s?String(e.selfIndex):`${e.selfIndex}_${e.contentId||a}`;c[n]=c[n]?O(c[n],e):e})}return r=Object.values(d),a=Object.values(c),r.sort(j),a.sort(j),{refSections:r,baseSections:a}},{refSections:n,baseSections:s}=t(g.next);h||(c=y(n)),a=s}else g.next&&Object.values(g.next).forEach(e=>{const t=x(e);if(!t||!1===t.display_node)return;const n=N(e,"0");if(h)return void a.push(...n);const i=y(N(e,"1"));f.push(...d(e,n,i))}),h||(a=f.map(e=>e.left),c=f.map(e=>e.right));const S=s(g,"0",_,m),w=s(g,"1",_,m),$={title:S.title||"Uploaded Contract",description:g.decision_scope_description||"",sections:a};return{activeProposed:$,activeVariants:[{id:"tree-variant-1",title:h?(()=>{if(I?.learnings_data&&Object.keys(I.learnings_data).length>0){const e=Object.keys(I.learnings_data)[0];return I.learnings_data[e]?.title||"Rulebook Guidelines"}return I?.data?.artifactTitle||"Rulebook Guidelines"})():w.title||"Reference Template",similarity:0,sections:c,analysis:{rule_difference_comparison:{summary:{overall_score:0,overall_summary:g.decision_scope_description||""},fields:{}}}}],comparisonRows:f,parseError:null}}catch(e){return console.error("Data Transformation Error: ",e),{activeProposed:{},activeVariants:[],comparisonRows:[],parseError:e instanceof Error?e.message:"Unknown Parsing Error"}}},[l,u,_,v,I]),y=m?.[0]||c,R=e(()=>g?.sections||[],[g?.sections]),C=e(()=>y.sections||[],[y.sections]),E=R.length>0||C.length>0,O=e(()=>p.fields.filter(({key:e})=>(!E||"description"!==e)&&(r(g?.[e])||r(y[e]))),[g,y,E,p.fields]),{parentDeviationRecord:j,registry:N,deviationParentRegistry:S}=e(()=>{const e={},n={},i={};let o=0;const s=l?.input_index_map?.[0],r=l?.input_index_map?.[1],d=(e,t)=>{if(!u){const n="left"===t?R.indexOf(e):C.indexOf(e);return{rootKey:`${t}:${n}`,parentNum:n+1}}if("left"===t){const t=e.selfIndex,n=void 0!==t&&t>=0?t+1:R.indexOf(e)+1;return{rootKey:`left-root:${e.id}`,parentNum:n}}const n=e.selfIndex,i=R.find(e=>e.refIndexes?.includes(n));if(i){const e=i.selfIndex,t=void 0!==e&&e>=0?e+1:R.indexOf(i)+1;return{rootKey:`left-root:${i.id}`,parentNum:t}}const o=void 0!==n&&n>=0?n+1:C.indexOf(e)+1;return{rootKey:`right-orphan-root:${e.id}`,parentNum:o}},c=(e,t)=>{if(e&&t)return e.find(e=>e.id===t.id||e.nodeId&&e.nodeId===t.nodeId||e.contentId&&e.contentId===t.contentId)||void 0},f=(d,l,u,p,v,I,_)=>{if(l&&((e,o,d)=>{(e?.evaluationResults?.length?e.evaluationResults:e?.evaluationResult?[e.evaluationResult]:[]).forEach(c=>{const l=c?.deviations||{};Object.keys(l).sort().forEach(u=>{const f=l[u];if(!f)return;const p=!t(f[s]),v=!t(f[r]);if(p||v){const t=`${c?.nodeId||e.nodeId||e.id}${a}${u}`;void 0===n[t]&&(void 0===i[o]&&(i[o]=1),n[t]={index:i[o]++,rootKey:o,parentNum:d})}})})})(l,p,v),l&&!I){const t=_?.id||"fallback_parent_"+o++;e[t]||(e[t]=[]),e[t].push(l)}(l?.subsections||d?.subsections||u?.subsections||[]).forEach(e=>{const t=c(d?.subsections,e),n=c(u?.subsections,e);f(e,t,n,p,v,!1,l||_)})};R.forEach(e=>{const{rootKey:t,parentNum:n}=d(e,"left");let i=null;if(u){const t=e.refIndexes?.[0];i=C.find(e=>e.selfIndex===t)}else i=C[R.indexOf(e)];f(e,e,i,t,n,!0,e)}),h||C.forEach(e=>{const{rootKey:t,parentNum:n}=d(e,"right");t.startsWith("right-orphan-root:")&&f(e,null,e,t,n,!0,e)});const p=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t.index])),v=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t.parentNum]));return{parentDeviationRecord:e,registry:p,deviationParentRegistry:v}},[R,C,u,l,h]);return{isGuidelineMode:h,activeProposed:g,activeVariants:m,comparisonRows:x,existingRule:y,proposedSections:R,existingSections:C,visibleFields:O,parentDeviationRecord:j,deviationNumberRegistry:N,deviationParentRegistry:S,parseError:b}};export{l as useCognitiveTreeData};
|
|
2
2
|
//# sourceMappingURL=useCompareData.js.map
|