@e-llm-studio/citation 0.0.252 → 0.0.254
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/ChatDrawer/ChatDrawer.js +1 -1
- package/dist/cjs/features/ChatDrawer/ChatDrawer.js.map +1 -1
- package/dist/cjs/features/IngestionStatus/IngestionStatusComponent.js +1 -1
- package/dist/cjs/features/IngestionStatus/IngestionStatusComponent.js.map +1 -1
- package/dist/cjs/features/IngestionStatus/useIngestionStatus.js +1 -1
- package/dist/cjs/features/IngestionStatus/useIngestionStatus.js.map +1 -1
- 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/PdfViewer/usePdfHighlight.js +1 -1
- package/dist/cjs/features/PdfViewer/usePdfHighlight.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/CognitiveIntegrity.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/CognitiveIntegrity.js.map +1 -1
- 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/ChatDrawer/ChatDrawer.js +1 -1
- package/dist/features/ChatDrawer/ChatDrawer.js.map +1 -1
- package/dist/features/IngestionStatus/IngestionStatusComponent.js +1 -1
- package/dist/features/IngestionStatus/IngestionStatusComponent.js.map +1 -1
- package/dist/features/IngestionStatus/useIngestionStatus.js +1 -1
- package/dist/features/IngestionStatus/useIngestionStatus.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/PdfViewer/usePdfHighlight.js +1 -1
- package/dist/features/PdfViewer/usePdfHighlight.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/CognitiveIntegrity.js +1 -1
- package/dist/features/SegmentReviewComponents/CognitiveIntegrity.js.map +1 -1
- 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/ChatDrawer/ChatDrawer.d.ts.map +1 -1
- package/dist/types/features/IngestionStatus/IngestionStatusComponent.d.ts +1 -0
- package/dist/types/features/IngestionStatus/IngestionStatusComponent.d.ts.map +1 -1
- package/dist/types/features/IngestionStatus/useIngestionStatus.d.ts +1 -1
- package/dist/types/features/IngestionStatus/useIngestionStatus.d.ts.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/PdfViewer/usePdfHighlight.d.ts +1 -0
- package/dist/types/features/PdfViewer/usePdfHighlight.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/CognitiveIntegrity.d.ts +6 -1
- package/dist/types/features/SegmentReviewComponents/CognitiveIntegrity.d.ts.map +1 -1
- 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 +16 -0
- package/dist/types/features/SegmentReviewComponents/SaveAsLearningCard.d.ts.map +1 -0
- package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts +19 -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","confirmationButtonSx","minHeight","borderColor","borderRadius","textTransform","confirmButtonSx","bgcolor","boxShadow","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","display","flexShrink","mt","Divider","borderStyle","ButtonBase","onClick","width","textAlign","component","mr","ChevronLeft","size","p","mb","currentSegment","overflow","map","index","Button","variant","fullWidth","disabled","Tooltip","disableHoverListener","arrow","style","flex"],"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","confirmationButtonSx","minHeight","borderColor","borderRadius","textTransform","confirmButtonSx","bgcolor","boxShadow","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","ButtonBase","onClick","width","textAlign","component","mr","alignItems","display","ChevronLeft","size","p","mb","border","currentSegment","overflow","map","index","direction","mt","Button","variant","fullWidth","disabled","Tooltip","disableHoverListener","arrow","style","flex"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),a=require("react"),t=require("@mui/material/Box"),r=require("@mui/material/Button"),i=require("@mui/material/CircularProgress"),s=require("@mui/material/Tooltip"),n=require("lucide-react");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=o(t),c=o(r),d=o(i),u=o(s);const f={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}};exports.default=function({onSave:t,onSaveComplete:r,onSaveError:i,disabled:s=!1,label:o="Save as learning",savingLabel:x="Saving your feedback…",tooltip:p="Use this decision to improve future automatic reviews.",isSaved:g=!1}){const[m,F]=a.useState(!1),[b,h]=a.useState(g);return a.useEffect(()=>{g&&h(!0)},[g]),e.jsx(l.default,{sx:{mt:2},children:e.jsxs(c.default,{variant:"contained",fullWidth:!0,disabled:m||s||b,onClick:()=>{(async()=>{if(!m&&!s){F(!0);try{const e=await t();e&&!1===e.success||(h(!0),r?.(e))}catch(e){console.error("Failed to save as learning:",e),i?.(e)}finally{F(!1)}}})()},sx:f,children:[e.jsxs(l.default,{component:"span",sx:{display:"flex",alignItems:"center",gap:1},children:[m?e.jsx(d.default,{size:15,thickness:5,sx:{color:"#FFFFFF"}}):b?e.jsx(n.CheckCircle2,{size:16,strokeWidth:2.25}):e.jsx(n.Sparkles,{size:16,strokeWidth:2.25}),e.jsx(l.default,{component:"span",children:m?x:b?"Learning saved":o})]}),e.jsx(u.default,{title:p,arrow:!0,children:e.jsx(l.default,{component:"span","aria-label":p,onClick:e=>e.stopPropagation(),sx:{display:"flex",alignItems:"center",flexShrink:0,opacity:.85},children:e.jsx(n.Info,{size:16})})})]})})};
|
|
2
|
+
//# sourceMappingURL=SaveAsLearningCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaveAsLearningCard.js","sources":["../../../../src/features/SegmentReviewComponents/SaveAsLearningCard.tsx"],"sourcesContent":["import { useEffect, 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 { CheckCircle2, 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 isSaved?: boolean;\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 isSaved: persistedIsSaved = false,\n}: SaveAsLearningCardProps) {\n const [isSaving, setIsSaving] = useState(false);\n const [isSaved, setIsSaved] = useState(persistedIsSaved);\n\n useEffect(() => {\n if (persistedIsSaved) setIsSaved(true);\n }, [persistedIsSaved]);\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 return (\n <Box sx={{ mt: 2 }}>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isSaving || disabled || isSaved}\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 ) : isSaved ? (\n <CheckCircle2 size={16} strokeWidth={2.25} />\n ) : (\n <Sparkles size={16} strokeWidth={2.25} />\n )}\n <Box component=\"span\">{isSaving ? savingLabel : isSaved ? 'Learning saved' : 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":["buttonSx","minHeight","display","alignItems","justifyContent","gap","px","borderRadius","background","color","fontSize","fontWeight","letterSpacing","textTransform","boxShadow","transition","transform","opacity","onSave","onSaveComplete","onSaveError","disabled","label","savingLabel","tooltip","isSaved","persistedIsSaved","isSaving","setIsSaving","useState","setIsSaved","useEffect","Box","sx","mt","children","jsxs","Button","variant","fullWidth","onClick","async","result","success","error","console","handleClick","component","jsx","CircularProgress","size","thickness","CheckCircle2","strokeWidth","Sparkles","Tooltip","title","arrow","e","stopPropagation","flexShrink","Info"],"mappings":"4YA+FA,MAAMA,EAAW,CACfC,UAAW,GACXC,QAAS,OACTC,WAAY,SACZC,eAAgB,gBAChBC,IAAK,EACLC,GAAI,EACJC,aAAc,IACdC,WAAY,oDACZC,MAAO,UACPC,SAAU,KACVC,WAAY,IACZC,cAAe,GACfC,cAAe,OACfC,UAAW,oCACXC,WAAY,mEACZ,UAAW,CACTP,WAAY,oDACZM,UAAW,sCAEb,WAAY,CAAEE,UAAW,eACzB,iBAAkB,CAChBR,WAAY,oDACZC,MAAO,UACPQ,QAAS,sBAhGb,UAA2CC,OACzCA,EAAAC,eACAA,EAAAC,YACAA,EAAAC,SACAA,GAAW,EAAAC,MACXA,EAAQ,mBAAAC,YACRA,EAAc,wBAAAC,QACdA,EAAU,yDACVC,QAASC,GAAmB,IAE5B,MAAOC,EAAUC,GAAeC,YAAS,IAClCJ,EAASK,GAAcD,WAASH,GA0BvC,OAxBAK,EAAAA,UAAU,KACJL,MAA6B,IAChC,CAACA,UAuBDM,EAAI,QAAA,CAAAC,GAAI,CAAEC,GAAI,GACbC,SAAAC,EAAAA,KAACC,EAAA,QAAA,CACCC,QAAQ,YACRC,WAAS,EACTlB,SAAUM,GAAYN,GAAYI,EAClCe,QAAS,KAzBKC,WAClB,IAAId,IAAYN,EAAhB,CACAO,GAAY,GACR,IACI,MAAAc,QAAexB,IAGhBwB,IAA6B,IAAnBA,EAAOC,UACpBb,GAAW,GACXX,IAAiBuB,UAEZE,GACCC,QAAAD,MAAM,8BAA+BA,GAC7CxB,IAAcwB,EAAK,CACnB,QACAhB,GAAY,EACd,CAf0B,GAwBAkB,IACtBb,GAAIjC,EAEJmC,SAAA,CAACC,EAAAA,KAAAJ,EAAAA,QAAA,CAAIe,UAAU,OAAOd,GAAI,CAAE/B,QAAS,OAAQC,WAAY,SAAUE,IAAK,GACrE8B,SAAA,CACCR,EAAAqB,EAAAA,IAACC,EAAAA,QAAiB,CAAAC,KAAM,GAAIC,UAAW,EAAGlB,GAAI,CAAExB,MAAO,aACrDgB,EACDuB,MAAAI,EAAAA,aAAA,CAAaF,KAAM,GAAIG,YAAa,OAErCL,MAACM,EAAAA,SAAS,CAAAJ,KAAM,GAAIG,YAAa,OAEnCL,EAAAA,IAAChB,WAAIe,UAAU,OAAQZ,WAAWZ,EAAcE,EAAU,iBAAmBH,OAG9E0B,EAAAA,IAAAO,EAAA,QAAA,CAAQC,MAAOhC,EAASiC,OAAK,EAC5BtB,SAAAa,EAAAA,IAAChB,EAAA,QAAA,CACCe,UAAU,OACV,aAAYvB,EACZgB,QAAUkB,GAAMA,EAAEC,kBAClB1B,GAAI,CAAE/B,QAAS,OAAQC,WAAY,SAAUyD,WAAY,EAAG3C,QAAS,KAErEkB,SAAAa,EAAAA,IAACa,EAAAA,KAAK,CAAAX,KAAM,aAMxB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),n=require("@react-pdf-viewer/core"),i=require("../PdfViewer/PdfViewer.js"),r=require("./BoundaryCard.js"),a=require("./CardWrapper.js"),o=require("./CognitiveIntegrity.js"),s=require("./LabelCheck.js"),l=require("./PageCheck.js"),d=require("./PageTypeChoiceCheck.js"),g=require("./reviewStepAdapters.js"),u=require("lucide-react"),c=require("@mui/material"),m=require("./ReviewedCard.js"),p=require("./ReviewedBoundaryActions.js"),f=require("./RevertCard.js"),v=require("./RevertSuccessCard.js"),h=require("./helper.js"),w=require("./ChartBreakoutCircle.js"),y=require("./reviewScore.js");const b=260;var _=(e=>(e.ActualSize="ActualSize",e.PageFit="PageFit",e.PageWidth="PageWidth",e))(_||{});const x={ActualSize:n.SpecialZoomLevel.ActualSize,PageFit:n.SpecialZoomLevel.PageFit,PageWidth:n.SpecialZoomLevel.PageWidth},S=e=>({reviewId:e.id,segment:e.segment,pageNumber:e.pageNumber});exports.SegmentPdfSpecialZoomLevel=_,exports.default=function({pdfUrl:_,pdfName:R,segments:E,totalPages:C,styles:k,pdfViewerProps:P,specialZoomLevel:A,showBadges:M=!0,sortByConfidence:I="low",filterByConfidence:j="all",showBadgeNavigation:N=!0,autoSelectReviewOnPageChange:B=!1,autoAdvanceAfterConfirm:T=!0,autoAdvanceScoreBand:F,badgePreloadPages:L=8,badgeOffsetTop:q=20,badgeOffsetRight:W=68,badgeOffsetLeft:K=0,initialReviewId:z,manualPrompt:$,heightBuffer:G,onBoundaryAction:O,onLabelAction:D,onPageAction:V,onPageTypeRevert:H,onRevert:U,onActiveReviewChange:X,onCurrentPageChange:Z,onActionError:Y,disableAllActions:J=!1,disablePdfAnnotations:Q=!1,disablePdfTextLayer:ee=!0,disableTitleCheckUntilBoundaryCheckCompleted:te=!1,onAdjustManually:ne,onCognitiveClick:ie,className:re,style:ae,viewerStyle:oe,railStyle:se,redirectionData:le,onBadgeSelected:de,closePopups:ge=!1}){console.log("LOG: TOTAL PAGE IN PARENT",C);const{boundaryReviews:ue,labelReviews:ce,pageReviews:me}=t.useMemo(()=>g.extractSegmentReviewData(E),[E]),[pe,fe]=t.useState(()=>new Map),[ve,he]=t.useState(()=>new Set),we=t.useMemo(()=>{const e=new Map;let t=1;return E.forEach((n,i)=>{const r=g.getSegmentReviewKey(n,i);e.has(r)||(e.set(r,t),t+=1)}),e},[E]),ye=t.useMemo(()=>new Set(ce.map(e=>g.getSegmentReviewKey(e.segment))),[ce]),be=t.useMemo(()=>h.getPendingMergeImpactedSegmentKeys(E),[E]);t.useEffect(()=>{fe(e=>{let t=!1;const n=new Map(e);return e.forEach((e,i)=>{const r=E.find(e=>g.getSegmentReviewKey(e)===i);r&&!h.hasPolledStructuralAction(r,e)||(n.delete(i),t=!0)}),t?n:e})},[E]),t.useEffect(()=>{he(e=>{let t=!1;const n=new Set(e);return e.forEach(e=>{pe.has(e)||(n.delete(e),t=!0)}),t?n:e})},[pe]);const _e=t.useMemo(()=>h.getOptimisticMergeImpactedSegmentKeys(E,pe,ve),[ve,pe,E]),xe=t.useRef(null),Se=t.useMemo(()=>[...ue.filter(e=>!be.has(g.getSegmentReviewKey(e.segment))&&!_e.has(g.getSegmentReviewKey(e.segment))&&!h.shouldHideStructuralBoundaryReview(e.review_step,e.segment,ye.has(g.getSegmentReviewKey(e.segment)),pe.get(g.getSegmentReviewKey(e.segment)))).map(e=>({...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page})),...ce.filter(e=>!be.has(g.getSegmentReviewKey(e.segment))&&!_e.has(g.getSegmentReviewKey(e.segment))).map(e=>({...e,kind:"label",pageNumber:e.segment.start_page})),...me.filter(e=>!be.has(g.getSegmentReviewKey(e.segment))&&!_e.has(g.getSegmentReviewKey(e.segment))).map(e=>({...e,kind:"page",pageNumber:e.metadata.page_num??e.segment.start_page}))].sort((e,t)=>{const n=we.get(g.getSegmentReviewKey(e.segment))??Number.MAX_SAFE_INTEGER,i=we.get(g.getSegmentReviewKey(t.segment))??Number.MAX_SAFE_INTEGER;return e.pageNumber-t.pageNumber||n-i||e.reviewStepIndex-t.reviewStepIndex||e.id.localeCompare(t.id)}),[ue,ce,me,_e,pe,be,we,ye]),Re=t.useMemo(()=>E.map(e=>({...e,title:e.label?.trim()||e.title,page_count:e.page_count??e.end_page-e.start_page+1})),[E]),[Ee,Ce]=t.useState(1),[ke,Pe]=t.useState(z??null),[Ae,Me]=t.useState(z??null),[Ie,je]=t.useState(!1),[Ne,Be]=t.useState(null),[Te,Fe]=t.useState(null),[Le,qe]=t.useState(()=>new Set),[We,Ke]=t.useState(null),[ze,$e]=t.useState(null),[Ge,Oe]=t.useState(null),[De,Ve]=t.useState(!1),He=t.useRef(0),Ue=t.useRef(null),Xe=t.useRef(null),Ze=t.useRef(new Map),Ye=t.useRef(null),Je=t.useRef(null),Qe=t.useRef(null),[et,tt]=t.useState(b),nt=k?.aside?.width??"40%",it=`min(${"number"==typeof nt?`${nt}px`:nt}, 260px, 100%)`,rt=t.useCallback(()=>{Ue.current=null,je(!1),Pe(null),Be(null),$e(null),Oe(null),Ve(!1),X?.(null,null)},[X]);t.useEffect(()=>{ge&&rt()},[rt,ge]),t.useEffect(()=>{qe(e=>{if(0===e.size)return e;const t=new Set(e);let n=!1;return Se.forEach(e=>{null!=e.review_step.review?.action&&t.has(e.id)&&(t.delete(e.id),n=!0)}),n?t:e})},[Se]),t.useEffect(()=>{const e=xe.current;if(!e||!M)return;const t=()=>{const t=e.getBoundingClientRect().width;t>0&&tt(t)};t();const n="undefined"==typeof ResizeObserver?null:new ResizeObserver(t);return n?.observe(e),()=>n?.disconnect()},[M]);const at=t.useMemo(()=>{const e=new Set;return Se.forEach(t=>{null!=t.review_step.review?.action&&e.add(t.id)}),e},[Se]),ot=t.useMemo(()=>Se.find(e=>e.id===ke)??null,[ke,Se]),st=t.useMemo(()=>!(!te||"label"!==ot?.kind)&&ue.some(e=>{if(g.getSegmentReviewKey(e.segment)!==g.getSegmentReviewKey(ot.segment)||at.has(e.id))return!1;const t=h.getResolvedScore(e.review_step.score,e.review_step.confidence);return null==t||t<85}),[ot,ue,te,at]),lt=null==ot?-1:E.findIndex(e=>g.getSegmentReviewKey(e)===g.getSegmentReviewKey(ot.segment)),dt=lt>0?E[lt-1]:void 0,gt=lt>=0?E[lt+1]:void 0,ut=dt?.label?.trim()||dt?.title,ct=gt?.label?.trim()||gt?.title,mt=h.getConfidenceColors(ot?.review_step.score,ot?.review_step.confidence,ot?.segment.confidence?.awaiting_llm),pt=ot?.review_step.reasons?.length?ot.review_step.reasons:ot?.segment.confidence?.reasons??[],ft=Boolean(pt.some(e=>e.text.trim()&&["evidence","gap"].includes(e.type.trim().toLowerCase()))||ot?.review_step.reason?.trim()||ot?.review_step.gap?.trim()),vt=null==ot?null:"boundary"===ot.kind?h.getBoundaryReviewActionBadgeLabel(ot.review_step,ot.segment,pe.get(ot.segment.stable_key??"")):h.getTitleReviewActionBadgeLabel(ot.review_step,ot.segment,pe.get(ot.segment.stable_key??"")),ht="label"===ot?.kind?[vt,ot.review_step.human_action_enum,ot.review_step.review?.action,ot.review_step.human_resolution?.action]:[],wt="label"===ot?.kind&&ht.some(e=>{const t=e?.trim().toUpperCase()??"";return t.includes("MERGE")||t.includes("SPLIT")}),yt=null!=ot&&Se.some(e=>"boundary"===e.kind&&g.getSegmentReviewKey(e.segment)===g.getSegmentReviewKey(ot.segment)),bt=wt&&!yt,_t=("boundary"===ot?.kind||bt)&&null!=ot?(()=>{if("boundary"===ot.kind)return ot;const e=ue.find(e=>g.getSegmentReviewKey(e.segment)===g.getSegmentReviewKey(ot.segment));return e?{...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page}:{...ot,kind:"boundary",pageNumber:ot.segment.review_action?.focus_page??ot.segment.start_page,metadata:{focus_page:ot.segment.review_action?.focus_page??null,boundary_margin:ot.segment.boundary_margin??null,user_actions:[]}}})():void 0,xt=null==ot?"":ot.segment.label?.trim()||ot.segment.title,St=ot?.review_step.revert,Rt=ot?.segment.revert,Et=e=>e?.trim().toLowerCase(),Ct=null==ot?void 0:[...ot.segment.review_steps??[]].reverse().find(e=>{const t=e.type?.trim().toLowerCase();return("page_boundary"===t||"page boundary review"===t)&&"boundary"===Et(e.revert?.type)})?.revert,kt=St??ot?.segment.revert??Ct,Pt=kt?.decision.trim().toUpperCase();vt??(Pt?.includes("SPLIT")||Pt?.includes("MERGE"));const At="label"===ot?.kind&&"SET_RANGE"===Ct?.decision?.trim().toUpperCase()&&Ct.current_segment_ids.length!==Ct.previous_state.length,Mt="Merged"===vt||"Split"===vt||At,It=null==ot?void 0:Mt?"boundary"===Et(Ct?.type)?Ct:"boundary"===Et(Rt?.type)?Rt:"boundary"===Et(St?.type)?St:void 0:"label"===ot.kind?"label"===Et(St?.type)?St:void 0:"boundary"===ot.kind?"boundary"===Et(St?.type)?St:"boundary"===Et(Ct?.type)?Ct:"boundary"===Et(Rt?.type)?Rt:void 0:void 0,jt=Mt&&It?.operation_id?E.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)===It.operation_id&&Boolean(e.human_resolution?.change_summary?.trim())}):void 0,Nt=It?.summary?.trim()||null,Bt=Mt?jt?.human_resolution?.change_summary?.trim()||It?.summary?.trim()||"":ot?.review_step?.human_resolution?.change_summary?.trim()||ot?.review_step?.summary?.trim()||"",Tt="page"===ot?.kind?{currentSegment:{title:xt,startPage:ot.segment.start_page,endPage:ot.segment.end_page},previousSegments:[]}:ot&&It?{currentSegment:{title:xt,startPage:ot.segment.start_page,endPage:ot.segment.end_page},previousSegments:(It.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,Ft="page"===ot?.kind?ot.metadata.type_choices?.map(e=>e.classification_id)??(ot.metadata.classification_id?[ot.metadata.classification_id]:[]):[],Lt="page"===ot?.kind?Boolean(H&&Ft.length>0):Boolean(It?.operation_id&&It?.type&&!1!==It?.revertable),qt=Boolean(Tt&&Lt),Wt=t.useCallback((e,t)=>{He.current+=1,Ue.current={requestId:He.current,pageNumber:e,reviewId:t},Fe({pageNumber:e,requestId:He.current})},[]),Kt=t.useCallback(e=>{!0!==e.segment.confidence?.awaiting_llm&&(de?.({reviewId:e.id,segment_id:e.segment.segment_id??null,reviewStepIndex:e.reviewStepIndex,kind:e.kind,pageNumber:e.pageNumber,metadata:e.metadata}),$e(null),Oe(null),Pe(e.id),Me(e.id),je(!1),Be(null),Wt(e.pageNumber,e.id),X?.(e.id,e.segment))},[X,de,Wt]);t.useEffect(()=>{if(!Ge)return;const e=requestAnimationFrame(()=>Ve(!0)),t=window.setTimeout(()=>{Ve(!1)},3500),n=window.setTimeout(()=>{Oe(null)},4e3);return()=>{cancelAnimationFrame(e),window.clearTimeout(t),window.clearTimeout(n)}},[Ge]),t.useEffect(()=>{if(!le)return;if("pageGroup"===le.type){const e=le.pages??[],t=le.pageIndex??0,n=e[t];if(null==n)return;return zt(),$e({pages:e,index:t,label:le.groupLabel??""}),He.current+=1,void Fe({pageNumber:n,requestId:He.current})}if($e(null),le.reviewId){const e=Se.find(e=>e.id===le.reviewId&&(!le.type||e.kind===le.type));if(e)return void Kt(e)}if(le.classificationId){const e=Se.find(e=>"page"===e.kind&&(e.metadata.classification_id===le.classificationId||e.metadata.type_choices?.some(e=>e.classification_id===le.classificationId))&&(!le.segmentId||e.segment.segment_id===le.segmentId)&&(!le.type||e.kind===le.type));if(e)return void Kt(e)}if(!le.pageNumber||!le.type)return;const e=Number(le.pageNumber);if(!Number.isInteger(e)||e<1)return;const t=le.pageType?.trim().toLowerCase(),n=Se.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(!le.segmentId||n.segment.segment_id===le.segmentId)&&i===e&&n.kind===le.type&&r});n?Kt(n):"page"===le.type&&(zt(),He.current+=1,Fe({pageNumber:e,requestId:He.current}))},[le,Kt,Se]);const zt=t.useCallback(()=>{Ue.current=null,je(!1),Pe(null),Be(null),X?.(null,null)},[X]),$t=t.useCallback(e=>{Ve(!1),Oe(null);const t=Se.find(t=>!at.has(t.id)&&"boundary"===t.kind&&t.segment.start_page===e.startPage&&t.segment.end_page===e.endPage)??Se.find(t=>!at.has(t.id)&&t.segment.start_page<=e.startPage&&t.segment.end_page>=e.startPage);t?Kt(t):(zt(),He.current+=1,Fe({pageNumber:e.startPage,requestId:He.current}))},[zt,at,Se,Kt]),Gt=t.useCallback((e,t)=>{const n=y.getReviewScoreBand(e.review_step.score),i=null==F||n===F,r=Le.has(e.id)&&h.isReviewStepResolutionCurrent(e.review_step,e.segment);return e.id!==t&&i&&!0!==e.segment.confidence?.awaiting_llm&&!h.isReviewStepResolved(e.review_step,e.segment)&&!r},[F,Le]),Ot=t.useCallback(e=>{if(!T)return void zt();const t=Se.findIndex(t=>t.id===e),n=Se.find((n,i)=>i>t&&Gt(n,e))??Se.find(t=>Gt(t,e));n?requestAnimationFrame(()=>Kt(n)):zt()},[T,zt,Gt,Se,Kt]),Dt=t.useCallback(async(e,t)=>{if(J||!V||0===t.length)return;const n=e.metadata.type_choices??[];if(2!==n.length)return;const i=new Set(t),r=S(e),a=[...n].sort((e,t)=>{const n=i.has(e.page_type);return n===i.has(t.page_type)?0:n?-1:1});Ke(e.id);try{for(const t of a){const n=i.has(t.page_type)?l.PageCheckActionEnum.YES:l.PageCheckActionEnum.NO;await V(n,{action:n,pageType:t.page_type,metadata:{user_actions:[l.PageCheckActionEnum.YES,l.PageCheckActionEnum.NO],page_num:e.metadata.page_num,page_type:t.page_type,classification_id:t.classification_id}},r)}qe(t=>{const n=new Set(t);return n.add(e.id),n}),Ot(e.id)}catch(e){Y?.(e,r)}finally{Ke(null)}},[J,Y,V,Ot]),Vt=t.useCallback(async(e,t,n)=>{if(J)return;if("boundary"===e.kind&&!O)return;if("label"===e.kind&&!D)return;if("page"===e.kind&&!V)return;const i=S(e),a=t,o=n,s=a===r.BoundaryReviewActionEnum.SET_RANGE?(()=>{const t=o.startPage,n=o.endPage;if(null==t||null==n)return null;const i=t<e.segment.start_page||n>e.segment.end_page,a=t>e.segment.start_page||n<e.segment.end_page;return i&&!a?t<e.segment.start_page?r.BoundaryReviewActionEnum.MERGE_PREV:r.BoundaryReviewActionEnum.MERGE_NEXT:a?r.BoundaryReviewActionEnum.SPLIT_HERE:null})():a,l="boundary"===e.kind&&null!=O&&T&&(s===r.BoundaryReviewActionEnum.SPLIT_HERE||s===r.BoundaryReviewActionEnum.MERGE_NEXT||s===r.BoundaryReviewActionEnum.MERGE_PREV||s===r.BoundaryReviewActionEnum.MERGE_PREVIOUS),d=l?E.findIndex(t=>g.getSegmentReviewKey(t)===g.getSegmentReviewKey(e.segment)):-1;l&&d>=0&&s&&(Xe.current={action:s,originalSegmentIndex:d,segmentSignature:JSON.stringify(E.map((e,t)=>({key:g.getSegmentReviewKey(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null}))),ready:!1}),Ke(e.id);try{"boundary"===e.kind?await(O?.(t,n,i)):"label"===e.kind?await(D?.(t,n,i)):"page"===e.kind&&await(V?.(t,n,i)),qe(t=>{const n=new Set(t);return n.add(e.id),n});const o="boundary"===e.kind&&(s===r.BoundaryReviewActionEnum.MERGE_NEXT||s===r.BoundaryReviewActionEnum.MERGE_PREV||s===r.BoundaryReviewActionEnum.MERGE_PREVIOUS);if(("boundary"===e.kind&&s===r.BoundaryReviewActionEnum.SPLIT_HERE||o)&&s){const t=g.getSegmentReviewKey(e.segment);he(e=>{const n=new Set(e);return a===r.BoundaryReviewActionEnum.SET_RANGE?n.add(t):n.delete(t),n}),fe(e=>{const n=new Map(e);return n.set(t,s),n})}if(Xe.current){if(Xe.current.ready=!0,o){const t=Se.find(t=>"label"===t.kind&&g.getSegmentReviewKey(t.segment)===g.getSegmentReviewKey(e.segment));t&&requestAnimationFrame(()=>Kt(t))}}else Ot(e.id)}catch(e){l&&(Xe.current=null),Y?.(e,i)}finally{Ke(null)}},[T,J,Y,O,D,V,H,Se,E,Kt,Ot]);t.useEffect(()=>{const e=Xe.current;if(!e?.ready)return;if(JSON.stringify(E.map((e,t)=>({key:g.getSegmentReviewKey(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null})))===e.segmentSignature)return;const t=e.action===r.BoundaryReviewActionEnum.SPLIT_HERE?e.originalSegmentIndex+1:e.action===r.BoundaryReviewActionEnum.MERGE_PREV||e.action===r.BoundaryReviewActionEnum.MERGE_PREVIOUS?Math.max(0,e.originalSegmentIndex-1):e.originalSegmentIndex,n=new Map(E.map((e,t)=>[g.getSegmentReviewKey(e,t),t])),i=Se.find(e=>{const i=n.get(g.getSegmentReviewKey(e.segment));return null!=i&&i>=t&&Gt(e)});if(!i)return Xe.current=null,void zt();requestAnimationFrame(()=>{Xe.current=null,Kt(i)})},[zt,Gt,Se,E,Kt]),t.useEffect(()=>{Xe.current||ke&&!Se.some(e=>e.id===ke)&&zt()},[ke,zt,Se]),t.useEffect(()=>{if(!B)return;if(Xe.current)return;const e=Se.find(e=>e.pageNumber===Ee);e&&e.id!==ke&&Kt(e)},[ke,B,Ee,Kt,Se]),t.useEffect(()=>{Xe.current||ke&&!Se.some(e=>e.id===ke&&!0!==e.segment.confidence?.awaiting_llm)&&zt()},[ke,zt,Se]);const Ht=t.useMemo(()=>{const e=Se.filter(e=>!0!==e.segment.confidence?.awaiting_llm);if("all"===j)return e;const t=["low","medium","high"].filter(e=>e!==I),n=[I,...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)},[j,I,Se]),Ut=Ht.findIndex(e=>e.id===Ae),[Xt,Zt]=t.useState(null),[Yt,Jt]=t.useState(null),Qt=t.useRef(!1),en=t.useCallback(e=>{const t=Ht[e];t&&Kt(t)},[Ht,Kt]);t.useCallback(e=>{if(!ze||e<0||e>=ze.pages.length)return;const t=ze.pages[e];null!=t&&(zt(),$e(t=>null==t?t:{...t,index:e}),He.current+=1,Fe({pageNumber:t,requestId:He.current}))},[ze,zt]),t.useEffect(()=>{Ae&&!Ht.some(e=>e.id===Ae)&&Me(null)},[Ht,Ae]),t.useEffect(()=>{Qt.current=!1,Jt(null),Zt(Ut>=0?String(Ut+1):null)},[Ut,Ht.length]),t.useEffect(()=>{if(!Qt.current||null==Xt)return;const e=window.setTimeout(()=>{const e=Number(Xt.trim()),t=e-1;Number.isInteger(e)&&t>=0&&t<Ht.length&&(Qt.current=!1,en(t))},300);return()=>window.clearTimeout(e)},[en,Xt,Ht.length]);const tn=t.useMemo(()=>{const e=new Map;Se.forEach(t=>{const n=e.get(g.getSegmentReviewKey(t.segment))??[];n.push(t),e.set(g.getSegmentReviewKey(t.segment),n)});const t=new Map;return e.forEach((e,n)=>{const i=we.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},[Se,we]),nn=t.useMemo(()=>{const e=new Map;Se.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},[Se]),rn=t.useCallback(e=>({startPage:Math.max(0,e.startPage-L),endPage:Math.min(e.numPages-1,e.endPage+L)}),[L]),an=t.useCallback(()=>{const e=Je.current,t=Qe.current;if(!e||!t)return;const n=e.getBoundingClientRect(),i=t.querySelector(".rpv-core__inner-pages"),r=i?.getBoundingClientRect()??t.getBoundingClientRect();Se.forEach(e=>{const i=Ze.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=nn.get(e.id)??0,l=o.top+q+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=Ye.current;if(a){const e=ze?.pages[ze.index],i=null==e?null:t.querySelector(`[data-testid="core__page-layer-${e-1}"]`);if(ze&&i){const e=i.getBoundingClientRect().top+q,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(ke&&null==Ue.current){const e=Ze.current.get(ke);e&&"hidden"!==e.style.visibility&&Be(t=>t===e?t:e)}},[ze,ke,q,nn,Se]),on=t.useCallback(e=>{const t=Ue.current;t&&t.requestId===e.requestId&&t.pageNumber===e.pageNumber&&(Ue.current=null,an(),requestAnimationFrame(()=>{if(null!=Ue.current)return;const e=Ze.current.get(t.reviewId);e&&"hidden"!==e.style.visibility&&Be(e)}))},[an]);return t.useEffect(()=>{const e=Qe.current;if(!e||!M)return;let t=null;const n=()=>{null==t&&(t=requestAnimationFrame(()=>{t=null,an()}))};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()}},[M,an]),e.jsxs("div",{ref:Je,className:re,style:{...ae,display:"block",position:"relative",width:"100%",height:"100%",minWidth:0,overflowX:"auto",overflowY:"hidden"},children:[e.jsxs("div",{className:"segment-review-wrapper__container",style:{display:"flex",alignItems:"stretch",gap:0,width:"100%",minWidth:700,height:"100%"},children:[e.jsx("div",{ref:Qe,style:{...oe,flex:"1 1 auto",width:M?"auto":"100%",minWidth:0,height:"100%",boxSizing:"border-box"},children:e.jsx(i.default,{highlightText:[],highlightPages:{},highlightCordinatePages:[],useCoordinates:!1,showRotateButton:!0,...P,defaultScale:void 0===A?P?.defaultScale??n.SpecialZoomLevel.PageFit:x[A],disablePdfAnnotations:Q,disablePdfTextLayer:ee,pdfUrl:_,pdfName:R,segments:Re,navigationRequest:Te,onNavigationSettled:on,setRenderRange:rn,onCurrentPageChange:e=>{Ce(e),null==Ue.current&&ot&&ot.pageNumber!==e&&zt(),Z?.(e)}})}),M&&e.jsxs("aside",{"aria-label":"Page review badges",ref:xe,style:{...se,position:"relative",width:it,maxWidth:b,flex:`0 1 ${it}`,minHeight:0,overflow:"hidden",boxSizing:"border-box"},children:[ze&&e.jsx("span",{ref:Ye,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.jsxs(c.Typography,{fontFamily:"Inter",sx:{fontSize:11,fontWeight:500,color:"#475569",whiteSpace:"nowrap"},children:[ze.label||"Pages"," Pg: ",ze.index+1]})}),N&&Ht.length>0&&!ze&&e.jsxs("nav",{"aria-label":"Review badge navigation",style:{position:"absolute",top:8,right:W||"auto",left:K||"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:[e.jsx(c.Tooltip,{title:"out-of-range"===Yt?"Please enter valid number present in the range":"Please enter valid numbers",open:null!=Yt,placement:"top",arrow:!0,children:e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:Xt??"-",min:0,max:Ht.length,"aria-label":"Review badge number","aria-invalid":null!=Yt,onFocus:()=>{null==Xt&&Zt("")},onBlur:()=>{Jt(null);const e=Number(Xt);(null==Xt||""===Xt||!Number.isInteger(e)||e<1||e>Ht.length)&&(Qt.current=!1,Zt(Ut>=0?String(Ut+1):null))},onChange:e=>{const t=e.target.value;if(!/^\d*$/.test(t))return void Jt("invalid-number");const n=Number(t),i=""!==t&&(n<1||n>Ht.length);Jt(i?"out-of-range":null),Qt.current=!0,Zt(t)},style:{width:30,height:28,padding:0,border:"1px solid "+(Yt?"#DC2626":"#A5B4FC"),borderRadius:3,color:"#4F46E5",backgroundColor:"#FFFFFF",textAlign:"center",font:"inherit",fontSize:15,outline:"none"}})}),e.jsxs("span",{"aria-label":`${Ht.length} reviews`,style:{flex:1,color:"#4F46E5",fontSize:14,whiteSpace:"nowrap",textAlign:"center"},children:["of ",Ht.length]}),["previous","next"].map(t=>{const n="previous"===t,i=Ut+(n?-1:1),r=i<0||i>=Ht.length;return e.jsx("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:e.jsx("svg",{width:"12",height:"8",viewBox:"0 0 12 8",fill:"none",children:e.jsx("path",{d:n?"M1 7L6 2L11 7":"M1 1L6 6L11 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})},t)})]}),!ze&&Se.map(t=>{const n=ke===t.id,i=tn.get(t.id)??"1A",r=t.review_step.score,a=t.review_step.confidence,o=h.formatScore(r,a),s="boundary"===t.kind?h.getBoundaryReviewActionBadgeLabel(t.review_step,t.segment,pe.get(g.getSegmentReviewKey(t.segment))):"label"===t.kind?h.getTitleReviewActionBadgeLabel(t.review_step,t.segment,pe.get(g.getSegmentReviewKey(t.segment))):null,l=s??("N/A"===o?o:`${o}%`),d=!0===t.segment.confidence?.awaiting_llm,m=h.getConfidenceColors(r,a,d),p=at.has(t.id),f=d;return e.jsx(c.Tooltip,{title:d?"data is being processed":"",arrow:!0,children:e.jsx("span",{ref:e=>{e?Ze.current.set(t.id,e):Ze.current.delete(t.id)},style:{position:"absolute",top:0,left:10,visibility:"hidden",display:"inline-flex",cursor:f?"not-allowed":"pointer"},children:e.jsx("button",{disabled:f,type:"button","aria-pressed":n,"aria-label":d?`${t.review_step.type} · Page ${t.pageNumber} · Data is being processed`:`${t.review_step.type} · Page ${t.pageNumber}`,onClick:()=>Kt(t),style:{cursor:"inherit",display:"flex",alignItems:"center",justifyContent:"space-around",gap:4,width:s?p&&!d?115:90:p&&!d?105:80,minHeight:25,padding:"2px 5px",border:`1px solid ${p&&!d?"#E2E8F0":m.border}`,borderRadius:16,backgroundColor:p&&!d?"#F8FAFC":m.background,color:p&&!d?"#475569":m.text,font:"inherit",alignContent:"center",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)"},children:p&&!d?e.jsxs(c.Typography,{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[e.jsx("span",{style:{fontSize:11,fontWeight:500},children:i}),e.jsxs("span",{style:{display:"flex",alignItems:"center"},children:[e.jsx("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),e.jsx("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:l})]}),e.jsxs("span",{style:{fontSize:11,fontWeight:500,display:"flex",alignItems:"center"},children:[e.jsx("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),e.jsx("span",{style:{display:"flex",marginLeft:"7px",alignItems:"center"},children:e.jsx(u.CircleCheck,{height:14,width:14,strokeWidth:2,color:"#16A34A"})})]})]}):e.jsxs(c.Typography,{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[e.jsx("span",{style:{fontSize:11,fontWeight:500},children:i}),e.jsxs("span",{style:{display:"flex",alignItems:"center"},children:[e.jsx("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M0.399902 0V14",stroke:m.divider,strokeWidth:"0.8"})}),e.jsx("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:l})]})]})})})},t.id)})]})]}),ot&&Ne&&e.jsxs(a.default,{anchorElement:Ne,placement:"bottom-start",offset:{top:8},width:Math.min(et,b),maxWidth:b,heightBuffer:G??25,children:[Ie&&e.jsx(o.default,{width:"100%",maxWidth:"100%",score:ot.review_step.score,reasons:pt,reason:ot.review_step.reason,gap:ot.review_step.gap,onBack:()=>je(!1),onClose:zt}),e.jsx("div",{style:{display:Ie?"none":"block"},children:at.has(ot.id)?e.jsx(m.default,{width:"100%",maxWidth:"100%",headerName:"page"===ot.kind?"Page format approved":"Split"===vt?"Split approved":"Merged"===vt?"Merge approved":"User approved",headerIcon:"page"===ot.kind?e.jsx(u.Check,{size:18,strokeWidth:2}):"Merged"===vt?e.jsx(u.GitMerge,{size:18,strokeWidth:2}):"Split"===vt?e.jsx(w.default,{width:18,height:18}):e.jsx(u.CircleCheck,{size:18,strokeWidth:2}),title:xt,pageNo:`Page ${ot.segment.start_page}-${ot.segment.end_page}`,summary:qt&&Tt?e.jsx(f.default,{icon:e.jsx(u.CircleCheck,{size:14,strokeWidth:2}),title:xt,pageRange:`Page ${ot.segment.start_page}-${ot.segment.end_page}`,description:Bt??null,revertData:Tt,confirmDisabled:"page"===ot.kind?!Lt:null==U||!Lt,showDocumentHeader:!1,onRevert:async()=>{if("page"===ot.kind){if(!H||0===Ft.length){const e=new Error("SegmentReviewPdfWrapper requires onPageTypeRevert and at least one classification id to revert a page-type decision.");throw Y?.(e,S(ot)),e}let e;for(const t of Ft)e=await H({classification_id:t,human_verdict:"No"},S(ot));return e}if(!U)throw new Error("SegmentReviewPdfWrapper requires onRevert to handle a revert confirmation.");if(!It)throw new Error("There is no valid revert operation for this review.");const e=Mt?"boundary":"label"===ot.kind?"label":"boundary"===ot.kind?"boundary":null,t=Et(It.type);if(e&&t!==e)throw new Error(`Cannot use ${t??"unknown"} revert metadata for this review. Expected ${e}.`);return U(It,S(ot))},onRevertError:e=>{Y?.(e,S(ot))},onRevertComplete:e=>{qe(()=>new Set),"page"!==ot.kind&&(he(()=>new Set),fe(()=>new Map)),ot.id;const t=Tt.previousSegments[0]??Tt.currentSegment,n=Ne?.getBoundingClientRect(),i=Qe.current?.getBoundingClientRect(),r=Math.min(b,Math.max(220,et)),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;qe(()=>new Set),"page"!==ot.kind&&(Xe.current=null),Ve(!1),Oe({title:"Split"===vt?"Split reverted":"Merged"===vt?"Merge reverted":"Approval reverted",description:e?.message?.trim()||null,segment:t,position:{top:s,left:o,width:r}}),zt()}},ot.id):void 0,additionalActions:_t?e.jsx(p.default,{metadata:_t.metadata,reviewAction:ot.segment.review_action??void 0,startPage:ot.segment.start_page,endPage:ot.segment.end_page,title:xt,previousSegmentTitle:ut,nextSegmentTitle:ct,disabled:J||!O||We===ot.id,onConfirm:(e,t)=>{Vt(_t,e,t)}}):void 0,cognitiveScore:ot.review_step.score,styles:{root:{borderColor:"#16A34A"},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:"#16A34A"}}},onCognitiveClick:ft?()=>{je(!0),ie?.(S(ot))}:void 0,onClose:zt}):"boundary"===ot.kind?e.jsx(r.default,{width:"100%",maxWidth:"100%",totalPages:C,title:ot.segment.label||ot.segment.title,pageNo:`Page ${ot.pageNumber}`,content:ot.review_step.question??null,revertSummary:Nt,cognitiveScore:ot.review_step.score,metadata:ot.metadata,reviewAction:ot.segment.review_action??void 0,previousSegmentTitle:ut,nextSegmentTitle:ct,manualPrompt:$??"Set a custom boundary",defaultStartPage:ot.segment.start_page,defaultEndPage:ot.segment.end_page,styles:{root:{borderColor:mt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:mt.text}}},confirmDisabled:J||!O||We===ot.id,onConfirm:(e,t,n)=>{n&&r.isBoundaryReviewAction(t.id)&&Vt(ot,t.id,n)},onAdjustManually:()=>ne?.(S(ot)),onCognitiveClick:ft?()=>{je(!0),ie?.(S(ot))}:void 0,onClose:zt},ot.id):"label"===ot.kind?e.jsx(s.default,{width:"100%",maxWidth:"100%",title:ot.metadata.current_label||ot.segment.label||ot.segment.title,pageNo:`Pages ${ot.segment.start_page}-${ot.segment.end_page}`,content:ot.review_step.question??null,revertSummary:Nt,cognitiveScore:ot.review_step.score,metadata:ot.metadata,styles:{root:{borderColor:mt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:mt.text}}},confirmDisabled:J||!D||We===ot.id,confirmationBlocked:st,confirmationWarning:st?"Please confirm the boundary before confirming the title.":void 0,onActionConfirm:(e,t)=>{Vt(ot,e,t)},onAdjustManually:()=>ne?.(S(ot)),onCognitiveClick:ft?()=>{je(!0),ie?.(S(ot))}:void 0,onClose:zt},ot.id):2===ot.metadata.type_choices?.length?e.jsx(d.default,{width:"100%",maxWidth:"100%",title:ot.segment.label||ot.segment.title,pageNo:`Page ${ot.pageNumber}`,content:ot.review_step.reason,choices:ot.metadata.type_choices,cognitiveScore:ot.review_step.score,styles:{root:{borderColor:mt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:mt.text}}},confirmDisabled:J||!V||We===ot.id,onConfirm:e=>{Dt(ot,e)},onCognitiveClick:ft?()=>{je(!0),ie?.(S(ot))}:void 0,onClose:zt},ot.id):e.jsx(l.default,{width:"100%",maxWidth:"100%",title:ot.segment.label||ot.segment.title,pageNo:`Page ${ot.pageNumber}`,content:ot.review_step.reason,cognitiveScore:ot.review_step.score,pageType:ot.metadata.page_type,metadata:ot.metadata,styles:{root:{borderColor:mt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:mt.text}}},confirmDisabled:J||!V||We===ot.id,onActionConfirm:(e,t)=>{Vt(ot,e,t)},onCognitiveClick:ft?()=>{je(!0),ie?.(S(ot))}:void 0,onClose:zt},ot.id)})]}),Ge&&e.jsx(c.Portal,{children:e.jsx(c.Box,{"aria-live":"polite",sx:{position:"fixed",top:Ge.position.top,left:Ge.position.left,zIndex:1600,width:Ge.position.width,maxWidth:"calc(100vw - 16px)",opacity:De?1:0,transform:De?"translateY(0)":"translateY(-6px)",transition:"opacity 500ms ease, transform 500ms ease",filter:"drop-shadow(0 12px 24px rgba(15, 23, 42, 0.18))",pointerEvents:De?"auto":"none"},children:e.jsx(v.default,{title:Ge.title,description:Ge.description,onReview:()=>$t(Ge.segment)})})})]})};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),n=require("@react-pdf-viewer/core"),i=require("../PdfViewer/PdfViewer.js"),r=require("./BoundaryCard.js"),a=require("./CardWrapper.js"),o=require("./CognitiveIntegrity.js"),s=require("./LabelCheck.js"),l=require("./PageCheck.js"),d=require("./PageTypeChoiceCheck.js"),g=require("./reviewStepAdapters.js"),u=require("lucide-react"),c=require("@mui/material"),m=require("./ReviewedCard.js"),p=require("./ReviewedBoundaryActions.js"),v=require("./RevertCard.js"),f=require("./SaveAsLearningCard.js"),h=require("./RevertSuccessCard.js"),w=require("./helper.js"),y=require("./ChartBreakoutCircle.js"),b=require("./ApprovalDescriptionBanner.js"),_=require("./reviewScore.js");const x=260;var S=(e=>(e.ActualSize="ActualSize",e.PageFit="PageFit",e.PageWidth="PageWidth",e))(S||{});const R={ActualSize:n.SpecialZoomLevel.ActualSize,PageFit:n.SpecialZoomLevel.PageFit,PageWidth:n.SpecialZoomLevel.PageWidth},E=e=>({reviewId:e.id,segment:e.segment,pageNumber:e.pageNumber});exports.SegmentPdfSpecialZoomLevel=S,exports.default=function({pdfUrl:S,pdfName:C,segments:k,totalPages:P,styles:A,pdfViewerProps:I,specialZoomLevel:M,showBadges:j=!0,sortByConfidence:N="low",filterByConfidence:B="all",showBadgeNavigation:T=!0,autoSelectReviewOnPageChange:L=!1,autoAdvanceAfterConfirm:F=!0,autoAdvanceScoreBand:q,badgePreloadPages:W=8,badgeOffsetTop:K=20,badgeOffsetRight:z=68,badgeOffsetLeft:$=0,initialReviewId:G,manualPrompt:O,heightBuffer:D,onBoundaryAction:V,onLabelAction:H,onPageAction:U,onPageTypeRevert:X,onRevert:Z,onActiveReviewChange:Y,onCurrentPageChange:J,onActionError:Q,disableAllActions:ee=!1,disablePdfAnnotations:te=!1,disablePdfTextLayer:ne=!0,disableTitleCheckUntilBoundaryCheckCompleted:ie=!1,onAdjustManually:re,onCognitiveClick:ae,renderCognitiveReason:oe,className:se,style:le,viewerStyle:de,railStyle:ge,redirectionData:ue,onBadgeSelected:ce,onSaveAsLearning:me,savedLearningReviewIds:pe=[],closePopups:ve=!1,onPdfLoadError:fe}){console.log("LOG: TOTAL PAGE IN PARENT",P);const{boundaryReviews:he,labelReviews:we,pageReviews:ye}=t.useMemo(()=>g.extractSegmentReviewData(k),[k]),[be,_e]=t.useState(()=>new Map),[xe,Se]=t.useState(()=>new Set),Re=t.useMemo(()=>{const e=new Map;let t=1;return k.forEach((n,i)=>{const r=g.getSegmentReviewKey(n,i);e.has(r)||(e.set(r,t),t+=1)}),e},[k]),Ee=t.useMemo(()=>new Set(we.map(e=>g.getSegmentReviewKey(e.segment))),[we]),Ce=t.useMemo(()=>w.getPendingMergeImpactedSegmentKeys(k),[k]);t.useEffect(()=>{_e(e=>{let t=!1;const n=new Map(e);return e.forEach((e,i)=>{const r=k.find(e=>g.getSegmentReviewKey(e)===i);r&&!w.hasPolledStructuralAction(r,e)||(n.delete(i),t=!0)}),t?n:e})},[k]),t.useEffect(()=>{Se(e=>{let t=!1;const n=new Set(e);return e.forEach(e=>{be.has(e)||(n.delete(e),t=!0)}),t?n:e})},[be]);const ke=t.useMemo(()=>w.getOptimisticMergeImpactedSegmentKeys(k,be,xe),[xe,be,k]),Pe=t.useRef(null),Ae=t.useMemo(()=>[...he.filter(e=>!Ce.has(g.getSegmentReviewKey(e.segment))&&!ke.has(g.getSegmentReviewKey(e.segment))&&!w.shouldHideStructuralBoundaryReview(e.review_step,e.segment,Ee.has(g.getSegmentReviewKey(e.segment)),be.get(g.getSegmentReviewKey(e.segment)))).map(e=>({...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page})),...we.filter(e=>!Ce.has(g.getSegmentReviewKey(e.segment))&&!ke.has(g.getSegmentReviewKey(e.segment))).map(e=>({...e,kind:"label",pageNumber:e.segment.start_page})),...ye.filter(e=>!Ce.has(g.getSegmentReviewKey(e.segment))&&!ke.has(g.getSegmentReviewKey(e.segment))).map(e=>({...e,kind:"page",pageNumber:e.metadata.page_num??e.segment.start_page}))].sort((e,t)=>{const n=Re.get(g.getSegmentReviewKey(e.segment))??Number.MAX_SAFE_INTEGER,i=Re.get(g.getSegmentReviewKey(t.segment))??Number.MAX_SAFE_INTEGER;return e.pageNumber-t.pageNumber||n-i||e.reviewStepIndex-t.reviewStepIndex||e.id.localeCompare(t.id)}),[he,we,ye,ke,be,Ce,Re,Ee]),Ie=t.useMemo(()=>k.map(e=>({...e,title:e.label?.trim()||e.title,page_count:e.page_count??e.end_page-e.start_page+1})),[k]),[Me,je]=t.useState(1),[Ne,Be]=t.useState(G??null),[Te,Le]=t.useState(G??null),[Fe,qe]=t.useState(!1),[We,Ke]=t.useState(null),[ze,$e]=t.useState(null),[Ge,Oe]=t.useState(()=>new Set),[De,Ve]=t.useState(null),[He,Ue]=t.useState(null),[Xe,Ze]=t.useState(null),[Ye,Je]=t.useState(!1),Qe=t.useRef(0),et=t.useRef(null),tt=t.useRef(null),nt=t.useRef(new Map),it=t.useRef(null),rt=t.useRef(null),at=t.useRef(null),[ot,st]=t.useState(x),lt=A?.aside?.width??"40%",dt=`min(${"number"==typeof lt?`${lt}px`:lt}, 260px, 100%)`,gt=t.useCallback(()=>{et.current=null,qe(!1),Be(null),Ke(null),Ue(null),Ze(null),Je(!1),Y?.(null,null)},[Y]);t.useEffect(()=>{ve&>()},[gt,ve]),t.useEffect(()=>{Oe(e=>{if(0===e.size)return e;const t=new Set(e);let n=!1;return Ae.forEach(e=>{null!=e.review_step.review?.action&&t.has(e.id)&&(t.delete(e.id),n=!0)}),n?t:e})},[Ae]),t.useEffect(()=>{const e=Pe.current;if(!e||!j)return;const t=()=>{const t=e.getBoundingClientRect().width;t>0&&st(t)};t();const n="undefined"==typeof ResizeObserver?null:new ResizeObserver(t);return n?.observe(e),()=>n?.disconnect()},[j]);const ut=t.useMemo(()=>{const e=new Set;return Ae.forEach(t=>{null!=t.review_step.review?.action&&e.add(t.id)}),e},[Ae]),ct=t.useMemo(()=>Ae.find(e=>e.id===Ne)??null,[Ne,Ae]),mt=t.useMemo(()=>!(!ie||"label"!==ct?.kind)&&he.some(e=>{if(g.getSegmentReviewKey(e.segment)!==g.getSegmentReviewKey(ct.segment)||ut.has(e.id))return!1;const t=w.getResolvedScore(e.review_step.score,e.review_step.confidence);return null==t||t<85}),[ct,he,ie,ut]),pt=null==ct?-1:k.findIndex(e=>g.getSegmentReviewKey(e)===g.getSegmentReviewKey(ct.segment)),vt=pt>0?k[pt-1]:void 0,ft=pt>=0?k[pt+1]:void 0,ht=vt?.label?.trim()||vt?.title,wt=ft?.label?.trim()||ft?.title,yt=w.getConfidenceColors(ct?.review_step.score,ct?.review_step.confidence,ct?.segment.confidence?.awaiting_llm),bt=ct?.review_step.reasons?.length?ct.review_step.reasons:ct?.segment.confidence?.reasons??[],_t=Boolean(bt.some(e=>e.text.trim()&&["evidence","gap"].includes(e.type.trim().toLowerCase()))||ct?.review_step.reason?.trim()||ct?.review_step.gap?.trim()),xt=null==ct?null:"boundary"===ct.kind?w.getBoundaryReviewActionBadgeLabel(ct.review_step,ct.segment,be.get(ct.segment.stable_key??"")):w.getTitleReviewActionBadgeLabel(ct.review_step,ct.segment,be.get(ct.segment.stable_key??"")),St="label"===ct?.kind?[xt,ct.review_step.human_action_enum,ct.review_step.review?.action,ct.review_step.human_resolution?.action]:[],Rt="label"===ct?.kind&&St.some(e=>{const t=e?.trim().toUpperCase()??"";return t.includes("MERGE")||t.includes("SPLIT")}),Et=null!=ct&&Ae.some(e=>"boundary"===e.kind&&g.getSegmentReviewKey(e.segment)===g.getSegmentReviewKey(ct.segment)),Ct=Rt&&!Et,kt=("boundary"===ct?.kind||Ct)&&null!=ct?(()=>{if("boundary"===ct.kind)return ct;const e=he.find(e=>g.getSegmentReviewKey(e.segment)===g.getSegmentReviewKey(ct.segment));return e?{...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page}:{...ct,kind:"boundary",pageNumber:ct.segment.review_action?.focus_page??ct.segment.start_page,metadata:{focus_page:ct.segment.review_action?.focus_page??null,boundary_margin:ct.segment.boundary_margin??null,user_actions:[]}}})():void 0,Pt=null==ct?"":ct.segment.label?.trim()||ct.segment.title,At=ct?.review_step.revert,It=ct?.segment.revert,Mt=e=>e?.trim().toLowerCase(),jt=null==ct?void 0:[...ct.segment.review_steps??[]].reverse().find(e=>{const t=e.type?.trim().toLowerCase();return("page_boundary"===t||"page boundary review"===t)&&"boundary"===Mt(e.revert?.type)})?.revert,Nt=At??ct?.segment.revert??jt,Bt=Nt?.decision.trim().toUpperCase();xt??(Bt?.includes("SPLIT")||Bt?.includes("MERGE"));const Tt=t.useMemo(()=>new Set(pe),[pe]),Lt="label"===ct?.kind&&"SET_RANGE"===jt?.decision?.trim().toUpperCase()&&jt.current_segment_ids.length!==jt.previous_state.length,Ft="Merged"===xt||"Split"===xt||Lt,qt=null==ct?void 0:Ft?"boundary"===Mt(jt?.type)?jt:"boundary"===Mt(It?.type)?It:"boundary"===Mt(At?.type)?At:void 0:"label"===ct.kind?"label"===Mt(At?.type)?At:void 0:"boundary"===ct.kind?"boundary"===Mt(At?.type)?At:"boundary"===Mt(jt?.type)?jt:"boundary"===Mt(It?.type)?It:void 0:void 0,Wt=Ft&&qt?.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)===qt.operation_id&&Boolean(e.human_resolution?.change_summary?.trim())}):void 0,Kt=qt?.summary?.trim()||null,zt=Ft?Wt?.human_resolution?.change_summary?.trim()||qt?.summary?.trim()||"":ct?.review_step?.human_resolution?.change_summary?.trim()||ct?.review_step?.summary?.trim()||"",$t="page"===ct?.kind?{currentSegment:{title:Pt,startPage:ct.segment.start_page,endPage:ct.segment.end_page},previousSegments:[]}:ct&&qt?{currentSegment:{title:Pt,startPage:ct.segment.start_page,endPage:ct.segment.end_page},previousSegments:(qt.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,Gt="page"===ct?.kind?ct.metadata.type_choices?.map(e=>e.classification_id)??(ct.metadata.classification_id?[ct.metadata.classification_id]:[]):[],Ot="page"===ct?.kind?Boolean(X&&Gt.length>0):Boolean(qt?.operation_id&&qt?.type&&!1!==qt?.revertable),Dt=Boolean($t&&Ot),Vt=t.useCallback((e,t)=>{Qe.current+=1,et.current={requestId:Qe.current,pageNumber:e,reviewId:t},$e({pageNumber:e,requestId:Qe.current})},[]),Ht=t.useCallback(e=>{!0!==e.segment.confidence?.awaiting_llm&&(ce?.({reviewId:e.id,segment_id:e.segment.segment_id??null,reviewStepIndex:e.reviewStepIndex,kind:e.kind,pageNumber:e.pageNumber,metadata:e.metadata}),Ue(null),Ze(null),Be(e.id),Le(e.id),qe(!1),Ke(null),Vt(e.pageNumber,e.id),Y?.(e.id,e.segment))},[Y,ce,Vt]);t.useEffect(()=>{if(!Xe)return;const e=requestAnimationFrame(()=>Je(!0)),t=window.setTimeout(()=>{Je(!1)},3500),n=window.setTimeout(()=>{Ze(null)},4e3);return()=>{cancelAnimationFrame(e),window.clearTimeout(t),window.clearTimeout(n)}},[Xe]),t.useEffect(()=>{if(!ue)return;if("pageGroup"===ue.type){const e=ue.pages??[],t=ue.pageIndex??0,n=e[t];if(null==n)return;return Ut(),Ue({pages:e,index:t,label:ue.groupLabel??""}),Qe.current+=1,void $e({pageNumber:n,requestId:Qe.current})}if(Ue(null),ue.reviewId){const e=Ae.find(e=>e.id===ue.reviewId&&(!ue.type||e.kind===ue.type));if(e)return void Ht(e)}if(ue.classificationId){const e=Ae.find(e=>"page"===e.kind&&(e.metadata.classification_id===ue.classificationId||e.metadata.type_choices?.some(e=>e.classification_id===ue.classificationId))&&(!ue.segmentId||e.segment.segment_id===ue.segmentId)&&(!ue.type||e.kind===ue.type));if(e)return void Ht(e)}if(!ue.pageNumber||!ue.type)return;const e=Number(ue.pageNumber);if(!Number.isInteger(e)||e<1)return;const t=ue.pageType?.trim().toLowerCase(),n=Ae.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(!ue.segmentId||n.segment.segment_id===ue.segmentId)&&i===e&&n.kind===ue.type&&r});n?Ht(n):"page"===ue.type&&(Ut(),Qe.current+=1,$e({pageNumber:e,requestId:Qe.current}))},[ue,Ht,Ae]);const Ut=t.useCallback(()=>{et.current=null,qe(!1),Be(null),Ke(null),Y?.(null,null)},[Y]),Xt=t.useCallback(e=>{Je(!1),Ze(null);const t=Ae.find(t=>!ut.has(t.id)&&"boundary"===t.kind&&t.segment.start_page===e.startPage&&t.segment.end_page===e.endPage)??Ae.find(t=>!ut.has(t.id)&&t.segment.start_page<=e.startPage&&t.segment.end_page>=e.startPage);t?Ht(t):(Ut(),Qe.current+=1,$e({pageNumber:e.startPage,requestId:Qe.current}))},[Ut,ut,Ae,Ht]),Zt=t.useCallback((e,t)=>{const n=_.getReviewScoreBand(e.review_step.score),i=null==q||n===q,r=Ge.has(e.id)&&w.isReviewStepResolutionCurrent(e.review_step,e.segment);return e.id!==t&&i&&!0!==e.segment.confidence?.awaiting_llm&&!w.isReviewStepResolved(e.review_step,e.segment)&&!r},[q,Ge]),Yt=t.useCallback(e=>{if(!F)return void Ut();const t=Ae.findIndex(t=>t.id===e),n=Ae.find((n,i)=>i>t&&Zt(n,e))??Ae.find(t=>Zt(t,e));n?requestAnimationFrame(()=>Ht(n)):Ut()},[F,Ut,Zt,Ae,Ht]),Jt=t.useCallback(async(e,t)=>{if(ee||!U||0===t.length)return;const n=e.metadata.type_choices??[];if(2!==n.length)return;const i=new Set(t),r=E(e),a=[...n].sort((e,t)=>{const n=i.has(e.page_type);return n===i.has(t.page_type)?0:n?-1:1});Ve(e.id);try{for(const t of a){const n=i.has(t.page_type)?l.PageCheckActionEnum.YES:l.PageCheckActionEnum.NO;await U(n,{action:n,pageType:t.page_type,metadata:{user_actions:[l.PageCheckActionEnum.YES,l.PageCheckActionEnum.NO],page_num:e.metadata.page_num,page_type:t.page_type,classification_id:t.classification_id}},r)}Oe(t=>{const n=new Set(t);return n.add(e.id),n}),Yt(e.id)}catch(e){Q?.(e,r)}finally{Ve(null)}},[ee,Q,U,Yt]),Qt=t.useCallback(async(e,t,n)=>{if(ee)return;if("boundary"===e.kind&&!V)return;if("label"===e.kind&&!H)return;if("page"===e.kind&&!U)return;const i=E(e),a=t,o=n,s=a===r.BoundaryReviewActionEnum.SET_RANGE?(()=>{const t=o.startPage,n=o.endPage;if(null==t||null==n)return null;const i=t<e.segment.start_page||n>e.segment.end_page,a=t>e.segment.start_page||n<e.segment.end_page;return i&&!a?t<e.segment.start_page?r.BoundaryReviewActionEnum.MERGE_PREV:r.BoundaryReviewActionEnum.MERGE_NEXT:a?r.BoundaryReviewActionEnum.SPLIT_HERE:null})():a,l="boundary"===e.kind&&null!=V&&F&&(s===r.BoundaryReviewActionEnum.SPLIT_HERE||s===r.BoundaryReviewActionEnum.MERGE_NEXT||s===r.BoundaryReviewActionEnum.MERGE_PREV||s===r.BoundaryReviewActionEnum.MERGE_PREVIOUS),d=l?k.findIndex(t=>g.getSegmentReviewKey(t)===g.getSegmentReviewKey(e.segment)):-1;l&&d>=0&&s&&(tt.current={action:s,originalSegmentIndex:d,segmentSignature:JSON.stringify(k.map((e,t)=>({key:g.getSegmentReviewKey(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null}))),ready:!1}),Ve(e.id);try{"boundary"===e.kind?await(V?.(t,n,i)):"label"===e.kind?await(H?.(t,n,i)):"page"===e.kind&&await(U?.(t,n,i)),Oe(t=>{const n=new Set(t);return n.add(e.id),n});const o="boundary"===e.kind&&(s===r.BoundaryReviewActionEnum.MERGE_NEXT||s===r.BoundaryReviewActionEnum.MERGE_PREV||s===r.BoundaryReviewActionEnum.MERGE_PREVIOUS);if(("boundary"===e.kind&&s===r.BoundaryReviewActionEnum.SPLIT_HERE||o)&&s){const t=g.getSegmentReviewKey(e.segment);Se(e=>{const n=new Set(e);return a===r.BoundaryReviewActionEnum.SET_RANGE?n.add(t):n.delete(t),n}),_e(e=>{const n=new Map(e);return n.set(t,s),n})}if(tt.current){if(tt.current.ready=!0,o){const t=Ae.find(t=>"label"===t.kind&&g.getSegmentReviewKey(t.segment)===g.getSegmentReviewKey(e.segment));t&&requestAnimationFrame(()=>Ht(t))}}else Yt(e.id)}catch(e){l&&(tt.current=null),Q?.(e,i)}finally{Ve(null)}},[F,ee,Q,V,H,U,X,Ae,k,Ht,Yt]);t.useEffect(()=>{const e=tt.current;if(!e?.ready)return;if(JSON.stringify(k.map((e,t)=>({key:g.getSegmentReviewKey(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null})))===e.segmentSignature)return;const t=e.action===r.BoundaryReviewActionEnum.SPLIT_HERE?e.originalSegmentIndex+1:e.action===r.BoundaryReviewActionEnum.MERGE_PREV||e.action===r.BoundaryReviewActionEnum.MERGE_PREVIOUS?Math.max(0,e.originalSegmentIndex-1):e.originalSegmentIndex,n=new Map(k.map((e,t)=>[g.getSegmentReviewKey(e,t),t])),i=Ae.find(e=>{const i=n.get(g.getSegmentReviewKey(e.segment));return null!=i&&i>=t&&Zt(e)});if(!i)return tt.current=null,void Ut();requestAnimationFrame(()=>{tt.current=null,Ht(i)})},[Ut,Zt,Ae,k,Ht]),t.useEffect(()=>{tt.current||Ne&&!Ae.some(e=>e.id===Ne)&&Ut()},[Ne,Ut,Ae]),t.useEffect(()=>{if(!L)return;if(tt.current)return;const e=Ae.find(e=>e.pageNumber===Me);e&&e.id!==Ne&&Ht(e)},[Ne,L,Me,Ht,Ae]),t.useEffect(()=>{tt.current||Ne&&!Ae.some(e=>e.id===Ne&&!0!==e.segment.confidence?.awaiting_llm)&&Ut()},[Ne,Ut,Ae]);const en=t.useMemo(()=>{const e=Ae.filter(e=>!0!==e.segment.confidence?.awaiting_llm);if("all"===B)return e;const t=["low","medium","high"].filter(e=>e!==N),n=[N,...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)},[B,N,Ae]),tn=en.findIndex(e=>e.id===Te),[nn,rn]=t.useState(null),[an,on]=t.useState(null),sn=t.useRef(!1),ln=t.useCallback(e=>{const t=en[e];t&&Ht(t)},[en,Ht]);t.useCallback(e=>{if(!He||e<0||e>=He.pages.length)return;const t=He.pages[e];null!=t&&(Ut(),Ue(t=>null==t?t:{...t,index:e}),Qe.current+=1,$e({pageNumber:t,requestId:Qe.current}))},[He,Ut]),t.useEffect(()=>{Te&&!en.some(e=>e.id===Te)&&Le(null)},[en,Te]),t.useEffect(()=>{sn.current=!1,on(null),rn(tn>=0?String(tn+1):null)},[tn,en.length]),t.useEffect(()=>{if(!sn.current||null==nn)return;const e=window.setTimeout(()=>{const e=Number(nn.trim()),t=e-1;Number.isInteger(e)&&t>=0&&t<en.length&&(sn.current=!1,ln(t))},300);return()=>window.clearTimeout(e)},[ln,nn,en.length]);const dn=t.useMemo(()=>{const e=new Map;Ae.forEach(t=>{const n=e.get(g.getSegmentReviewKey(t.segment))??[];n.push(t),e.set(g.getSegmentReviewKey(t.segment),n)});const t=new Map;return e.forEach((e,n)=>{const i=Re.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},[Ae,Re]),gn=t.useMemo(()=>{const e=new Map;Ae.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},[Ae]),un=t.useCallback(e=>({startPage:Math.max(0,e.startPage-W),endPage:Math.min(e.numPages-1,e.endPage+W)}),[W]),cn=t.useCallback(()=>{const e=rt.current,t=at.current;if(!e||!t)return;const n=e.getBoundingClientRect(),i=t.querySelector(".rpv-core__inner-pages"),r=i?.getBoundingClientRect()??t.getBoundingClientRect();Ae.forEach(e=>{const i=nt.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=gn.get(e.id)??0,l=o.top+K+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=it.current;if(a){const e=He?.pages[He.index],i=null==e?null:t.querySelector(`[data-testid="core__page-layer-${e-1}"]`);if(He&&i){const e=i.getBoundingClientRect().top+K,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(Ne&&null==et.current){const e=nt.current.get(Ne);e&&"hidden"!==e.style.visibility&&Ke(t=>t===e?t:e)}},[He,Ne,K,gn,Ae]),mn=t.useCallback(e=>{const t=et.current;t&&t.requestId===e.requestId&&t.pageNumber===e.pageNumber&&(et.current=null,cn(),requestAnimationFrame(()=>{if(null!=et.current)return;const e=nt.current.get(t.reviewId);e&&"hidden"!==e.style.visibility&&Ke(e)}))},[cn]);return t.useEffect(()=>{const e=at.current;if(!e||!j)return;let t=null;const n=()=>{null==t&&(t=requestAnimationFrame(()=>{t=null,cn()}))};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()}},[j,cn]),e.jsxs("div",{ref:rt,className:se,style:{...le,display:"block",position:"relative",width:"100%",height:"100%",minWidth:0,overflowX:"auto",overflowY:"hidden"},children:[e.jsxs("div",{className:"segment-review-wrapper__container",style:{display:"flex",alignItems:"stretch",gap:0,width:"100%",minWidth:700,height:"100%"},children:[e.jsx("div",{ref:at,style:{...de,flex:"1 1 auto",width:j?"auto":"100%",minWidth:0,height:"100%",boxSizing:"border-box"},children:e.jsx(i.default,{highlightText:[],highlightPages:{},highlightCordinatePages:[],useCoordinates:!1,showRotateButton:!0,...I,onError:fe,defaultScale:void 0===M?I?.defaultScale??n.SpecialZoomLevel.PageFit:R[M],disablePdfAnnotations:te,disablePdfTextLayer:ne,pdfUrl:S,pdfName:C,segments:Ie,navigationRequest:ze,onNavigationSettled:mn,setRenderRange:un,onCurrentPageChange:e=>{je(e),null==et.current&&ct&&ct.pageNumber!==e&&Ut(),J?.(e)}})}),j&&e.jsxs("aside",{"aria-label":"Page review badges",ref:Pe,style:{...ge,position:"relative",width:dt,maxWidth:x,flex:`0 1 ${dt}`,minHeight:0,overflow:"hidden",boxSizing:"border-box"},children:[He&&e.jsx("span",{ref:it,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.jsxs(c.Typography,{fontFamily:"Inter",sx:{fontSize:11,fontWeight:500,color:"#475569",whiteSpace:"nowrap"},children:[He.label||"Pages"," Pg: ",He.index+1]})}),T&&en.length>0&&!He&&e.jsxs("nav",{"aria-label":"Review badge navigation",style:{position:"absolute",top:8,right:z||"auto",left:$||"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:[e.jsx(c.Tooltip,{title:"out-of-range"===an?"Please enter valid number present in the range":"Please enter valid numbers",open:null!=an,placement:"top",arrow:!0,children:e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:nn??"-",min:0,max:en.length,"aria-label":"Review badge number","aria-invalid":null!=an,onFocus:()=>{null==nn&&rn("")},onBlur:()=>{on(null);const e=Number(nn);(null==nn||""===nn||!Number.isInteger(e)||e<1||e>en.length)&&(sn.current=!1,rn(tn>=0?String(tn+1):null))},onChange:e=>{const t=e.target.value;if(!/^\d*$/.test(t))return void on("invalid-number");const n=Number(t),i=""!==t&&(n<1||n>en.length);on(i?"out-of-range":null),sn.current=!0,rn(t)},style:{width:30,height:28,padding:0,border:"1px solid "+(an?"#DC2626":"#A5B4FC"),borderRadius:3,color:"#4F46E5",backgroundColor:"#FFFFFF",textAlign:"center",font:"inherit",fontSize:15,outline:"none"}})}),e.jsxs("span",{"aria-label":`${en.length} reviews`,style:{flex:1,color:"#4F46E5",fontSize:14,whiteSpace:"nowrap",textAlign:"center"},children:["of ",en.length]}),["previous","next"].map(t=>{const n="previous"===t,i=tn+(n?-1:1),r=i<0||i>=en.length;return e.jsx("button",{type:"button","aria-label":(n?"Previous":"Next")+" review badge",disabled:r,onClick:()=>ln(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:e.jsx("svg",{width:"12",height:"8",viewBox:"0 0 12 8",fill:"none",children:e.jsx("path",{d:n?"M1 7L6 2L11 7":"M1 1L6 6L11 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})},t)})]}),!He&&Ae.map(t=>{const n=Ne===t.id,i=dn.get(t.id)??"1A",r=t.review_step.score,a=t.review_step.confidence,o=w.formatScore(r,a),s="boundary"===t.kind?w.getBoundaryReviewActionBadgeLabel(t.review_step,t.segment,be.get(g.getSegmentReviewKey(t.segment))):"label"===t.kind?w.getTitleReviewActionBadgeLabel(t.review_step,t.segment,be.get(g.getSegmentReviewKey(t.segment))):null,l=s??("N/A"===o?o:`${o}%`),d=!0===t.segment.confidence?.awaiting_llm,m=w.getConfidenceColors(r,a,d),p=ut.has(t.id),v=d;return e.jsx(c.Tooltip,{title:d?"data is being processed":"",arrow:!0,children:e.jsx("span",{ref:e=>{e?nt.current.set(t.id,e):nt.current.delete(t.id)},style:{position:"absolute",top:0,left:10,visibility:"hidden",display:"inline-flex",cursor:v?"not-allowed":"pointer"},children:e.jsx("button",{disabled:v,type:"button","aria-pressed":n,"aria-label":d?`${t.review_step.type} · Page ${t.pageNumber} · Data is being processed`:`${t.review_step.type} · Page ${t.pageNumber}`,onClick:()=>Ht(t),style:{cursor:"inherit",display:"flex",alignItems:"center",justifyContent:"space-around",gap:4,width:s?p&&!d?115:90:p&&!d?105:80,minHeight:25,padding:"2px 5px",border:`1px solid ${p&&!d?"#E2E8F0":m.border}`,borderRadius:16,backgroundColor:p&&!d?"#F8FAFC":m.background,color:p&&!d?"#475569":m.text,font:"inherit",alignContent:"center",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)"},children:p&&!d?e.jsxs(c.Typography,{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[e.jsx("span",{style:{fontSize:11,fontWeight:500},children:i}),e.jsxs("span",{style:{display:"flex",alignItems:"center"},children:[e.jsx("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),e.jsx("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:l})]}),e.jsxs("span",{style:{fontSize:11,fontWeight:500,display:"flex",alignItems:"center"},children:[e.jsx("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),e.jsx("span",{style:{display:"flex",marginLeft:"7px",alignItems:"center"},children:e.jsx(u.CircleCheck,{height:14,width:14,strokeWidth:2,color:"#16A34A"})})]})]}):e.jsxs(c.Typography,{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[e.jsx("span",{style:{fontSize:11,fontWeight:500},children:i}),e.jsxs("span",{style:{display:"flex",alignItems:"center"},children:[e.jsx("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e.jsx("path",{d:"M0.399902 0V14",stroke:m.divider,strokeWidth:"0.8"})}),e.jsx("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:l})]})]})})})},t.id)})]})]}),ct&&We&&e.jsxs(a.default,{anchorElement:We,placement:"bottom-start",offset:{top:8},width:Math.min(ot,x),maxWidth:x,heightBuffer:D??25,children:[Fe&&e.jsx(o.default,{width:"100%",maxWidth:"100%",score:ct.review_step.score,reasons:bt,reason:ct.review_step.reason,gap:ct.review_step.gap,renderReason:oe,onBack:()=>qe(!1),onClose:Ut}),e.jsx("div",{style:{display:Fe?"none":"block"},children:ut.has(ct.id)?e.jsx(m.default,{width:"100%",maxWidth:"100%",headerName:"page"===ct.kind?"Page format approved":"Split"===xt?"Split approved":"Merged"===xt?"Merge approved":"User approved",headerIcon:"page"===ct.kind?e.jsx(u.Check,{size:18,strokeWidth:2}):"Merged"===xt?e.jsx(u.GitMerge,{size:18,strokeWidth:2}):"Split"===xt?e.jsx(y.default,{width:18,height:18}):e.jsx(u.CircleCheck,{size:18,strokeWidth:2}),title:Pt,pageNo:`Page ${ct.segment.start_page}-${ct.segment.end_page}`,summary:Dt&&$t?e.jsxs(c.Stack,{spacing:.75,children:[zt&&e.jsx(b.default,{icon:e.jsx(u.CircleCheck,{size:14,strokeWidth:2}),description:zt}),me&&e.jsx(f.default,{isSaved:!!ct&&Tt.has(ct.id),disabled:ee,onSave:async()=>{const e=await me({operationId:qt?.operation_id??null},E(ct));return e&&e.success&&Ut(),e},onSaveComplete:()=>{Ut()},onSaveError:e=>{Q?.(e,E(ct))}}),e.jsx(v.default,{icon:e.jsx(u.CircleCheck,{size:14,strokeWidth:2}),title:Pt,pageRange:`Page ${ct.segment.start_page}-${ct.segment.end_page}`,description:zt??null,revertData:$t,confirmDisabled:"page"===ct.kind?!Ot:null==Z||!Ot,showDocumentHeader:!1,onRevert:async()=>{if("page"===ct.kind){if(!X||0===Gt.length){const e=new Error("SegmentReviewPdfWrapper requires onPageTypeRevert and at least one classification id to revert a page-type decision.");throw Q?.(e,E(ct)),e}let e;for(const t of Gt)e=await X({classification_id:t,human_verdict:"No"},E(ct));return e}if(!Z)throw new Error("SegmentReviewPdfWrapper requires onRevert to handle a revert confirmation.");if(!qt)throw new Error("There is no valid revert operation for this review.");const e=Ft?"boundary":"label"===ct.kind?"label":"boundary"===ct.kind?"boundary":null,t=Mt(qt.type);if(e&&t!==e)throw new Error(`Cannot use ${t??"unknown"} revert metadata for this review. Expected ${e}.`);return Z(qt,E(ct))},onRevertError:e=>{Q?.(e,E(ct))},onRevertComplete:e=>{Oe(()=>new Set),"page"!==ct.kind&&(Se(()=>new Set),_e(()=>new Map));const t=$t.previousSegments[0]??$t.currentSegment,n=We?.getBoundingClientRect(),i=at.current?.getBoundingClientRect(),r=Math.min(x,Math.max(220,ot)),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;Oe(()=>new Set),"page"!==ct.kind&&(tt.current=null),Je(!1),Ze({title:"Split"===xt?"Split reverted":"Merged"===xt?"Merge reverted":"Approval reverted",description:e?.message?.trim()||null,segment:t,position:{top:s,left:o,width:r}}),Ut()}})]}):void 0,additionalActions:kt?e.jsx(p.default,{metadata:kt.metadata,reviewAction:ct.segment.review_action??void 0,startPage:ct.segment.start_page,endPage:ct.segment.end_page,title:Pt,previousSegmentTitle:ht,nextSegmentTitle:wt,disabled:ee||!V||De===ct.id,onConfirm:(e,t)=>{Qt(kt,e,t)}}):void 0,cognitiveScore:ct.review_step.score,styles:{root:{borderColor:"#16A34A"},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:"#16A34A"}}},onCognitiveClick:_t?()=>{qe(!0),ae?.(E(ct))}:void 0,onClose:Ut}):"boundary"===ct.kind?e.jsx(r.default,{width:"100%",maxWidth:"100%",totalPages:P,title:ct.segment.label||ct.segment.title,pageNo:`Page ${ct.pageNumber}`,content:ct.review_step.question??null,revertSummary:Kt,cognitiveScore:ct.review_step.score,metadata:ct.metadata,reviewAction:ct.segment.review_action??void 0,previousSegmentTitle:ht,nextSegmentTitle:wt,manualPrompt:O??"Set a custom boundary",defaultStartPage:ct.segment.start_page,defaultEndPage:ct.segment.end_page,styles:{root:{borderColor:yt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:yt.text}}},confirmDisabled:ee||!V||De===ct.id,onConfirm:(e,t,n)=>{n&&r.isBoundaryReviewAction(t.id)&&Qt(ct,t.id,n)},onAdjustManually:()=>re?.(E(ct)),onCognitiveClick:_t?()=>{qe(!0),ae?.(E(ct))}:void 0,onClose:Ut},ct.id):"label"===ct.kind?e.jsx(s.default,{width:"100%",maxWidth:"100%",title:ct.metadata.current_label||ct.segment.label||ct.segment.title,pageNo:`Pages ${ct.segment.start_page}-${ct.segment.end_page}`,content:ct.review_step.question??null,revertSummary:Kt,cognitiveScore:ct.review_step.score,metadata:ct.metadata,styles:{root:{borderColor:yt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:yt.text}}},confirmDisabled:ee||!H||De===ct.id,confirmationBlocked:mt,confirmationWarning:mt?"Please confirm the boundary before confirming the title.":void 0,onActionConfirm:(e,t)=>{Qt(ct,e,t)},onAdjustManually:()=>re?.(E(ct)),onCognitiveClick:_t?()=>{qe(!0),ae?.(E(ct))}:void 0,onClose:Ut},ct.id):2===ct.metadata.type_choices?.length?e.jsx(d.default,{width:"100%",maxWidth:"100%",title:ct.segment.label||ct.segment.title,pageNo:`Page ${ct.pageNumber}`,content:ct.review_step.reason,choices:ct.metadata.type_choices,cognitiveScore:ct.review_step.score,styles:{root:{borderColor:yt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:yt.text}}},confirmDisabled:ee||!U||De===ct.id,onConfirm:e=>{Jt(ct,e)},onCognitiveClick:_t?()=>{qe(!0),ae?.(E(ct))}:void 0,onClose:Ut},ct.id):e.jsx(l.default,{width:"100%",maxWidth:"100%",title:ct.segment.label||ct.segment.title,pageNo:`Page ${ct.pageNumber}`,content:ct.review_step.reason,cognitiveScore:ct.review_step.score,pageType:ct.metadata.page_type,metadata:ct.metadata,styles:{root:{borderColor:yt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:yt.text}}},confirmDisabled:ee||!U||De===ct.id,onActionConfirm:(e,t)=>{Qt(ct,e,t)},onCognitiveClick:_t?()=>{qe(!0),ae?.(E(ct))}:void 0,onClose:Ut},ct.id)})]}),Xe&&e.jsx(c.Portal,{children:e.jsx(c.Box,{"aria-live":"polite",sx:{position:"fixed",top:Xe.position.top,left:Xe.position.left,zIndex:1600,width:Xe.position.width,maxWidth:"calc(100vw - 16px)",opacity:Ye?1:0,transform:Ye?"translateY(0)":"translateY(-6px)",transition:"opacity 500ms ease, transform 500ms ease",filter:"drop-shadow(0 12px 24px rgba(15, 23, 42, 0.18))",pointerEvents:Ye?"auto":"none"},children:e.jsx(h.default,{title:Xe.title,description:Xe.description,onReview:()=>Xt(Xe.segment)})})})]})};
|
|
2
2
|
//# sourceMappingURL=SegmentReviewPdfWrapper.js.map
|