@e-llm-studio/citation 0.0.251 → 0.0.252
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/features/CognitiveCompare/CitationAnchor.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CitationAnchor.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CitationRenderer.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CitationRenderer.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CitationRendererInner.js +2 -0
- package/dist/cjs/features/CognitiveCompare/CitationRendererInner.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/CognitiveCompare.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveCompare.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveCompareConstants.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveCompareConstants.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveComparehelpers.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitiveComparehelpers.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitivePopup.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CognitivePopup.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/CompareContext.js +1 -1
- package/dist/cjs/features/CognitiveCompare/CompareContext.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/GptWebCitationPanel.js +2 -0
- package/dist/cjs/features/CognitiveCompare/GptWebCitationPanel.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/WebGptPanel.js +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/components/WebGptPanel.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js +2 -0
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js +2 -0
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js +2 -0
- package/dist/cjs/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/components/GuidelineSkeletonLoader.js +2 -0
- package/dist/cjs/features/CognitiveCompare/components/GuidelineSkeletonLoader.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/components/LHSSectionRow.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/LHSSectionRow.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/RHSSectionRow.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/RHSSectionRow.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SectionAccordion.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SectionAccordion.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SubSectionAccordion.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SubSectionAccordion.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SvgConnectors.js +1 -1
- package/dist/cjs/features/CognitiveCompare/components/SvgConnectors.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/memoizedMarkdown.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/memoizedMarkdown.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useCompareData.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useCompareData.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useLinesCalculator.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useLinesCalculator.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useOnDemandCitationCache.js +2 -0
- package/dist/cjs/features/CognitiveCompare/hooks/useOnDemandCitationCache.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/hooks/useSideBySide.js +1 -1
- package/dist/cjs/features/CognitiveCompare/hooks/useSideBySide.js.map +1 -1
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/cacheKey.js +2 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/cacheKey.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/contextBuilder.js +2 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/contextBuilder.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/href.js +2 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/href.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/payload.js +2 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/payload.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/response.js +2 -0
- package/dist/cjs/features/CognitiveCompare/onDemandCitations/response.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js +2 -0
- package/dist/cjs/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/utils/normalizeInlineMarkdown.js +2 -0
- package/dist/cjs/features/CognitiveCompare/utils/normalizeInlineMarkdown.js.map +1 -0
- package/dist/cjs/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js +2 -0
- package/dist/cjs/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js.map +1 -0
- package/dist/cjs/features/SegmentReviewComponents/BoundaryCard.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/BoundaryCard.js.map +1 -1
- package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
- package/dist/features/CognitiveCompare/CitationAnchor.js +1 -1
- package/dist/features/CognitiveCompare/CitationAnchor.js.map +1 -1
- package/dist/features/CognitiveCompare/CitationRenderer.js +1 -1
- package/dist/features/CognitiveCompare/CitationRenderer.js.map +1 -1
- package/dist/features/CognitiveCompare/CitationRendererInner.js +2 -0
- package/dist/features/CognitiveCompare/CitationRendererInner.js.map +1 -0
- package/dist/features/CognitiveCompare/CognitiveCompare.js +1 -1
- package/dist/features/CognitiveCompare/CognitiveCompare.js.map +1 -1
- package/dist/features/CognitiveCompare/CognitiveCompareConstants.js +1 -1
- package/dist/features/CognitiveCompare/CognitiveCompareConstants.js.map +1 -1
- package/dist/features/CognitiveCompare/CognitiveComparehelpers.js +1 -1
- package/dist/features/CognitiveCompare/CognitiveComparehelpers.js.map +1 -1
- package/dist/features/CognitiveCompare/CognitivePopup.js +1 -1
- package/dist/features/CognitiveCompare/CognitivePopup.js.map +1 -1
- package/dist/features/CognitiveCompare/CompareContext.js +1 -1
- package/dist/features/CognitiveCompare/CompareContext.js.map +1 -1
- package/dist/features/CognitiveCompare/GptWebCitationPanel.js +2 -0
- package/dist/features/CognitiveCompare/GptWebCitationPanel.js.map +1 -0
- package/dist/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js +1 -1
- package/dist/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js.map +1 -1
- package/dist/features/CognitiveCompare/Guidelines/components/WebGptPanel.js +1 -1
- package/dist/features/CognitiveCompare/Guidelines/components/WebGptPanel.js.map +1 -1
- package/dist/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js +2 -0
- package/dist/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js.map +1 -0
- package/dist/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js +2 -0
- package/dist/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js.map +1 -0
- package/dist/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js +1 -1
- package/dist/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js.map +1 -1
- package/dist/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js +2 -0
- package/dist/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js.map +1 -0
- package/dist/features/CognitiveCompare/components/GuidelineSkeletonLoader.js +2 -0
- package/dist/features/CognitiveCompare/components/GuidelineSkeletonLoader.js.map +1 -0
- package/dist/features/CognitiveCompare/components/LHSSectionRow.js +1 -1
- package/dist/features/CognitiveCompare/components/LHSSectionRow.js.map +1 -1
- package/dist/features/CognitiveCompare/components/RHSSectionRow.js +1 -1
- package/dist/features/CognitiveCompare/components/RHSSectionRow.js.map +1 -1
- package/dist/features/CognitiveCompare/components/SectionAccordion.js +1 -1
- package/dist/features/CognitiveCompare/components/SectionAccordion.js.map +1 -1
- package/dist/features/CognitiveCompare/components/SubSectionAccordion.js +1 -1
- package/dist/features/CognitiveCompare/components/SubSectionAccordion.js.map +1 -1
- package/dist/features/CognitiveCompare/components/SvgConnectors.js +1 -1
- package/dist/features/CognitiveCompare/components/SvgConnectors.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/memoizedMarkdown.js +1 -1
- package/dist/features/CognitiveCompare/hooks/memoizedMarkdown.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/useCompareData.js +1 -1
- package/dist/features/CognitiveCompare/hooks/useCompareData.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/useLinesCalculator.js +1 -1
- package/dist/features/CognitiveCompare/hooks/useLinesCalculator.js.map +1 -1
- package/dist/features/CognitiveCompare/hooks/useOnDemandCitationCache.js +2 -0
- package/dist/features/CognitiveCompare/hooks/useOnDemandCitationCache.js.map +1 -0
- package/dist/features/CognitiveCompare/hooks/useSideBySide.js +1 -1
- package/dist/features/CognitiveCompare/hooks/useSideBySide.js.map +1 -1
- package/dist/features/CognitiveCompare/onDemandCitations/cacheKey.js +2 -0
- package/dist/features/CognitiveCompare/onDemandCitations/cacheKey.js.map +1 -0
- package/dist/features/CognitiveCompare/onDemandCitations/contextBuilder.js +2 -0
- package/dist/features/CognitiveCompare/onDemandCitations/contextBuilder.js.map +1 -0
- package/dist/features/CognitiveCompare/onDemandCitations/href.js +2 -0
- package/dist/features/CognitiveCompare/onDemandCitations/href.js.map +1 -0
- package/dist/features/CognitiveCompare/onDemandCitations/payload.js +2 -0
- package/dist/features/CognitiveCompare/onDemandCitations/payload.js.map +1 -0
- package/dist/features/CognitiveCompare/onDemandCitations/response.js +2 -0
- package/dist/features/CognitiveCompare/onDemandCitations/response.js.map +1 -0
- package/dist/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js +2 -0
- package/dist/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js.map +1 -0
- package/dist/features/CognitiveCompare/utils/normalizeInlineMarkdown.js +2 -0
- package/dist/features/CognitiveCompare/utils/normalizeInlineMarkdown.js.map +1 -0
- package/dist/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js +2 -0
- package/dist/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js.map +1 -0
- package/dist/features/SegmentReviewComponents/BoundaryCard.js +1 -1
- package/dist/features/SegmentReviewComponents/BoundaryCard.js.map +1 -1
- package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
- package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
- package/dist/types/features/CognitiveCompare/CitationAnchor.d.ts +2 -0
- package/dist/types/features/CognitiveCompare/CitationAnchor.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CitationRenderer.d.ts +8 -1
- package/dist/types/features/CognitiveCompare/CitationRenderer.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CitationRendererInner.d.ts +13 -0
- package/dist/types/features/CognitiveCompare/CitationRendererInner.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/CognitiveCompare.d.ts +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompare.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompareConstants.d.ts +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompareConstants.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompareTypes.d.ts +14 -1
- package/dist/types/features/CognitiveCompare/CognitiveCompareTypes.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitiveComparehelpers.d.ts +12 -0
- package/dist/types/features/CognitiveCompare/CognitiveComparehelpers.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CognitivePopup.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/CompareContext.d.ts +10 -1
- package/dist/types/features/CognitiveCompare/CompareContext.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/GptWebCitationPanel.d.ts +7 -0
- package/dist/types/features/CognitiveCompare/GptWebCitationPanel.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/Guidelines/components/GuidelinePanel.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/Guidelines/components/WebGptPanel.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/Guidelines/utils/guidelineTargets.d.ts +3 -0
- package/dist/types/features/CognitiveCompare/Guidelines/utils/guidelineTargets.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.d.ts +3 -0
- package/dist/types/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.d.ts +14 -1
- package/dist/types/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.d.ts +19 -0
- package/dist/types/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/components/GuidelineSkeletonLoader.d.ts +8 -0
- package/dist/types/features/CognitiveCompare/components/GuidelineSkeletonLoader.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/components/LHSSectionRow.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/RHSSectionRow.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/SectionAccordion.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/SubSectionAccordion.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/components/SvgConnectors.d.ts +3 -2
- package/dist/types/features/CognitiveCompare/components/SvgConnectors.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/memoizedMarkdown.d.ts +2 -1
- package/dist/types/features/CognitiveCompare/hooks/memoizedMarkdown.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useCompareData.d.ts +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useCompareData.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useLinesCalculator.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/hooks/useOnDemandCitationCache.d.ts +10 -0
- package/dist/types/features/CognitiveCompare/hooks/useOnDemandCitationCache.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/hooks/useSideBySide.d.ts.map +1 -1
- package/dist/types/features/CognitiveCompare/onDemandCitations/cacheKey.d.ts +3 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/cacheKey.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/contextBuilder.d.ts +16 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/contextBuilder.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/href.d.ts +6 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/href.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/index.d.ts +7 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/index.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/payload.d.ts +4 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/payload.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/response.d.ts +3 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/response.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/types.d.ts +134 -0
- package/dist/types/features/CognitiveCompare/onDemandCitations/types.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/utils/normalizeCompactedGfmTables.d.ts +7 -0
- package/dist/types/features/CognitiveCompare/utils/normalizeCompactedGfmTables.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/utils/normalizeInlineMarkdown.d.ts +6 -0
- package/dist/types/features/CognitiveCompare/utils/normalizeInlineMarkdown.d.ts.map +1 -0
- package/dist/types/features/CognitiveCompare/utils/normalizeRedlineMarkdown.d.ts +6 -0
- package/dist/types/features/CognitiveCompare/utils/normalizeRedlineMarkdown.d.ts.map +1 -0
- package/dist/types/features/SegmentReviewComponents/BoundaryCard.d.ts.map +1 -1
- package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts +3 -1
- package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/features/Bookemon/BookemonStyles.js +0 -2
- package/dist/cjs/features/Bookemon/BookemonStyles.js.map +0 -1
- package/dist/cjs/lib/ui/icons.js +0 -2
- package/dist/cjs/lib/ui/icons.js.map +0 -1
- package/dist/cjs/lib/ui/materialCompat.js +0 -2
- package/dist/cjs/lib/ui/materialCompat.js.map +0 -1
- package/dist/features/Bookemon/BookemonStyles.js +0 -2
- package/dist/features/Bookemon/BookemonStyles.js.map +0 -1
- package/dist/lib/ui/icons.js +0 -2
- package/dist/lib/ui/icons.js.map +0 -1
- package/dist/lib/ui/materialCompat.js +0 -2
- package/dist/lib/ui/materialCompat.js.map +0 -1
- package/dist/types/features/Bookemon/BookemonStyles.d.ts +0 -6
- package/dist/types/features/Bookemon/BookemonStyles.d.ts.map +0 -1
- package/dist/types/lib/ui/icons.d.ts +0 -46
- package/dist/types/lib/ui/icons.d.ts.map +0 -1
- package/dist/types/lib/ui/materialCompat.d.ts +0 -117
- package/dist/types/lib/ui/materialCompat.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoundaryCard.js","sources":["../../../../src/features/SegmentReviewComponents/BoundaryCard.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from 'react';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\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 IconButton from '@mui/material/IconButton';\nimport Paper from '@mui/material/Paper';\nimport Radio from '@mui/material/Radio';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport RevertSummaryNotice from './RevertSummaryNotice';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport CognitiveIcon from './CognitiveIcon';\nimport CognitiveScoreBadge from './CognitiveScoreBadge';\nimport InfoAlert from '../../assests/icons/InfoAlert';\nimport { SegmentReviewAction } from './reviewStepAdapters';\n\nconst mergeSx = (\n base: SxProps<Theme>,\n override?: SxProps<Theme>\n): SxProps<Theme> => [\n base,\n ...(Array.isArray(override) ? override : override == null ? [] : [override]),\n] as SxProps<Theme>;\n\nexport interface BoundaryCardOption {\n id: string;\n title: ReactNode;\n description?: ReactNode;\n disabled?: boolean;\n}\n\nconst MERGE_ADJACENT_OPTION_ID = 'MERGE_ADJACENT';\ntype AdjacentMergeDirection = 'previous' | 'next';\n\nexport enum BoundaryReviewActionEnum {\n KEEP = 'KEEP',\n SPLIT_HERE = 'SPLIT_HERE',\n MERGE_NEXT = 'MERGE_NEXT',\n MERGE_PREV = 'MERGE_PREV',\n MERGE_PREVIOUS = 'MERGE_PREVIOUS',\n SET_RANGE = 'SET_RANGE',\n}\n\nexport type BoundaryReviewAction = `${BoundaryReviewActionEnum}`;\n\nexport interface BoundaryReviewMetadata {\n focus_page?: number | null;\n boundary_margin?: number | null;\n user_actions: readonly BoundaryReviewAction[];\n}\n\nexport interface BoundaryReviewConfirmDetails {\n selectedIndex: number;\n option: BoundaryCardOption;\n metadata?: BoundaryReviewMetadata;\n startPage?: number;\n endPage?: number;\n}\n\nexport interface BoundaryCardStyles {\n root?: SxProps<Theme>;\n header?: SxProps<Theme>;\n option?: SxProps<Theme>;\n rangeInput?: SxProps<Theme>;\n confirmButton?: SxProps<Theme>;\n manualSection?: SxProps<Theme>;\n manualConfirmation?: SxProps<Theme>;\n adjacentSelector?: SxProps<Theme>;\n impactWarning?: SxProps<Theme>;\n footer?: SxProps<Theme>;\n}\n\nexport const isBoundaryReviewAction = (value: string): value is BoundaryReviewAction =>\n Object.values(BoundaryReviewActionEnum).includes(value as BoundaryReviewActionEnum);\n\nexport const createBoundaryCardOptions = (\n metadata?: BoundaryReviewMetadata,\n reviewAction?: SegmentReviewAction,\n startPage?: number | null,\n endPage?: number | null\n): BoundaryCardOption[] => {\n if (!reviewAction || !metadata) return [];\n\n const additionalDecisions = reviewAction.additional_decisions;\n const additionalActions = Array.isArray(additionalDecisions)\n ? additionalDecisions\n : additionalDecisions\n ? Object.values(additionalDecisions).flat()\n : [];\n const allActionsMerged = Array.from(new Set([\n ...reviewAction.allowed_decisions,\n ...additionalActions,\n ]));\n\n return allActionsMerged.flatMap<BoundaryCardOption>(\n (action): BoundaryCardOption[] => {\n const focusPage = metadata.focus_page;\n const firstMergeAction = allActionsMerged.find(\n (candidate) =>\n candidate.toLowerCase().includes('merge')\n );\n const isSinglePageRange =\n focusPage != null &&\n startPage != null &&\n endPage != null &&\n focusPage === startPage &&\n focusPage === endPage;\n const isAtStart = focusPage != null && startPage != null && focusPage === startPage;\n // Closing-boundary reviews may point either at the segment's final page or\n // at the first page after it, depending on the backend decision source.\n const isAtEnd =\n focusPage != null &&\n endPage != null &&\n (focusPage === endPage || focusPage === endPage + 1);\n const isAtRangeBoundary = isAtStart || isAtEnd;\n const hasCompleteRange = startPage != null && endPage != null;\n const isValidInteriorFocus = focusPage != null && (\n !hasCompleteRange || (focusPage > startPage && focusPage < endPage)\n );\n const isSplitDisabled = isAtRangeBoundary || !isValidInteriorFocus;\n\n switch (action) {\n case BoundaryReviewActionEnum.SET_RANGE:\n return [];\n case 'KEEP':\n return [{\n id: action,\n title: 'Keep as is',\n description: 'Keep the current document boundary unchanged.',\n }];\n case 'SPLIT_HERE':\n return [{\n id: action,\n title: 'Split to a separate document',\n description: isSplitDisabled\n ? 'A valid page inside the document is required to split it.'\n : focusPage\n ? `Start a new document at page ${focusPage}.`\n : 'Create a new document at this boundary.',\n disabled: isSplitDisabled,\n }];\n case 'MERGE_PREV':\n case 'MERGE_NEXT':\n case 'MERGE_PREVIOUS':\n if (action !== firstMergeAction) return [];\n\n if (isSinglePageRange) {\n return [{\n id: MERGE_ADJACENT_OPTION_ID,\n title: 'Merge with an adjacent document',\n description: 'Choose to merge with the previous or next document.',\n }];\n }\n\n if (isAtStart) {\n return [{\n id: BoundaryReviewActionEnum.MERGE_PREVIOUS,\n title: 'Merge with previous document',\n description: 'Combine this document with the previous document.',\n }];\n }\n\n if (isAtEnd) {\n return [{\n id: BoundaryReviewActionEnum.MERGE_NEXT,\n title: 'Merge with next document',\n description: 'Combine this document with the next document.',\n }];\n }\n\n return [{\n id: MERGE_ADJACENT_OPTION_ID,\n title: 'Merge with an adjacent document',\n description: 'Choose to merge with the previous or next document.',\n }];\n }\n\n return [];\n }\n);\n}\n\nexport interface BoundaryCardProps {\n headerName?: ReactNode;\n title: ReactNode;\n pageNo?: ReactNode;\n content?: ReactNode;\n /** Replaces content when the API provides an operation-level revert summary. */\n revertSummary?: ReactNode;\n cognitiveScore?: ReactNode;\n config?: readonly BoundaryCardOption[];\n metadata?: BoundaryReviewMetadata;\n reviewAction?: SegmentReviewAction;\n previousSegmentTitle?: ReactNode;\n nextSegmentTitle?: ReactNode;\n /** Total number of pages in the document for validating custom page ranges. */\n totalPages?: number;\n\n selectedIndex?: number | null;\n defaultSelectedIndex?: number | null;\n /** Initial page range shown when SET_RANGE is selected. */\n defaultStartPage?: number | null;\n defaultEndPage?: number | null;\n onSelectionChange?: (selectedIndex: number, option: BoundaryCardOption) => void;\n onConfirm?: (\n selectedIndex: number,\n option: BoundaryCardOption,\n details?: BoundaryReviewConfirmDetails\n ) => void;\n onActionConfirm?: (\n action: BoundaryReviewAction,\n details: BoundaryReviewConfirmDetails\n ) => void;\n onCognitiveClick?: () => void;\n onAdjustManually?: () => void;\n onClose?: () => void;\n confirmLabel?: ReactNode;\n manualPrompt?: ReactNode;\n manualActionLabel?: ReactNode;\n cognitiveLabel?: ReactNode;\n showAdjustManually?: boolean;\n showCognitiveIntegrity?: boolean;\n showCloseButton?: boolean;\n confirmDisabled?: boolean;\n width?: number | string;\n maxWidth?: number | string;\n className?: string;\n styles?: BoundaryCardStyles;\n}\n\nexport default function BoundaryCard({\n headerName = 'Boundary Check',\n title,\n pageNo,\n content,\n revertSummary,\n cognitiveScore,\n config,\n metadata,\n previousSegmentTitle,\n nextSegmentTitle,\n selectedIndex,\n defaultSelectedIndex = null,\n defaultStartPage,\n defaultEndPage,\n onSelectionChange,\n onConfirm,\n onActionConfirm,\n onCognitiveClick,\n onAdjustManually,\n onClose,\n confirmLabel = 'Confirm',\n manualPrompt = \"Didn't find the right option?\",\n manualActionLabel = 'Adjust Manually',\n cognitiveLabel = 'Cognitive Integrity',\n showAdjustManually = true,\n showCognitiveIntegrity = true,\n showCloseButton = true,\n confirmDisabled = false,\n width = 260,\n maxWidth = 260,\n className,\n styles,\n reviewAction,\n totalPages\n}: BoundaryCardProps) {\n console.log(\"LOG: Total pages\", totalPages);\n const resolvedConfig = useMemo(\n () => (config ?? (metadata\n ? createBoundaryCardOptions(metadata, reviewAction ,defaultStartPage, defaultEndPage)\n : []))\n .filter((option) => option.id !== BoundaryReviewActionEnum.SET_RANGE),\n [config, defaultEndPage, defaultStartPage, metadata, reviewAction]\n );\n const [internalSelectedIndex, setInternalSelectedIndex] = useState<number | null>(\n defaultSelectedIndex\n );\n const [startPageInput, setStartPageInput] = useState(\n defaultStartPage == null ? '' : String(defaultStartPage)\n );\n const [endPageInput, setEndPageInput] = useState(\n defaultEndPage == null ? '' : String(defaultEndPage)\n );\n const [isManualExpanded, setIsManualExpanded] = useState(false);\n const [isManualConfirmationOpen, setIsManualConfirmationOpen] = useState(false);\n const [adjacentMergeDirection, setAdjacentMergeDirection] =\n useState<AdjacentMergeDirection | null>(null);\n // Track if user has already attempted to apply an unchanged range\n const [hasAttemptedUnchanged, setHasAttemptedUnchanged] = useState(false);\n const resolvedSelectedIndex = selectedIndex === undefined\n ? internalSelectedIndex\n : selectedIndex;\n const selectedOption = resolvedSelectedIndex == null\n ? undefined\n : resolvedConfig[resolvedSelectedIndex];\n const isAdjacentMergeSelected = selectedOption?.id === MERGE_ADJACENT_OPTION_ID;\n const canMergePrevious = previousSegmentTitle != null;\n const canMergeNext = nextSegmentTitle != null;\n const isOptionDisabled = (option: BoundaryCardOption) =>\n option.disabled === true ||\n (option.id === BoundaryReviewActionEnum.MERGE_PREV && !canMergePrevious) ||\n (option.id === BoundaryReviewActionEnum.MERGE_PREVIOUS && !canMergePrevious) ||\n (option.id === BoundaryReviewActionEnum.MERGE_NEXT && !canMergeNext) ||\n (option.id === MERGE_ADJACENT_OPTION_ID && !canMergePrevious && !canMergeNext);\n const parsedStartPage = Number(startPageInput);\n const parsedEndPage = Number(endPageInput);\n \n // Validation state for comprehensive error tracking\n const hasValidPageInputs =\n startPageInput.trim().length > 0 &&\n endPageInput.trim().length > 0 &&\n Number.isInteger(parsedStartPage) &&\n Number.isInteger(parsedEndPage) &&\n parsedStartPage > 0 &&\n parsedEndPage > 0;\n \n const isStartPageOutOfRange = totalPages != null && parsedStartPage > totalPages;\n const isEndPageOutOfRange = totalPages != null && parsedEndPage > totalPages;\n \n // Check if start page is greater than end page\n // Check if start page is greater than end page\n const isStartGreaterThanEnd =\n startPageInput.trim().length > 0 &&\n endPageInput.trim().length > 0 &&\n Number.isInteger(parsedStartPage) &&\n Number.isInteger(parsedEndPage) &&\n parsedStartPage > parsedEndPage;\n \n // Consolidated validation: range is valid only if all conditions pass\n const isRangeValid =\n hasValidPageInputs &&\n parsedStartPage <= parsedEndPage &&\n !isStartPageOutOfRange &&\n !isEndPageOutOfRange;\n \n // Check if the entered range is identical to the existing boundary\n const isRangeUnchanged =\n isRangeValid &&\n parsedStartPage === defaultStartPage &&\n parsedEndPage === defaultEndPage;\n const isConfirmDisabled =\n confirmDisabled ||\n !selectedOption ||\n isOptionDisabled(selectedOption) ||\n (isAdjacentMergeSelected && adjacentMergeDirection == null) ||\n (!onConfirm && !onActionConfirm);\n\n const handleSelect = (index: number, option: BoundaryCardOption) => {\n if (confirmDisabled || isOptionDisabled(option)) return;\n if (selectedIndex === undefined) setInternalSelectedIndex(index);\n if (option.id !== MERGE_ADJACENT_OPTION_ID) setAdjacentMergeDirection(null);\n if (isManualExpanded) {\n setIsManualExpanded(false);\n setIsManualConfirmationOpen(false);\n }\n onSelectionChange?.(index, option);\n };\n\n const handleConfirm = () => {\n if (isConfirmDisabled || resolvedSelectedIndex == null || !selectedOption) return;\n const resolvedAction = isAdjacentMergeSelected\n ? adjacentMergeDirection === 'previous'\n ? BoundaryReviewActionEnum.MERGE_PREVIOUS\n : BoundaryReviewActionEnum.MERGE_NEXT\n : selectedOption.id;\n const confirmedOption = isAdjacentMergeSelected\n ? { ...selectedOption, id: resolvedAction }\n : selectedOption;\n const details: BoundaryReviewConfirmDetails = {\n selectedIndex: resolvedSelectedIndex,\n option: confirmedOption,\n metadata,\n };\n onConfirm?.(resolvedSelectedIndex, confirmedOption, details);\n if (onActionConfirm && isBoundaryReviewAction(resolvedAction)) {\n onActionConfirm(resolvedAction, details);\n }\n };\n\n const handleManualApply = () => {\n if (!isRangeValid) return;\n // Track that user attempted to apply an unchanged range\n if (isRangeUnchanged) {\n setHasAttemptedUnchanged(true);\n return;\n }\n setIsManualConfirmationOpen(true);\n };\n\n const handleManualRangeConfirm = () => {\n if (!isRangeValid || isRangeUnchanged || !onConfirm) return;\n\n const option: BoundaryCardOption = {\n id: BoundaryReviewActionEnum.SET_RANGE,\n title: manualActionLabel,\n };\n const details: BoundaryReviewConfirmDetails = {\n selectedIndex: -1,\n option,\n startPage: parsedStartPage,\n endPage: parsedEndPage,\n metadata,\n };\n onConfirm(-1, option, details);\n };\n\n return (\n <Paper\n className={className}\n elevation={4}\n sx={mergeSx(\n {\n width,\n maxWidth,\n borderTop: '4px solid',\n borderColor: 'error.main',\n borderRadius: 2,\n bgcolor: 'background.paper',\n overflow: 'hidden',\n boxSizing: 'border-box',\n '@media (max-width: 372px)': { width: 'calc(100vw - 32px)' },\n },\n styles?.root\n )}\n >\n <Stack spacing={0.75} sx={{ p: 1 }}>\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.75} sx={styles?.header}>\n <InfoAlert color=\"error\" height={16} width={16} />\n <Typography\n sx={{\n flex: 1,\n color: 'error.main',\n fontSize: 12,\n fontWeight: 500,\n lineHeight: 1.25,\n textTransform: 'uppercase',\n }}\n >\n {headerName}\n </Typography>\n {showCloseButton && (\n <IconButton\n size=\"small\"\n onClick={onClose}\n disabled={!onClose}\n aria-label=\"Close boundary check\"\n sx={{ p: 0, '&.Mui-disabled': { color: 'text.secondary' } }}\n >\n <CloseIcon sx={{ fontSize: 17 }} />\n </IconButton>\n )}\n </Stack>\n\n <Box>\n <Typography sx={{ color: 'text.primary', fontSize: 14, fontWeight: 500 }}>\n {title}\n </Typography>\n {pageNo != null && (\n <Typography sx={{ mt: 0.125, color: 'text.secondary', fontSize: 12 }}>\n {pageNo}\n </Typography>\n )}\n <Divider sx={{ my: 0.625 }} />\n {revertSummary != null ? (\n <RevertSummaryNotice>{revertSummary}</RevertSummaryNotice>\n ) : content != null && (\n <Typography\n component=\"div\"\n sx={{ color: 'text.secondary', fontSize: 11.5, lineHeight: 1.3 }}\n >\n {content}\n </Typography>\n )}\n </Box>\n\n <Stack spacing={0.625} role=\"radiogroup\" aria-label=\"Boundary options\">\n {resolvedConfig.map((item, index) => {\n const isSelected = resolvedSelectedIndex === index;\n const isDisabled = isOptionDisabled(item);\n\n return (\n <Paper\n key={item.id}\n variant=\"outlined\"\n sx={mergeSx(\n {\n borderColor: isSelected ? '#1976d2' : 'divider',\n borderRadius: 2,\n bgcolor: isDisabled ? '#F8FAFC' : 'background.paper',\n overflow: 'hidden',\n },\n styles?.option\n )}\n >\n <ButtonBase\n role=\"radio\"\n aria-checked={isSelected}\n disabled={confirmDisabled || isDisabled}\n onClick={() => handleSelect(index, item)}\n sx={{\n width: '100%',\n justifyContent: 'flex-start',\n px: 0.75,\n py: 0.5,\n textAlign: 'left',\n }}\n >\n <Radio\n checked={isSelected}\n disabled={confirmDisabled || isDisabled}\n tabIndex={-1}\n size=\"small\"\n sx={{\n p: 0.25,\n mr: 0.5,\n '&.Mui-disabled': { color: '#CBD5E1' },\n }}\n />\n <Box sx={{ minWidth: 0 }}>\n <Typography\n sx={{\n color: isDisabled ? '#94A3B8' : 'text.primary',\n fontSize: 12.5,\n fontWeight: 500,\n }}\n >\n {item.title}\n </Typography>\n {item.description != null && (\n <Typography\n sx={{\n mt: 0.125,\n color: isDisabled ? '#94A3B8' : 'text.secondary',\n fontSize: 11,\n }}\n >\n {item.description}\n </Typography>\n )}\n </Box>\n </ButtonBase>\n\n {isSelected && item.id === MERGE_ADJACENT_OPTION_ID && (\n <Stack\n direction=\"row\"\n spacing={0.75}\n sx={mergeSx({ px: 0.75, pb: 0.75 }, styles?.adjacentSelector)}\n >\n {([\n {\n direction: 'previous' as const,\n title: previousSegmentTitle ?? 'No Previous document',\n caption: '← Merge into Previous',\n available: canMergePrevious,\n },\n {\n direction: 'next' as const,\n title: nextSegmentTitle ?? 'No Next document',\n caption: 'Merge into Next →',\n available: canMergeNext,\n },\n ]).map((adjacentOption) => {\n const isAdjacentSelected =\n adjacentMergeDirection === adjacentOption.direction;\n\n return (\n <Stack key={adjacentOption.direction} sx={{ flex: 1, minWidth: 0 }}>\n <ButtonBase\n disabled={confirmDisabled || !adjacentOption.available}\n onClick={() => setAdjacentMergeDirection(adjacentOption.direction)}\n aria-pressed={isAdjacentSelected}\n sx={{\n width: '100%',\n minWidth: 0,\n minHeight: 46,\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n p: 0.625,\n border: '1px solid',\n borderColor: isAdjacentSelected ? '#7F56D9' : '#D0D5DD',\n borderRadius: 1.5,\n bgcolor: isAdjacentSelected ? '#E0E7FF' : 'background.paper',\n color: isAdjacentSelected ? '#7F56D9' : (adjacentOption.available ? 'text.primary' : '#98A2B3'),\n textAlign: 'left',\n '&.Mui-disabled': {\n color: '#98A2B3',\n bgcolor: '#F8FAFC',\n },\n }}\n >\n <Typography\n sx={{\n color: 'inherit',\n fontSize: 11,\n fontWeight: 500,\n lineHeight: 1.25,\n overflowWrap: 'anywhere',\n }}\n >\n {adjacentOption.title}\n </Typography>\n </ButtonBase>\n <Typography\n sx={{\n mt: 0.5,\n color: isAdjacentSelected ? '#5925DC' : 'text.secondary',\n fontSize: 9.5,\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n textAlign: adjacentOption.direction === 'next' ? 'right' : 'left',\n }}\n >\n {adjacentOption.caption}\n </Typography>\n </Stack>\n );\n })}\n </Stack>\n )}\n </Paper>\n );\n })}\n\n {isAdjacentMergeSelected && adjacentMergeDirection != null && (\n <Stack\n direction=\"row\"\n alignItems=\"flex-start\"\n spacing={0.625}\n sx={mergeSx(\n {\n p: 0.75,\n border: '1px solid #FCA5A5',\n borderRadius: 1.5,\n bgcolor: '#FEF2F2',\n },\n styles?.impactWarning\n )}\n >\n <InfoAlert color=\"error\" height={14} width={14} sx={{ mt: 0.125 }} />\n <Typography sx={{ color: '#DC2626', fontSize: 10.5, lineHeight: 1.4 }}>\n This will impact the {adjacentMergeDirection} document. Its content and page\n range will change.\n </Typography>\n </Stack>\n )}\n\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isConfirmDisabled}\n onClick={handleConfirm}\n sx={mergeSx(\n {\n minHeight: 32,\n mt: 0.25,\n borderRadius: 2,\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'none',\n backgroundColor: '#5925DC',\n '&:hover': { backgroundColor: '#4A1FB8' },\n '&.Mui-disabled': {\n backgroundColor: '#D9D6FE',\n color: '#FFFFFF',\n },\n },\n styles?.confirmButton\n )}\n >\n {confirmLabel}\n </Button>\n </Stack>\n\n {showAdjustManually && (\n <Stack spacing={0.625} sx={styles?.manualSection}>\n <ButtonBase\n disabled={confirmDisabled}\n onClick={() => {\n const nextIsExpanded = !isManualExpanded;\n setIsManualExpanded(nextIsExpanded);\n setIsManualConfirmationOpen(false);\n if (nextIsExpanded) {\n if (selectedIndex === undefined) setInternalSelectedIndex(null);\n onAdjustManually?.();\n }\n }}\n aria-expanded={isManualExpanded}\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n borderRadius: 1,\n textAlign: 'left',\n }}\n >\n <Box>\n <Typography sx={{ color: 'text.primary', fontSize: 12, fontWeight:600 }}>\n {manualPrompt}\n </Typography>\n </Box>\n <ExpandMoreIcon\n sx={{\n color: 'text.secondary',\n fontSize: 16,\n transform: isManualExpanded ? 'rotate(180deg)' : 'none',\n transition: 'transform 150ms ease',\n }}\n />\n </ButtonBase>\n\n {isManualExpanded && !isManualConfirmationOpen && (\n <Box\n sx={{\n pt: 0.5,\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif',\n }}\n >\n {/* Labels Row */}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n columnGap: '8px',\n mb: '4px',\n }}\n >\n <Typography\n sx={{\n fontSize: '10.5px',\n fontWeight: 400,\n lineHeight: '14px',\n color: '#57697E',\n margin: 0,\n }}\n >\n Starts\n </Typography>\n <Typography\n sx={{\n fontSize: '10.5px',\n fontWeight: 400,\n lineHeight: '14px',\n color: '#57697E',\n margin: 0,\n }}\n >\n Ends\n </Typography>\n </Box>\n\n {/* Input Fields Grid */}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n columnGap: '8px',\n mb: '4px',\n }}\n >\n <Box>\n <TextField\n size=\"small\"\n type=\"text\"\n value={startPageInput}\n disabled={confirmDisabled}\n error={isStartPageOutOfRange || isStartGreaterThanEnd}\n onChange={(event) => {\n const value = event.target.value;\n if (/^\\d*$/.test(value)) {\n setStartPageInput(value);\n }\n }}\n inputProps={{\n inputMode: 'numeric',\n pattern: '[0-9]*',\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: '30px',\n backgroundColor: '#FFFFFF',\n\n '& fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n borderWidth: '1px',\n borderRadius: '6px',\n },\n\n '&:hover fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n },\n\n '&.Mui-focused fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#9488F6',\n borderWidth: '1px',\n },\n },\n\n '& .MuiOutlinedInput-input': {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: '1',\n color: '#34445A',\n padding: '0 10px',\n height: '30px',\n },\n }}\n />\n {isStartPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ {totalPages} (total pages)\n </Typography>\n )}\n {isStartGreaterThanEnd && !isStartPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ end page\n </Typography>\n )}\n </Box>\n <Box>\n <TextField\n size=\"small\"\n type=\"text\"\n value={endPageInput}\n disabled={confirmDisabled}\n error={isEndPageOutOfRange || isStartGreaterThanEnd}\n onChange={(event) => {\n const value = event.target.value;\n\n // Allow only positive integer characters\n if (/^\\d*$/.test(value)) {\n setEndPageInput(value);\n }\n }}\n inputProps={{\n inputMode: 'numeric',\n pattern: '[0-9]*',\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: '30px',\n backgroundColor: '#FFFFFF',\n\n '& fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n borderWidth: '1px',\n borderRadius: '6px',\n },\n\n '&:hover fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n },\n\n '&.Mui-focused fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#9488F6',\n borderWidth: '1px',\n },\n },\n\n '& .MuiOutlinedInput-input': {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: '1',\n color: '#34445A',\n padding: '0 10px',\n height: '30px',\n },\n }}\n />\n {isEndPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ {totalPages} (total pages)\n </Typography>\n )}\n {isStartGreaterThanEnd && !isEndPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≥ start page\n </Typography>\n )}\n </Box>\n </Box>\n\n {/* Apply Button */}\n <Box>\n <Button\n onClick={handleManualApply}\n disabled={confirmDisabled || !isRangeValid || isRangeUnchanged}\n sx={{\n height: '30px',\n padding: '0 12px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n backgroundColor: '#FFFFFF',\n border: '1px solid #8E80F3',\n borderRadius: '6px',\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif',\n fontSize: '12px',\n fontWeight: 600,\n lineHeight: '1',\n color: '#4A24CF',\n outline: 'none',\n cursor: 'pointer',\n textTransform: 'none',\n transition: 'all 150ms ease-in-out',\n '&:hover': !isRangeValid || isRangeUnchanged ? {} : {\n backgroundColor: '#FAF9FF',\n borderColor: '#7F6FF0',\n },\n '&:active': !isRangeValid || isRangeUnchanged ? {} : {\n transform: 'translateY(1px)',\n },\n '&.Mui-disabled': {\n backgroundColor: '#FFFFFF',\n borderColor: '#C3CFDC',\n color: '#A0ABBE',\n cursor: 'not-allowed',\n },\n }}\n >\n Apply\n </Button>\n </Box>\n\n {/* Unchanged Range Warning */}\n {isRangeUnchanged && hasAttemptedUnchanged && (\n <Box\n sx={{\n backgroundColor: '#FEF3C7',\n border: '1px solid #FBBF24',\n borderRadius: '6px',\n padding: '8px 10px',\n marginTop: '4px',\n }}\n >\n <Typography\n sx={{\n fontSize: '10px',\n color: '#B45309',\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n Please change the boundary to change the document boundary as no changes will be applied.\n </Typography>\n </Box>\n )}\n\n {/* Divider */}\n <Box\n sx={{\n width: '100%',\n height: '1px',\n marginTop: '8px',\n backgroundColor: '#EEF0F2',\n border: '0',\n }}\n />\n </Box>\n )}\n\n {isManualExpanded && isManualConfirmationOpen && (\n <Stack\n spacing={0.75}\n sx={mergeSx(\n {\n p: 0.75,\n borderRadius: 1.5,\n bgcolor: '#FFF7ED',\n },\n styles?.manualConfirmation\n )}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\n <InfoAlert color=\"warning\" height={14} width={14} />\n <Typography sx={{ color: '#EA580C', fontSize: 11, fontWeight: 600 }}>\n Confirm this change?\n </Typography>\n </Stack>\n <Typography sx={{ color: 'text.secondary', fontSize: 10.5, lineHeight: 1.4 }}>\n Pages {parsedStartPage}-{parsedEndPage} will become part of {title}, including\n pages from other documents in this range.\n </Typography>\n <Stack direction=\"row\" spacing={0.75}>\n <Button\n variant=\"outlined\"\n fullWidth\n onClick={() => setIsManualConfirmationOpen(false)}\n sx={{\n minHeight: 28,\n borderRadius: 1.5,\n fontSize: 11,\n textTransform: 'none',\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={\n confirmDisabled || !onConfirm || !isRangeValid || isRangeUnchanged\n }\n onClick={handleManualRangeConfirm}\n sx={{\n minHeight: 28,\n borderRadius: 1.5,\n bgcolor: '#EA580C',\n fontSize: 11,\n textTransform: 'none',\n '&:hover': { bgcolor: '#C2410C' },\n }}\n >\n Confirm\n </Button>\n </Stack>\n </Stack>\n )}\n </Stack>\n )}\n\n <Stack spacing={0.625} sx={styles?.footer}>\n\n {showCognitiveIntegrity && (\n <>\n <Divider />\n <ButtonBase\n onClick={onCognitiveClick}\n disabled={!onCognitiveClick}\n sx={{\n justifyContent: 'space-between',\n borderRadius: 1,\n textAlign: 'left',\n cursor: onCognitiveClick ? 'pointer' : 'not-allowed',\n }}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <CognitiveIcon sx={{ color: 'text.secondary' }} />\n <Typography sx={{ color: 'text.primary', fontSize: 12 }}>\n {cognitiveLabel}\n </Typography>\n </Stack>\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\n <CognitiveScoreBadge score={cognitiveScore} />\n <ChevronRightIcon sx={{ color: 'text.secondary' }} />\n </Stack>\n </ButtonBase>\n </>\n )}\n </Stack>\n </Stack>\n </Paper>\n );\n}\n"],"names":["mergeSx","base","override","Array","isArray","MERGE_ADJACENT_OPTION_ID","BoundaryReviewActionEnum","isBoundaryReviewAction","value","Object","values","includes","createBoundaryCardOptions","metadata","reviewAction","startPage","endPage","additionalDecisions","additional_decisions","additionalActions","flat","allActionsMerged","from","Set","allowed_decisions","flatMap","action","focusPage","focus_page","firstMergeAction","find","candidate","toLowerCase","isSinglePageRange","isAtStart","isAtEnd","isSplitDisabled","id","title","description","disabled","headerName","pageNo","content","revertSummary","cognitiveScore","config","previousSegmentTitle","nextSegmentTitle","selectedIndex","defaultSelectedIndex","defaultStartPage","defaultEndPage","onSelectionChange","onConfirm","onActionConfirm","onCognitiveClick","onAdjustManually","onClose","confirmLabel","manualPrompt","manualActionLabel","cognitiveLabel","showAdjustManually","showCognitiveIntegrity","showCloseButton","confirmDisabled","width","maxWidth","className","styles","totalPages","console","log","resolvedConfig","useMemo","filter","option","internalSelectedIndex","setInternalSelectedIndex","useState","startPageInput","setStartPageInput","String","endPageInput","setEndPageInput","isManualExpanded","setIsManualExpanded","isManualConfirmationOpen","setIsManualConfirmationOpen","adjacentMergeDirection","setAdjacentMergeDirection","hasAttemptedUnchanged","setHasAttemptedUnchanged","resolvedSelectedIndex","selectedOption","isAdjacentMergeSelected","canMergePrevious","canMergeNext","isOptionDisabled","parsedStartPage","Number","parsedEndPage","hasValidPageInputs","trim","length","isInteger","isStartPageOutOfRange","isEndPageOutOfRange","isStartGreaterThanEnd","isRangeValid","isRangeUnchanged","isConfirmDisabled","jsx","Paper","elevation","sx","borderTop","borderColor","borderRadius","bgcolor","overflow","boxSizing","root","children","jsxs","Stack","spacing","p","direction","alignItems","header","InfoAlert","color","height","Typography","flex","fontSize","fontWeight","lineHeight","textTransform","IconButton","size","onClick","CloseIcon","Box","mt","Divider","my","RevertSummaryNotice","component","role","map","item","index","isSelected","isDisabled","variant","ButtonBase","handleSelect","justifyContent","px","py","textAlign","Radio","checked","tabIndex","mr","minWidth","pb","adjacentSelector","caption","available","adjacentOption","isAdjacentSelected","minHeight","border","overflowWrap","whiteSpace","impactWarning","Button","fullWidth","resolvedAction","confirmedOption","details","backgroundColor","confirmButton","manualSection","nextIsExpanded","ExpandMoreIcon","transform","transition","pt","fontFamily","display","gridTemplateColumns","columnGap","mb","margin","TextField","type","error","onChange","event","target","test","inputProps","inputMode","pattern","borderWidth","padding","marginTop","outline","cursor","manualConfirmation","footer","Fragment","CognitiveIcon","CognitiveScoreBadge","score","ChevronRightIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BoundaryCard.js","sources":["../../../../src/features/SegmentReviewComponents/BoundaryCard.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from 'react';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\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 IconButton from '@mui/material/IconButton';\nimport Paper from '@mui/material/Paper';\nimport Radio from '@mui/material/Radio';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport RevertSummaryNotice from './RevertSummaryNotice';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport CognitiveIcon from './CognitiveIcon';\nimport CognitiveScoreBadge from './CognitiveScoreBadge';\nimport InfoAlert from '../../assests/icons/InfoAlert';\nimport { SegmentReviewAction } from './reviewStepAdapters';\n\nconst mergeSx = (\n base: SxProps<Theme>,\n override?: SxProps<Theme>\n): SxProps<Theme> => [\n base,\n ...(Array.isArray(override) ? override : override == null ? [] : [override]),\n] as SxProps<Theme>;\n\nexport interface BoundaryCardOption {\n id: string;\n title: ReactNode;\n description?: ReactNode;\n disabled?: boolean;\n}\n\nconst MERGE_ADJACENT_OPTION_ID = 'MERGE_ADJACENT';\ntype AdjacentMergeDirection = 'previous' | 'next';\n\nexport enum BoundaryReviewActionEnum {\n KEEP = 'KEEP',\n SPLIT_HERE = 'SPLIT_HERE',\n MERGE_NEXT = 'MERGE_NEXT',\n MERGE_PREV = 'MERGE_PREV',\n MERGE_PREVIOUS = 'MERGE_PREVIOUS',\n SET_RANGE = 'SET_RANGE',\n}\n\nexport type BoundaryReviewAction = `${BoundaryReviewActionEnum}`;\n\nexport interface BoundaryReviewMetadata {\n focus_page?: number | null;\n boundary_margin?: number | null;\n user_actions: readonly BoundaryReviewAction[];\n}\n\nexport interface BoundaryReviewConfirmDetails {\n selectedIndex: number;\n option: BoundaryCardOption;\n metadata?: BoundaryReviewMetadata;\n startPage?: number;\n endPage?: number;\n}\n\nexport interface BoundaryCardStyles {\n root?: SxProps<Theme>;\n header?: SxProps<Theme>;\n option?: SxProps<Theme>;\n rangeInput?: SxProps<Theme>;\n confirmButton?: SxProps<Theme>;\n manualSection?: SxProps<Theme>;\n manualConfirmation?: SxProps<Theme>;\n adjacentSelector?: SxProps<Theme>;\n impactWarning?: SxProps<Theme>;\n footer?: SxProps<Theme>;\n}\n\nexport const isBoundaryReviewAction = (value: string): value is BoundaryReviewAction =>\n Object.values(BoundaryReviewActionEnum).includes(value as BoundaryReviewActionEnum);\n\nexport const createBoundaryCardOptions = (\n metadata?: BoundaryReviewMetadata,\n reviewAction?: SegmentReviewAction,\n startPage?: number | null,\n endPage?: number | null\n): BoundaryCardOption[] => {\n if (!reviewAction || !metadata) return [];\n\n const additionalDecisions = reviewAction.additional_decisions;\n const additionalActions = Array.isArray(additionalDecisions)\n ? additionalDecisions\n : additionalDecisions\n ? Object.values(additionalDecisions).flat()\n : [];\n const allActionsMerged = Array.from(new Set([\n ...reviewAction.allowed_decisions,\n ...additionalActions,\n ]));\n\n return allActionsMerged.flatMap<BoundaryCardOption>(\n (action): BoundaryCardOption[] => {\n const focusPage = metadata.focus_page;\n const firstMergeAction = allActionsMerged.find(\n (candidate) =>\n candidate.toLowerCase().includes('merge')\n );\n const isSinglePageRange =\n focusPage != null &&\n startPage != null &&\n endPage != null &&\n focusPage === startPage &&\n focusPage === endPage;\n const isAtStart = focusPage != null && startPage != null && focusPage === startPage;\n // Closing-boundary reviews may point either at the segment's final page or\n // at the first page after it, depending on the backend decision source.\n const isAtEnd =\n focusPage != null &&\n endPage != null &&\n (focusPage === endPage || focusPage === endPage + 1);\n const isAtRangeBoundary = isAtStart || isAtEnd;\n const hasCompleteRange = startPage != null && endPage != null;\n const isValidInteriorFocus = focusPage != null && (\n !hasCompleteRange || (focusPage > startPage && focusPage < endPage)\n );\n const isSplitDisabled = isAtRangeBoundary || !isValidInteriorFocus;\n\n switch (action) {\n case BoundaryReviewActionEnum.SET_RANGE:\n return [];\n case 'KEEP':\n return [{\n id: action,\n title: 'Keep as is',\n description: 'Keep the current document boundary unchanged.',\n }];\n case 'SPLIT_HERE':\n return [{\n id: action,\n title: 'Split to a separate document',\n description: isSplitDisabled\n ? 'A valid page inside the document is required to split it.'\n : focusPage\n ? `Start a new document at page ${focusPage}.`\n : 'Create a new document at this boundary.',\n disabled: isSplitDisabled,\n }];\n case 'MERGE_PREV':\n case 'MERGE_NEXT':\n case 'MERGE_PREVIOUS':\n if (action !== firstMergeAction) return [];\n\n if (isSinglePageRange) {\n return [{\n id: MERGE_ADJACENT_OPTION_ID,\n title: 'Merge with an adjacent document',\n description: 'Choose to merge with the previous or next document.',\n }];\n }\n\n if (isAtStart) {\n return [{\n id: BoundaryReviewActionEnum.MERGE_PREVIOUS,\n title: 'Merge with previous document',\n description: 'Combine this document with the previous document.',\n }];\n }\n\n if (isAtEnd) {\n return [{\n id: BoundaryReviewActionEnum.MERGE_NEXT,\n title: 'Merge with next document',\n description: 'Combine this document with the next document.',\n }];\n }\n\n return [{\n id: MERGE_ADJACENT_OPTION_ID,\n title: 'Merge with an adjacent document',\n description: 'Choose to merge with the previous or next document.',\n }];\n }\n\n return [];\n }\n);\n}\n\nexport interface BoundaryCardProps {\n headerName?: ReactNode;\n title: ReactNode;\n pageNo?: ReactNode;\n content?: ReactNode;\n /** Replaces content when the API provides an operation-level revert summary. */\n revertSummary?: ReactNode;\n cognitiveScore?: ReactNode;\n config?: readonly BoundaryCardOption[];\n metadata?: BoundaryReviewMetadata;\n reviewAction?: SegmentReviewAction;\n previousSegmentTitle?: ReactNode;\n nextSegmentTitle?: ReactNode;\n /** Total number of pages in the document for validating custom page ranges. */\n totalPages?: number;\n\n selectedIndex?: number | null;\n defaultSelectedIndex?: number | null;\n /** Initial page range shown when SET_RANGE is selected. */\n defaultStartPage?: number | null;\n defaultEndPage?: number | null;\n onSelectionChange?: (selectedIndex: number, option: BoundaryCardOption) => void;\n onConfirm?: (\n selectedIndex: number,\n option: BoundaryCardOption,\n details?: BoundaryReviewConfirmDetails\n ) => void;\n onActionConfirm?: (\n action: BoundaryReviewAction,\n details: BoundaryReviewConfirmDetails\n ) => void;\n onCognitiveClick?: () => void;\n onAdjustManually?: () => void;\n onClose?: () => void;\n confirmLabel?: ReactNode;\n manualPrompt?: ReactNode;\n manualActionLabel?: ReactNode;\n cognitiveLabel?: ReactNode;\n showAdjustManually?: boolean;\n showCognitiveIntegrity?: boolean;\n showCloseButton?: boolean;\n confirmDisabled?: boolean;\n width?: number | string;\n maxWidth?: number | string;\n className?: string;\n styles?: BoundaryCardStyles;\n}\n\nexport default function BoundaryCard({\n headerName = 'Boundary Check',\n title,\n pageNo,\n content,\n revertSummary,\n cognitiveScore,\n config,\n metadata,\n previousSegmentTitle,\n nextSegmentTitle,\n selectedIndex,\n defaultSelectedIndex = null,\n defaultStartPage,\n defaultEndPage,\n onSelectionChange,\n onConfirm,\n onActionConfirm,\n onCognitiveClick,\n onAdjustManually,\n onClose,\n confirmLabel = 'Confirm',\n manualPrompt = \"Didn't find the right option?\",\n manualActionLabel = 'Adjust Manually',\n cognitiveLabel = 'Cognitive Integrity',\n showAdjustManually = true,\n showCognitiveIntegrity = true,\n showCloseButton = true,\n confirmDisabled = false,\n width = 260,\n maxWidth = \"100%\",\n className,\n styles,\n reviewAction,\n totalPages\n}: BoundaryCardProps) {\n console.log(\"LOG: Total pages\", totalPages);\n const resolvedConfig = useMemo(\n () => (config ?? (metadata\n ? createBoundaryCardOptions(metadata, reviewAction ,defaultStartPage, defaultEndPage)\n : []))\n .filter((option) => option.id !== BoundaryReviewActionEnum.SET_RANGE),\n [config, defaultEndPage, defaultStartPage, metadata, reviewAction]\n );\n const [internalSelectedIndex, setInternalSelectedIndex] = useState<number | null>(\n defaultSelectedIndex\n );\n const [startPageInput, setStartPageInput] = useState(\n defaultStartPage == null ? '' : String(defaultStartPage)\n );\n const [endPageInput, setEndPageInput] = useState(\n defaultEndPage == null ? '' : String(defaultEndPage)\n );\n const [isManualExpanded, setIsManualExpanded] = useState(false);\n const [isManualConfirmationOpen, setIsManualConfirmationOpen] = useState(false);\n const [adjacentMergeDirection, setAdjacentMergeDirection] =\n useState<AdjacentMergeDirection | null>(null);\n // Track if user has already attempted to apply an unchanged range\n const [hasAttemptedUnchanged, setHasAttemptedUnchanged] = useState(false);\n const resolvedSelectedIndex = selectedIndex === undefined\n ? internalSelectedIndex\n : selectedIndex;\n const selectedOption = resolvedSelectedIndex == null\n ? undefined\n : resolvedConfig[resolvedSelectedIndex];\n const isAdjacentMergeSelected = selectedOption?.id === MERGE_ADJACENT_OPTION_ID;\n const canMergePrevious = previousSegmentTitle != null;\n const canMergeNext = nextSegmentTitle != null;\n const isOptionDisabled = (option: BoundaryCardOption) =>\n option.disabled === true ||\n (option.id === BoundaryReviewActionEnum.MERGE_PREV && !canMergePrevious) ||\n (option.id === BoundaryReviewActionEnum.MERGE_PREVIOUS && !canMergePrevious) ||\n (option.id === BoundaryReviewActionEnum.MERGE_NEXT && !canMergeNext) ||\n (option.id === MERGE_ADJACENT_OPTION_ID && !canMergePrevious && !canMergeNext);\n const parsedStartPage = Number(startPageInput);\n const parsedEndPage = Number(endPageInput);\n \n // Validation state for comprehensive error tracking\n const hasValidPageInputs =\n startPageInput.trim().length > 0 &&\n endPageInput.trim().length > 0 &&\n Number.isInteger(parsedStartPage) &&\n Number.isInteger(parsedEndPage) &&\n parsedStartPage > 0 &&\n parsedEndPage > 0;\n \n const isStartPageOutOfRange = totalPages != null && parsedStartPage > totalPages;\n const isEndPageOutOfRange = totalPages != null && parsedEndPage > totalPages;\n \n // Check if start page is greater than end page\n // Check if start page is greater than end page\n const isStartGreaterThanEnd =\n startPageInput.trim().length > 0 &&\n endPageInput.trim().length > 0 &&\n Number.isInteger(parsedStartPage) &&\n Number.isInteger(parsedEndPage) &&\n parsedStartPage > parsedEndPage;\n \n // Consolidated validation: range is valid only if all conditions pass\n const isRangeValid =\n hasValidPageInputs &&\n parsedStartPage <= parsedEndPage &&\n !isStartPageOutOfRange &&\n !isEndPageOutOfRange;\n \n // Check if the entered range is identical to the existing boundary\n const isRangeUnchanged =\n isRangeValid &&\n parsedStartPage === defaultStartPage &&\n parsedEndPage === defaultEndPage;\n const isConfirmDisabled =\n confirmDisabled ||\n !selectedOption ||\n isOptionDisabled(selectedOption) ||\n (isAdjacentMergeSelected && adjacentMergeDirection == null) ||\n (!onConfirm && !onActionConfirm);\n\n const handleSelect = (index: number, option: BoundaryCardOption) => {\n if (confirmDisabled || isOptionDisabled(option)) return;\n if (selectedIndex === undefined) setInternalSelectedIndex(index);\n if (option.id !== MERGE_ADJACENT_OPTION_ID) setAdjacentMergeDirection(null);\n if (isManualExpanded) {\n setIsManualExpanded(false);\n setIsManualConfirmationOpen(false);\n }\n onSelectionChange?.(index, option);\n };\n\n const handleConfirm = () => {\n if (isConfirmDisabled || resolvedSelectedIndex == null || !selectedOption) return;\n const resolvedAction = isAdjacentMergeSelected\n ? adjacentMergeDirection === 'previous'\n ? BoundaryReviewActionEnum.MERGE_PREVIOUS\n : BoundaryReviewActionEnum.MERGE_NEXT\n : selectedOption.id;\n const confirmedOption = isAdjacentMergeSelected\n ? { ...selectedOption, id: resolvedAction }\n : selectedOption;\n const details: BoundaryReviewConfirmDetails = {\n selectedIndex: resolvedSelectedIndex,\n option: confirmedOption,\n metadata,\n };\n onConfirm?.(resolvedSelectedIndex, confirmedOption, details);\n if (onActionConfirm && isBoundaryReviewAction(resolvedAction)) {\n onActionConfirm(resolvedAction, details);\n }\n };\n\n const handleManualApply = () => {\n if (!isRangeValid) return;\n // Track that user attempted to apply an unchanged range\n if (isRangeUnchanged) {\n setHasAttemptedUnchanged(true);\n return;\n }\n setIsManualConfirmationOpen(true);\n };\n\n const handleManualRangeConfirm = () => {\n if (!isRangeValid || isRangeUnchanged || !onConfirm) return;\n\n const option: BoundaryCardOption = {\n id: BoundaryReviewActionEnum.SET_RANGE,\n title: manualActionLabel,\n };\n const details: BoundaryReviewConfirmDetails = {\n selectedIndex: -1,\n option,\n startPage: parsedStartPage,\n endPage: parsedEndPage,\n metadata,\n };\n onConfirm(-1, option, details);\n };\n\n return (\n <Paper\n className={className}\n elevation={4}\n sx={mergeSx(\n {\n width,\n maxWidth,\n borderTop: '4px solid',\n borderColor: 'error.main',\n borderRadius: 2,\n bgcolor: 'background.paper',\n overflow: 'hidden',\n boxSizing: 'border-box',\n // The card is rendered inside a responsive review rail, which can be\n // narrower than 320px. Do not force it wider than its container.\n minWidth: 0,\n },\n styles?.root\n )}\n >\n <Stack spacing={0.75} sx={{ p: 1 }}>\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.75} sx={styles?.header}>\n <InfoAlert color=\"error\" height={16} width={16} />\n <Typography\n sx={{\n flex: 1,\n color: 'error.main',\n fontSize: 12,\n fontWeight: 500,\n lineHeight: 1.25,\n textTransform: 'uppercase',\n }}\n >\n {headerName}\n </Typography>\n {showCloseButton && (\n <IconButton\n size=\"small\"\n onClick={onClose}\n disabled={!onClose}\n aria-label=\"Close boundary check\"\n sx={{ p: 0, '&.Mui-disabled': { color: 'text.secondary' } }}\n >\n <CloseIcon sx={{ fontSize: 17 }} />\n </IconButton>\n )}\n </Stack>\n\n <Box>\n <Typography sx={{ color: 'text.primary', fontSize: 14, fontWeight: 500 }}>\n {title}\n </Typography>\n {pageNo != null && (\n <Typography sx={{ mt: 0.125, color: 'text.secondary', fontSize: 12 }}>\n {pageNo}\n </Typography>\n )}\n <Divider sx={{ my: 0.625 }} />\n {revertSummary != null ? (\n <RevertSummaryNotice>{revertSummary}</RevertSummaryNotice>\n ) : content != null && (\n <Typography\n component=\"div\"\n sx={{ color: 'text.secondary', fontSize: 11.5, lineHeight: 1.3 }}\n >\n {content}\n </Typography>\n )}\n </Box>\n\n <Stack spacing={0.625} role=\"radiogroup\" aria-label=\"Boundary options\">\n {resolvedConfig.map((item, index) => {\n const isSelected = resolvedSelectedIndex === index;\n const isDisabled = isOptionDisabled(item);\n\n return (\n <Paper\n key={item.id}\n variant=\"outlined\"\n sx={mergeSx(\n {\n borderColor: isSelected ? '#1976d2' : 'divider',\n borderRadius: 2,\n bgcolor: isDisabled ? '#F8FAFC' : 'background.paper',\n overflow: 'hidden',\n },\n styles?.option\n )}\n >\n <ButtonBase\n role=\"radio\"\n aria-checked={isSelected}\n disabled={confirmDisabled || isDisabled}\n onClick={() => handleSelect(index, item)}\n sx={{\n width: '100%',\n justifyContent: 'flex-start',\n px: 0.75,\n py: 0.5,\n textAlign: 'left',\n }}\n >\n <Radio\n checked={isSelected}\n disabled={confirmDisabled || isDisabled}\n tabIndex={-1}\n size=\"small\"\n sx={{\n p: 0.25,\n mr: 0.5,\n '&.Mui-disabled': { color: '#CBD5E1' },\n }}\n />\n <Box sx={{ minWidth: 0 }}>\n <Typography\n sx={{\n color: isDisabled ? '#94A3B8' : 'text.primary',\n fontSize: 12.5,\n fontWeight: 500,\n }}\n >\n {item.title}\n </Typography>\n {item.description != null && (\n <Typography\n sx={{\n mt: 0.125,\n color: isDisabled ? '#94A3B8' : 'text.secondary',\n fontSize: 11,\n }}\n >\n {item.description}\n </Typography>\n )}\n </Box>\n </ButtonBase>\n\n {isSelected && item.id === MERGE_ADJACENT_OPTION_ID && (\n <Stack\n direction=\"row\"\n spacing={0.75}\n sx={mergeSx({\n px: 0.75,\n pb: 0.75,\n minWidth: 0,\n '& > *': { minWidth: 0 },\n }, styles?.adjacentSelector)}\n >\n {([\n {\n direction: 'previous' as const,\n title: previousSegmentTitle ?? 'No Previous document',\n caption: '← Merge into Previous',\n available: canMergePrevious,\n },\n {\n direction: 'next' as const,\n title: nextSegmentTitle ?? 'No Next document',\n caption: 'Merge into Next →',\n available: canMergeNext,\n },\n ]).map((adjacentOption) => {\n const isAdjacentSelected =\n adjacentMergeDirection === adjacentOption.direction;\n\n return (\n <Stack key={adjacentOption.direction} sx={{ flex: 1, minWidth: 0 }}>\n <ButtonBase\n disabled={confirmDisabled || !adjacentOption.available}\n onClick={() => setAdjacentMergeDirection(adjacentOption.direction)}\n aria-pressed={isAdjacentSelected}\n sx={{\n width: '100%',\n minWidth: 0,\n minHeight: 46,\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n p: 0.625,\n border: '1px solid',\n borderColor: isAdjacentSelected ? '#7F56D9' : '#D0D5DD',\n borderRadius: 1.5,\n bgcolor: isAdjacentSelected ? '#E0E7FF' : 'background.paper',\n color: isAdjacentSelected ? '#7F56D9' : (adjacentOption.available ? 'text.primary' : '#98A2B3'),\n textAlign: 'left',\n '&.Mui-disabled': {\n color: '#98A2B3',\n bgcolor: '#F8FAFC',\n },\n }}\n >\n <Typography\n sx={{\n color: 'inherit',\n fontSize: 11,\n fontWeight: 500,\n lineHeight: 1.25,\n overflowWrap: 'anywhere',\n }}\n >\n {adjacentOption.title}\n </Typography>\n </ButtonBase>\n <Typography\n sx={{\n mt: 0.5,\n color: isAdjacentSelected ? '#5925DC' : 'text.secondary',\n fontSize: 9.5,\n lineHeight: 1.2,\n // Let captions wrap in narrow rails instead of\n // painting over the neighbouring option.\n whiteSpace: 'normal',\n overflowWrap: 'anywhere',\n textAlign: adjacentOption.direction === 'next' ? 'right' : 'left',\n }}\n >\n {adjacentOption.caption}\n </Typography>\n </Stack>\n );\n })}\n </Stack>\n )}\n </Paper>\n );\n })}\n\n {isAdjacentMergeSelected && adjacentMergeDirection != null && (\n <Stack\n direction=\"row\"\n alignItems=\"flex-start\"\n spacing={0.625}\n sx={mergeSx(\n {\n p: 0.75,\n border: '1px solid #FCA5A5',\n borderRadius: 1.5,\n bgcolor: '#FEF2F2',\n },\n styles?.impactWarning\n )}\n >\n <InfoAlert color=\"error\" height={14} width={14} sx={{ mt: 0.125 }} />\n <Typography sx={{ color: '#DC2626', fontSize: 10.5, lineHeight: 1.4 }}>\n This will impact the {adjacentMergeDirection} document. Its content and page\n range will change.\n </Typography>\n </Stack>\n )}\n\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isConfirmDisabled}\n onClick={handleConfirm}\n sx={mergeSx(\n {\n minHeight: 32,\n mt: 0.25,\n borderRadius: 2,\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'none',\n backgroundColor: '#5925DC',\n '&:hover': { backgroundColor: '#4A1FB8' },\n '&.Mui-disabled': {\n backgroundColor: '#D9D6FE',\n color: '#FFFFFF',\n },\n },\n styles?.confirmButton\n )}\n >\n {confirmLabel}\n </Button>\n </Stack>\n\n {showAdjustManually && (\n <Stack spacing={0.625} sx={styles?.manualSection}>\n <ButtonBase\n disabled={confirmDisabled}\n onClick={() => {\n const nextIsExpanded = !isManualExpanded;\n setIsManualExpanded(nextIsExpanded);\n setIsManualConfirmationOpen(false);\n if (nextIsExpanded) {\n if (selectedIndex === undefined) setInternalSelectedIndex(null);\n onAdjustManually?.();\n }\n }}\n aria-expanded={isManualExpanded}\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n borderRadius: 1,\n textAlign: 'left',\n }}\n >\n <Box>\n <Typography sx={{ color: 'text.primary', fontSize: 12, fontWeight:600 }}>\n {manualPrompt}\n </Typography>\n </Box>\n <ExpandMoreIcon\n sx={{\n color: 'text.secondary',\n fontSize: 16,\n transform: isManualExpanded ? 'rotate(180deg)' : 'none',\n transition: 'transform 150ms ease',\n }}\n />\n </ButtonBase>\n\n {isManualExpanded && !isManualConfirmationOpen && (\n <Box\n sx={{\n pt: 0.5,\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif',\n }}\n >\n {/* Labels Row */}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n columnGap: '8px',\n mb: '4px',\n }}\n >\n <Typography\n sx={{\n fontSize: '10.5px',\n fontWeight: 400,\n lineHeight: '14px',\n color: '#57697E',\n margin: 0,\n }}\n >\n Starts\n </Typography>\n <Typography\n sx={{\n fontSize: '10.5px',\n fontWeight: 400,\n lineHeight: '14px',\n color: '#57697E',\n margin: 0,\n }}\n >\n Ends\n </Typography>\n </Box>\n\n {/* Input Fields Grid */}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n columnGap: '8px',\n mb: '4px',\n }}\n >\n <Box>\n <TextField\n size=\"small\"\n type=\"text\"\n value={startPageInput}\n disabled={confirmDisabled}\n error={isStartPageOutOfRange || isStartGreaterThanEnd}\n onChange={(event) => {\n const value = event.target.value;\n if (/^\\d*$/.test(value)) {\n setStartPageInput(value);\n }\n }}\n inputProps={{\n inputMode: 'numeric',\n pattern: '[0-9]*',\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: '30px',\n backgroundColor: '#FFFFFF',\n\n '& fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n borderWidth: '1px',\n borderRadius: '6px',\n },\n\n '&:hover fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n },\n\n '&.Mui-focused fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#9488F6',\n borderWidth: '1px',\n },\n },\n\n '& .MuiOutlinedInput-input': {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: '1',\n color: '#34445A',\n padding: '0 10px',\n height: '30px',\n },\n }}\n />\n {isStartPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ {totalPages} (total pages)\n </Typography>\n )}\n {isStartGreaterThanEnd && !isStartPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ end page\n </Typography>\n )}\n </Box>\n <Box>\n <TextField\n size=\"small\"\n type=\"text\"\n value={endPageInput}\n disabled={confirmDisabled}\n error={isEndPageOutOfRange || isStartGreaterThanEnd}\n onChange={(event) => {\n const value = event.target.value;\n\n // Allow only positive integer characters\n if (/^\\d*$/.test(value)) {\n setEndPageInput(value);\n }\n }}\n inputProps={{\n inputMode: 'numeric',\n pattern: '[0-9]*',\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: '30px',\n backgroundColor: '#FFFFFF',\n\n '& fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n borderWidth: '1px',\n borderRadius: '6px',\n },\n\n '&:hover fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n },\n\n '&.Mui-focused fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#9488F6',\n borderWidth: '1px',\n },\n },\n\n '& .MuiOutlinedInput-input': {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: '1',\n color: '#34445A',\n padding: '0 10px',\n height: '30px',\n },\n }}\n />\n {isEndPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ {totalPages} (total pages)\n </Typography>\n )}\n {isStartGreaterThanEnd && !isEndPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≥ start page\n </Typography>\n )}\n </Box>\n </Box>\n\n {/* Apply Button */}\n <Box>\n <Button\n onClick={handleManualApply}\n disabled={confirmDisabled || !isRangeValid || isRangeUnchanged}\n sx={{\n height: '30px',\n padding: '0 12px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n backgroundColor: '#FFFFFF',\n border: '1px solid #8E80F3',\n borderRadius: '6px',\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif',\n fontSize: '12px',\n fontWeight: 600,\n lineHeight: '1',\n color: '#4A24CF',\n outline: 'none',\n cursor: 'pointer',\n textTransform: 'none',\n transition: 'all 150ms ease-in-out',\n '&:hover': !isRangeValid || isRangeUnchanged ? {} : {\n backgroundColor: '#FAF9FF',\n borderColor: '#7F6FF0',\n },\n '&:active': !isRangeValid || isRangeUnchanged ? {} : {\n transform: 'translateY(1px)',\n },\n '&.Mui-disabled': {\n backgroundColor: '#FFFFFF',\n borderColor: '#C3CFDC',\n color: '#A0ABBE',\n cursor: 'not-allowed',\n },\n }}\n >\n Apply\n </Button>\n </Box>\n\n {/* Unchanged Range Warning */}\n {isRangeUnchanged && hasAttemptedUnchanged && (\n <Box\n sx={{\n backgroundColor: '#FEF3C7',\n border: '1px solid #FBBF24',\n borderRadius: '6px',\n padding: '8px 10px',\n marginTop: '4px',\n }}\n >\n <Typography\n sx={{\n fontSize: '10px',\n color: '#B45309',\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n Please change the boundary to change the document boundary as no changes will be applied.\n </Typography>\n </Box>\n )}\n\n {/* Divider */}\n <Box\n sx={{\n width: '100%',\n height: '1px',\n marginTop: '8px',\n backgroundColor: '#EEF0F2',\n border: '0',\n }}\n />\n </Box>\n )}\n\n {isManualExpanded && isManualConfirmationOpen && (\n <Stack\n spacing={0.75}\n sx={mergeSx(\n {\n p: 0.75,\n borderRadius: 1.5,\n bgcolor: '#FFF7ED',\n },\n styles?.manualConfirmation\n )}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\n <InfoAlert color=\"warning\" height={14} width={14} />\n <Typography sx={{ color: '#EA580C', fontSize: 11, fontWeight: 600 }}>\n Confirm this change?\n </Typography>\n </Stack>\n <Typography sx={{ color: 'text.secondary', fontSize: 10.5, lineHeight: 1.4 }}>\n Pages {parsedStartPage}-{parsedEndPage} will become part of {title}, including\n pages from other documents in this range.\n </Typography>\n <Stack direction=\"row\" spacing={0.75}>\n <Button\n variant=\"outlined\"\n fullWidth\n onClick={() => setIsManualConfirmationOpen(false)}\n sx={{\n minHeight: 28,\n borderRadius: 1.5,\n fontSize: 11,\n textTransform: 'none',\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={\n confirmDisabled || !onConfirm || !isRangeValid || isRangeUnchanged\n }\n onClick={handleManualRangeConfirm}\n sx={{\n minHeight: 28,\n borderRadius: 1.5,\n bgcolor: '#EA580C',\n fontSize: 11,\n textTransform: 'none',\n '&:hover': { bgcolor: '#C2410C' },\n }}\n >\n Confirm\n </Button>\n </Stack>\n </Stack>\n )}\n </Stack>\n )}\n\n <Stack spacing={0.625} sx={styles?.footer}>\n\n {showCognitiveIntegrity && (\n <>\n <Divider />\n <ButtonBase\n onClick={onCognitiveClick}\n disabled={!onCognitiveClick}\n sx={{\n justifyContent: 'space-between',\n borderRadius: 1,\n textAlign: 'left',\n cursor: onCognitiveClick ? 'pointer' : 'not-allowed',\n }}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <CognitiveIcon sx={{ color: 'text.secondary' }} />\n <Typography sx={{ color: 'text.primary', fontSize: 12 }}>\n {cognitiveLabel}\n </Typography>\n </Stack>\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\n <CognitiveScoreBadge score={cognitiveScore} />\n <ChevronRightIcon sx={{ color: 'text.secondary' }} />\n </Stack>\n </ButtonBase>\n </>\n )}\n </Stack>\n </Stack>\n </Paper>\n );\n}\n"],"names":["mergeSx","base","override","Array","isArray","MERGE_ADJACENT_OPTION_ID","BoundaryReviewActionEnum","isBoundaryReviewAction","value","Object","values","includes","createBoundaryCardOptions","metadata","reviewAction","startPage","endPage","additionalDecisions","additional_decisions","additionalActions","flat","allActionsMerged","from","Set","allowed_decisions","flatMap","action","focusPage","focus_page","firstMergeAction","find","candidate","toLowerCase","isSinglePageRange","isAtStart","isAtEnd","isSplitDisabled","id","title","description","disabled","headerName","pageNo","content","revertSummary","cognitiveScore","config","previousSegmentTitle","nextSegmentTitle","selectedIndex","defaultSelectedIndex","defaultStartPage","defaultEndPage","onSelectionChange","onConfirm","onActionConfirm","onCognitiveClick","onAdjustManually","onClose","confirmLabel","manualPrompt","manualActionLabel","cognitiveLabel","showAdjustManually","showCognitiveIntegrity","showCloseButton","confirmDisabled","width","maxWidth","className","styles","totalPages","console","log","resolvedConfig","useMemo","filter","option","internalSelectedIndex","setInternalSelectedIndex","useState","startPageInput","setStartPageInput","String","endPageInput","setEndPageInput","isManualExpanded","setIsManualExpanded","isManualConfirmationOpen","setIsManualConfirmationOpen","adjacentMergeDirection","setAdjacentMergeDirection","hasAttemptedUnchanged","setHasAttemptedUnchanged","resolvedSelectedIndex","selectedOption","isAdjacentMergeSelected","canMergePrevious","canMergeNext","isOptionDisabled","parsedStartPage","Number","parsedEndPage","hasValidPageInputs","trim","length","isInteger","isStartPageOutOfRange","isEndPageOutOfRange","isStartGreaterThanEnd","isRangeValid","isRangeUnchanged","isConfirmDisabled","jsx","Paper","elevation","sx","borderTop","borderColor","borderRadius","bgcolor","overflow","boxSizing","minWidth","root","children","jsxs","Stack","spacing","p","direction","alignItems","header","InfoAlert","color","height","Typography","flex","fontSize","fontWeight","lineHeight","textTransform","IconButton","size","onClick","CloseIcon","Box","mt","Divider","my","RevertSummaryNotice","component","role","map","item","index","isSelected","isDisabled","variant","ButtonBase","handleSelect","justifyContent","px","py","textAlign","Radio","checked","tabIndex","mr","pb","adjacentSelector","caption","available","adjacentOption","isAdjacentSelected","minHeight","border","overflowWrap","whiteSpace","impactWarning","Button","fullWidth","resolvedAction","confirmedOption","details","backgroundColor","confirmButton","manualSection","nextIsExpanded","ExpandMoreIcon","transform","transition","pt","fontFamily","display","gridTemplateColumns","columnGap","mb","margin","TextField","type","error","onChange","event","target","test","inputProps","inputMode","pattern","borderWidth","padding","marginTop","outline","cursor","manualConfirmation","footer","Fragment","CognitiveIcon","CognitiveScoreBadge","score","ChevronRightIcon"],"mappings":"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"}
|
|
@@ -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"),v=require("./RevertCard.js"),f=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}){console.log("LOG: TOTAL PAGE IN PARENT",C);const{boundaryReviews:ge,labelReviews:ue,pageReviews:ce}=t.useMemo(()=>g.extractSegmentReviewData(E),[E]),[me,pe]=t.useState(()=>new Map),[ve,fe]=t.useState(()=>new Set),he=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]),we=t.useMemo(()=>new Set(ue.map(e=>g.getSegmentReviewKey(e.segment))),[ue]),ye=t.useMemo(()=>h.getPendingMergeImpactedSegmentKeys(E),[E]);t.useEffect(()=>{pe(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(()=>{fe(e=>{let t=!1;const n=new Set(e);return e.forEach(e=>{me.has(e)||(n.delete(e),t=!0)}),t?n:e})},[me]);const be=t.useMemo(()=>h.getOptimisticMergeImpactedSegmentKeys(E,me,ve),[ve,me,E]),_e=t.useRef(null),xe=t.useMemo(()=>[...ge.filter(e=>!ye.has(g.getSegmentReviewKey(e.segment))&&!be.has(g.getSegmentReviewKey(e.segment))&&!h.shouldHideStructuralBoundaryReview(e.review_step,e.segment,we.has(g.getSegmentReviewKey(e.segment)),me.get(g.getSegmentReviewKey(e.segment)))).map(e=>({...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page})),...ue.filter(e=>!ye.has(g.getSegmentReviewKey(e.segment))&&!be.has(g.getSegmentReviewKey(e.segment))).map(e=>({...e,kind:"label",pageNumber:e.segment.start_page})),...ce.filter(e=>!ye.has(g.getSegmentReviewKey(e.segment))&&!be.has(g.getSegmentReviewKey(e.segment))).map(e=>({...e,kind:"page",pageNumber:e.metadata.page_num??e.segment.start_page}))].sort((e,t)=>{const n=he.get(g.getSegmentReviewKey(e.segment))??Number.MAX_SAFE_INTEGER,i=he.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)}),[ge,ue,ce,be,me,ye,he,we]),Se=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]),[Re,Ee]=t.useState(1),[Ce,ke]=t.useState(z??null),[Pe,Ae]=t.useState(z??null),[Me,Ie]=t.useState(!1),[je,Ne]=t.useState(null),[Be,Te]=t.useState(null),[Fe,Le]=t.useState(()=>new Set),[qe,We]=t.useState(null),[Ke,ze]=t.useState(null),[$e,Ge]=t.useState(null),[Oe,De]=t.useState(!1),Ve=t.useRef(0),He=t.useRef(null),Ue=t.useRef(null),Xe=t.useRef(new Map),Ze=t.useRef(null),Ye=t.useRef(null),Je=t.useRef(null),[Qe,et]=t.useState(b),tt=k?.aside?.width??"40%",nt=`min(${"number"==typeof tt?`${tt}px`:tt}, 260px, 100%)`;t.useEffect(()=>{Le(e=>{if(0===e.size)return e;const t=new Set(e);let n=!1;return xe.forEach(e=>{null!=e.review_step.review?.action&&t.has(e.id)&&(t.delete(e.id),n=!0)}),n?t:e})},[xe]),t.useEffect(()=>{const e=_e.current;if(!e||!M)return;const t=()=>{const t=e.getBoundingClientRect().width;t>0&&et(t)};t();const n="undefined"==typeof ResizeObserver?null:new ResizeObserver(t);return n?.observe(e),()=>n?.disconnect()},[M]);const it=t.useMemo(()=>{const e=new Set;return xe.forEach(t=>{null!=t.review_step.review?.action&&e.add(t.id)}),e},[xe]),rt=t.useMemo(()=>xe.find(e=>e.id===Ce)??null,[Ce,xe]),at=t.useMemo(()=>!(!te||"label"!==rt?.kind)&&ge.some(e=>{if(g.getSegmentReviewKey(e.segment)!==g.getSegmentReviewKey(rt.segment)||it.has(e.id))return!1;const t=h.getResolvedScore(e.review_step.score,e.review_step.confidence);return null==t||t<85}),[rt,ge,te,it]),ot=null==rt?-1:E.findIndex(e=>g.getSegmentReviewKey(e)===g.getSegmentReviewKey(rt.segment)),st=ot>0?E[ot-1]:void 0,lt=ot>=0?E[ot+1]:void 0,dt=st?.label?.trim()||st?.title,gt=lt?.label?.trim()||lt?.title,ut=h.getConfidenceColors(rt?.review_step.score,rt?.review_step.confidence,rt?.segment.confidence?.awaiting_llm),ct=rt?.review_step.reasons?.length?rt.review_step.reasons:rt?.segment.confidence?.reasons??[],mt=Boolean(ct.some(e=>e.text.trim()&&["evidence","gap"].includes(e.type.trim().toLowerCase()))||rt?.review_step.reason?.trim()||rt?.review_step.gap?.trim()),pt=null==rt?null:"boundary"===rt.kind?h.getBoundaryReviewActionBadgeLabel(rt.review_step,rt.segment,me.get(rt.segment.stable_key??"")):h.getTitleReviewActionBadgeLabel(rt.review_step,rt.segment,me.get(rt.segment.stable_key??"")),vt="label"===rt?.kind?[pt,rt.review_step.human_action_enum,rt.review_step.review?.action,rt.review_step.human_resolution?.action]:[],ft="label"===rt?.kind&&vt.some(e=>{const t=e?.trim().toUpperCase()??"";return t.includes("MERGE")||t.includes("SPLIT")}),ht=null!=rt&&xe.some(e=>"boundary"===e.kind&&g.getSegmentReviewKey(e.segment)===g.getSegmentReviewKey(rt.segment)),wt=ft&&!ht,yt=("boundary"===rt?.kind||wt)&&null!=rt?(()=>{if("boundary"===rt.kind)return rt;const e=ge.find(e=>g.getSegmentReviewKey(e.segment)===g.getSegmentReviewKey(rt.segment));return e?{...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page}:{...rt,kind:"boundary",pageNumber:rt.segment.review_action?.focus_page??rt.segment.start_page,metadata:{focus_page:rt.segment.review_action?.focus_page??null,boundary_margin:rt.segment.boundary_margin??null,user_actions:[]}}})():void 0,bt=null==rt?"":rt.segment.label?.trim()||rt.segment.title,_t=rt?.review_step.revert,xt=rt?.segment.revert,St=e=>e?.trim().toLowerCase(),Rt=null==rt?void 0:[...rt.segment.review_steps??[]].reverse().find(e=>{const t=e.type?.trim().toLowerCase();return("page_boundary"===t||"page boundary review"===t)&&"boundary"===St(e.revert?.type)})?.revert,Et=_t??rt?.segment.revert??Rt,Ct=Et?.decision.trim().toUpperCase();pt??(Ct?.includes("SPLIT")||Ct?.includes("MERGE"));const kt="label"===rt?.kind&&"SET_RANGE"===Rt?.decision?.trim().toUpperCase()&&Rt.current_segment_ids.length!==Rt.previous_state.length,Pt="Merged"===pt||"Split"===pt||kt,At=null==rt?void 0:Pt?"boundary"===St(Rt?.type)?Rt:"boundary"===St(xt?.type)?xt:"boundary"===St(_t?.type)?_t:void 0:"label"===rt.kind?"label"===St(_t?.type)?_t:void 0:"boundary"===rt.kind?"boundary"===St(_t?.type)?_t:"boundary"===St(Rt?.type)?Rt:"boundary"===St(xt?.type)?xt:void 0:void 0,Mt=Pt&&At?.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)===At.operation_id&&Boolean(e.human_resolution?.change_summary?.trim())}):void 0,It=At?.summary?.trim()||null,jt=Pt?Mt?.human_resolution?.change_summary?.trim()||At?.summary?.trim()||"":rt?.review_step?.human_resolution?.change_summary?.trim()||rt?.review_step?.summary?.trim()||"",Nt="page"===rt?.kind?{currentSegment:{title:bt,startPage:rt.segment.start_page,endPage:rt.segment.end_page},previousSegments:[]}:rt&&At?{currentSegment:{title:bt,startPage:rt.segment.start_page,endPage:rt.segment.end_page},previousSegments:(At.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,Bt="page"===rt?.kind?rt.metadata.type_choices?.map(e=>e.classification_id)??(rt.metadata.classification_id?[rt.metadata.classification_id]:[]):[],Tt="page"===rt?.kind?Boolean(H&&Bt.length>0):Boolean(At?.operation_id&&At?.type&&!1!==At?.revertable),Ft=Boolean(Nt&&Tt),Lt=t.useCallback((e,t)=>{Ve.current+=1,He.current={requestId:Ve.current,pageNumber:e,reviewId:t},Te({pageNumber:e,requestId:Ve.current})},[]),qt=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}),ze(null),Ge(null),ke(e.id),Ae(e.id),Ie(!1),Ne(null),Lt(e.pageNumber,e.id),X?.(e.id,e.segment))},[X,de,Lt]);t.useEffect(()=>{if(!$e)return;const e=requestAnimationFrame(()=>De(!0)),t=window.setTimeout(()=>{De(!1)},3500),n=window.setTimeout(()=>{Ge(null)},4e3);return()=>{cancelAnimationFrame(e),window.clearTimeout(t),window.clearTimeout(n)}},[$e]),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 Wt(),ze({pages:e,index:t,label:le.groupLabel??""}),Ve.current+=1,void Te({pageNumber:n,requestId:Ve.current})}if(ze(null),le.reviewId){const e=xe.find(e=>e.id===le.reviewId&&(!le.type||e.kind===le.type));if(e)return void qt(e)}if(le.classificationId){const e=xe.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 qt(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=xe.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?qt(n):"page"===le.type&&(Wt(),Ve.current+=1,Te({pageNumber:e,requestId:Ve.current}))},[le,qt,xe]);const Wt=t.useCallback(()=>{He.current=null,Ie(!1),ke(null),Ne(null),X?.(null,null)},[X]),Kt=t.useCallback(e=>{De(!1),Ge(null);const t=xe.find(t=>!it.has(t.id)&&"boundary"===t.kind&&t.segment.start_page===e.startPage&&t.segment.end_page===e.endPage)??xe.find(t=>!it.has(t.id)&&t.segment.start_page<=e.startPage&&t.segment.end_page>=e.startPage);t?qt(t):(Wt(),Ve.current+=1,Te({pageNumber:e.startPage,requestId:Ve.current}))},[Wt,it,xe,qt]),zt=t.useCallback((e,t)=>{const n=y.getReviewScoreBand(e.review_step.score),i=null==F||n===F,r=Fe.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,Fe]),$t=t.useCallback(e=>{if(!T)return void Wt();const t=xe.findIndex(t=>t.id===e),n=xe.find((n,i)=>i>t&&zt(n,e))??xe.find(t=>zt(t,e));n?requestAnimationFrame(()=>qt(n)):Wt()},[T,Wt,zt,xe,qt]),Gt=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});We(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)}Le(t=>{const n=new Set(t);return n.add(e.id),n}),$t(e.id)}catch(e){Y?.(e,r)}finally{We(null)}},[J,Y,V,$t]),Ot=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&&(Ue.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}),We(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)),Le(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);fe(e=>{const n=new Set(e);return a===r.BoundaryReviewActionEnum.SET_RANGE?n.add(t):n.delete(t),n}),pe(e=>{const n=new Map(e);return n.set(t,s),n})}if(Ue.current){if(Ue.current.ready=!0,o){const t=xe.find(t=>"label"===t.kind&&g.getSegmentReviewKey(t.segment)===g.getSegmentReviewKey(e.segment));t&&requestAnimationFrame(()=>qt(t))}}else $t(e.id)}catch(e){l&&(Ue.current=null),Y?.(e,i)}finally{We(null)}},[T,J,Y,O,D,V,H,xe,E,qt,$t]);t.useEffect(()=>{const e=Ue.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=xe.find(e=>{const i=n.get(g.getSegmentReviewKey(e.segment));return null!=i&&i>=t&&zt(e)});if(!i)return Ue.current=null,void Wt();requestAnimationFrame(()=>{Ue.current=null,qt(i)})},[Wt,zt,xe,E,qt]),t.useEffect(()=>{Ue.current||Ce&&!xe.some(e=>e.id===Ce)&&Wt()},[Ce,Wt,xe]),t.useEffect(()=>{if(!B)return;if(Ue.current)return;const e=xe.find(e=>e.pageNumber===Re);e&&e.id!==Ce&&qt(e)},[Ce,B,Re,qt,xe]),t.useEffect(()=>{Ue.current||Ce&&!xe.some(e=>e.id===Ce&&!0!==e.segment.confidence?.awaiting_llm)&&Wt()},[Ce,Wt,xe]);const Dt=t.useMemo(()=>{const e=xe.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,xe]),Vt=Dt.findIndex(e=>e.id===Pe),[Ht,Ut]=t.useState(null),[Xt,Zt]=t.useState(null),Yt=t.useRef(!1),Jt=t.useCallback(e=>{const t=Dt[e];t&&qt(t)},[Dt,qt]);t.useCallback(e=>{if(!Ke||e<0||e>=Ke.pages.length)return;const t=Ke.pages[e];null!=t&&(Wt(),ze(t=>null==t?t:{...t,index:e}),Ve.current+=1,Te({pageNumber:t,requestId:Ve.current}))},[Ke,Wt]),t.useEffect(()=>{Pe&&!Dt.some(e=>e.id===Pe)&&Ae(null)},[Dt,Pe]),t.useEffect(()=>{Yt.current=!1,Zt(null),Ut(Vt>=0?String(Vt+1):null)},[Vt,Dt.length]),t.useEffect(()=>{if(!Yt.current||null==Ht)return;const e=window.setTimeout(()=>{const e=Number(Ht.trim()),t=e-1;Number.isInteger(e)&&t>=0&&t<Dt.length&&(Yt.current=!1,Jt(t))},300);return()=>window.clearTimeout(e)},[Jt,Ht,Dt.length]);const Qt=t.useMemo(()=>{const e=new Map;xe.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=he.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},[xe,he]),en=t.useMemo(()=>{const e=new Map;xe.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},[xe]),tn=t.useCallback(e=>({startPage:Math.max(0,e.startPage-L),endPage:Math.min(e.numPages-1,e.endPage+L)}),[L]),nn=t.useCallback(()=>{const e=Ye.current,t=Je.current;if(!e||!t)return;const n=e.getBoundingClientRect(),i=t.querySelector(".rpv-core__inner-pages"),r=i?.getBoundingClientRect()??t.getBoundingClientRect();xe.forEach(e=>{const i=Xe.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=en.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=Ze.current;if(a){const e=Ke?.pages[Ke.index],i=null==e?null:t.querySelector(`[data-testid="core__page-layer-${e-1}"]`);if(Ke&&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(Ce&&null==He.current){const e=Xe.current.get(Ce);e&&"hidden"!==e.style.visibility&&Ne(t=>t===e?t:e)}},[Ke,Ce,q,en,xe]),rn=t.useCallback(e=>{const t=He.current;t&&t.requestId===e.requestId&&t.pageNumber===e.pageNumber&&(He.current=null,nn(),requestAnimationFrame(()=>{if(null!=He.current)return;const e=Xe.current.get(t.reviewId);e&&"hidden"!==e.style.visibility&&Ne(e)}))},[nn]);return t.useEffect(()=>{const e=Je.current;if(!e||!M)return;let t=null;const n=()=>{null==t&&(t=requestAnimationFrame(()=>{t=null,nn()}))};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,nn]),e.jsxs("div",{ref:Ye,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:Je,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:Se,navigationRequest:Be,onNavigationSettled:rn,setRenderRange:tn,onCurrentPageChange:e=>{Ee(e),null==He.current&&rt&&rt.pageNumber!==e&&Wt(),Z?.(e)}})}),M&&e.jsxs("aside",{"aria-label":"Page review badges",ref:_e,style:{...se,position:"relative",width:nt,maxWidth:b,flex:`0 1 ${nt}`,minHeight:0,overflow:"hidden",boxSizing:"border-box"},children:[Ke&&e.jsx("span",{ref:Ze,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:[Ke.label||"Pages"," Pg: ",Ke.index+1]})}),N&&Dt.length>0&&!Ke&&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"===Xt?"Please enter valid number present in the range":"Please enter valid numbers",open:null!=Xt,placement:"top",arrow:!0,children:e.jsx("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:Ht??"-",min:0,max:Dt.length,"aria-label":"Review badge number","aria-invalid":null!=Xt,onFocus:()=>{null==Ht&&Ut("")},onBlur:()=>{Zt(null);const e=Number(Ht);(null==Ht||""===Ht||!Number.isInteger(e)||e<1||e>Dt.length)&&(Yt.current=!1,Ut(Vt>=0?String(Vt+1):null))},onChange:e=>{const t=e.target.value;if(!/^\d*$/.test(t))return void Zt("invalid-number");const n=Number(t),i=""!==t&&(n<1||n>Dt.length);Zt(i?"out-of-range":null),Yt.current=!0,Ut(t)},style:{width:30,height:28,padding:0,border:"1px solid "+(Xt?"#DC2626":"#A5B4FC"),borderRadius:3,color:"#4F46E5",backgroundColor:"#FFFFFF",textAlign:"center",font:"inherit",fontSize:15,outline:"none"}})}),e.jsxs("span",{"aria-label":`${Dt.length} reviews`,style:{flex:1,color:"#4F46E5",fontSize:14,whiteSpace:"nowrap",textAlign:"center"},children:["of ",Dt.length]}),["previous","next"].map(t=>{const n="previous"===t,i=Vt+(n?-1:1),r=i<0||i>=Dt.length;return e.jsx("button",{type:"button","aria-label":(n?"Previous":"Next")+" review badge",disabled:r,onClick:()=>Jt(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)})]}),!Ke&&xe.map(t=>{const n=Ce===t.id,i=Qt.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,me.get(g.getSegmentReviewKey(t.segment))):"label"===t.kind?h.getTitleReviewActionBadgeLabel(t.review_step,t.segment,me.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=it.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?Xe.current.set(t.id,e):Xe.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:()=>qt(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)})]})]}),rt&&je&&e.jsxs(a.default,{anchorElement:je,placement:"bottom-start",offset:{top:8},width:Math.min(Qe,b),maxWidth:b,heightBuffer:G??25,children:[Me&&e.jsx(o.default,{width:"100%",maxWidth:"100%",score:rt.review_step.score,reasons:ct,reason:rt.review_step.reason,gap:rt.review_step.gap,onBack:()=>Ie(!1),onClose:Wt}),e.jsx("div",{style:{display:Me?"none":"block"},children:it.has(rt.id)?e.jsx(m.default,{width:"100%",maxWidth:"100%",headerName:"page"===rt.kind?"Page format approved":"Split"===pt?"Split approved":"Merged"===pt?"Merge approved":"User approved",headerIcon:"page"===rt.kind?e.jsx(u.Check,{size:18,strokeWidth:2}):"Merged"===pt?e.jsx(u.GitMerge,{size:18,strokeWidth:2}):"Split"===pt?e.jsx(w.default,{width:18,height:18}):e.jsx(u.CircleCheck,{size:18,strokeWidth:2}),title:bt,pageNo:`Page ${rt.segment.start_page}-${rt.segment.end_page}`,summary:Ft&&Nt?e.jsx(v.default,{icon:e.jsx(u.CircleCheck,{size:14,strokeWidth:2}),title:bt,pageRange:`Page ${rt.segment.start_page}-${rt.segment.end_page}`,description:jt??null,revertData:Nt,confirmDisabled:"page"===rt.kind?!Tt:null==U||!Tt,showDocumentHeader:!1,onRevert:async()=>{if("page"===rt.kind){if(!H||0===Bt.length){const e=new Error("SegmentReviewPdfWrapper requires onPageTypeRevert and at least one classification id to revert a page-type decision.");throw Y?.(e,S(rt)),e}let e;for(const t of Bt)e=await H({classification_id:t,human_verdict:"No"},S(rt));return e}if(!U)throw new Error("SegmentReviewPdfWrapper requires onRevert to handle a revert confirmation.");if(!At)throw new Error("There is no valid revert operation for this review.");const e=Pt?"boundary":"label"===rt.kind?"label":"boundary"===rt.kind?"boundary":null,t=St(At.type);if(e&&t!==e)throw new Error(`Cannot use ${t??"unknown"} revert metadata for this review. Expected ${e}.`);return U(At,S(rt))},onRevertError:e=>{Y?.(e,S(rt))},onRevertComplete:e=>{Le(()=>new Set),"page"!==rt.kind&&(fe(()=>new Set),pe(()=>new Map)),rt.id;const t=Nt.previousSegments[0]??Nt.currentSegment,n=je?.getBoundingClientRect(),i=Je.current?.getBoundingClientRect(),r=Math.min(b,Math.max(220,Qe)),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;Le(()=>new Set),"page"!==rt.kind&&(Ue.current=null),De(!1),Ge({title:"Split"===pt?"Split reverted":"Merged"===pt?"Merge reverted":"Approval reverted",description:e?.message?.trim()||null,segment:t,position:{top:s,left:o,width:r}}),Wt()}},rt.id):void 0,additionalActions:yt?e.jsx(p.default,{metadata:yt.metadata,reviewAction:rt.segment.review_action??void 0,startPage:rt.segment.start_page,endPage:rt.segment.end_page,title:bt,previousSegmentTitle:dt,nextSegmentTitle:gt,disabled:J||!O||qe===rt.id,onConfirm:(e,t)=>{Ot(yt,e,t)}}):void 0,cognitiveScore:rt.review_step.score,styles:{root:{borderColor:"#16A34A"},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:"#16A34A"}}},onCognitiveClick:mt?()=>{Ie(!0),ie?.(S(rt))}:void 0,onClose:Wt}):"boundary"===rt.kind?e.jsx(r.default,{width:"100%",maxWidth:"100%",totalPages:C,title:rt.segment.label||rt.segment.title,pageNo:`Page ${rt.pageNumber}`,content:rt.review_step.question??null,revertSummary:It,cognitiveScore:rt.review_step.score,metadata:rt.metadata,reviewAction:rt.segment.review_action??void 0,previousSegmentTitle:dt,nextSegmentTitle:gt,manualPrompt:$??"Set a custom boundary",defaultStartPage:rt.segment.start_page,defaultEndPage:rt.segment.end_page,styles:{root:{borderColor:ut.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:ut.text}}},confirmDisabled:J||!O||qe===rt.id,onConfirm:(e,t,n)=>{n&&r.isBoundaryReviewAction(t.id)&&Ot(rt,t.id,n)},onAdjustManually:()=>ne?.(S(rt)),onCognitiveClick:mt?()=>{Ie(!0),ie?.(S(rt))}:void 0,onClose:Wt},rt.id):"label"===rt.kind?e.jsx(s.default,{width:"100%",maxWidth:"100%",title:rt.metadata.current_label||rt.segment.label||rt.segment.title,pageNo:`Pages ${rt.segment.start_page}-${rt.segment.end_page}`,content:rt.review_step.question??null,revertSummary:It,cognitiveScore:rt.review_step.score,metadata:rt.metadata,styles:{root:{borderColor:ut.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:ut.text}}},confirmDisabled:J||!D||qe===rt.id,confirmationBlocked:at,confirmationWarning:at?"Please confirm the boundary before confirming the title.":void 0,onActionConfirm:(e,t)=>{Ot(rt,e,t)},onAdjustManually:()=>ne?.(S(rt)),onCognitiveClick:mt?()=>{Ie(!0),ie?.(S(rt))}:void 0,onClose:Wt},rt.id):2===rt.metadata.type_choices?.length?e.jsx(d.default,{width:"100%",maxWidth:"100%",title:rt.segment.label||rt.segment.title,pageNo:`Page ${rt.pageNumber}`,content:rt.review_step.reason,choices:rt.metadata.type_choices,cognitiveScore:rt.review_step.score,styles:{root:{borderColor:ut.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:ut.text}}},confirmDisabled:J||!V||qe===rt.id,onConfirm:e=>{Gt(rt,e)},onCognitiveClick:mt?()=>{Ie(!0),ie?.(S(rt))}:void 0,onClose:Wt},rt.id):e.jsx(l.default,{width:"100%",maxWidth:"100%",title:rt.segment.label||rt.segment.title,pageNo:`Page ${rt.pageNumber}`,content:rt.review_step.reason,cognitiveScore:rt.review_step.score,pageType:rt.metadata.page_type,metadata:rt.metadata,styles:{root:{borderColor:ut.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:ut.text}}},confirmDisabled:J||!V||qe===rt.id,onActionConfirm:(e,t)=>{Ot(rt,e,t)},onCognitiveClick:mt?()=>{Ie(!0),ie?.(S(rt))}:void 0,onClose:Wt},rt.id)})]}),$e&&e.jsx(c.Portal,{children:e.jsx(c.Box,{"aria-live":"polite",sx:{position:"fixed",top:$e.position.top,left:$e.position.left,zIndex:1600,width:$e.position.width,maxWidth:"calc(100vw - 16px)",opacity:Oe?1:0,transform:Oe?"translateY(0)":"translateY(-6px)",transition:"opacity 500ms ease, transform 500ms ease",filter:"drop-shadow(0 12px 24px rgba(15, 23, 42, 0.18))",pointerEvents:Oe?"auto":"none"},children:e.jsx(f.default,{title:$e.title,description:$e.description,onReview:()=>Kt($e.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"),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)})})})]})};
|
|
2
2
|
//# sourceMappingURL=SegmentReviewPdfWrapper.js.map
|