@e-llm-studio/citation 0.0.252 → 0.0.253
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/PdfViewer/PdfContainer.js +1 -1
- package/dist/cjs/features/PdfViewer/PdfContainer.js.map +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/SegmentReviewComponents/ApprovalDescriptionBanner.js +2 -0
- package/dist/cjs/features/SegmentReviewComponents/ApprovalDescriptionBanner.js.map +1 -0
- package/dist/cjs/features/SegmentReviewComponents/RevertCard.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/RevertCard.js.map +1 -1
- package/dist/cjs/features/SegmentReviewComponents/SaveAsLearningCard.js +2 -0
- package/dist/cjs/features/SegmentReviewComponents/SaveAsLearningCard.js.map +1 -0
- package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
- package/dist/cjs/hooks/useOnDemandCitationFetch.js +1 -1
- package/dist/cjs/hooks/useOnDemandCitationFetch.js.map +1 -1
- package/dist/cjs/service/onDemandApi.js +1 -1
- package/dist/cjs/service/onDemandApi.js.map +1 -1
- package/dist/features/PdfViewer/PdfContainer.js +1 -1
- package/dist/features/PdfViewer/PdfContainer.js.map +1 -1
- package/dist/features/PdfViewer/PdfViewer.js +1 -1
- package/dist/features/PdfViewer/PdfViewer.js.map +1 -1
- package/dist/features/SegmentReviewComponents/ApprovalDescriptionBanner.js +2 -0
- package/dist/features/SegmentReviewComponents/ApprovalDescriptionBanner.js.map +1 -0
- package/dist/features/SegmentReviewComponents/RevertCard.js +1 -1
- package/dist/features/SegmentReviewComponents/RevertCard.js.map +1 -1
- package/dist/features/SegmentReviewComponents/SaveAsLearningCard.js +2 -0
- package/dist/features/SegmentReviewComponents/SaveAsLearningCard.js.map +1 -0
- package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
- package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
- package/dist/hooks/useOnDemandCitationFetch.js +1 -1
- package/dist/hooks/useOnDemandCitationFetch.js.map +1 -1
- package/dist/service/onDemandApi.js +1 -1
- package/dist/service/onDemandApi.js.map +1 -1
- package/dist/types/features/PdfViewer/PdfContainer.d.ts +3 -2
- package/dist/types/features/PdfViewer/PdfContainer.d.ts.map +1 -1
- package/dist/types/features/PdfViewer/PdfViewer.d.ts +3 -2
- package/dist/types/features/PdfViewer/PdfViewer.d.ts.map +1 -1
- package/dist/types/features/SegmentReviewComponents/ApprovalDescriptionBanner.d.ts +11 -0
- package/dist/types/features/SegmentReviewComponents/ApprovalDescriptionBanner.d.ts.map +1 -0
- package/dist/types/features/SegmentReviewComponents/RevertCard.d.ts +9 -1
- package/dist/types/features/SegmentReviewComponents/RevertCard.d.ts.map +1 -1
- package/dist/types/features/SegmentReviewComponents/SaveAsLearningCard.d.ts +15 -0
- package/dist/types/features/SegmentReviewComponents/SaveAsLearningCard.d.ts.map +1 -0
- package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts +12 -1
- package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts.map +1 -1
- package/dist/types/hooks/useOnDemandCitationFetch.d.ts.map +1 -1
- package/dist/types/service/onDemandApi.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RevertCard.js","sources":["../../../src/features/SegmentReviewComponents/RevertCard.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { ChevronLeft } from 'lucide-react';\n\nexport interface SegmentData {\n title: string;\n startPage: number;\n endPage: number;\n}\n\nexport interface RevertData {\n currentSegment: SegmentData;\n previousSegments: SegmentData[];\n}\n\n/** Value returned by the host after the revert request and refresh complete. */\nexport interface RevertActionResult {\n message?: string | null;\n}\n\nexport interface RevertCardProps {\n icon: ReactNode;\n title: string;\n pageRange: string;\n description: string | null;\n onRevert: () => void | RevertActionResult | Promise<void | RevertActionResult>;\n /** Called only after `onRevert` completes successfully. */\n onRevertComplete?: (result: void | RevertActionResult) => void;\n onRevertError?: (error: unknown) => void;\n revertData: RevertData;\n /** Prevent submission when the host cannot provide a valid revert request. */\n confirmDisabled?: boolean;\n /** Hide when the surrounding reviewed-card shell already renders it. */\n showDocumentHeader?: boolean;\n}\n\nconst formatPageRange = ({ startPage, endPage }: SegmentData) =>\n `Pages ${startPage}-${endPage}`;\n\nconst SegmentSummary = ({ segment }: { segment: SegmentData }) => (\n <Box sx={{ px: 0.75, py: 0.625, minWidth: 0 }}>\n <Typography\n sx={{\n color: 'text.secondary',\n fontSize: 11,\n lineHeight: 1.3,\n overflowWrap: 'anywhere',\n }}\n >\n {segment.title}\n </Typography>\n <Typography\n sx={{\n color: 'text.primary',\n fontSize: 12,\n fontWeight: 400,\n lineHeight: 1.3,\n }}\n >\n {formatPageRange(segment)}\n </Typography>\n </Box>\n);\n\n/**\n * Displays an approved action summary and reveals the appropriate revert\n * confirmation after the user selects Revert. An empty `previousSegments`\n * collection represents keep-as-is; structural changes provide the segments\n * that will be restored after reverting.\n */\nexport default function RevertCard({\n icon,\n title,\n pageRange,\n description,\n onRevert,\n onRevertComplete,\n onRevertError,\n revertData,\n confirmDisabled = false,\n showDocumentHeader = true,\n}: RevertCardProps) {\n const [isConfirming, setIsConfirming] = useState(false);\n const [isReverting, setIsReverting] = useState(false);\n const hasStructuralChanges = revertData.previousSegments.length > 0;\n const handleConfirm = async () => {\n if (isReverting || confirmDisabled) return;\n setIsReverting(true);\n\n try {\n const result = await onRevert();\n onRevertComplete?.(result);\n } catch (error) {\n onRevertError?.(error);\n } finally {\n setIsReverting(false);\n }\n };\n\n return (\n <Stack spacing={0.875} sx={{ minWidth: 0 }}>\n {showDocumentHeader && (\n <Box sx={{ minWidth: 0 }}>\n <Typography\n sx={{\n color: 'text.primary',\n fontSize: 14,\n fontWeight: 500,\n lineHeight: 1.4,\n overflowWrap: 'anywhere',\n }}\n >\n {title}\n </Typography>\n <Typography\n sx={{ color: 'text.secondary', fontSize: 12, lineHeight: 1.4 }}\n >\n {pageRange}\n </Typography>\n </Box>\n )}\n\n {description && <Stack\n direction=\"row\"\n alignItems=\"flex-start\"\n spacing={0.625}\n sx={{\n px: 0.75,\n py: 0.625,\n border: '1px solid #86EFAC',\n borderRadius: 2,\n bgcolor: '#FFFFFF',\n color: '#16A34A',\n }}\n >\n <Box\n aria-hidden=\"true\"\n sx={{ display: 'flex', flexShrink: 0, mt: '1px', fontSize: 14 }}\n >\n {icon}\n </Box>\n <Typography\n sx={{\n minWidth: 0,\n color: 'inherit',\n fontSize: 11,\n lineHeight: 1.5,\n overflowWrap: 'anywhere',\n }}\n >\n {description}\n </Typography>\n </Stack>}\n\n <Divider sx={{ borderStyle: 'dashed', borderColor: '#CBD5E1' }} />\n\n {!isConfirming ? (\n <Button\n variant=\"outlined\"\n fullWidth\n onClick={() => setIsConfirming(true)}\n sx={{\n minHeight: 36,\n borderColor: '#9B8AFB',\n color: '#5925DC',\n borderRadius: 2,\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'none',\n '&:hover': {\n borderColor: 'secondary.dark',\n bgcolor: 'rgba(79, 70, 229, 0.04)',\n },\n }}\n >\n Revert\n </Button>\n ) : (\n <Stack spacing={0.75}>\n <ButtonBase\n onClick={() => setIsConfirming(false)}\n aria-label=\"Back from revert confirmation\"\n sx={{\n width: 'fit-content',\n borderRadius: 0.5,\n color: 'text.primary',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 1.3,\n textAlign: 'left',\n }}\n >\n <Box component=\"span\" aria-hidden=\"true\" sx={{ mr: 0.625, alignItems :'center', display: \"flex\" }}>\n <ChevronLeft size={16} />\n </Box>\n Revert\n </ButtonBase>\n\n {hasStructuralChanges ? (\n <Box\n sx={{\n p: 0.75,\n borderRadius: 1,\n bgcolor: '#F8FAFC',\n }}\n >\n <Typography sx={{ mb: 0.375, color: 'text.secondary', fontSize: 12 }}>\n Current\n </Typography>\n <Box\n sx={{\n mb: 0.75,\n border: '1px solid #E2E8F0',\n borderRadius: 1,\n bgcolor: 'background.paper',\n }}\n >\n <SegmentSummary segment={revertData.currentSegment} />\n </Box>\n\n <Typography sx={{ mb: 0.375, color: 'text.secondary', fontSize: 12 }}>\n After Revert\n </Typography>\n <Box\n sx={{\n border: '1px solid #E2E8F0',\n borderRadius: 1,\n bgcolor: 'background.paper',\n overflow: 'hidden',\n }}\n >\n {revertData.previousSegments.map((segment, index) => (\n <Box key={`${segment.title}-${segment.startPage}-${segment.endPage}-${index}`}>\n {index > 0 && <Divider sx={{ borderColor: '#E2E8F0' }} />}\n <SegmentSummary segment={segment} />\n </Box>\n ))}\n </Box>\n\n <Stack direction=\"row\" spacing={1} sx={{ mt: 0.875 }}>\n <Button\n variant=\"outlined\"\n fullWidth\n disabled={isReverting}\n onClick={() => setIsConfirming(false)}\n sx={confirmationButtonSx}\n >\n Cancel\n </Button>\n <Tooltip\n title={confirmDisabled ? 'Revert data is not present, cannot revert this' : ''}\n disableHoverListener={!confirmDisabled}\n arrow\n >\n <span style={{ flex: 1 }}>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isReverting || confirmDisabled}\n onClick={() => { void handleConfirm(); }}\n sx={confirmButtonSx}\n >\n {isReverting ? 'Reverting…' : 'Confirm'}\n </Button>\n </span>\n </Tooltip>\n </Stack>\n </Box>\n ) : (\n <Box\n sx={{\n p: 0.875,\n borderRadius: 1,\n bgcolor: '#F8FAFC',\n }}\n >\n <Typography\n sx={{ color: 'text.secondary', fontSize: 12, fontWeight: 500 }}\n >\n Revert approval?\n </Typography>\n <Typography\n sx={{ mt: 0.75, color: 'text.secondary', fontSize: 13, lineHeight: 1.45 }}\n >\n This document will be moved back to pending review and will need\n to be confirmed again.\n </Typography>\n <Stack direction=\"row\" spacing={1} sx={{ mt: 1 }}>\n <Button\n variant=\"outlined\"\n fullWidth\n disabled={isReverting}\n onClick={() => setIsConfirming(false)}\n sx={confirmationButtonSx}\n >\n Cancel\n </Button>\n <Tooltip\n title={confirmDisabled ? 'Revert data is not present, cannot revert this' : ''}\n disableHoverListener={!confirmDisabled}\n arrow\n >\n <span style={{ flex: 1 }}>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isReverting || confirmDisabled}\n onClick={() => { void handleConfirm(); }}\n sx={confirmButtonSx}\n >\n {isReverting ? 'Reverting…' : 'Confirm'}\n </Button>\n </span>\n </Tooltip>\n </Stack>\n </Box>\n )}\n </Stack>\n )}\n </Stack>\n );\n}\n\nconst confirmationButtonSx = {\n minHeight: 34,\n borderColor: '#94A3B8',\n color: '#64748B',\n borderRadius: \"8px\",\n fontSize: 12,\n fontWeight: 500,\n textTransform: 'none',\n};\n\nconst confirmButtonSx = {\n minHeight: 34,\n borderRadius: \"8px\",\n bgcolor: '#4F46E5',\n fontSize: 12,\n fontWeight: 500,\n textTransform: 'none',\n boxShadow: 'none',\n '&:hover': { bgcolor: '#4338CA', boxShadow: 'none' },\n};\n"],"names":["formatPageRange","startPage","endPage","SegmentSummary","segment","jsxs","Box","sx","px","py","minWidth","children","jsx","Typography","color","fontSize","lineHeight","overflowWrap","title","fontWeight","RevertCard","icon","pageRange","description","onRevert","onRevertComplete","onRevertError","revertData","confirmDisabled","showDocumentHeader","isConfirming","setIsConfirming","useState","isReverting","setIsReverting","hasStructuralChanges","previousSegments","length","handleConfirm","async","result","error","Stack","spacing","direction","alignItems","border","borderRadius","bgcolor","display","flexShrink","mt","Divider","borderStyle","borderColor","ButtonBase","onClick","width","textAlign","component","mr","ChevronLeft","size","p","mb","currentSegment","overflow","map","index","Button","variant","fullWidth","disabled","confirmationButtonSx","Tooltip","disableHoverListener","arrow","style","flex","confirmButtonSx","minHeight","textTransform","boxShadow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RevertCard.js","sources":["../../../src/features/SegmentReviewComponents/RevertCard.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport { ChevronLeft } from 'lucide-react';\nimport ApprovalDescriptionBanner from './ApprovalDescriptionBanner';\nimport SaveAsLearningCard, { type SaveAsLearningResult } from './SaveAsLearningCard';\n\nexport interface SegmentData {\n title: string;\n startPage: number;\n endPage: number;\n}\n\nexport interface RevertData {\n currentSegment: SegmentData;\n previousSegments: SegmentData[];\n}\n\n/** Value returned by the host after the revert request and refresh complete. */\nexport interface RevertActionResult {\n message?: string | null;\n}\n\nexport interface RevertCardProps {\n icon: ReactNode;\n title: string;\n pageRange: string;\n description: string | null;\n onRevert: () => void | RevertActionResult | Promise<void | RevertActionResult>;\n /** Called only after `onRevert` completes successfully. */\n onRevertComplete?: (result: void | RevertActionResult) => void;\n onRevertError?: (error: unknown) => void;\n revertData: RevertData;\n /** Prevent submission when the host cannot provide a valid revert request. */\n confirmDisabled?: boolean;\n /** Hide when the surrounding reviewed-card shell already renders it. */\n showDocumentHeader?: boolean;\n /**\n * When provided, renders the \"save as learning example\" affordance\n * above the revert button, right below the description banner.\n */\n onSaveAsLearning?: () => void | SaveAsLearningResult | Promise<void | SaveAsLearningResult>;\n onSaveAsLearningError?: (error: unknown) => void;\n saveAsLearningDisabled?: boolean;\n}\n\nconst formatPageRange = ({ startPage, endPage }: SegmentData) =>\n `Pages ${startPage}-${endPage}`;\n\nconst SegmentSummary = ({ segment }: { segment: SegmentData }) => (\n <Box sx={{ px: 0.75, py: 0.625, minWidth: 0 }}>\n <Typography\n sx={{\n color: 'text.secondary',\n fontSize: 11,\n lineHeight: 1.3,\n overflowWrap: 'anywhere',\n }}\n >\n {segment.title}\n </Typography>\n <Typography\n sx={{\n color: 'text.primary',\n fontSize: 12,\n fontWeight: 400,\n lineHeight: 1.3,\n }}\n >\n {formatPageRange(segment)}\n </Typography>\n </Box>\n);\n\n/**\n * Displays an approved action summary and reveals the appropriate revert\n * confirmation after the user selects Revert. An empty `previousSegments`\n * collection represents keep-as-is; structural changes provide the segments\n * that will be restored after reverting.\n */\nexport default function RevertCard({\n icon,\n title,\n pageRange,\n description,\n onRevert,\n onRevertComplete,\n onRevertError,\n revertData,\n confirmDisabled = false,\n showDocumentHeader = true,\n onSaveAsLearning,\n onSaveAsLearningError,\n saveAsLearningDisabled = false,\n}: RevertCardProps) {\n const [isConfirming, setIsConfirming] = useState(false);\n const [isReverting, setIsReverting] = useState(false);\n const hasStructuralChanges = revertData.previousSegments.length > 0;\n const handleConfirm = async () => {\n if (isReverting || confirmDisabled) return;\n setIsReverting(true);\n\n try {\n const result = await onRevert();\n onRevertComplete?.(result);\n } catch (error) {\n onRevertError?.(error);\n } finally {\n setIsReverting(false);\n }\n };\n\n return (\n <Stack spacing={0.875} sx={{ minWidth: 0 }}>\n {showDocumentHeader && (\n <Box sx={{ minWidth: 0 }}>\n <Typography\n sx={{\n color: 'text.primary',\n fontSize: 14,\n fontWeight: 500,\n lineHeight: 1.4,\n overflowWrap: 'anywhere',\n }}\n >\n {title}\n </Typography>\n <Typography\n sx={{ color: 'text.secondary', fontSize: 12, lineHeight: 1.4 }}\n >\n {pageRange}\n </Typography>\n </Box>\n )}\n\n \n\n <Divider sx={{ borderStyle: 'dashed', borderColor: '#CBD5E1' }} />\n\n {!isConfirming ? (\n <Button\n variant=\"outlined\"\n fullWidth\n onClick={() => setIsConfirming(true)}\n sx={{\n minHeight: 36,\n borderColor: '#9B8AFB',\n color: '#5925DC',\n borderRadius: 2,\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'none',\n '&:hover': {\n borderColor: 'secondary.dark',\n bgcolor: 'rgba(79, 70, 229, 0.04)',\n },\n }}\n >\n Revert\n </Button>\n ) : (\n <Stack spacing={0.75}>\n <ButtonBase\n onClick={() => setIsConfirming(false)}\n aria-label=\"Back from revert confirmation\"\n sx={{\n width: 'fit-content',\n borderRadius: 0.5,\n color: 'text.primary',\n fontSize: 13,\n fontWeight: 500,\n lineHeight: 1.3,\n textAlign: 'left',\n }}\n >\n <Box component=\"span\" aria-hidden=\"true\" sx={{ mr: 0.625, alignItems: 'center', display: 'flex' }}>\n <ChevronLeft size={16} />\n </Box>\n Revert\n </ButtonBase>\n\n {hasStructuralChanges ? (\n <Box sx={{ p: 0.75, borderRadius: 1, bgcolor: '#F8FAFC' }}>\n <Typography sx={{ mb: 0.375, color: 'text.secondary', fontSize: 12 }}>\n Current\n </Typography>\n <Box\n sx={{\n mb: 0.75,\n border: '1px solid #E2E8F0',\n borderRadius: 1,\n bgcolor: 'background.paper',\n }}\n >\n <SegmentSummary segment={revertData.currentSegment} />\n </Box>\n\n <Typography sx={{ mb: 0.375, color: 'text.secondary', fontSize: 12 }}>\n After Revert\n </Typography>\n <Box\n sx={{\n border: '1px solid #E2E8F0',\n borderRadius: 1,\n bgcolor: 'background.paper',\n overflow: 'hidden',\n }}\n >\n {revertData.previousSegments.map((segment, index) => (\n <Box key={`${segment.title}-${segment.startPage}-${segment.endPage}-${index}`}>\n {index > 0 && <Divider sx={{ borderColor: '#E2E8F0' }} />}\n <SegmentSummary segment={segment} />\n </Box>\n ))}\n </Box>\n\n <Stack direction=\"row\" spacing={1} sx={{ mt: 0.875 }}>\n <Button\n variant=\"outlined\"\n fullWidth\n disabled={isReverting}\n onClick={() => setIsConfirming(false)}\n sx={confirmationButtonSx}\n >\n Cancel\n </Button>\n <Tooltip\n title={confirmDisabled ? 'Revert data is not present, cannot revert this' : ''}\n disableHoverListener={!confirmDisabled}\n arrow\n >\n <span style={{ flex: 1 }}>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isReverting || confirmDisabled}\n onClick={() => { void handleConfirm(); }}\n sx={confirmButtonSx}\n >\n {isReverting ? 'Reverting…' : 'Confirm'}\n </Button>\n </span>\n </Tooltip>\n </Stack>\n </Box>\n ) : (\n <Box sx={{ p: 0.875, borderRadius: 1, bgcolor: '#F8FAFC' }}>\n <Typography sx={{ color: 'text.secondary', fontSize: 12, fontWeight: 500 }}>\n Revert approval?\n </Typography>\n <Typography sx={{ mt: 0.75, color: 'text.secondary', fontSize: 13, lineHeight: 1.45 }}>\n This document will be moved back to pending review and will need\n to be confirmed again.\n </Typography>\n <Stack direction=\"row\" spacing={1} sx={{ mt: 1 }}>\n <Button\n variant=\"outlined\"\n fullWidth\n disabled={isReverting}\n onClick={() => setIsConfirming(false)}\n sx={confirmationButtonSx}\n >\n Cancel\n </Button>\n <Tooltip\n title={confirmDisabled ? 'Revert data is not present, cannot revert this' : ''}\n disableHoverListener={!confirmDisabled}\n arrow\n >\n <span style={{ flex: 1 }}>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isReverting || confirmDisabled}\n onClick={() => { void handleConfirm(); }}\n sx={confirmButtonSx}\n >\n {isReverting ? 'Reverting…' : 'Confirm'}\n </Button>\n </span>\n </Tooltip>\n </Stack>\n </Box>\n )}\n </Stack>\n )}\n </Stack>\n );\n}\n\nconst confirmationButtonSx = {\n minHeight: 34,\n borderColor: '#94A3B8',\n color: '#64748B',\n borderRadius: '8px',\n fontSize: 12,\n fontWeight: 500,\n textTransform: 'none',\n};\n\nconst confirmButtonSx = {\n minHeight: 34,\n borderRadius: '8px',\n bgcolor: '#4F46E5',\n fontSize: 12,\n fontWeight: 500,\n textTransform: 'none',\n boxShadow: 'none',\n '&:hover': { bgcolor: '#4338CA', boxShadow: 'none' },\n};"],"names":["formatPageRange","startPage","endPage","SegmentSummary","segment","jsxs","Box","sx","px","py","minWidth","children","jsx","Typography","color","fontSize","lineHeight","overflowWrap","title","fontWeight","RevertCard","icon","pageRange","description","onRevert","onRevertComplete","onRevertError","revertData","confirmDisabled","showDocumentHeader","onSaveAsLearning","onSaveAsLearningError","saveAsLearningDisabled","isConfirming","setIsConfirming","useState","isReverting","setIsReverting","hasStructuralChanges","previousSegments","length","handleConfirm","async","result","error","Stack","spacing","Divider","borderStyle","borderColor","ButtonBase","onClick","width","borderRadius","textAlign","component","mr","alignItems","display","ChevronLeft","size","p","bgcolor","mb","border","currentSegment","overflow","map","index","direction","mt","Button","variant","fullWidth","disabled","confirmationButtonSx","Tooltip","disableHoverListener","arrow","style","flex","confirmButtonSx","minHeight","textTransform","boxShadow"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e,jsxs as a}from"react/jsx-runtime";import{useState as r}from"react";import i from"@mui/material/Box";import o from"@mui/material/Button";import t from"@mui/material/CircularProgress";import n from"@mui/material/Tooltip";import{Sparkles as s,Info as l}from"lucide-react";function c({onSave:c,onSaveComplete:m,onSaveError:p,disabled:g=!1,label:u="Save as learning",savingLabel:f="Saving your feedback…",tooltip:F="Use this decision to improve future automatic reviews."}){const[x,b]=r(!1),[h,v]=r(!1);return h?null:e(i,{sx:{mt:2},children:a(o,{variant:"contained",fullWidth:!0,disabled:x||g,onClick:()=>{(async()=>{if(!x&&!g){b(!0);try{const e=await c();e&&!1===e.success||(v(!0),m?.(e))}catch(e){console.error("Failed to save as learning:",e),p?.(e)}finally{b(!1)}}})()},sx:d,children:[a(i,{component:"span",sx:{display:"flex",alignItems:"center",gap:1},children:[x?e(t,{size:15,thickness:5,sx:{color:"#FFFFFF"}}):e(s,{size:16,strokeWidth:2.25}),e(i,{component:"span",children:x?f:u})]}),e(n,{title:F,arrow:!0,children:e(i,{component:"span","aria-label":F,onClick:e=>e.stopPropagation(),sx:{display:"flex",alignItems:"center",flexShrink:0,opacity:.85},children:e(l,{size:16})})})]})})}const d={minHeight:40,display:"flex",alignItems:"center",justifyContent:"space-between",gap:1,px:2,borderRadius:2.5,background:"linear-gradient(135deg, #6366F1 0%, #4F46E5 100%)",color:"#FFFFFF",fontSize:13.5,fontWeight:600,letterSpacing:.1,textTransform:"none",boxShadow:"0 2px 8px rgba(79, 70, 229, 0.28)",transition:"box-shadow 0.2s ease, transform 0.15s ease, background 0.2s ease","&:hover":{background:"linear-gradient(135deg, #5457E8 0%, #4338CA 100%)",boxShadow:"0 4px 12px rgba(79, 70, 229, 0.36)"},"&:active":{transform:"scale(0.99)"},"&.Mui-disabled":{background:"linear-gradient(135deg, #A5A6F0 0%, #9092E8 100%)",color:"#FFFFFF",opacity:.75}};export{c as default};
|
|
2
|
+
//# sourceMappingURL=SaveAsLearningCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaveAsLearningCard.js","sources":["../../../src/features/SegmentReviewComponents/SaveAsLearningCard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Sparkles, Info } from 'lucide-react';\n\nexport interface SaveAsLearningResult {\n success?: boolean;\n message?: string | null;\n}\n\nexport interface SaveAsLearningCardProps {\n onSave: () => void | SaveAsLearningResult | Promise<void | SaveAsLearningResult>;\n onSaveComplete?: (result: void | SaveAsLearningResult) => void;\n onSaveError?: (error: unknown) => void;\n disabled?: boolean;\n label?: string;\n savingLabel?: string;\n tooltip?: string;\n}\n\nexport default function SaveAsLearningCard({\n onSave,\n onSaveComplete,\n onSaveError,\n disabled = false,\n label = 'Save as learning',\n savingLabel = 'Saving your feedback…',\n tooltip = 'Use this decision to improve future automatic reviews.',\n}: SaveAsLearningCardProps) {\n const [isSaving, setIsSaving] = useState(false);\n const [isSaved, setIsSaved] = useState(false);\n\n\n const handleClick = async () => {\n if (isSaving || disabled) return;\n setIsSaving(true);\n try {\n const result = await onSave();\n // Hosts may return an explicit failure result instead of throwing.\n // Keep the card available in that case so the reviewer can retry.\n if (!result || result.success !== false) {\n setIsSaved(true);\n onSaveComplete?.(result);\n }\n } catch (error) {\n console.error('Failed to save as learning:', error);\n onSaveError?.(error);\n } finally {\n setIsSaving(false);\n }\n };\n\n if (isSaved) return null;\n\n return (\n <Box sx={{ mt: 2 }}>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isSaving || disabled}\n onClick={() => { void handleClick(); }}\n sx={buttonSx}\n >\n <Box component=\"span\" sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {isSaving ? (\n <CircularProgress size={15} thickness={5} sx={{ color: '#FFFFFF' }} />\n ) : (\n <Sparkles size={16} strokeWidth={2.25} />\n )}\n <Box component=\"span\">{isSaving ? savingLabel : label}</Box>\n </Box>\n\n <Tooltip title={tooltip} arrow>\n <Box\n component=\"span\"\n aria-label={tooltip}\n onClick={(e) => e.stopPropagation()}\n sx={{ display: 'flex', alignItems: 'center', flexShrink: 0, opacity: 0.85 }}\n >\n <Info size={16} />\n </Box>\n </Tooltip>\n </Button>\n </Box>\n );\n}\n\nconst buttonSx = {\n minHeight: 40,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n px: 2,\n borderRadius: 2.5,\n background: 'linear-gradient(135deg, #6366F1 0%, #4F46E5 100%)',\n color: '#FFFFFF',\n fontSize: 13.5,\n fontWeight: 600,\n letterSpacing: 0.1,\n textTransform: 'none',\n boxShadow: '0 2px 8px rgba(79, 70, 229, 0.28)',\n transition: 'box-shadow 0.2s ease, transform 0.15s ease, background 0.2s ease',\n '&:hover': {\n background: 'linear-gradient(135deg, #5457E8 0%, #4338CA 100%)',\n boxShadow: '0 4px 12px rgba(79, 70, 229, 0.36)',\n },\n '&:active': { transform: 'scale(0.99)' },\n '&.Mui-disabled': {\n background: 'linear-gradient(135deg, #A5A6F0 0%, #9092E8 100%)',\n color: '#FFFFFF',\n opacity: 0.75,\n },\n};"],"names":["SaveAsLearningCard","onSave","onSaveComplete","onSaveError","disabled","label","savingLabel","tooltip","isSaving","setIsSaving","useState","isSaved","setIsSaved","Box","sx","mt","children","jsxs","Button","variant","fullWidth","onClick","async","result","success","error","console","handleClick","buttonSx","component","display","alignItems","gap","CircularProgress","size","thickness","color","jsx","Sparkles","strokeWidth","Tooltip","title","arrow","e","stopPropagation","flexShrink","opacity","Info","minHeight","justifyContent","px","borderRadius","background","fontSize","fontWeight","letterSpacing","textTransform","boxShadow","transition","transform"],"mappings":"6RAsBA,SAAwBA,GAAmBC,OACzCA,EAAAC,eACAA,EAAAC,YACAA,EAAAC,SACAA,GAAW,EAAAC,MACXA,EAAQ,mBAAAC,YACRA,EAAc,wBAAAC,QACdA,EAAU,2DAEV,MAAOC,EAAUC,GAAeC,GAAS,IAClCC,EAASC,GAAcF,GAAS,GAsBvC,OAAIC,EAAgB,OAGjBE,EAAI,CAAAC,GAAI,CAAEC,GAAI,GACbC,SAAAC,EAACC,EAAA,CACCC,QAAQ,YACRC,WAAS,EACThB,SAAUI,GAAYJ,EACtBiB,QAAS,KA3BKC,WAClB,IAAId,IAAYJ,EAAhB,CACAK,GAAY,GACR,IACI,MAAAc,QAAetB,IAGhBsB,IAA6B,IAAnBA,EAAOC,UACpBZ,GAAW,GACXV,IAAiBqB,UAEZE,GACCC,QAAAD,MAAM,8BAA+BA,GAC7CtB,IAAcsB,EAAK,CACnB,QACAhB,GAAY,EACd,CAf0B,GA0BAkB,IACtBb,GAAIc,EAEJZ,SAAA,CAACC,EAAAJ,EAAA,CAAIgB,UAAU,OAAOf,GAAI,CAAEgB,QAAS,OAAQC,WAAY,SAAUC,IAAK,GACrEhB,SAAA,CAAAR,IACEyB,EAAiB,CAAAC,KAAM,GAAIC,UAAW,EAAGrB,GAAI,CAAEsB,MAAO,aAEvDC,EAACC,GAASJ,KAAM,GAAIK,YAAa,SAElC1B,EAAI,CAAAgB,UAAU,OAAQb,SAAAR,EAAWF,EAAcD,OAGjDgC,EAAAG,EAAA,CAAQC,MAAOlC,EAASmC,OAAK,EAC5B1B,SAAAqB,EAACxB,EAAA,CACCgB,UAAU,OACV,aAAYtB,EACZc,QAAUsB,GAAMA,EAAEC,kBAClB9B,GAAI,CAAEgB,QAAS,OAAQC,WAAY,SAAUc,WAAY,EAAGC,QAAS,KAErE9B,SAAAqB,EAACU,EAAK,CAAAb,KAAM,aAMxB,CAEA,MAAMN,EAAW,CACfoB,UAAW,GACXlB,QAAS,OACTC,WAAY,SACZkB,eAAgB,gBAChBjB,IAAK,EACLkB,GAAI,EACJC,aAAc,IACdC,WAAY,oDACZhB,MAAO,UACPiB,SAAU,KACVC,WAAY,IACZC,cAAe,GACfC,cAAe,OACfC,UAAW,oCACXC,WAAY,mEACZ,UAAW,CACTN,WAAY,oDACZK,UAAW,sCAEb,WAAY,CAAEE,UAAW,eACzB,iBAAkB,CAChBP,WAAY,oDACZhB,MAAO,UACPU,QAAS"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useMemo as n,useState as i,useEffect as r,useRef as a,useCallback as o}from"react";import{SpecialZoomLevel as s}from"@react-pdf-viewer/core";import l from"../PdfViewer/PdfViewer.js";import d,{BoundaryReviewActionEnum as g,isBoundaryReviewAction as u}from"./BoundaryCard.js";import c from"./CardWrapper.js";import p from"./CognitiveIntegrity.js";import m from"./LabelCheck.js";import h,{PageCheckActionEnum as f}from"./PageCheck.js";import v from"./PageTypeChoiceCheck.js";import{extractSegmentReviewData as w,getSegmentReviewKey as b}from"./reviewStepAdapters.js";import{CircleCheck as y,Check as _,GitMerge as x}from"lucide-react";import{Typography as S,Tooltip as C,Portal as E,Box as k}from"@mui/material";import P from"./ReviewedCard.js";import I from"./ReviewedBoundaryActions.js";import R from"./RevertCard.js";import N from"./RevertSuccessCard.js";import{getPendingMergeImpactedSegmentKeys as M,hasPolledStructuralAction as A,getOptimisticMergeImpactedSegmentKeys as F,shouldHideStructuralBoundaryReview as T,getResolvedScore as B,getConfidenceColors as W,getBoundaryReviewActionBadgeLabel as L,getTitleReviewActionBadgeLabel as z,isReviewStepResolutionCurrent as $,isReviewStepResolved as j,formatScore as q}from"./helper.js";import G from"./ChartBreakoutCircle.js";import{getReviewScoreBand as O}from"./reviewScore.js";const D=260;var V=(e=>(e.ActualSize="ActualSize",e.PageFit="PageFit",e.PageWidth="PageWidth",e))(V||{});const H={ActualSize:s.ActualSize,PageFit:s.PageFit,PageWidth:s.PageWidth},U=e=>({reviewId:e.id,segment:e.segment,pageNumber:e.pageNumber});function X({pdfUrl:V,pdfName:X,segments:Y,totalPages:J,styles:Z,pdfViewerProps:K,specialZoomLevel:Q,showBadges:ee=!0,sortByConfidence:te="low",filterByConfidence:ne="all",showBadgeNavigation:ie=!0,autoSelectReviewOnPageChange:re=!1,autoAdvanceAfterConfirm:ae=!0,autoAdvanceScoreBand:oe,badgePreloadPages:se=8,badgeOffsetTop:le=20,badgeOffsetRight:de=68,badgeOffsetLeft:ge=0,initialReviewId:ue,manualPrompt:ce,heightBuffer:pe,onBoundaryAction:me,onLabelAction:he,onPageAction:fe,onPageTypeRevert:ve,onRevert:we,onActiveReviewChange:be,onCurrentPageChange:ye,onActionError:_e,disableAllActions:xe=!1,disablePdfAnnotations:Se=!1,disablePdfTextLayer:Ce=!0,disableTitleCheckUntilBoundaryCheckCompleted:Ee=!1,onAdjustManually:ke,onCognitiveClick:Pe,className:Ie,style:Re,viewerStyle:Ne,railStyle:Me,redirectionData:Ae,onBadgeSelected:Fe,closePopups:Te=!1}){console.log("LOG: TOTAL PAGE IN PARENT",J);const{boundaryReviews:Be,labelReviews:We,pageReviews:Le}=n(()=>w(Y),[Y]),[ze,$e]=i(()=>new Map),[je,qe]=i(()=>new Set),Ge=n(()=>{const e=new Map;let t=1;return Y.forEach((n,i)=>{const r=b(n,i);e.has(r)||(e.set(r,t),t+=1)}),e},[Y]),Oe=n(()=>new Set(We.map(e=>b(e.segment))),[We]),De=n(()=>M(Y),[Y]);r(()=>{$e(e=>{let t=!1;const n=new Map(e);return e.forEach((e,i)=>{const r=Y.find(e=>b(e)===i);r&&!A(r,e)||(n.delete(i),t=!0)}),t?n:e})},[Y]),r(()=>{qe(e=>{let t=!1;const n=new Set(e);return e.forEach(e=>{ze.has(e)||(n.delete(e),t=!0)}),t?n:e})},[ze]);const Ve=n(()=>F(Y,ze,je),[je,ze,Y]),He=a(null),Ue=n(()=>[...Be.filter(e=>!De.has(b(e.segment))&&!Ve.has(b(e.segment))&&!T(e.review_step,e.segment,Oe.has(b(e.segment)),ze.get(b(e.segment)))).map(e=>({...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page})),...We.filter(e=>!De.has(b(e.segment))&&!Ve.has(b(e.segment))).map(e=>({...e,kind:"label",pageNumber:e.segment.start_page})),...Le.filter(e=>!De.has(b(e.segment))&&!Ve.has(b(e.segment))).map(e=>({...e,kind:"page",pageNumber:e.metadata.page_num??e.segment.start_page}))].sort((e,t)=>{const n=Ge.get(b(e.segment))??Number.MAX_SAFE_INTEGER,i=Ge.get(b(t.segment))??Number.MAX_SAFE_INTEGER;return e.pageNumber-t.pageNumber||n-i||e.reviewStepIndex-t.reviewStepIndex||e.id.localeCompare(t.id)}),[Be,We,Le,Ve,ze,De,Ge,Oe]),Xe=n(()=>Y.map(e=>({...e,title:e.label?.trim()||e.title,page_count:e.page_count??e.end_page-e.start_page+1})),[Y]),[Ye,Je]=i(1),[Ze,Ke]=i(ue??null),[Qe,et]=i(ue??null),[tt,nt]=i(!1),[it,rt]=i(null),[at,ot]=i(null),[st,lt]=i(()=>new Set),[dt,gt]=i(null),[ut,ct]=i(null),[pt,mt]=i(null),[ht,ft]=i(!1),vt=a(0),wt=a(null),bt=a(null),yt=a(new Map),_t=a(null),xt=a(null),St=a(null),[Ct,Et]=i(D),kt=Z?.aside?.width??"40%",Pt=`min(${"number"==typeof kt?`${kt}px`:kt}, 260px, 100%)`,It=o(()=>{wt.current=null,nt(!1),Ke(null),rt(null),ct(null),mt(null),ft(!1),be?.(null,null)},[be]);r(()=>{Te&&It()},[It,Te]),r(()=>{lt(e=>{if(0===e.size)return e;const t=new Set(e);let n=!1;return Ue.forEach(e=>{null!=e.review_step.review?.action&&t.has(e.id)&&(t.delete(e.id),n=!0)}),n?t:e})},[Ue]),r(()=>{const e=He.current;if(!e||!ee)return;const t=()=>{const t=e.getBoundingClientRect().width;t>0&&Et(t)};t();const n="undefined"==typeof ResizeObserver?null:new ResizeObserver(t);return n?.observe(e),()=>n?.disconnect()},[ee]);const Rt=n(()=>{const e=new Set;return Ue.forEach(t=>{null!=t.review_step.review?.action&&e.add(t.id)}),e},[Ue]),Nt=n(()=>Ue.find(e=>e.id===Ze)??null,[Ze,Ue]),Mt=n(()=>!(!Ee||"label"!==Nt?.kind)&&Be.some(e=>{if(b(e.segment)!==b(Nt.segment)||Rt.has(e.id))return!1;const t=B(e.review_step.score,e.review_step.confidence);return null==t||t<85}),[Nt,Be,Ee,Rt]),At=null==Nt?-1:Y.findIndex(e=>b(e)===b(Nt.segment)),Ft=At>0?Y[At-1]:void 0,Tt=At>=0?Y[At+1]:void 0,Bt=Ft?.label?.trim()||Ft?.title,Wt=Tt?.label?.trim()||Tt?.title,Lt=W(Nt?.review_step.score,Nt?.review_step.confidence,Nt?.segment.confidence?.awaiting_llm),zt=Nt?.review_step.reasons?.length?Nt.review_step.reasons:Nt?.segment.confidence?.reasons??[],$t=Boolean(zt.some(e=>e.text.trim()&&["evidence","gap"].includes(e.type.trim().toLowerCase()))||Nt?.review_step.reason?.trim()||Nt?.review_step.gap?.trim()),jt=null==Nt?null:"boundary"===Nt.kind?L(Nt.review_step,Nt.segment,ze.get(Nt.segment.stable_key??"")):z(Nt.review_step,Nt.segment,ze.get(Nt.segment.stable_key??"")),qt="label"===Nt?.kind?[jt,Nt.review_step.human_action_enum,Nt.review_step.review?.action,Nt.review_step.human_resolution?.action]:[],Gt="label"===Nt?.kind&&qt.some(e=>{const t=e?.trim().toUpperCase()??"";return t.includes("MERGE")||t.includes("SPLIT")}),Ot=null!=Nt&&Ue.some(e=>"boundary"===e.kind&&b(e.segment)===b(Nt.segment)),Dt=Gt&&!Ot,Vt=("boundary"===Nt?.kind||Dt)&&null!=Nt?(()=>{if("boundary"===Nt.kind)return Nt;const e=Be.find(e=>b(e.segment)===b(Nt.segment));return e?{...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page}:{...Nt,kind:"boundary",pageNumber:Nt.segment.review_action?.focus_page??Nt.segment.start_page,metadata:{focus_page:Nt.segment.review_action?.focus_page??null,boundary_margin:Nt.segment.boundary_margin??null,user_actions:[]}}})():void 0,Ht=null==Nt?"":Nt.segment.label?.trim()||Nt.segment.title,Ut=Nt?.review_step.revert,Xt=Nt?.segment.revert,Yt=e=>e?.trim().toLowerCase(),Jt=null==Nt?void 0:[...Nt.segment.review_steps??[]].reverse().find(e=>{const t=e.type?.trim().toLowerCase();return("page_boundary"===t||"page boundary review"===t)&&"boundary"===Yt(e.revert?.type)})?.revert,Zt=Ut??Nt?.segment.revert??Jt,Kt=Zt?.decision.trim().toUpperCase();jt??(Kt?.includes("SPLIT")||Kt?.includes("MERGE"));const Qt="label"===Nt?.kind&&"SET_RANGE"===Jt?.decision?.trim().toUpperCase()&&Jt.current_segment_ids.length!==Jt.previous_state.length,en="Merged"===jt||"Split"===jt||Qt,tn=null==Nt?void 0:en?"boundary"===Yt(Jt?.type)?Jt:"boundary"===Yt(Xt?.type)?Xt:"boundary"===Yt(Ut?.type)?Ut:void 0:"label"===Nt.kind?"label"===Yt(Ut?.type)?Ut:void 0:"boundary"===Nt.kind?"boundary"===Yt(Ut?.type)?Ut:"boundary"===Yt(Jt?.type)?Jt:"boundary"===Yt(Xt?.type)?Xt:void 0:void 0,nn=en&&tn?.operation_id?Y.flatMap(e=>e.review_steps??[]).find(e=>{const t=e.type?.trim().toLowerCase();if(!("page_boundary"===t||"page boundary review"===t))return!1;return(e.human_resolution?.operation_id??e.revert?.operation_id??e.operation_id)===tn.operation_id&&Boolean(e.human_resolution?.change_summary?.trim())}):void 0,rn=tn?.summary?.trim()||null,an=en?nn?.human_resolution?.change_summary?.trim()||tn?.summary?.trim()||"":Nt?.review_step?.human_resolution?.change_summary?.trim()||Nt?.review_step?.summary?.trim()||"",on="page"===Nt?.kind?{currentSegment:{title:Ht,startPage:Nt.segment.start_page,endPage:Nt.segment.end_page},previousSegments:[]}:Nt&&tn?{currentSegment:{title:Ht,startPage:Nt.segment.start_page,endPage:Nt.segment.end_page},previousSegments:(tn.previous_state??[]).flatMap(e=>{const t=null===e.label?"Untitled document":e.label?.trim();return t?[{title:t,startPage:e.start_page,endPage:e.end_page}]:[]})}:null,sn="page"===Nt?.kind?Nt.metadata.type_choices?.map(e=>e.classification_id)??(Nt.metadata.classification_id?[Nt.metadata.classification_id]:[]):[],ln="page"===Nt?.kind?Boolean(ve&&sn.length>0):Boolean(tn?.operation_id&&tn?.type&&!1!==tn?.revertable),dn=Boolean(on&&ln),gn=o((e,t)=>{vt.current+=1,wt.current={requestId:vt.current,pageNumber:e,reviewId:t},ot({pageNumber:e,requestId:vt.current})},[]),un=o(e=>{!0!==e.segment.confidence?.awaiting_llm&&(Fe?.({reviewId:e.id,segment_id:e.segment.segment_id??null,reviewStepIndex:e.reviewStepIndex,kind:e.kind,pageNumber:e.pageNumber,metadata:e.metadata}),ct(null),mt(null),Ke(e.id),et(e.id),nt(!1),rt(null),gn(e.pageNumber,e.id),be?.(e.id,e.segment))},[be,Fe,gn]);r(()=>{if(!pt)return;const e=requestAnimationFrame(()=>ft(!0)),t=window.setTimeout(()=>{ft(!1)},3500),n=window.setTimeout(()=>{mt(null)},4e3);return()=>{cancelAnimationFrame(e),window.clearTimeout(t),window.clearTimeout(n)}},[pt]),r(()=>{if(!Ae)return;if("pageGroup"===Ae.type){const e=Ae.pages??[],t=Ae.pageIndex??0,n=e[t];if(null==n)return;return cn(),ct({pages:e,index:t,label:Ae.groupLabel??""}),vt.current+=1,void ot({pageNumber:n,requestId:vt.current})}if(ct(null),Ae.reviewId){const e=Ue.find(e=>e.id===Ae.reviewId&&(!Ae.type||e.kind===Ae.type));if(e)return void un(e)}if(Ae.classificationId){const e=Ue.find(e=>"page"===e.kind&&(e.metadata.classification_id===Ae.classificationId||e.metadata.type_choices?.some(e=>e.classification_id===Ae.classificationId))&&(!Ae.segmentId||e.segment.segment_id===Ae.segmentId)&&(!Ae.type||e.kind===Ae.type));if(e)return void un(e)}if(!Ae.pageNumber||!Ae.type)return;const e=Number(Ae.pageNumber);if(!Number.isInteger(e)||e<1)return;const t=Ae.pageType?.trim().toLowerCase(),n=Ue.find(n=>{const i="page"===n.kind?n.pageNumber:n.segment.start_page,r="page"!==n.kind||!t||n.metadata.page_type===t||n.metadata.type_choices?.some(e=>e.page_type===t);return(!Ae.segmentId||n.segment.segment_id===Ae.segmentId)&&i===e&&n.kind===Ae.type&&r});n?un(n):"page"===Ae.type&&(cn(),vt.current+=1,ot({pageNumber:e,requestId:vt.current}))},[Ae,un,Ue]);const cn=o(()=>{wt.current=null,nt(!1),Ke(null),rt(null),be?.(null,null)},[be]),pn=o(e=>{ft(!1),mt(null);const t=Ue.find(t=>!Rt.has(t.id)&&"boundary"===t.kind&&t.segment.start_page===e.startPage&&t.segment.end_page===e.endPage)??Ue.find(t=>!Rt.has(t.id)&&t.segment.start_page<=e.startPage&&t.segment.end_page>=e.startPage);t?un(t):(cn(),vt.current+=1,ot({pageNumber:e.startPage,requestId:vt.current}))},[cn,Rt,Ue,un]),mn=o((e,t)=>{const n=O(e.review_step.score),i=null==oe||n===oe,r=st.has(e.id)&&$(e.review_step,e.segment);return e.id!==t&&i&&!0!==e.segment.confidence?.awaiting_llm&&!j(e.review_step,e.segment)&&!r},[oe,st]),hn=o(e=>{if(!ae)return void cn();const t=Ue.findIndex(t=>t.id===e),n=Ue.find((n,i)=>i>t&&mn(n,e))??Ue.find(t=>mn(t,e));n?requestAnimationFrame(()=>un(n)):cn()},[ae,cn,mn,Ue,un]),fn=o(async(e,t)=>{if(xe||!fe||0===t.length)return;const n=e.metadata.type_choices??[];if(2!==n.length)return;const i=new Set(t),r=U(e),a=[...n].sort((e,t)=>{const n=i.has(e.page_type);return n===i.has(t.page_type)?0:n?-1:1});gt(e.id);try{for(const t of a){const n=i.has(t.page_type)?f.YES:f.NO;await fe(n,{action:n,pageType:t.page_type,metadata:{user_actions:[f.YES,f.NO],page_num:e.metadata.page_num,page_type:t.page_type,classification_id:t.classification_id}},r)}lt(t=>{const n=new Set(t);return n.add(e.id),n}),hn(e.id)}catch(e){_e?.(e,r)}finally{gt(null)}},[xe,_e,fe,hn]),vn=o(async(e,t,n)=>{if(xe)return;if("boundary"===e.kind&&!me)return;if("label"===e.kind&&!he)return;if("page"===e.kind&&!fe)return;const i=U(e),r=t,a=n,o=r===g.SET_RANGE?(()=>{const t=a.startPage,n=a.endPage;if(null==t||null==n)return null;const i=t<e.segment.start_page||n>e.segment.end_page,r=t>e.segment.start_page||n<e.segment.end_page;return i&&!r?t<e.segment.start_page?g.MERGE_PREV:g.MERGE_NEXT:r?g.SPLIT_HERE:null})():r,s="boundary"===e.kind&&null!=me&&ae&&(o===g.SPLIT_HERE||o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS),l=s?Y.findIndex(t=>b(t)===b(e.segment)):-1;s&&l>=0&&o&&(bt.current={action:o,originalSegmentIndex:l,segmentSignature:JSON.stringify(Y.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null}))),ready:!1}),gt(e.id);try{"boundary"===e.kind?await(me?.(t,n,i)):"label"===e.kind?await(he?.(t,n,i)):"page"===e.kind&&await(fe?.(t,n,i)),lt(t=>{const n=new Set(t);return n.add(e.id),n});const a="boundary"===e.kind&&(o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS);if(("boundary"===e.kind&&o===g.SPLIT_HERE||a)&&o){const t=b(e.segment);qe(e=>{const n=new Set(e);return r===g.SET_RANGE?n.add(t):n.delete(t),n}),$e(e=>{const n=new Map(e);return n.set(t,o),n})}if(bt.current){if(bt.current.ready=!0,a){const t=Ue.find(t=>"label"===t.kind&&b(t.segment)===b(e.segment));t&&requestAnimationFrame(()=>un(t))}}else hn(e.id)}catch(e){s&&(bt.current=null),_e?.(e,i)}finally{gt(null)}},[ae,xe,_e,me,he,fe,ve,Ue,Y,un,hn]);r(()=>{const e=bt.current;if(!e?.ready)return;if(JSON.stringify(Y.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null})))===e.segmentSignature)return;const t=e.action===g.SPLIT_HERE?e.originalSegmentIndex+1:e.action===g.MERGE_PREV||e.action===g.MERGE_PREVIOUS?Math.max(0,e.originalSegmentIndex-1):e.originalSegmentIndex,n=new Map(Y.map((e,t)=>[b(e,t),t])),i=Ue.find(e=>{const i=n.get(b(e.segment));return null!=i&&i>=t&&mn(e)});if(!i)return bt.current=null,void cn();requestAnimationFrame(()=>{bt.current=null,un(i)})},[cn,mn,Ue,Y,un]),r(()=>{bt.current||Ze&&!Ue.some(e=>e.id===Ze)&&cn()},[Ze,cn,Ue]),r(()=>{if(!re)return;if(bt.current)return;const e=Ue.find(e=>e.pageNumber===Ye);e&&e.id!==Ze&&un(e)},[Ze,re,Ye,un,Ue]),r(()=>{bt.current||Ze&&!Ue.some(e=>e.id===Ze&&!0!==e.segment.confidence?.awaiting_llm)&&cn()},[Ze,cn,Ue]);const wn=n(()=>{const e=Ue.filter(e=>!0!==e.segment.confidence?.awaiting_llm);if("all"===ne)return e;const t=["low","medium","high"].filter(e=>e!==te),n=[te,...t],i=new Map(n.map((e,t)=>[e,t]));return e.map((e,t)=>({item:e,index:t})).sort((e,t)=>{const r=e.item.review_step.confidence?.trim().toLowerCase(),a=t.item.review_step.confidence?.trim().toLowerCase();return(null==r?n.length:i.get(r)??n.length)-(null==a?n.length:i.get(a)??n.length)||e.index-t.index}).map(({item:e})=>e)},[ne,te,Ue]),bn=wn.findIndex(e=>e.id===Qe),[yn,_n]=i(null),[xn,Sn]=i(null),Cn=a(!1),En=o(e=>{const t=wn[e];t&&un(t)},[wn,un]);o(e=>{if(!ut||e<0||e>=ut.pages.length)return;const t=ut.pages[e];null!=t&&(cn(),ct(t=>null==t?t:{...t,index:e}),vt.current+=1,ot({pageNumber:t,requestId:vt.current}))},[ut,cn]),r(()=>{Qe&&!wn.some(e=>e.id===Qe)&&et(null)},[wn,Qe]),r(()=>{Cn.current=!1,Sn(null),_n(bn>=0?String(bn+1):null)},[bn,wn.length]),r(()=>{if(!Cn.current||null==yn)return;const e=window.setTimeout(()=>{const e=Number(yn.trim()),t=e-1;Number.isInteger(e)&&t>=0&&t<wn.length&&(Cn.current=!1,En(t))},300);return()=>window.clearTimeout(e)},[En,yn,wn.length]);const kn=n(()=>{const e=new Map;Ue.forEach(t=>{const n=e.get(b(t.segment))??[];n.push(t),e.set(b(t.segment),n)});const t=new Map;return e.forEach((e,n)=>{const i=Ge.get(n)??1;e.sort((e,t)=>e.reviewStepIndex-t.reviewStepIndex).forEach((e,n)=>{t.set(e.id,`${i}${(e=>{let t=e+1,n="";for(;t>0;)t-=1,n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26);return n})(n)}`)})}),t},[Ue,Ge]),Pn=n(()=>{const e=new Map;Ue.forEach(t=>{const n=e.get(t.pageNumber)??[];n.push(t),e.set(t.pageNumber,n)});const t=new Map;return e.forEach(e=>{e.forEach((e,n)=>t.set(e.id,n))}),t},[Ue]),In=o(e=>({startPage:Math.max(0,e.startPage-se),endPage:Math.min(e.numPages-1,e.endPage+se)}),[se]),Rn=o(()=>{const e=xt.current,t=St.current;if(!e||!t)return;const n=e.getBoundingClientRect(),i=t.querySelector(".rpv-core__inner-pages"),r=i?.getBoundingClientRect()??t.getBoundingClientRect();Ue.forEach(e=>{const i=yt.current.get(e.id);if(!i)return;const a=t.querySelector(`[data-testid="core__page-layer-${e.pageNumber-1}"]`);if(!a)return void(i.style.visibility="hidden");const o=a.getBoundingClientRect(),s=Pn.get(e.id)??0,l=o.top+le+40*s,d=l+(i.offsetHeight||32),g=l>=r.top&&d<=r.bottom;i.style.top=l-n.top+"px",i.style.visibility=g?"visible":"hidden"});const a=_t.current;if(a){const e=ut?.pages[ut.index],i=null==e?null:t.querySelector(`[data-testid="core__page-layer-${e-1}"]`);if(ut&&i){const e=i.getBoundingClientRect().top+le,t=e+(a.offsetHeight||25),o=e>=r.top&&t<=r.bottom;a.style.top=e-n.top+"px",a.style.visibility=o?"visible":"hidden"}else a.style.visibility="hidden"}if(Ze&&null==wt.current){const e=yt.current.get(Ze);e&&"hidden"!==e.style.visibility&&rt(t=>t===e?t:e)}},[ut,Ze,le,Pn,Ue]),Nn=o(e=>{const t=wt.current;t&&t.requestId===e.requestId&&t.pageNumber===e.pageNumber&&(wt.current=null,Rn(),requestAnimationFrame(()=>{if(null!=wt.current)return;const e=yt.current.get(t.reviewId);e&&"hidden"!==e.style.visibility&&rt(e)}))},[Rn]);return r(()=>{const e=St.current;if(!e||!ee)return;let t=null;const n=()=>{null==t&&(t=requestAnimationFrame(()=>{t=null,Rn()}))};e.addEventListener("scroll",n,!0),window.addEventListener("resize",n);const i=new MutationObserver(n);i.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style"]});const r="undefined"==typeof ResizeObserver?null:new ResizeObserver(n);return r?.observe(e),n(),()=>{null!=t&&cancelAnimationFrame(t),e.removeEventListener("scroll",n,!0),window.removeEventListener("resize",n),i.disconnect(),r?.disconnect()}},[ee,Rn]),e("div",{ref:xt,className:Ie,style:{...Re,display:"block",position:"relative",width:"100%",height:"100%",minWidth:0,overflowX:"auto",overflowY:"hidden"},children:[e("div",{className:"segment-review-wrapper__container",style:{display:"flex",alignItems:"stretch",gap:0,width:"100%",minWidth:700,height:"100%"},children:[t("div",{ref:St,style:{...Ne,flex:"1 1 auto",width:ee?"auto":"100%",minWidth:0,height:"100%",boxSizing:"border-box"},children:t(l,{highlightText:[],highlightPages:{},highlightCordinatePages:[],useCoordinates:!1,showRotateButton:!0,...K,defaultScale:void 0===Q?K?.defaultScale??s.PageFit:H[Q],disablePdfAnnotations:Se,disablePdfTextLayer:Ce,pdfUrl:V,pdfName:X,segments:Xe,navigationRequest:at,onNavigationSettled:Nn,setRenderRange:In,onCurrentPageChange:e=>{Je(e),null==wt.current&&Nt&&Nt.pageNumber!==e&&cn(),ye?.(e)}})}),ee&&e("aside",{"aria-label":"Page review badges",ref:He,style:{...Me,position:"relative",width:Pt,maxWidth:D,flex:`0 1 ${Pt}`,minHeight:0,overflow:"hidden",boxSizing:"border-box"},children:[ut&&t("span",{ref:_t,style:{position:"absolute",top:0,left:10,visibility:"hidden",zIndex:2,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,minHeight:25,padding:"2px 8px",border:"1px solid #E2E8F0",borderRadius:16,backgroundColor:"#F8FAFC",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)",font:"inherit"},children:e(S,{fontFamily:"Inter",sx:{fontSize:11,fontWeight:500,color:"#475569",whiteSpace:"nowrap"},children:[ut.label||"Pages"," Pg: ",ut.index+1]})}),ie&&wn.length>0&&!ut&&e("nav",{"aria-label":"Review badge navigation",style:{position:"absolute",top:8,right:de||"auto",left:ge||"auto",zIndex:2,display:"flex",alignItems:"center",gap:7,width:128,minHeight:40,padding:"4px 6px",border:"1px solid #CBD5E1",borderRadius:6,backgroundColor:"#FFFFFF",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.06)",font:"inherit"},children:[t(C,{title:"out-of-range"===xn?"Please enter valid number present in the range":"Please enter valid numbers",open:null!=xn,placement:"top",arrow:!0,children:t("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:yn??"-",min:0,max:wn.length,"aria-label":"Review badge number","aria-invalid":null!=xn,onFocus:()=>{null==yn&&_n("")},onBlur:()=>{Sn(null);const e=Number(yn);(null==yn||""===yn||!Number.isInteger(e)||e<1||e>wn.length)&&(Cn.current=!1,_n(bn>=0?String(bn+1):null))},onChange:e=>{const t=e.target.value;if(!/^\d*$/.test(t))return void Sn("invalid-number");const n=Number(t),i=""!==t&&(n<1||n>wn.length);Sn(i?"out-of-range":null),Cn.current=!0,_n(t)},style:{width:30,height:28,padding:0,border:"1px solid "+(xn?"#DC2626":"#A5B4FC"),borderRadius:3,color:"#4F46E5",backgroundColor:"#FFFFFF",textAlign:"center",font:"inherit",fontSize:15,outline:"none"}})}),e("span",{"aria-label":`${wn.length} reviews`,style:{flex:1,color:"#4F46E5",fontSize:14,whiteSpace:"nowrap",textAlign:"center"},children:["of ",wn.length]}),["previous","next"].map(e=>{const n="previous"===e,i=bn+(n?-1:1),r=i<0||i>=wn.length;return t("button",{type:"button","aria-label":(n?"Previous":"Next")+" review badge",disabled:r,onClick:()=>En(i),style:{display:"grid",placeItems:"center",width:17,height:28,padding:0,border:0,background:"transparent",color:r?"#C7D2FE":"#4F46E5",cursor:r?"default":"pointer"},children:t("svg",{width:"12",height:"8",viewBox:"0 0 12 8",fill:"none",children:t("path",{d:n?"M1 7L6 2L11 7":"M1 1L6 6L11 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})},e)})]}),!ut&&Ue.map(n=>{const i=Ze===n.id,r=kn.get(n.id)??"1A",a=n.review_step.score,o=n.review_step.confidence,s=q(a,o),l="boundary"===n.kind?L(n.review_step,n.segment,ze.get(b(n.segment))):"label"===n.kind?z(n.review_step,n.segment,ze.get(b(n.segment))):null,d=l??("N/A"===s?s:`${s}%`),g=!0===n.segment.confidence?.awaiting_llm,u=W(a,o,g),c=Rt.has(n.id);return t(C,{title:g?"data is being processed":"",arrow:!0,children:t("span",{ref:e=>{e?yt.current.set(n.id,e):yt.current.delete(n.id)},style:{position:"absolute",top:0,left:10,visibility:"hidden",display:"inline-flex",cursor:g?"not-allowed":"pointer"},children:t("button",{disabled:g,type:"button","aria-pressed":i,"aria-label":g?`${n.review_step.type} · Page ${n.pageNumber} · Data is being processed`:`${n.review_step.type} · Page ${n.pageNumber}`,onClick:()=>un(n),style:{cursor:"inherit",display:"flex",alignItems:"center",justifyContent:"space-around",gap:4,width:l?c&&!g?115:90:c&&!g?105:80,minHeight:25,padding:"2px 5px",border:`1px solid ${c&&!g?"#E2E8F0":u.border}`,borderRadius:16,backgroundColor:c&&!g?"#F8FAFC":u.background,color:c&&!g?"#475569":u.text,font:"inherit",alignContent:"center",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)"},children:e(S,c&&!g?{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:r}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]}),e("span",{style:{fontSize:11,fontWeight:500,display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{display:"flex",marginLeft:"7px",alignItems:"center"},children:t(y,{height:14,width:14,strokeWidth:2,color:"#16A34A"})})]})]}:{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:r}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:u.divider,strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]})]})})})},n.id)})]})]}),Nt&&it&&e(c,{anchorElement:it,placement:"bottom-start",offset:{top:8},width:Math.min(Ct,D),maxWidth:D,heightBuffer:pe??25,children:[tt&&t(p,{width:"100%",maxWidth:"100%",score:Nt.review_step.score,reasons:zt,reason:Nt.review_step.reason,gap:Nt.review_step.gap,onBack:()=>nt(!1),onClose:cn}),t("div",{style:{display:tt?"none":"block"},children:Rt.has(Nt.id)?t(P,{width:"100%",maxWidth:"100%",headerName:"page"===Nt.kind?"Page format approved":"Split"===jt?"Split approved":"Merged"===jt?"Merge approved":"User approved",headerIcon:"page"===Nt.kind?t(_,{size:18,strokeWidth:2}):"Merged"===jt?t(x,{size:18,strokeWidth:2}):"Split"===jt?t(G,{width:18,height:18}):t(y,{size:18,strokeWidth:2}),title:Ht,pageNo:`Page ${Nt.segment.start_page}-${Nt.segment.end_page}`,summary:dn&&on?t(R,{icon:t(y,{size:14,strokeWidth:2}),title:Ht,pageRange:`Page ${Nt.segment.start_page}-${Nt.segment.end_page}`,description:an??null,revertData:on,confirmDisabled:"page"===Nt.kind?!ln:null==we||!ln,showDocumentHeader:!1,onRevert:async()=>{if("page"===Nt.kind){if(!ve||0===sn.length){const e=new Error("SegmentReviewPdfWrapper requires onPageTypeRevert and at least one classification id to revert a page-type decision.");throw _e?.(e,U(Nt)),e}let e;for(const t of sn)e=await ve({classification_id:t,human_verdict:"No"},U(Nt));return e}if(!we)throw new Error("SegmentReviewPdfWrapper requires onRevert to handle a revert confirmation.");if(!tn)throw new Error("There is no valid revert operation for this review.");const e=en?"boundary":"label"===Nt.kind?"label":"boundary"===Nt.kind?"boundary":null,t=Yt(tn.type);if(e&&t!==e)throw new Error(`Cannot use ${t??"unknown"} revert metadata for this review. Expected ${e}.`);return we(tn,U(Nt))},onRevertError:e=>{_e?.(e,U(Nt))},onRevertComplete:e=>{lt(()=>new Set),"page"!==Nt.kind&&(qe(()=>new Set),$e(()=>new Map)),Nt.id;const t=on.previousSegments[0]??on.currentSegment,n=it?.getBoundingClientRect(),i=St.current?.getBoundingClientRect(),r=Math.min(D,Math.max(220,Ct)),a=n?.left??(i?.right??window.innerWidth-r-8)+8,o=Math.max(8,Math.min(a,window.innerWidth-r-8)),s=null==n?.bottom?Math.max(8,i?.top??8):n.bottom+8;lt(()=>new Set),"page"!==Nt.kind&&(bt.current=null),ft(!1),mt({title:"Split"===jt?"Split reverted":"Merged"===jt?"Merge reverted":"Approval reverted",description:e?.message?.trim()||null,segment:t,position:{top:s,left:o,width:r}}),cn()}},Nt.id):void 0,additionalActions:Vt?t(I,{metadata:Vt.metadata,reviewAction:Nt.segment.review_action??void 0,startPage:Nt.segment.start_page,endPage:Nt.segment.end_page,title:Ht,previousSegmentTitle:Bt,nextSegmentTitle:Wt,disabled:xe||!me||dt===Nt.id,onConfirm:(e,t)=>{vn(Vt,e,t)}}):void 0,cognitiveScore:Nt.review_step.score,styles:{root:{borderColor:"#16A34A"},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:"#16A34A"}}},onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn}):"boundary"===Nt.kind?t(d,{width:"100%",maxWidth:"100%",totalPages:J,title:Nt.segment.label||Nt.segment.title,pageNo:`Page ${Nt.pageNumber}`,content:Nt.review_step.question??null,revertSummary:rn,cognitiveScore:Nt.review_step.score,metadata:Nt.metadata,reviewAction:Nt.segment.review_action??void 0,previousSegmentTitle:Bt,nextSegmentTitle:Wt,manualPrompt:ce??"Set a custom boundary",defaultStartPage:Nt.segment.start_page,defaultEndPage:Nt.segment.end_page,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!me||dt===Nt.id,onConfirm:(e,t,n)=>{n&&u(t.id)&&vn(Nt,t.id,n)},onAdjustManually:()=>ke?.(U(Nt)),onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id):"label"===Nt.kind?t(m,{width:"100%",maxWidth:"100%",title:Nt.metadata.current_label||Nt.segment.label||Nt.segment.title,pageNo:`Pages ${Nt.segment.start_page}-${Nt.segment.end_page}`,content:Nt.review_step.question??null,revertSummary:rn,cognitiveScore:Nt.review_step.score,metadata:Nt.metadata,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!he||dt===Nt.id,confirmationBlocked:Mt,confirmationWarning:Mt?"Please confirm the boundary before confirming the title.":void 0,onActionConfirm:(e,t)=>{vn(Nt,e,t)},onAdjustManually:()=>ke?.(U(Nt)),onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id):2===Nt.metadata.type_choices?.length?t(v,{width:"100%",maxWidth:"100%",title:Nt.segment.label||Nt.segment.title,pageNo:`Page ${Nt.pageNumber}`,content:Nt.review_step.reason,choices:Nt.metadata.type_choices,cognitiveScore:Nt.review_step.score,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!fe||dt===Nt.id,onConfirm:e=>{fn(Nt,e)},onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id):t(h,{width:"100%",maxWidth:"100%",title:Nt.segment.label||Nt.segment.title,pageNo:`Page ${Nt.pageNumber}`,content:Nt.review_step.reason,cognitiveScore:Nt.review_step.score,pageType:Nt.metadata.page_type,metadata:Nt.metadata,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!fe||dt===Nt.id,onActionConfirm:(e,t)=>{vn(Nt,e,t)},onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id)})]}),pt&&t(E,{children:t(k,{"aria-live":"polite",sx:{position:"fixed",top:pt.position.top,left:pt.position.left,zIndex:1600,width:pt.position.width,maxWidth:"calc(100vw - 16px)",opacity:ht?1:0,transform:ht?"translateY(0)":"translateY(-6px)",transition:"opacity 500ms ease, transform 500ms ease",filter:"drop-shadow(0 12px 24px rgba(15, 23, 42, 0.18))",pointerEvents:ht?"auto":"none"},children:t(N,{title:pt.title,description:pt.description,onReview:()=>pn(pt.segment)})})})]})}export{V as SegmentPdfSpecialZoomLevel,X as default};
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useMemo as n,useState as r,useEffect as i,useRef as a,useCallback as o}from"react";import{SpecialZoomLevel as s}from"@react-pdf-viewer/core";import l from"../PdfViewer/PdfViewer.js";import d,{BoundaryReviewActionEnum as g,isBoundaryReviewAction as c}from"./BoundaryCard.js";import p from"./CardWrapper.js";import u from"./CognitiveIntegrity.js";import m from"./LabelCheck.js";import h,{PageCheckActionEnum as f}from"./PageCheck.js";import v from"./PageTypeChoiceCheck.js";import{extractSegmentReviewData as w,getSegmentReviewKey as b}from"./reviewStepAdapters.js";import{CircleCheck as y,Check as _,GitMerge as x}from"lucide-react";import{Typography as S,Tooltip as C,Stack as E,Portal as k,Box as P}from"@mui/material";import I from"./ReviewedCard.js";import R from"./ReviewedBoundaryActions.js";import N from"./RevertCard.js";import M from"./SaveAsLearningCard.js";import A from"./RevertSuccessCard.js";import{getPendingMergeImpactedSegmentKeys as F,hasPolledStructuralAction as T,getOptimisticMergeImpactedSegmentKeys as B,shouldHideStructuralBoundaryReview as L,getResolvedScore as W,getConfidenceColors as z,getBoundaryReviewActionBadgeLabel as $,getTitleReviewActionBadgeLabel as j,isReviewStepResolutionCurrent as q,isReviewStepResolved as G,formatScore as O}from"./helper.js";import D from"./ChartBreakoutCircle.js";import V from"./ApprovalDescriptionBanner.js";import{getReviewScoreBand as H}from"./reviewScore.js";const U=260;var X=(e=>(e.ActualSize="ActualSize",e.PageFit="PageFit",e.PageWidth="PageWidth",e))(X||{});const Y={ActualSize:s.ActualSize,PageFit:s.PageFit,PageWidth:s.PageWidth},J=e=>({reviewId:e.id,segment:e.segment,pageNumber:e.pageNumber});function Z({pdfUrl:X,pdfName:Z,segments:K,totalPages:Q,styles:ee,pdfViewerProps:te,specialZoomLevel:ne,showBadges:re=!0,sortByConfidence:ie="low",filterByConfidence:ae="all",showBadgeNavigation:oe=!0,autoSelectReviewOnPageChange:se=!1,autoAdvanceAfterConfirm:le=!0,autoAdvanceScoreBand:de,badgePreloadPages:ge=8,badgeOffsetTop:ce=20,badgeOffsetRight:pe=68,badgeOffsetLeft:ue=0,initialReviewId:me,manualPrompt:he,heightBuffer:fe,onBoundaryAction:ve,onLabelAction:we,onPageAction:be,onPageTypeRevert:ye,onRevert:_e,onActiveReviewChange:xe,onCurrentPageChange:Se,onActionError:Ce,disableAllActions:Ee=!1,disablePdfAnnotations:ke=!1,disablePdfTextLayer:Pe=!0,disableTitleCheckUntilBoundaryCheckCompleted:Ie=!1,onAdjustManually:Re,onCognitiveClick:Ne,className:Me,style:Ae,viewerStyle:Fe,railStyle:Te,redirectionData:Be,onBadgeSelected:Le,onSaveAsLearning:We,closePopups:ze=!1,onPdfLoadError:$e}){console.log("LOG: TOTAL PAGE IN PARENT",Q);const{boundaryReviews:je,labelReviews:qe,pageReviews:Ge}=n(()=>w(K),[K]),[Oe,De]=r(()=>new Map),[Ve,He]=r(()=>new Set),Ue=n(()=>{const e=new Map;let t=1;return K.forEach((n,r)=>{const i=b(n,r);e.has(i)||(e.set(i,t),t+=1)}),e},[K]),Xe=n(()=>new Set(qe.map(e=>b(e.segment))),[qe]),Ye=n(()=>F(K),[K]);i(()=>{De(e=>{let t=!1;const n=new Map(e);return e.forEach((e,r)=>{const i=K.find(e=>b(e)===r);i&&!T(i,e)||(n.delete(r),t=!0)}),t?n:e})},[K]),i(()=>{He(e=>{let t=!1;const n=new Set(e);return e.forEach(e=>{Oe.has(e)||(n.delete(e),t=!0)}),t?n:e})},[Oe]);const Je=n(()=>B(K,Oe,Ve),[Ve,Oe,K]),Ze=a(null),Ke=n(()=>[...je.filter(e=>!Ye.has(b(e.segment))&&!Je.has(b(e.segment))&&!L(e.review_step,e.segment,Xe.has(b(e.segment)),Oe.get(b(e.segment)))).map(e=>({...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page})),...qe.filter(e=>!Ye.has(b(e.segment))&&!Je.has(b(e.segment))).map(e=>({...e,kind:"label",pageNumber:e.segment.start_page})),...Ge.filter(e=>!Ye.has(b(e.segment))&&!Je.has(b(e.segment))).map(e=>({...e,kind:"page",pageNumber:e.metadata.page_num??e.segment.start_page}))].sort((e,t)=>{const n=Ue.get(b(e.segment))??Number.MAX_SAFE_INTEGER,r=Ue.get(b(t.segment))??Number.MAX_SAFE_INTEGER;return e.pageNumber-t.pageNumber||n-r||e.reviewStepIndex-t.reviewStepIndex||e.id.localeCompare(t.id)}),[je,qe,Ge,Je,Oe,Ye,Ue,Xe]),Qe=n(()=>K.map(e=>({...e,title:e.label?.trim()||e.title,page_count:e.page_count??e.end_page-e.start_page+1})),[K]),[et,tt]=r(1),[nt,rt]=r(me??null),[it,at]=r(me??null),[ot,st]=r(!1),[lt,dt]=r(null),[gt,ct]=r(null),[pt,ut]=r(()=>new Set),[mt,ht]=r(null),[ft,vt]=r(null),[wt,bt]=r(null),[yt,_t]=r(!1),xt=a(0),St=a(null),Ct=a(null),Et=a(new Map),kt=a(null),Pt=a(null),It=a(null),[Rt,Nt]=r(U),Mt=ee?.aside?.width??"40%",At=`min(${"number"==typeof Mt?`${Mt}px`:Mt}, 260px, 100%)`,Ft=o(()=>{St.current=null,st(!1),rt(null),dt(null),vt(null),bt(null),_t(!1),xe?.(null,null)},[xe]);i(()=>{ze&&Ft()},[Ft,ze]),i(()=>{ut(e=>{if(0===e.size)return e;const t=new Set(e);let n=!1;return Ke.forEach(e=>{null!=e.review_step.review?.action&&t.has(e.id)&&(t.delete(e.id),n=!0)}),n?t:e})},[Ke]),i(()=>{const e=Ze.current;if(!e||!re)return;const t=()=>{const t=e.getBoundingClientRect().width;t>0&&Nt(t)};t();const n="undefined"==typeof ResizeObserver?null:new ResizeObserver(t);return n?.observe(e),()=>n?.disconnect()},[re]);const Tt=n(()=>{const e=new Set;return Ke.forEach(t=>{null!=t.review_step.review?.action&&e.add(t.id)}),e},[Ke]),Bt=n(()=>Ke.find(e=>e.id===nt)??null,[nt,Ke]),Lt=n(()=>!(!Ie||"label"!==Bt?.kind)&&je.some(e=>{if(b(e.segment)!==b(Bt.segment)||Tt.has(e.id))return!1;const t=W(e.review_step.score,e.review_step.confidence);return null==t||t<85}),[Bt,je,Ie,Tt]),Wt=null==Bt?-1:K.findIndex(e=>b(e)===b(Bt.segment)),zt=Wt>0?K[Wt-1]:void 0,$t=Wt>=0?K[Wt+1]:void 0,jt=zt?.label?.trim()||zt?.title,qt=$t?.label?.trim()||$t?.title,Gt=z(Bt?.review_step.score,Bt?.review_step.confidence,Bt?.segment.confidence?.awaiting_llm),Ot=Bt?.review_step.reasons?.length?Bt.review_step.reasons:Bt?.segment.confidence?.reasons??[],Dt=Boolean(Ot.some(e=>e.text.trim()&&["evidence","gap"].includes(e.type.trim().toLowerCase()))||Bt?.review_step.reason?.trim()||Bt?.review_step.gap?.trim()),Vt=null==Bt?null:"boundary"===Bt.kind?$(Bt.review_step,Bt.segment,Oe.get(Bt.segment.stable_key??"")):j(Bt.review_step,Bt.segment,Oe.get(Bt.segment.stable_key??"")),Ht="label"===Bt?.kind?[Vt,Bt.review_step.human_action_enum,Bt.review_step.review?.action,Bt.review_step.human_resolution?.action]:[],Ut="label"===Bt?.kind&&Ht.some(e=>{const t=e?.trim().toUpperCase()??"";return t.includes("MERGE")||t.includes("SPLIT")}),Xt=null!=Bt&&Ke.some(e=>"boundary"===e.kind&&b(e.segment)===b(Bt.segment)),Yt=Ut&&!Xt,Jt=("boundary"===Bt?.kind||Yt)&&null!=Bt?(()=>{if("boundary"===Bt.kind)return Bt;const e=je.find(e=>b(e.segment)===b(Bt.segment));return e?{...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page}:{...Bt,kind:"boundary",pageNumber:Bt.segment.review_action?.focus_page??Bt.segment.start_page,metadata:{focus_page:Bt.segment.review_action?.focus_page??null,boundary_margin:Bt.segment.boundary_margin??null,user_actions:[]}}})():void 0,Zt=null==Bt?"":Bt.segment.label?.trim()||Bt.segment.title,Kt=Bt?.review_step.revert,Qt=Bt?.segment.revert,en=e=>e?.trim().toLowerCase(),tn=null==Bt?void 0:[...Bt.segment.review_steps??[]].reverse().find(e=>{const t=e.type?.trim().toLowerCase();return("page_boundary"===t||"page boundary review"===t)&&"boundary"===en(e.revert?.type)})?.revert,nn=Kt??Bt?.segment.revert??tn,rn=nn?.decision.trim().toUpperCase();Vt??(rn?.includes("SPLIT")||rn?.includes("MERGE"));const[an,on]=r(()=>new Set),sn="label"===Bt?.kind&&"SET_RANGE"===tn?.decision?.trim().toUpperCase()&&tn.current_segment_ids.length!==tn.previous_state.length,ln="Merged"===Vt||"Split"===Vt||sn,dn=null==Bt?void 0:ln?"boundary"===en(tn?.type)?tn:"boundary"===en(Qt?.type)?Qt:"boundary"===en(Kt?.type)?Kt:void 0:"label"===Bt.kind?"label"===en(Kt?.type)?Kt:void 0:"boundary"===Bt.kind?"boundary"===en(Kt?.type)?Kt:"boundary"===en(tn?.type)?tn:"boundary"===en(Qt?.type)?Qt:void 0:void 0,gn=ln&&dn?.operation_id?K.flatMap(e=>e.review_steps??[]).find(e=>{const t=e.type?.trim().toLowerCase();if(!("page_boundary"===t||"page boundary review"===t))return!1;return(e.human_resolution?.operation_id??e.revert?.operation_id??e.operation_id)===dn.operation_id&&Boolean(e.human_resolution?.change_summary?.trim())}):void 0,cn=dn?.summary?.trim()||null,pn=ln?gn?.human_resolution?.change_summary?.trim()||dn?.summary?.trim()||"":Bt?.review_step?.human_resolution?.change_summary?.trim()||Bt?.review_step?.summary?.trim()||"",un="page"===Bt?.kind?{currentSegment:{title:Zt,startPage:Bt.segment.start_page,endPage:Bt.segment.end_page},previousSegments:[]}:Bt&&dn?{currentSegment:{title:Zt,startPage:Bt.segment.start_page,endPage:Bt.segment.end_page},previousSegments:(dn.previous_state??[]).flatMap(e=>{const t=null===e.label?"Untitled document":e.label?.trim();return t?[{title:t,startPage:e.start_page,endPage:e.end_page}]:[]})}:null,mn="page"===Bt?.kind?Bt.metadata.type_choices?.map(e=>e.classification_id)??(Bt.metadata.classification_id?[Bt.metadata.classification_id]:[]):[],hn="page"===Bt?.kind?Boolean(ye&&mn.length>0):Boolean(dn?.operation_id&&dn?.type&&!1!==dn?.revertable),fn=Boolean(un&&hn),vn=o((e,t)=>{xt.current+=1,St.current={requestId:xt.current,pageNumber:e,reviewId:t},ct({pageNumber:e,requestId:xt.current})},[]),wn=o(e=>{!0!==e.segment.confidence?.awaiting_llm&&(Le?.({reviewId:e.id,segment_id:e.segment.segment_id??null,reviewStepIndex:e.reviewStepIndex,kind:e.kind,pageNumber:e.pageNumber,metadata:e.metadata}),vt(null),bt(null),rt(e.id),at(e.id),st(!1),dt(null),vn(e.pageNumber,e.id),xe?.(e.id,e.segment))},[xe,Le,vn]);i(()=>{if(!wt)return;const e=requestAnimationFrame(()=>_t(!0)),t=window.setTimeout(()=>{_t(!1)},3500),n=window.setTimeout(()=>{bt(null)},4e3);return()=>{cancelAnimationFrame(e),window.clearTimeout(t),window.clearTimeout(n)}},[wt]),i(()=>{if(!Be)return;if("pageGroup"===Be.type){const e=Be.pages??[],t=Be.pageIndex??0,n=e[t];if(null==n)return;return bn(),vt({pages:e,index:t,label:Be.groupLabel??""}),xt.current+=1,void ct({pageNumber:n,requestId:xt.current})}if(vt(null),Be.reviewId){const e=Ke.find(e=>e.id===Be.reviewId&&(!Be.type||e.kind===Be.type));if(e)return void wn(e)}if(Be.classificationId){const e=Ke.find(e=>"page"===e.kind&&(e.metadata.classification_id===Be.classificationId||e.metadata.type_choices?.some(e=>e.classification_id===Be.classificationId))&&(!Be.segmentId||e.segment.segment_id===Be.segmentId)&&(!Be.type||e.kind===Be.type));if(e)return void wn(e)}if(!Be.pageNumber||!Be.type)return;const e=Number(Be.pageNumber);if(!Number.isInteger(e)||e<1)return;const t=Be.pageType?.trim().toLowerCase(),n=Ke.find(n=>{const r="page"===n.kind?n.pageNumber:n.segment.start_page,i="page"!==n.kind||!t||n.metadata.page_type===t||n.metadata.type_choices?.some(e=>e.page_type===t);return(!Be.segmentId||n.segment.segment_id===Be.segmentId)&&r===e&&n.kind===Be.type&&i});n?wn(n):"page"===Be.type&&(bn(),xt.current+=1,ct({pageNumber:e,requestId:xt.current}))},[Be,wn,Ke]);const bn=o(()=>{St.current=null,st(!1),rt(null),dt(null),xe?.(null,null)},[xe]),yn=o(e=>{_t(!1),bt(null);const t=Ke.find(t=>!Tt.has(t.id)&&"boundary"===t.kind&&t.segment.start_page===e.startPage&&t.segment.end_page===e.endPage)??Ke.find(t=>!Tt.has(t.id)&&t.segment.start_page<=e.startPage&&t.segment.end_page>=e.startPage);t?wn(t):(bn(),xt.current+=1,ct({pageNumber:e.startPage,requestId:xt.current}))},[bn,Tt,Ke,wn]),_n=o((e,t)=>{const n=H(e.review_step.score),r=null==de||n===de,i=pt.has(e.id)&&q(e.review_step,e.segment);return e.id!==t&&r&&!0!==e.segment.confidence?.awaiting_llm&&!G(e.review_step,e.segment)&&!i},[de,pt]),xn=o(e=>{if(!le)return void bn();const t=Ke.findIndex(t=>t.id===e),n=Ke.find((n,r)=>r>t&&_n(n,e))??Ke.find(t=>_n(t,e));n?requestAnimationFrame(()=>wn(n)):bn()},[le,bn,_n,Ke,wn]),Sn=o(async(e,t)=>{if(Ee||!be||0===t.length)return;const n=e.metadata.type_choices??[];if(2!==n.length)return;const r=new Set(t),i=J(e),a=[...n].sort((e,t)=>{const n=r.has(e.page_type);return n===r.has(t.page_type)?0:n?-1:1});ht(e.id);try{for(const t of a){const n=r.has(t.page_type)?f.YES:f.NO;await be(n,{action:n,pageType:t.page_type,metadata:{user_actions:[f.YES,f.NO],page_num:e.metadata.page_num,page_type:t.page_type,classification_id:t.classification_id}},i)}ut(t=>{const n=new Set(t);return n.add(e.id),n}),xn(e.id)}catch(e){Ce?.(e,i)}finally{ht(null)}},[Ee,Ce,be,xn]),Cn=o(async(e,t,n)=>{if(Ee)return;if("boundary"===e.kind&&!ve)return;if("label"===e.kind&&!we)return;if("page"===e.kind&&!be)return;const r=J(e),i=t,a=n,o=i===g.SET_RANGE?(()=>{const t=a.startPage,n=a.endPage;if(null==t||null==n)return null;const r=t<e.segment.start_page||n>e.segment.end_page,i=t>e.segment.start_page||n<e.segment.end_page;return r&&!i?t<e.segment.start_page?g.MERGE_PREV:g.MERGE_NEXT:i?g.SPLIT_HERE:null})():i,s="boundary"===e.kind&&null!=ve&&le&&(o===g.SPLIT_HERE||o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS),l=s?K.findIndex(t=>b(t)===b(e.segment)):-1;s&&l>=0&&o&&(Ct.current={action:o,originalSegmentIndex:l,segmentSignature:JSON.stringify(K.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null}))),ready:!1}),ht(e.id);try{"boundary"===e.kind?await(ve?.(t,n,r)):"label"===e.kind?await(we?.(t,n,r)):"page"===e.kind&&await(be?.(t,n,r)),ut(t=>{const n=new Set(t);return n.add(e.id),n});const a="boundary"===e.kind&&(o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS);if(("boundary"===e.kind&&o===g.SPLIT_HERE||a)&&o){const t=b(e.segment);He(e=>{const n=new Set(e);return i===g.SET_RANGE?n.add(t):n.delete(t),n}),De(e=>{const n=new Map(e);return n.set(t,o),n})}if(Ct.current){if(Ct.current.ready=!0,a){const t=Ke.find(t=>"label"===t.kind&&b(t.segment)===b(e.segment));t&&requestAnimationFrame(()=>wn(t))}}else xn(e.id)}catch(e){s&&(Ct.current=null),Ce?.(e,r)}finally{ht(null)}},[le,Ee,Ce,ve,we,be,ye,Ke,K,wn,xn]);i(()=>{const e=Ct.current;if(!e?.ready)return;if(JSON.stringify(K.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null})))===e.segmentSignature)return;const t=e.action===g.SPLIT_HERE?e.originalSegmentIndex+1:e.action===g.MERGE_PREV||e.action===g.MERGE_PREVIOUS?Math.max(0,e.originalSegmentIndex-1):e.originalSegmentIndex,n=new Map(K.map((e,t)=>[b(e,t),t])),r=Ke.find(e=>{const r=n.get(b(e.segment));return null!=r&&r>=t&&_n(e)});if(!r)return Ct.current=null,void bn();requestAnimationFrame(()=>{Ct.current=null,wn(r)})},[bn,_n,Ke,K,wn]),i(()=>{Ct.current||nt&&!Ke.some(e=>e.id===nt)&&bn()},[nt,bn,Ke]),i(()=>{if(!se)return;if(Ct.current)return;const e=Ke.find(e=>e.pageNumber===et);e&&e.id!==nt&&wn(e)},[nt,se,et,wn,Ke]),i(()=>{Ct.current||nt&&!Ke.some(e=>e.id===nt&&!0!==e.segment.confidence?.awaiting_llm)&&bn()},[nt,bn,Ke]);const En=n(()=>{const e=Ke.filter(e=>!0!==e.segment.confidence?.awaiting_llm);if("all"===ae)return e;const t=["low","medium","high"].filter(e=>e!==ie),n=[ie,...t],r=new Map(n.map((e,t)=>[e,t]));return e.map((e,t)=>({item:e,index:t})).sort((e,t)=>{const i=e.item.review_step.confidence?.trim().toLowerCase(),a=t.item.review_step.confidence?.trim().toLowerCase();return(null==i?n.length:r.get(i)??n.length)-(null==a?n.length:r.get(a)??n.length)||e.index-t.index}).map(({item:e})=>e)},[ae,ie,Ke]),kn=En.findIndex(e=>e.id===it),[Pn,In]=r(null),[Rn,Nn]=r(null),Mn=a(!1),An=o(e=>{const t=En[e];t&&wn(t)},[En,wn]);o(e=>{if(!ft||e<0||e>=ft.pages.length)return;const t=ft.pages[e];null!=t&&(bn(),vt(t=>null==t?t:{...t,index:e}),xt.current+=1,ct({pageNumber:t,requestId:xt.current}))},[ft,bn]),i(()=>{it&&!En.some(e=>e.id===it)&&at(null)},[En,it]),i(()=>{Mn.current=!1,Nn(null),In(kn>=0?String(kn+1):null)},[kn,En.length]),i(()=>{if(!Mn.current||null==Pn)return;const e=window.setTimeout(()=>{const e=Number(Pn.trim()),t=e-1;Number.isInteger(e)&&t>=0&&t<En.length&&(Mn.current=!1,An(t))},300);return()=>window.clearTimeout(e)},[An,Pn,En.length]);const Fn=n(()=>{const e=new Map;Ke.forEach(t=>{const n=e.get(b(t.segment))??[];n.push(t),e.set(b(t.segment),n)});const t=new Map;return e.forEach((e,n)=>{const r=Ue.get(n)??1;e.sort((e,t)=>e.reviewStepIndex-t.reviewStepIndex).forEach((e,n)=>{t.set(e.id,`${r}${(e=>{let t=e+1,n="";for(;t>0;)t-=1,n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26);return n})(n)}`)})}),t},[Ke,Ue]),Tn=n(()=>{const e=new Map;Ke.forEach(t=>{const n=e.get(t.pageNumber)??[];n.push(t),e.set(t.pageNumber,n)});const t=new Map;return e.forEach(e=>{e.forEach((e,n)=>t.set(e.id,n))}),t},[Ke]),Bn=o(e=>({startPage:Math.max(0,e.startPage-ge),endPage:Math.min(e.numPages-1,e.endPage+ge)}),[ge]),Ln=o(()=>{const e=Pt.current,t=It.current;if(!e||!t)return;const n=e.getBoundingClientRect(),r=t.querySelector(".rpv-core__inner-pages"),i=r?.getBoundingClientRect()??t.getBoundingClientRect();Ke.forEach(e=>{const r=Et.current.get(e.id);if(!r)return;const a=t.querySelector(`[data-testid="core__page-layer-${e.pageNumber-1}"]`);if(!a)return void(r.style.visibility="hidden");const o=a.getBoundingClientRect(),s=Tn.get(e.id)??0,l=o.top+ce+40*s,d=l+(r.offsetHeight||32),g=l>=i.top&&d<=i.bottom;r.style.top=l-n.top+"px",r.style.visibility=g?"visible":"hidden"});const a=kt.current;if(a){const e=ft?.pages[ft.index],r=null==e?null:t.querySelector(`[data-testid="core__page-layer-${e-1}"]`);if(ft&&r){const e=r.getBoundingClientRect().top+ce,t=e+(a.offsetHeight||25),o=e>=i.top&&t<=i.bottom;a.style.top=e-n.top+"px",a.style.visibility=o?"visible":"hidden"}else a.style.visibility="hidden"}if(nt&&null==St.current){const e=Et.current.get(nt);e&&"hidden"!==e.style.visibility&&dt(t=>t===e?t:e)}},[ft,nt,ce,Tn,Ke]),Wn=o(e=>{const t=St.current;t&&t.requestId===e.requestId&&t.pageNumber===e.pageNumber&&(St.current=null,Ln(),requestAnimationFrame(()=>{if(null!=St.current)return;const e=Et.current.get(t.reviewId);e&&"hidden"!==e.style.visibility&&dt(e)}))},[Ln]);return i(()=>{const e=It.current;if(!e||!re)return;let t=null;const n=()=>{null==t&&(t=requestAnimationFrame(()=>{t=null,Ln()}))};e.addEventListener("scroll",n,!0),window.addEventListener("resize",n);const r=new MutationObserver(n);r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style"]});const i="undefined"==typeof ResizeObserver?null:new ResizeObserver(n);return i?.observe(e),n(),()=>{null!=t&&cancelAnimationFrame(t),e.removeEventListener("scroll",n,!0),window.removeEventListener("resize",n),r.disconnect(),i?.disconnect()}},[re,Ln]),e("div",{ref:Pt,className:Me,style:{...Ae,display:"block",position:"relative",width:"100%",height:"100%",minWidth:0,overflowX:"auto",overflowY:"hidden"},children:[e("div",{className:"segment-review-wrapper__container",style:{display:"flex",alignItems:"stretch",gap:0,width:"100%",minWidth:700,height:"100%"},children:[t("div",{ref:It,style:{...Fe,flex:"1 1 auto",width:re?"auto":"100%",minWidth:0,height:"100%",boxSizing:"border-box"},children:t(l,{highlightText:[],highlightPages:{},highlightCordinatePages:[],useCoordinates:!1,showRotateButton:!0,...te,onError:$e,defaultScale:void 0===ne?te?.defaultScale??s.PageFit:Y[ne],disablePdfAnnotations:ke,disablePdfTextLayer:Pe,pdfUrl:X,pdfName:Z,segments:Qe,navigationRequest:gt,onNavigationSettled:Wn,setRenderRange:Bn,onCurrentPageChange:e=>{tt(e),null==St.current&&Bt&&Bt.pageNumber!==e&&bn(),Se?.(e)}})}),re&&e("aside",{"aria-label":"Page review badges",ref:Ze,style:{...Te,position:"relative",width:At,maxWidth:U,flex:`0 1 ${At}`,minHeight:0,overflow:"hidden",boxSizing:"border-box"},children:[ft&&t("span",{ref:kt,style:{position:"absolute",top:0,left:10,visibility:"hidden",zIndex:2,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,minHeight:25,padding:"2px 8px",border:"1px solid #E2E8F0",borderRadius:16,backgroundColor:"#F8FAFC",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)",font:"inherit"},children:e(S,{fontFamily:"Inter",sx:{fontSize:11,fontWeight:500,color:"#475569",whiteSpace:"nowrap"},children:[ft.label||"Pages"," Pg: ",ft.index+1]})}),oe&&En.length>0&&!ft&&e("nav",{"aria-label":"Review badge navigation",style:{position:"absolute",top:8,right:pe||"auto",left:ue||"auto",zIndex:2,display:"flex",alignItems:"center",gap:7,width:128,minHeight:40,padding:"4px 6px",border:"1px solid #CBD5E1",borderRadius:6,backgroundColor:"#FFFFFF",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.06)",font:"inherit"},children:[t(C,{title:"out-of-range"===Rn?"Please enter valid number present in the range":"Please enter valid numbers",open:null!=Rn,placement:"top",arrow:!0,children:t("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:Pn??"-",min:0,max:En.length,"aria-label":"Review badge number","aria-invalid":null!=Rn,onFocus:()=>{null==Pn&&In("")},onBlur:()=>{Nn(null);const e=Number(Pn);(null==Pn||""===Pn||!Number.isInteger(e)||e<1||e>En.length)&&(Mn.current=!1,In(kn>=0?String(kn+1):null))},onChange:e=>{const t=e.target.value;if(!/^\d*$/.test(t))return void Nn("invalid-number");const n=Number(t),r=""!==t&&(n<1||n>En.length);Nn(r?"out-of-range":null),Mn.current=!0,In(t)},style:{width:30,height:28,padding:0,border:"1px solid "+(Rn?"#DC2626":"#A5B4FC"),borderRadius:3,color:"#4F46E5",backgroundColor:"#FFFFFF",textAlign:"center",font:"inherit",fontSize:15,outline:"none"}})}),e("span",{"aria-label":`${En.length} reviews`,style:{flex:1,color:"#4F46E5",fontSize:14,whiteSpace:"nowrap",textAlign:"center"},children:["of ",En.length]}),["previous","next"].map(e=>{const n="previous"===e,r=kn+(n?-1:1),i=r<0||r>=En.length;return t("button",{type:"button","aria-label":(n?"Previous":"Next")+" review badge",disabled:i,onClick:()=>An(r),style:{display:"grid",placeItems:"center",width:17,height:28,padding:0,border:0,background:"transparent",color:i?"#C7D2FE":"#4F46E5",cursor:i?"default":"pointer"},children:t("svg",{width:"12",height:"8",viewBox:"0 0 12 8",fill:"none",children:t("path",{d:n?"M1 7L6 2L11 7":"M1 1L6 6L11 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})},e)})]}),!ft&&Ke.map(n=>{const r=nt===n.id,i=Fn.get(n.id)??"1A",a=n.review_step.score,o=n.review_step.confidence,s=O(a,o),l="boundary"===n.kind?$(n.review_step,n.segment,Oe.get(b(n.segment))):"label"===n.kind?j(n.review_step,n.segment,Oe.get(b(n.segment))):null,d=l??("N/A"===s?s:`${s}%`),g=!0===n.segment.confidence?.awaiting_llm,c=z(a,o,g),p=Tt.has(n.id);return t(C,{title:g?"data is being processed":"",arrow:!0,children:t("span",{ref:e=>{e?Et.current.set(n.id,e):Et.current.delete(n.id)},style:{position:"absolute",top:0,left:10,visibility:"hidden",display:"inline-flex",cursor:g?"not-allowed":"pointer"},children:t("button",{disabled:g,type:"button","aria-pressed":r,"aria-label":g?`${n.review_step.type} · Page ${n.pageNumber} · Data is being processed`:`${n.review_step.type} · Page ${n.pageNumber}`,onClick:()=>wn(n),style:{cursor:"inherit",display:"flex",alignItems:"center",justifyContent:"space-around",gap:4,width:l?p&&!g?115:90:p&&!g?105:80,minHeight:25,padding:"2px 5px",border:`1px solid ${p&&!g?"#E2E8F0":c.border}`,borderRadius:16,backgroundColor:p&&!g?"#F8FAFC":c.background,color:p&&!g?"#475569":c.text,font:"inherit",alignContent:"center",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)"},children:e(S,p&&!g?{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:i}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]}),e("span",{style:{fontSize:11,fontWeight:500,display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{display:"flex",marginLeft:"7px",alignItems:"center"},children:t(y,{height:14,width:14,strokeWidth:2,color:"#16A34A"})})]})]}:{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:i}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:c.divider,strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]})]})})})},n.id)})]})]}),Bt&<&&e(p,{anchorElement:lt,placement:"bottom-start",offset:{top:8},width:Math.min(Rt,U),maxWidth:U,heightBuffer:fe??25,children:[ot&&t(u,{width:"100%",maxWidth:"100%",score:Bt.review_step.score,reasons:Ot,reason:Bt.review_step.reason,gap:Bt.review_step.gap,onBack:()=>st(!1),onClose:bn}),t("div",{style:{display:ot?"none":"block"},children:Tt.has(Bt.id)?t(I,{width:"100%",maxWidth:"100%",headerName:"page"===Bt.kind?"Page format approved":"Split"===Vt?"Split approved":"Merged"===Vt?"Merge approved":"User approved",headerIcon:"page"===Bt.kind?t(_,{size:18,strokeWidth:2}):"Merged"===Vt?t(x,{size:18,strokeWidth:2}):"Split"===Vt?t(D,{width:18,height:18}):t(y,{size:18,strokeWidth:2}),title:Zt,pageNo:`Page ${Bt.segment.start_page}-${Bt.segment.end_page}`,summary:fn&&un?e(E,{spacing:.75,children:[pn&&t(V,{icon:t(y,{size:14,strokeWidth:2}),description:pn}),We&&t(M,{disabled:Ee,onSave:async()=>{const e=await We({operationId:dn?.operation_id??null},J(Bt));return e&&e.success&&bn(),e},onSaveComplete:()=>{on(e=>{const t=new Set(e);return t.add(Bt.id),t}),bn()},onSaveError:e=>{Ce?.(e,J(Bt))}}),t(N,{icon:t(y,{size:14,strokeWidth:2}),title:Zt,pageRange:`Page ${Bt.segment.start_page}-${Bt.segment.end_page}`,description:pn??null,revertData:un,confirmDisabled:"page"===Bt.kind?!hn:null==_e||!hn,showDocumentHeader:!1,onRevert:async()=>{if("page"===Bt.kind){if(!ye||0===mn.length){const e=new Error("SegmentReviewPdfWrapper requires onPageTypeRevert and at least one classification id to revert a page-type decision.");throw Ce?.(e,J(Bt)),e}let e;for(const t of mn)e=await ye({classification_id:t,human_verdict:"No"},J(Bt));return e}if(!_e)throw new Error("SegmentReviewPdfWrapper requires onRevert to handle a revert confirmation.");if(!dn)throw new Error("There is no valid revert operation for this review.");const e=ln?"boundary":"label"===Bt.kind?"label":"boundary"===Bt.kind?"boundary":null,t=en(dn.type);if(e&&t!==e)throw new Error(`Cannot use ${t??"unknown"} revert metadata for this review. Expected ${e}.`);return _e(dn,J(Bt))},onRevertError:e=>{Ce?.(e,J(Bt))},onRevertComplete:e=>{ut(()=>new Set),"page"!==Bt.kind&&(He(()=>new Set),De(()=>new Map));const t=un.previousSegments[0]??un.currentSegment,n=lt?.getBoundingClientRect(),r=It.current?.getBoundingClientRect(),i=Math.min(U,Math.max(220,Rt)),a=n?.left??(r?.right??window.innerWidth-i-8)+8,o=Math.max(8,Math.min(a,window.innerWidth-i-8)),s=null==n?.bottom?Math.max(8,r?.top??8):n.bottom+8;ut(()=>new Set),"page"!==Bt.kind&&(Ct.current=null),_t(!1),bt({title:"Split"===Vt?"Split reverted":"Merged"===Vt?"Merge reverted":"Approval reverted",description:e?.message?.trim()||null,segment:t,position:{top:s,left:o,width:i}}),bn()}})]}):void 0,additionalActions:Jt?t(R,{metadata:Jt.metadata,reviewAction:Bt.segment.review_action??void 0,startPage:Bt.segment.start_page,endPage:Bt.segment.end_page,title:Zt,previousSegmentTitle:jt,nextSegmentTitle:qt,disabled:Ee||!ve||mt===Bt.id,onConfirm:(e,t)=>{Cn(Jt,e,t)}}):void 0,cognitiveScore:Bt.review_step.score,styles:{root:{borderColor:"#16A34A"},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:"#16A34A"}}},onCognitiveClick:Dt?()=>{st(!0),Ne?.(J(Bt))}:void 0,onClose:bn}):"boundary"===Bt.kind?t(d,{width:"100%",maxWidth:"100%",totalPages:Q,title:Bt.segment.label||Bt.segment.title,pageNo:`Page ${Bt.pageNumber}`,content:Bt.review_step.question??null,revertSummary:cn,cognitiveScore:Bt.review_step.score,metadata:Bt.metadata,reviewAction:Bt.segment.review_action??void 0,previousSegmentTitle:jt,nextSegmentTitle:qt,manualPrompt:he??"Set a custom boundary",defaultStartPage:Bt.segment.start_page,defaultEndPage:Bt.segment.end_page,styles:{root:{borderColor:Gt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Gt.text}}},confirmDisabled:Ee||!ve||mt===Bt.id,onConfirm:(e,t,n)=>{n&&c(t.id)&&Cn(Bt,t.id,n)},onAdjustManually:()=>Re?.(J(Bt)),onCognitiveClick:Dt?()=>{st(!0),Ne?.(J(Bt))}:void 0,onClose:bn},Bt.id):"label"===Bt.kind?t(m,{width:"100%",maxWidth:"100%",title:Bt.metadata.current_label||Bt.segment.label||Bt.segment.title,pageNo:`Pages ${Bt.segment.start_page}-${Bt.segment.end_page}`,content:Bt.review_step.question??null,revertSummary:cn,cognitiveScore:Bt.review_step.score,metadata:Bt.metadata,styles:{root:{borderColor:Gt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Gt.text}}},confirmDisabled:Ee||!we||mt===Bt.id,confirmationBlocked:Lt,confirmationWarning:Lt?"Please confirm the boundary before confirming the title.":void 0,onActionConfirm:(e,t)=>{Cn(Bt,e,t)},onAdjustManually:()=>Re?.(J(Bt)),onCognitiveClick:Dt?()=>{st(!0),Ne?.(J(Bt))}:void 0,onClose:bn},Bt.id):2===Bt.metadata.type_choices?.length?t(v,{width:"100%",maxWidth:"100%",title:Bt.segment.label||Bt.segment.title,pageNo:`Page ${Bt.pageNumber}`,content:Bt.review_step.reason,choices:Bt.metadata.type_choices,cognitiveScore:Bt.review_step.score,styles:{root:{borderColor:Gt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Gt.text}}},confirmDisabled:Ee||!be||mt===Bt.id,onConfirm:e=>{Sn(Bt,e)},onCognitiveClick:Dt?()=>{st(!0),Ne?.(J(Bt))}:void 0,onClose:bn},Bt.id):t(h,{width:"100%",maxWidth:"100%",title:Bt.segment.label||Bt.segment.title,pageNo:`Page ${Bt.pageNumber}`,content:Bt.review_step.reason,cognitiveScore:Bt.review_step.score,pageType:Bt.metadata.page_type,metadata:Bt.metadata,styles:{root:{borderColor:Gt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Gt.text}}},confirmDisabled:Ee||!be||mt===Bt.id,onActionConfirm:(e,t)=>{Cn(Bt,e,t)},onCognitiveClick:Dt?()=>{st(!0),Ne?.(J(Bt))}:void 0,onClose:bn},Bt.id)})]}),wt&&t(k,{children:t(P,{"aria-live":"polite",sx:{position:"fixed",top:wt.position.top,left:wt.position.left,zIndex:1600,width:wt.position.width,maxWidth:"calc(100vw - 16px)",opacity:yt?1:0,transform:yt?"translateY(0)":"translateY(-6px)",transition:"opacity 500ms ease, transform 500ms ease",filter:"drop-shadow(0 12px 24px rgba(15, 23, 42, 0.18))",pointerEvents:yt?"auto":"none"},children:t(A,{title:wt.title,description:wt.description,onReview:()=>yn(wt.segment)})})})]})}export{X as SegmentPdfSpecialZoomLevel,Z as default};
|
|
2
2
|
//# sourceMappingURL=SegmentReviewPdfWrapper.js.map
|