@e-llm-studio/citation 0.0.251 → 0.0.253
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/features/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/PdfViewer/PdfContainer.js +1 -1
- package/dist/cjs/features/PdfViewer/PdfContainer.js.map +1 -1
- package/dist/cjs/features/PdfViewer/PdfViewer.js +1 -1
- package/dist/cjs/features/PdfViewer/PdfViewer.js.map +1 -1
- package/dist/cjs/features/SegmentReviewComponents/ApprovalDescriptionBanner.js +2 -0
- package/dist/cjs/features/SegmentReviewComponents/ApprovalDescriptionBanner.js.map +1 -0
- package/dist/cjs/features/SegmentReviewComponents/BoundaryCard.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/BoundaryCard.js.map +1 -1
- package/dist/cjs/features/SegmentReviewComponents/RevertCard.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/RevertCard.js.map +1 -1
- package/dist/cjs/features/SegmentReviewComponents/SaveAsLearningCard.js +2 -0
- package/dist/cjs/features/SegmentReviewComponents/SaveAsLearningCard.js.map +1 -0
- package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
- package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
- package/dist/cjs/hooks/useOnDemandCitationFetch.js +1 -1
- package/dist/cjs/hooks/useOnDemandCitationFetch.js.map +1 -1
- package/dist/cjs/service/onDemandApi.js +1 -1
- package/dist/cjs/service/onDemandApi.js.map +1 -1
- package/dist/features/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/PdfViewer/PdfContainer.js +1 -1
- package/dist/features/PdfViewer/PdfContainer.js.map +1 -1
- package/dist/features/PdfViewer/PdfViewer.js +1 -1
- package/dist/features/PdfViewer/PdfViewer.js.map +1 -1
- package/dist/features/SegmentReviewComponents/ApprovalDescriptionBanner.js +2 -0
- package/dist/features/SegmentReviewComponents/ApprovalDescriptionBanner.js.map +1 -0
- package/dist/features/SegmentReviewComponents/BoundaryCard.js +1 -1
- package/dist/features/SegmentReviewComponents/BoundaryCard.js.map +1 -1
- package/dist/features/SegmentReviewComponents/RevertCard.js +1 -1
- package/dist/features/SegmentReviewComponents/RevertCard.js.map +1 -1
- package/dist/features/SegmentReviewComponents/SaveAsLearningCard.js +2 -0
- package/dist/features/SegmentReviewComponents/SaveAsLearningCard.js.map +1 -0
- package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
- package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
- package/dist/hooks/useOnDemandCitationFetch.js +1 -1
- package/dist/hooks/useOnDemandCitationFetch.js.map +1 -1
- package/dist/service/onDemandApi.js +1 -1
- package/dist/service/onDemandApi.js.map +1 -1
- package/dist/types/features/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/PdfViewer/PdfContainer.d.ts +3 -2
- package/dist/types/features/PdfViewer/PdfContainer.d.ts.map +1 -1
- package/dist/types/features/PdfViewer/PdfViewer.d.ts +3 -2
- package/dist/types/features/PdfViewer/PdfViewer.d.ts.map +1 -1
- package/dist/types/features/SegmentReviewComponents/ApprovalDescriptionBanner.d.ts +11 -0
- package/dist/types/features/SegmentReviewComponents/ApprovalDescriptionBanner.d.ts.map +1 -0
- package/dist/types/features/SegmentReviewComponents/BoundaryCard.d.ts.map +1 -1
- package/dist/types/features/SegmentReviewComponents/RevertCard.d.ts +9 -1
- package/dist/types/features/SegmentReviewComponents/RevertCard.d.ts.map +1 -1
- package/dist/types/features/SegmentReviewComponents/SaveAsLearningCard.d.ts +15 -0
- package/dist/types/features/SegmentReviewComponents/SaveAsLearningCard.d.ts.map +1 -0
- package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts +14 -1
- package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts.map +1 -1
- package/dist/types/hooks/useOnDemandCitationFetch.d.ts.map +1 -1
- package/dist/types/service/onDemandApi.d.ts.map +1 -1
- package/package.json +1 -1
- 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":"PdfViewer.js","sources":["../../../../src/features/PdfViewer/PdfViewer.tsx"],"sourcesContent":["import { DocumentLoadEvent, PageChangeEvent, RenderPage, SetRenderRange, SpecialZoomLevel } from \"@react-pdf-viewer/core\";\nimport PdfContainer from \"./PdfContainer\";\nimport PdfToolbar from \"./PdfToolbar\";\nimport { pdfStyles } from \"./PdfStyle\";\nimport { PdfHighlightControls } from \"./usePdfHighlight\";\nimport { rotationManager } from \"./rotationManager\";\nimport \"@react-pdf-viewer/zoom/lib/styles/index.css\";\nimport \"@react-pdf-viewer/page-navigation/lib/styles/index.css\";\nimport \"@react-pdf-viewer/core/lib/styles/index.css\";\nimport \"@react-pdf-viewer/search/lib/styles/index.css\";\nimport React, { useMemo, useRef, useEffect, useState } from \"react\";\nimport ScannedDocCitation, { CitationPage } from \"../ScannedDocCitation/ScannedDocCitation\";\nimport \"./PdfViewer.css\";\n\nexport type CustomIconsType = {\n pdfIcon?: React.ReactNode;\n fullScreenIcon?: React.ReactNode;\n downloadIcon?: React.ReactNode;\n closeIcon?: React.ReactNode;\n};\n\nexport type CustomStylesType = {\n pdfViewer?: React.CSSProperties;\n header?: React.CSSProperties;\n pdfIconWrapper?: React.CSSProperties;\n pdfName?: React.CSSProperties;\n pdfContainer?: React.CSSProperties;\n emptyState?: React.CSSProperties;\n};\n\nexport type CustomClassesType = {\n header?: string;\n pdfName?: string;\n actionButton?: string;\n pdfViewerWrapper?: string;\n};\n\nexport type PdfSegment = {\n title: string;\n start_page: number;\n end_page: number;\n page_count: number;\n};\n\ntype PdfScaleOption =\n | \"ActualSize\"\n | \"PageFit\"\n | \"PageWidth\"\n | number;\nexport interface PdfNavigationRequest {\n pageNumber: number;\n /** Change this value to navigate to the same page more than once. */\n requestId?: string | number;\n}\n\nexport interface PdfNavigationSettledEvent extends PdfNavigationRequest {\n pageNumber: number;\n}\n\nexport interface PdfViewerProps {\n pdfUrl?: string;\n highlightText: string[];\n highlightPages?: any;\n highlightCordinatePages: HighlightArea[];\n highlightColor?: string;\n activeHighlightColor?: string;\n jumpToPageValue?: number;\n pdfName?: string;\n onClose?: () => void;\n item?: any;\n customStyles?: CustomStylesType;\n customClasses?: CustomClassesType;\n customIcons?: CustomIconsType;\n useCoordinates: boolean;\n fallbackPages?: CitationPage[];\n activeCitationIndex?: number;\n onActiveCitationChange?: (index: number) => void;\n headerAction?: {\n icon?: React.ReactNode;\n onClick?: () => void;\n tooltip?: string;\n };\n isZoomEnabled?: boolean;\n showHighlightsAction?: boolean;\n defaultScale?: PdfScaleOption;\n useRange?: boolean; //\n rangeOfPages?: number[] | null;\n showFullScreenAction?: boolean;\n showRotateButton?: boolean;\n segments?: PdfSegment[];\n segmentTooltipText?: string;\n onCurrentPageChange?: (pageNumber: number) => void;\n navigationRequest?: PdfNavigationRequest | null;\n onNavigationSettled?: (event: PdfNavigationSettledEvent) => void;\n disablePdfAnnotations?: boolean;\n disablePdfTextLayer?: boolean;\n renderPage?: RenderPage;\n setRenderRange?: SetRenderRange;\n}\n\nconst getResolvedScale = (\n scale?: PdfScaleOption\n): SpecialZoomLevel | number => {\n switch (scale) {\n case \"ActualSize\":\n return SpecialZoomLevel.ActualSize;\n\n case \"PageFit\":\n return SpecialZoomLevel.PageFit;\n\n case \"PageWidth\":\n return SpecialZoomLevel.PageWidth;\n\n default:\n return scale ?? SpecialZoomLevel.PageWidth;\n }\n};\n\nexport type HighlightArea = {\n pageIndex: number;\n left: number;\n top: number;\n width: number;\n height: number;\n pageNumber?: number;\n};\n\nconst PdfViewer = ({\n pdfUrl,\n highlightText,\n highlightPages,\n highlightCordinatePages,\n highlightColor = \"yellow\",\n activeHighlightColor = \"#f7dc51\",\n jumpToPageValue = 0,\n pdfName,\n onClose,\n customStyles,\n customClasses,\n customIcons,\n useCoordinates,\n fallbackPages,\n activeCitationIndex,\n onActiveCitationChange,\n headerAction,\n isZoomEnabled = true,\n showHighlightsAction = true,\n defaultScale = SpecialZoomLevel.ActualSize,\n useRange = false,\n rangeOfPages = null,\n showFullScreenAction=true,\n showRotateButton = false,\n segments = [\n {\n title: \"Document 2\",\n start_page: 52,\n end_page: 52,\n page_count: 1,\n },\n ],\n segmentTooltipText,\n onCurrentPageChange,\n navigationRequest,\n onNavigationSettled,\n disablePdfAnnotations = false,\n disablePdfTextLayer = false,\n renderPage,\n setRenderRange,\n}: PdfViewerProps) => {\n\n const viewerRef = useRef<HTMLDivElement | null>(null);\n const resolvedDefaultScale = getResolvedScale(defaultScale);\n const [currentPage, setCurrentPage] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [currentPageRotation, setCurrentPageRotation] = useState(0);\n const lastNavigationRequestRef = useRef<string | null>(null);\n const navigationSettleTimerRef = useRef<number | null>(null);\n const navigationSettleSequenceRef = useRef(0);\n const mutationObserverRef = useRef<MutationObserver | null>(null);\n\n // Generate PDF identifier for localStorage from URL\n const pdfIdentifier = useMemo(() => {\n if (!pdfUrl) return '';\n // Use last part of URL or hash it\n try {\n const url = new URL(pdfUrl, window.location.origin);\n return url.pathname.split('/').pop() || 'default';\n } catch {\n return 'default';\n }\n }, [pdfUrl]);\n\n // Set up rotation manager with PDF identifier\n useEffect(() => {\n if (pdfIdentifier) {\n rotationManager.setPdfIdentifier(pdfIdentifier);\n }\n }, [pdfIdentifier]);\n\n // Handler for rotating current page (no state update)\n const handleRotatePage = () => {\n const pageNumber = currentPage + 1;\n rotationManager.rotatePageBy90(pageNumber);\n // Manually update state to reflect rotation in UI\n setCurrentPageRotation(rotationManager.getRotation(pageNumber));\n };\n\n // Subscribe to rotation changes to sync UI state\n useEffect(() => {\n const unsubscribe = rotationManager.onRotationChange((pageNum, angle) => {\n // Only update state if current page rotated\n if (pageNum === currentPage + 1) {\n setCurrentPageRotation(angle);\n }\n });\n\n return unsubscribe;\n }, [currentPage]);\n\n // Register page elements with rotation manager\n useEffect(() => {\n const observer = new MutationObserver(() => {\n // Find all newly rendered page elements\n const pageElements = viewerRef.current?.querySelectorAll(\n '[data-testid^=\"core__page-layer-\"]'\n );\n\n const registeredPages = new Set<number>();\n\n pageElements?.forEach((pageElement) => {\n const match = (pageElement as HTMLElement)\n .getAttribute('data-testid')\n ?.match(/core__page-layer-(\\d+)/);\n if (match && match.length >= 2) {\n const pageIndex = parseInt(match[1], 10);\n const pageNumber = pageIndex + 1;\n\n // Only register once per page\n if (!registeredPages.has(pageNumber)) {\n rotationManager.registerPageElement(pageNumber, pageElement as HTMLElement);\n registeredPages.add(pageNumber);\n }\n }\n });\n });\n\n if (viewerRef.current) {\n observer.observe(viewerRef.current, {\n childList: true,\n subtree: true,\n attributes: false,\n });\n mutationObserverRef.current = observer;\n }\n\n return () => {\n observer.disconnect();\n mutationObserverRef.current = null;\n };\n }, []);\n\n // Clean up when unmounting\n useEffect(() => {\n return () => {\n rotationManager.clearAll();\n if (mutationObserverRef.current) {\n mutationObserverRef.current.disconnect();\n }\n };\n }, []);\n\n // Update current page rotation when page changes\n useEffect(() => {\n const pageNumber = currentPage + 1;\n setCurrentPageRotation(rotationManager.getRotation(pageNumber));\n }, [currentPage]);\n const resolvedRenderPage = useMemo<RenderPage | undefined>(() => {\n if (!disablePdfAnnotations && !disablePdfTextLayer) return renderPage;\n\n return (props) => {\n const resolvedTextLayerChildren = disablePdfTextLayer ? (\n <div aria-hidden=\"true\" style={{ display: \"none\" }}>\n {props.textLayer.children}\n </div>\n ) : props.textLayer.children;\n const resolvedProps = {\n ...props,\n annotationLayer: {\n ...props.annotationLayer,\n children: disablePdfAnnotations ? null : props.annotationLayer.children,\n },\n textLayer: {\n ...props.textLayer,\n children: resolvedTextLayerChildren,\n },\n };\n\n const renderedPage = renderPage\n ? renderPage(resolvedProps)\n : (\n <>\n {props.canvasLayer.children}\n {resolvedTextLayerChildren}\n {!disablePdfAnnotations && props.annotationLayer.children}\n </>\n );\n\n return renderedPage;\n };\n }, [disablePdfAnnotations, disablePdfTextLayer, renderPage]);\n\n const cleanHighlightTexts = (texts: string[]): string[] => {\n if (!texts || texts.length === 0) return texts;\n return texts.filter((text) => {\n return !texts.some(\n (otherText) => otherText !== text && otherText.includes(text)\n );\n });\n };\n\n const highlightPageSet = useMemo(() => {\n if (useCoordinates) {\n return new Set(highlightCordinatePages.map((h: any) => h.pageIndex));\n } else {\n const set = new Set<number>();\n Object.values(highlightPages).forEach((p: any) => {\n if (p > 0) set.add(p - 1);\n });\n return set;\n }\n }, [highlightCordinatePages, highlightPages, useCoordinates]);\n\n const removeRedundantHighlightTexts = cleanHighlightTexts(highlightText);\n\n const {\n highlightIndex,\n setHighlightIndex,\n cursorIndex,\n setCursorIndex,\n orderedKeys,\n totalHighlights,\n getValidPosition,\n tryJump,\n jumpToPage,\n zoomTo,\n plugins,\n controls,\n hideNonTargetHighlights,\n deduplicateHighlights,\n scrollToCoord,\n } = PdfHighlightControls(\n removeRedundantHighlightTexts,\n !useCoordinates ? highlightPages : {},\n viewerRef,\n highlightPageSet,\n useCoordinates,\n useCoordinates ? highlightCordinatePages : [],\n highlightColor,\n activeHighlightColor\n );\n\n const currentPosition = getValidPosition(cursorIndex);\n const currentSegment = useMemo(() => {\n const pageNumber = currentPage + 1;\n return segments.find(\n (segment) =>\n pageNumber >= segment.start_page && pageNumber <= segment.end_page\n );\n }, [currentPage, segments]);\n\n // sync external activeCitationIndex → cursorIndex\n useEffect(() => {\n if (activeCitationIndex === undefined) return;\n if (activeCitationIndex === cursorIndex) return;\n setCursorIndex(activeCitationIndex);\n }, [activeCitationIndex]);\n\n // wrap controls to fire onActiveCitationChange\n const handleGoToNext = () => {\n if (cursorIndex >= totalHighlights - 1) return;\n controls.goToNext();\n if (onActiveCitationChange) onActiveCitationChange(cursorIndex + 1);\n };\n\n const handleGoToPrevious = () => {\n if (cursorIndex <= 0) return;\n controls.goToPrevious();\n if (onActiveCitationChange) onActiveCitationChange(cursorIndex - 1);\n };\n\n const modifiedControls = {\n ...controls,\n goToNext: handleGoToNext,\n goToPrevious: handleGoToPrevious,\n };\n\n const handlePageNavigate = (pageNumber: number) => {\n const nextPage = Math.min(Math.max(pageNumber, 1), totalPages || pageNumber);\n setCurrentPage(nextPage - 1);\n jumpToPage(nextPage - 1);\n };\n\n const waitForNavigationToSettle = React.useCallback((\n request: PdfNavigationRequest,\n pageNumber: number\n ) => {\n navigationSettleSequenceRef.current += 1;\n const settleSequence = navigationSettleSequenceRef.current;\n if (navigationSettleTimerRef.current != null) {\n window.clearTimeout(navigationSettleTimerRef.current);\n }\n\n let previousScrollTop: number | null = null;\n let stableChecks = 0;\n let attempts = 0;\n\n const checkScrollPosition = () => {\n if (navigationSettleSequenceRef.current !== settleSequence) return;\n\n attempts += 1;\n\n const scrollContainer = viewerRef.current?.querySelector(\n '.rpv-core__inner-pages'\n ) as HTMLElement | null;\n const targetPage = viewerRef.current?.querySelector(\n `[data-testid=\"core__page-layer-${pageNumber - 1}\"]`\n ) as HTMLElement | null;\n\n // Virtualized page layers are not guaranteed to be mounted on the first\n // check after jumpToPage. Keep polling so navigation completion is not\n // lost while React PDF Viewer is creating the target page DOM.\n if (!scrollContainer || !targetPage) {\n if (attempts >= 40) {\n navigationSettleTimerRef.current = null;\n onNavigationSettled?.({\n pageNumber,\n requestId: request.requestId,\n });\n return;\n }\n\n navigationSettleTimerRef.current = window.setTimeout(checkScrollPosition, 50);\n return;\n }\n\n if (previousScrollTop === scrollContainer.scrollTop) {\n stableChecks += 1;\n } else {\n previousScrollTop = scrollContainer.scrollTop;\n stableChecks = 0;\n }\n\n const scrollRect = scrollContainer.getBoundingClientRect();\n const pageRect = targetPage.getBoundingClientRect();\n const isTargetVisible = Boolean(\n scrollRect &&\n pageRect &&\n pageRect.bottom > scrollRect.top &&\n pageRect.top < scrollRect.bottom\n );\n const hasSettled = stableChecks >= 2 && isTargetVisible;\n const reachedTimeout = attempts >= 40;\n\n if (hasSettled || reachedTimeout) {\n navigationSettleTimerRef.current = null;\n onNavigationSettled?.({\n pageNumber,\n requestId: request.requestId,\n });\n return;\n }\n\n navigationSettleTimerRef.current = window.setTimeout(checkScrollPosition, 50);\n };\n\n navigationSettleTimerRef.current = window.setTimeout(checkScrollPosition, 50);\n }, [onNavigationSettled]);\n\n useEffect(() => () => {\n navigationSettleSequenceRef.current += 1;\n if (navigationSettleTimerRef.current != null) {\n window.clearTimeout(navigationSettleTimerRef.current);\n }\n }, []);\n\n useEffect(() => {\n if (!navigationRequest || totalPages <= 0) return;\n\n const nextPage = Math.min(\n Math.max(Math.trunc(navigationRequest.pageNumber), 1),\n totalPages\n );\n const requestKey = `${navigationRequest.requestId ?? nextPage}:${nextPage}`;\n if (lastNavigationRequestRef.current === requestKey) return;\n\n lastNavigationRequestRef.current = requestKey;\n setCurrentPage(nextPage - 1);\n jumpToPage(nextPage - 1);\n waitForNavigationToSettle(navigationRequest, nextPage);\n }, [jumpToPage, navigationRequest, totalPages, waitForNavigationToSettle]);\n\n if (!pdfUrl) {\n return (\n <ScannedDocCitation\n pages={fallbackPages}\n activeCitationIndex={activeCitationIndex}\n onActiveCitationChange={onActiveCitationChange}\n headerAction={headerAction}\n />\n );\n }\n\n const defaultViewerStyles: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n width: \"100%\",\n backgroundColor: \"#FAFAFA\",\n };\n\n const scrollToHighlight = () => {\n if (!viewerRef.current) return;\n\n const index = jumpToPageValue - 1;\n const key = orderedKeys[index];\n const page = highlightPages[key];\n const targetPage = page > 0 ? page - 1 : 0;\n\n const pageVisitMap: Record<number, number[]> = {};\n orderedKeys.forEach((k, i) => {\n const p = highlightPages[k];\n if (p > 0) {\n if (!pageVisitMap[p]) pageVisitMap[p] = [];\n pageVisitMap[p].push(i);\n }\n });\n const visits = pageVisitMap[page] || [];\n const occurrence = visits.indexOf(index);\n\n let attempts = 0;\n const maxAttempts = 40;\n\n const doScrollToHighlight = () => {\n attempts++;\n if (attempts > maxAttempts) return;\n\n const scrollContainer = viewerRef.current?.querySelector(\n \".rpv-core__inner-pages\"\n ) as HTMLElement;\n if (!scrollContainer) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const pageElement = viewerRef.current?.querySelector(\n `[data-testid=\"core__page-layer-${targetPage}\"]`\n );\n if (!pageElement) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const scrollContainerRect = scrollContainer.getBoundingClientRect();\n const pageRect = pageElement.getBoundingClientRect();\n const isPageVisible =\n pageRect.top < scrollContainerRect.bottom &&\n pageRect.bottom > scrollContainerRect.top;\n\n if (!isPageVisible) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const allHighlights = pageElement.querySelectorAll(\".rpv-search__highlight\");\n const target = allHighlights[occurrence] as HTMLElement;\n\n if (!target) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const highlightRect = target.getBoundingClientRect();\n const scrollTop =\n scrollContainer.scrollTop +\n (highlightRect.top - scrollContainerRect.top) -\n scrollContainer.clientHeight / 2 +\n highlightRect.height / 2;\n\n scrollContainer.scrollTo({ top: scrollTop, behavior: \"smooth\" });\n };\n\n setTimeout(doScrollToHighlight, 500);\n };\n\n return (\n <div\n ref={viewerRef}\n className={[\"citation-pdf-viewer\", customClasses?.pdfViewerWrapper]\n .filter(Boolean)\n .join(\" \")}\n data-disable-pdf-annotations={\n disablePdfAnnotations ? \"true\" : undefined\n }\n data-pdf-page-fit={\n resolvedDefaultScale === SpecialZoomLevel.PageFit ? \"true\" : undefined\n }\n style={{\n height: \"100%\",\n minHeight: 0,\n minWidth: 0,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n ...pdfStyles.pdfViewer,\n ...defaultViewerStyles,\n ...customStyles?.pdfViewer,\n backgroundColor: \"#F1F5F9\",\n }}\n >\n <PdfToolbar\n highlightIndex={highlightIndex}\n totalHighlights={totalHighlights}\n controls={modifiedControls}\n currentPosition={currentPosition}\n pdfName={pdfName}\n onClose={onClose}\n pdfUrl={pdfUrl}\n viewerRef={viewerRef}\n customStyles={customStyles}\n customClasses={customClasses}\n customIcons={customIcons}\n headerAction={headerAction}\n isZoomEnabled={isZoomEnabled}\n showHighlightsAction={showHighlightsAction}\n showFullScreenAction={showFullScreenAction} \n currentSegment={currentSegment}\n segmentTooltipText={segmentTooltipText}\n currentPage={currentPage + 1}\n totalPages={totalPages}\n onPageNavigate={handlePageNavigate}\n onRotatePage={handleRotatePage}\n currentPageRotation={currentPageRotation}\n showRotateButton={showRotateButton}\n />\n <PdfContainer\n defaultScale={resolvedDefaultScale}\n pdfUrl={pdfUrl}\n plugins={plugins}\n customStyles={customStyles}\n onLoad={(e: DocumentLoadEvent) => {\n setTotalPages(e.doc.numPages);\n\n const shouldAutoJumpToFirstMatch =\n !useCoordinates && !useRange && jumpToPageValue <= 0;\n\n if (jumpToPageValue > 0 && !useRange) {\n const index = jumpToPageValue - 1;\n const key = orderedKeys[index];\n const page = highlightPages[key];\n const cordinateTargetHighlight = highlightCordinatePages[index];\n setCursorIndex(index);\n\n console.log(cordinateTargetHighlight, \"cordinateTargetHighlight\");\n if (useCoordinates && cordinateTargetHighlight.pageIndex > 0)\n jumpToPage(cordinateTargetHighlight.pageIndex);\n\n if (page > 0) {\n setTimeout(() => {\n hideNonTargetHighlights(highlightPageSet);\n deduplicateHighlights(page - 1);\n }, 1000);\n if (!useCoordinates) {\n jumpToPage(page - 1);\n }\n }\n } else if (useRange && rangeOfPages && rangeOfPages.length === 2) {\n \n // Async function to handle sequential jumping and waiting\n const scanRangeSequence = async () => {\n const [startPage, endPage] = rangeOfPages;\n \n for (let p = startPage; p <= endPage; p++) {\n const targetPageIndex = p - 1;\n \n jumpToPage(targetPageIndex);\n \n // Pause execution for 1 second to let the DOM render the highlights\n await new Promise((resolve) => setTimeout(resolve, 1000));\n \n hideNonTargetHighlights(highlightPageSet);\n const matchSize = deduplicateHighlights(targetPageIndex);\n \n // If the returned size is greater than 0, a match was found. Stop the loop.\n if (matchSize && matchSize > 0) {\n break; \n }\n }\n };\n\n scanRangeSequence();\n\n } else if (!useCoordinates && highlightPages) {\n const firstKey = orderedKeys.find(k => highlightPages[k] > 0);\n if (firstKey !== undefined) {\n const firstPage = highlightPages[firstKey] - 1;\n jumpToPage(firstPage);\n setTimeout(() => {\n hideNonTargetHighlights(highlightPageSet);\n deduplicateHighlights(firstPage);\n }, 1000);\n }\n }\n\n requestAnimationFrame(() => {\n if (shouldAutoJumpToFirstMatch) {\n tryJump();\n }\n if (!useCoordinates && jumpToPageValue > 0 && !useRange) {\n scrollToHighlight();\n }\n });\n }}\n onPageChange={(e: PageChangeEvent) => {\n const currentPage = e.currentPage;\n setCurrentPage(currentPage);\n onCurrentPageChange?.(currentPage + 1);\n if (!highlightPageSet.has(currentPage)) {\n hideNonTargetHighlights(highlightPageSet);\n return;\n }\n deduplicateHighlights(currentPage);\n hideNonTargetHighlights(highlightPageSet);\n }}\n renderPage={resolvedRenderPage}\n setRenderRange={setRenderRange}\n />\n </div>\n );\n};\n\nexport default PdfViewer;\n"],"names":["pdfUrl","highlightText","highlightPages","highlightCordinatePages","highlightColor","activeHighlightColor","jumpToPageValue","pdfName","onClose","customStyles","customClasses","customIcons","useCoordinates","fallbackPages","activeCitationIndex","onActiveCitationChange","headerAction","isZoomEnabled","showHighlightsAction","defaultScale","SpecialZoomLevel","ActualSize","useRange","rangeOfPages","showFullScreenAction","showRotateButton","segments","title","start_page","end_page","page_count","segmentTooltipText","onCurrentPageChange","navigationRequest","onNavigationSettled","disablePdfAnnotations","disablePdfTextLayer","renderPage","setRenderRange","viewerRef","useRef","resolvedDefaultScale","scale","PageFit","PageWidth","getResolvedScale","currentPage","setCurrentPage","useState","totalPages","setTotalPages","currentPageRotation","setCurrentPageRotation","lastNavigationRequestRef","navigationSettleTimerRef","navigationSettleSequenceRef","mutationObserverRef","pdfIdentifier","useMemo","URL","window","location","origin","pathname","split","pop","useEffect","rotationManager","setPdfIdentifier","onRotationChange","pageNum","angle","observer","MutationObserver","pageElements","current","querySelectorAll","registeredPages","Set","forEach","pageElement","match","getAttribute","length","pageNumber","parseInt","has","registerPageElement","add","observe","childList","subtree","attributes","disconnect","clearAll","getRotation","resolvedRenderPage","props","resolvedTextLayerChildren","jsx","style","display","children","textLayer","resolvedProps","annotationLayer","jsxs","Fragment","canvasLayer","highlightPageSet","map","h","pageIndex","set","Object","values","p","removeRedundantHighlightTexts","texts","filter","text","some","otherText","includes","highlightIndex","setHighlightIndex","cursorIndex","setCursorIndex","orderedKeys","totalHighlights","getValidPosition","tryJump","jumpToPage","zoomTo","plugins","controls","hideNonTargetHighlights","deduplicateHighlights","scrollToCoord","PdfHighlightControls","currentPosition","currentSegment","find","segment","modifiedControls","goToNext","goToPrevious","waitForNavigationToSettle","React","useCallback","request","settleSequence","clearTimeout","previousScrollTop","stableChecks","attempts","checkScrollPosition","scrollContainer","querySelector","targetPage","requestId","setTimeout","scrollTop","scrollRect","getBoundingClientRect","pageRect","isTargetVisible","Boolean","bottom","top","nextPage","Math","min","max","trunc","requestKey","ScannedDocCitation","pages","ref","className","pdfViewerWrapper","join","height","minHeight","minWidth","overflow","flexDirection","pdfStyles","pdfViewer","width","backgroundColor","PdfToolbar","onPageNavigate","onRotatePage","rotatePageBy90","PdfContainer","onLoad","e","doc","numPages","shouldAutoJumpToFirstMatch","index","key","page","cordinateTargetHighlight","console","log","async","startPage","endPage","targetPageIndex","Promise","resolve","matchSize","scanRangeSequence","firstKey","k","firstPage","requestAnimationFrame","pageVisitMap","i","push","occurrence","indexOf","doScrollToHighlight","scrollContainerRect","target","highlightRect","clientHeight","scrollTo","behavior","scrollToHighlight","onPageChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PdfViewer.js","sources":["../../../../src/features/PdfViewer/PdfViewer.tsx"],"sourcesContent":["import { DocumentLoadEvent, PageChangeEvent, RenderPage, SetRenderRange, SpecialZoomLevel, type LoadError } from \"@react-pdf-viewer/core\";\nimport PdfContainer from \"./PdfContainer\";\nimport PdfToolbar from \"./PdfToolbar\";\nimport { pdfStyles } from \"./PdfStyle\";\nimport { PdfHighlightControls } from \"./usePdfHighlight\";\nimport { rotationManager } from \"./rotationManager\";\nimport \"@react-pdf-viewer/zoom/lib/styles/index.css\";\nimport \"@react-pdf-viewer/page-navigation/lib/styles/index.css\";\nimport \"@react-pdf-viewer/core/lib/styles/index.css\";\nimport \"@react-pdf-viewer/search/lib/styles/index.css\";\nimport React, { useMemo, useRef, useEffect, useState } from \"react\";\nimport ScannedDocCitation, { CitationPage } from \"../ScannedDocCitation/ScannedDocCitation\";\nimport \"./PdfViewer.css\";\n\nexport type CustomIconsType = {\n pdfIcon?: React.ReactNode;\n fullScreenIcon?: React.ReactNode;\n downloadIcon?: React.ReactNode;\n closeIcon?: React.ReactNode;\n};\n\nexport type CustomStylesType = {\n pdfViewer?: React.CSSProperties;\n header?: React.CSSProperties;\n pdfIconWrapper?: React.CSSProperties;\n pdfName?: React.CSSProperties;\n pdfContainer?: React.CSSProperties;\n emptyState?: React.CSSProperties;\n};\n\nexport type CustomClassesType = {\n header?: string;\n pdfName?: string;\n actionButton?: string;\n pdfViewerWrapper?: string;\n};\n\nexport type PdfSegment = {\n title: string;\n start_page: number;\n end_page: number;\n page_count: number;\n};\n\ntype PdfScaleOption =\n | \"ActualSize\"\n | \"PageFit\"\n | \"PageWidth\"\n | number;\nexport interface PdfNavigationRequest {\n pageNumber: number;\n /** Change this value to navigate to the same page more than once. */\n requestId?: string | number;\n}\n\nexport interface PdfNavigationSettledEvent extends PdfNavigationRequest {\n pageNumber: number;\n}\n\nexport interface PdfViewerProps {\n pdfUrl?: string;\n highlightText: string[];\n highlightPages?: any;\n highlightCordinatePages: HighlightArea[];\n highlightColor?: string;\n activeHighlightColor?: string;\n jumpToPageValue?: number;\n pdfName?: string;\n onClose?: () => void;\n item?: any;\n customStyles?: CustomStylesType;\n customClasses?: CustomClassesType;\n customIcons?: CustomIconsType;\n useCoordinates: boolean;\n fallbackPages?: CitationPage[];\n activeCitationIndex?: number;\n onActiveCitationChange?: (index: number) => void;\n headerAction?: {\n icon?: React.ReactNode;\n onClick?: () => void;\n tooltip?: string;\n };\n isZoomEnabled?: boolean;\n showHighlightsAction?: boolean;\n defaultScale?: PdfScaleOption;\n useRange?: boolean; //\n rangeOfPages?: number[] | null;\n showFullScreenAction?: boolean;\n showRotateButton?: boolean;\n segments?: PdfSegment[];\n segmentTooltipText?: string;\n onCurrentPageChange?: (pageNumber: number) => void;\n navigationRequest?: PdfNavigationRequest | null;\n onNavigationSettled?: (event: PdfNavigationSettledEvent) => void;\n disablePdfAnnotations?: boolean;\n disablePdfTextLayer?: boolean;\n renderPage?: RenderPage;\n setRenderRange?: SetRenderRange;\n onError?: (error: LoadError) => void;\n}\n\nconst getResolvedScale = (\n scale?: PdfScaleOption\n): SpecialZoomLevel | number => {\n switch (scale) {\n case \"ActualSize\":\n return SpecialZoomLevel.ActualSize;\n\n case \"PageFit\":\n return SpecialZoomLevel.PageFit;\n\n case \"PageWidth\":\n return SpecialZoomLevel.PageWidth;\n\n default:\n return scale ?? SpecialZoomLevel.PageWidth;\n }\n};\n\nexport type HighlightArea = {\n pageIndex: number;\n left: number;\n top: number;\n width: number;\n height: number;\n pageNumber?: number;\n};\n\nconst PdfViewer = ({\n pdfUrl,\n highlightText,\n highlightPages,\n highlightCordinatePages,\n highlightColor = \"yellow\",\n activeHighlightColor = \"#f7dc51\",\n jumpToPageValue = 0,\n pdfName,\n onClose,\n customStyles,\n customClasses,\n customIcons,\n useCoordinates,\n fallbackPages,\n activeCitationIndex,\n onActiveCitationChange,\n headerAction,\n isZoomEnabled = true,\n showHighlightsAction = true,\n defaultScale = SpecialZoomLevel.ActualSize,\n useRange = false,\n rangeOfPages = null,\n showFullScreenAction=true,\n showRotateButton = false,\n segments = [\n {\n title: \"Document 2\",\n start_page: 52,\n end_page: 52,\n page_count: 1,\n },\n ],\n segmentTooltipText,\n onCurrentPageChange,\n navigationRequest,\n onNavigationSettled,\n disablePdfAnnotations = false,\n disablePdfTextLayer = false,\n renderPage,\n setRenderRange,\n onError\n}: PdfViewerProps) => {\n\n const viewerRef = useRef<HTMLDivElement | null>(null);\n const resolvedDefaultScale = getResolvedScale(defaultScale);\n const [currentPage, setCurrentPage] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [currentPageRotation, setCurrentPageRotation] = useState(0);\n const lastNavigationRequestRef = useRef<string | null>(null);\n const navigationSettleTimerRef = useRef<number | null>(null);\n const navigationSettleSequenceRef = useRef(0);\n const mutationObserverRef = useRef<MutationObserver | null>(null);\n\n // Generate PDF identifier for localStorage from URL\n const pdfIdentifier = useMemo(() => {\n if (!pdfUrl) return '';\n // Use last part of URL or hash it\n try {\n const url = new URL(pdfUrl, window.location.origin);\n return url.pathname.split('/').pop() || 'default';\n } catch {\n return 'default';\n }\n }, [pdfUrl]);\n\n // Set up rotation manager with PDF identifier\n useEffect(() => {\n if (pdfIdentifier) {\n rotationManager.setPdfIdentifier(pdfIdentifier);\n }\n }, [pdfIdentifier]);\n\n // Handler for rotating current page (no state update)\n const handleRotatePage = () => {\n const pageNumber = currentPage + 1;\n rotationManager.rotatePageBy90(pageNumber);\n // Manually update state to reflect rotation in UI\n setCurrentPageRotation(rotationManager.getRotation(pageNumber));\n };\n\n // Subscribe to rotation changes to sync UI state\n useEffect(() => {\n const unsubscribe = rotationManager.onRotationChange((pageNum, angle) => {\n // Only update state if current page rotated\n if (pageNum === currentPage + 1) {\n setCurrentPageRotation(angle);\n }\n });\n\n return unsubscribe;\n }, [currentPage]);\n\n // Register page elements with rotation manager\n useEffect(() => {\n const observer = new MutationObserver(() => {\n // Find all newly rendered page elements\n const pageElements = viewerRef.current?.querySelectorAll(\n '[data-testid^=\"core__page-layer-\"]'\n );\n\n const registeredPages = new Set<number>();\n\n pageElements?.forEach((pageElement) => {\n const match = (pageElement as HTMLElement)\n .getAttribute('data-testid')\n ?.match(/core__page-layer-(\\d+)/);\n if (match && match.length >= 2) {\n const pageIndex = parseInt(match[1], 10);\n const pageNumber = pageIndex + 1;\n\n // Only register once per page\n if (!registeredPages.has(pageNumber)) {\n rotationManager.registerPageElement(pageNumber, pageElement as HTMLElement);\n registeredPages.add(pageNumber);\n }\n }\n });\n });\n\n if (viewerRef.current) {\n observer.observe(viewerRef.current, {\n childList: true,\n subtree: true,\n attributes: false,\n });\n mutationObserverRef.current = observer;\n }\n\n return () => {\n observer.disconnect();\n mutationObserverRef.current = null;\n };\n }, []);\n\n // Clean up when unmounting\n useEffect(() => {\n return () => {\n rotationManager.clearAll();\n if (mutationObserverRef.current) {\n mutationObserverRef.current.disconnect();\n }\n };\n }, []);\n\n // Update current page rotation when page changes\n useEffect(() => {\n const pageNumber = currentPage + 1;\n setCurrentPageRotation(rotationManager.getRotation(pageNumber));\n }, [currentPage]);\n const resolvedRenderPage = useMemo<RenderPage | undefined>(() => {\n if (!disablePdfAnnotations && !disablePdfTextLayer) return renderPage;\n\n return (props) => {\n const resolvedTextLayerChildren = disablePdfTextLayer ? (\n <div aria-hidden=\"true\" style={{ display: \"none\" }}>\n {props.textLayer.children}\n </div>\n ) : props.textLayer.children;\n const resolvedProps = {\n ...props,\n annotationLayer: {\n ...props.annotationLayer,\n children: disablePdfAnnotations ? null : props.annotationLayer.children,\n },\n textLayer: {\n ...props.textLayer,\n children: resolvedTextLayerChildren,\n },\n };\n\n const renderedPage = renderPage\n ? renderPage(resolvedProps)\n : (\n <>\n {props.canvasLayer.children}\n {resolvedTextLayerChildren}\n {!disablePdfAnnotations && props.annotationLayer.children}\n </>\n );\n\n return renderedPage;\n };\n }, [disablePdfAnnotations, disablePdfTextLayer, renderPage]);\n\n const cleanHighlightTexts = (texts: string[]): string[] => {\n if (!texts || texts.length === 0) return texts;\n return texts.filter((text) => {\n return !texts.some(\n (otherText) => otherText !== text && otherText.includes(text)\n );\n });\n };\n\n const highlightPageSet = useMemo(() => {\n if (useCoordinates) {\n return new Set(highlightCordinatePages.map((h: any) => h.pageIndex));\n } else {\n const set = new Set<number>();\n Object.values(highlightPages).forEach((p: any) => {\n if (p > 0) set.add(p - 1);\n });\n return set;\n }\n }, [highlightCordinatePages, highlightPages, useCoordinates]);\n\n const removeRedundantHighlightTexts = cleanHighlightTexts(highlightText);\n\n const {\n highlightIndex,\n setHighlightIndex,\n cursorIndex,\n setCursorIndex,\n orderedKeys,\n totalHighlights,\n getValidPosition,\n tryJump,\n jumpToPage,\n zoomTo,\n plugins,\n controls,\n hideNonTargetHighlights,\n deduplicateHighlights,\n scrollToCoord,\n } = PdfHighlightControls(\n removeRedundantHighlightTexts,\n !useCoordinates ? highlightPages : {},\n viewerRef,\n highlightPageSet,\n useCoordinates,\n useCoordinates ? highlightCordinatePages : [],\n highlightColor,\n activeHighlightColor\n );\n\n const currentPosition = getValidPosition(cursorIndex);\n const currentSegment = useMemo(() => {\n const pageNumber = currentPage + 1;\n return segments.find(\n (segment) =>\n pageNumber >= segment.start_page && pageNumber <= segment.end_page\n );\n }, [currentPage, segments]);\n\n // sync external activeCitationIndex → cursorIndex\n useEffect(() => {\n if (activeCitationIndex === undefined) return;\n if (activeCitationIndex === cursorIndex) return;\n setCursorIndex(activeCitationIndex);\n }, [activeCitationIndex]);\n\n // wrap controls to fire onActiveCitationChange\n const handleGoToNext = () => {\n if (cursorIndex >= totalHighlights - 1) return;\n controls.goToNext();\n if (onActiveCitationChange) onActiveCitationChange(cursorIndex + 1);\n };\n\n const handleGoToPrevious = () => {\n if (cursorIndex <= 0) return;\n controls.goToPrevious();\n if (onActiveCitationChange) onActiveCitationChange(cursorIndex - 1);\n };\n\n const modifiedControls = {\n ...controls,\n goToNext: handleGoToNext,\n goToPrevious: handleGoToPrevious,\n };\n\n const handlePageNavigate = (pageNumber: number) => {\n const nextPage = Math.min(Math.max(pageNumber, 1), totalPages || pageNumber);\n setCurrentPage(nextPage - 1);\n jumpToPage(nextPage - 1);\n };\n\n const waitForNavigationToSettle = React.useCallback((\n request: PdfNavigationRequest,\n pageNumber: number\n ) => {\n navigationSettleSequenceRef.current += 1;\n const settleSequence = navigationSettleSequenceRef.current;\n if (navigationSettleTimerRef.current != null) {\n window.clearTimeout(navigationSettleTimerRef.current);\n }\n\n let previousScrollTop: number | null = null;\n let stableChecks = 0;\n let attempts = 0;\n\n const checkScrollPosition = () => {\n if (navigationSettleSequenceRef.current !== settleSequence) return;\n\n attempts += 1;\n\n const scrollContainer = viewerRef.current?.querySelector(\n '.rpv-core__inner-pages'\n ) as HTMLElement | null;\n const targetPage = viewerRef.current?.querySelector(\n `[data-testid=\"core__page-layer-${pageNumber - 1}\"]`\n ) as HTMLElement | null;\n\n // Virtualized page layers are not guaranteed to be mounted on the first\n // check after jumpToPage. Keep polling so navigation completion is not\n // lost while React PDF Viewer is creating the target page DOM.\n if (!scrollContainer || !targetPage) {\n if (attempts >= 40) {\n navigationSettleTimerRef.current = null;\n onNavigationSettled?.({\n pageNumber,\n requestId: request.requestId,\n });\n return;\n }\n\n navigationSettleTimerRef.current = window.setTimeout(checkScrollPosition, 50);\n return;\n }\n\n if (previousScrollTop === scrollContainer.scrollTop) {\n stableChecks += 1;\n } else {\n previousScrollTop = scrollContainer.scrollTop;\n stableChecks = 0;\n }\n\n const scrollRect = scrollContainer.getBoundingClientRect();\n const pageRect = targetPage.getBoundingClientRect();\n const isTargetVisible = Boolean(\n scrollRect &&\n pageRect &&\n pageRect.bottom > scrollRect.top &&\n pageRect.top < scrollRect.bottom\n );\n const hasSettled = stableChecks >= 2 && isTargetVisible;\n const reachedTimeout = attempts >= 40;\n\n if (hasSettled || reachedTimeout) {\n navigationSettleTimerRef.current = null;\n onNavigationSettled?.({\n pageNumber,\n requestId: request.requestId,\n });\n return;\n }\n\n navigationSettleTimerRef.current = window.setTimeout(checkScrollPosition, 50);\n };\n\n navigationSettleTimerRef.current = window.setTimeout(checkScrollPosition, 50);\n }, [onNavigationSettled]);\n\n useEffect(() => () => {\n navigationSettleSequenceRef.current += 1;\n if (navigationSettleTimerRef.current != null) {\n window.clearTimeout(navigationSettleTimerRef.current);\n }\n }, []);\n\n useEffect(() => {\n if (!navigationRequest || totalPages <= 0) return;\n\n const nextPage = Math.min(\n Math.max(Math.trunc(navigationRequest.pageNumber), 1),\n totalPages\n );\n const requestKey = `${navigationRequest.requestId ?? nextPage}:${nextPage}`;\n if (lastNavigationRequestRef.current === requestKey) return;\n\n lastNavigationRequestRef.current = requestKey;\n setCurrentPage(nextPage - 1);\n jumpToPage(nextPage - 1);\n waitForNavigationToSettle(navigationRequest, nextPage);\n }, [jumpToPage, navigationRequest, totalPages, waitForNavigationToSettle]);\n\n if (!pdfUrl) {\n return (\n <ScannedDocCitation\n pages={fallbackPages}\n activeCitationIndex={activeCitationIndex}\n onActiveCitationChange={onActiveCitationChange}\n headerAction={headerAction}\n />\n );\n }\n\n const defaultViewerStyles: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n width: \"100%\",\n backgroundColor: \"#FAFAFA\",\n };\n\n const scrollToHighlight = () => {\n if (!viewerRef.current) return;\n\n const index = jumpToPageValue - 1;\n const key = orderedKeys[index];\n const page = highlightPages[key];\n const targetPage = page > 0 ? page - 1 : 0;\n\n const pageVisitMap: Record<number, number[]> = {};\n orderedKeys.forEach((k, i) => {\n const p = highlightPages[k];\n if (p > 0) {\n if (!pageVisitMap[p]) pageVisitMap[p] = [];\n pageVisitMap[p].push(i);\n }\n });\n const visits = pageVisitMap[page] || [];\n const occurrence = visits.indexOf(index);\n\n let attempts = 0;\n const maxAttempts = 40;\n\n const doScrollToHighlight = () => {\n attempts++;\n if (attempts > maxAttempts) return;\n\n const scrollContainer = viewerRef.current?.querySelector(\n \".rpv-core__inner-pages\"\n ) as HTMLElement;\n if (!scrollContainer) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const pageElement = viewerRef.current?.querySelector(\n `[data-testid=\"core__page-layer-${targetPage}\"]`\n );\n if (!pageElement) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const scrollContainerRect = scrollContainer.getBoundingClientRect();\n const pageRect = pageElement.getBoundingClientRect();\n const isPageVisible =\n pageRect.top < scrollContainerRect.bottom &&\n pageRect.bottom > scrollContainerRect.top;\n\n if (!isPageVisible) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const allHighlights = pageElement.querySelectorAll(\".rpv-search__highlight\");\n const target = allHighlights[occurrence] as HTMLElement;\n\n if (!target) {\n setTimeout(doScrollToHighlight, 100);\n return;\n }\n\n const highlightRect = target.getBoundingClientRect();\n const scrollTop =\n scrollContainer.scrollTop +\n (highlightRect.top - scrollContainerRect.top) -\n scrollContainer.clientHeight / 2 +\n highlightRect.height / 2;\n\n scrollContainer.scrollTo({ top: scrollTop, behavior: \"smooth\" });\n };\n\n setTimeout(doScrollToHighlight, 500);\n };\n\n return (\n <div\n ref={viewerRef}\n className={[\"citation-pdf-viewer\", customClasses?.pdfViewerWrapper]\n .filter(Boolean)\n .join(\" \")}\n data-disable-pdf-annotations={\n disablePdfAnnotations ? \"true\" : undefined\n }\n data-pdf-page-fit={\n resolvedDefaultScale === SpecialZoomLevel.PageFit ? \"true\" : undefined\n }\n style={{\n height: \"100%\",\n minHeight: 0,\n minWidth: 0,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n ...pdfStyles.pdfViewer,\n ...defaultViewerStyles,\n ...customStyles?.pdfViewer,\n backgroundColor: \"#F1F5F9\",\n }}\n >\n <PdfToolbar\n highlightIndex={highlightIndex}\n totalHighlights={totalHighlights}\n controls={modifiedControls}\n currentPosition={currentPosition}\n pdfName={pdfName}\n onClose={onClose}\n pdfUrl={pdfUrl}\n viewerRef={viewerRef}\n customStyles={customStyles}\n customClasses={customClasses}\n customIcons={customIcons}\n headerAction={headerAction}\n isZoomEnabled={isZoomEnabled}\n showHighlightsAction={showHighlightsAction}\n showFullScreenAction={showFullScreenAction} \n currentSegment={currentSegment}\n segmentTooltipText={segmentTooltipText}\n currentPage={currentPage + 1}\n totalPages={totalPages}\n onPageNavigate={handlePageNavigate}\n onRotatePage={handleRotatePage}\n currentPageRotation={currentPageRotation}\n showRotateButton={showRotateButton}\n />\n <PdfContainer\n defaultScale={resolvedDefaultScale}\n pdfUrl={pdfUrl}\n plugins={plugins}\n customStyles={customStyles}\n onError={onError}\n onLoad={(e: DocumentLoadEvent) => {\n setTotalPages(e.doc.numPages);\n\n const shouldAutoJumpToFirstMatch =\n !useCoordinates && !useRange && jumpToPageValue <= 0;\n\n if (jumpToPageValue > 0 && !useRange) {\n const index = jumpToPageValue - 1;\n const key = orderedKeys[index];\n const page = highlightPages[key];\n const cordinateTargetHighlight = highlightCordinatePages[index];\n setCursorIndex(index);\n\n console.log(cordinateTargetHighlight, \"cordinateTargetHighlight\");\n if (useCoordinates && cordinateTargetHighlight.pageIndex > 0)\n jumpToPage(cordinateTargetHighlight.pageIndex);\n\n if (page > 0) {\n setTimeout(() => {\n hideNonTargetHighlights(highlightPageSet);\n deduplicateHighlights(page - 1);\n }, 1000);\n if (!useCoordinates) {\n jumpToPage(page - 1);\n }\n }\n } else if (useRange && rangeOfPages && rangeOfPages.length === 2) {\n \n // Async function to handle sequential jumping and waiting\n const scanRangeSequence = async () => {\n const [startPage, endPage] = rangeOfPages;\n \n for (let p = startPage; p <= endPage; p++) {\n const targetPageIndex = p - 1;\n \n jumpToPage(targetPageIndex);\n \n // Pause execution for 1 second to let the DOM render the highlights\n await new Promise((resolve) => setTimeout(resolve, 1000));\n \n hideNonTargetHighlights(highlightPageSet);\n const matchSize = deduplicateHighlights(targetPageIndex);\n \n // If the returned size is greater than 0, a match was found. Stop the loop.\n if (matchSize && matchSize > 0) {\n break; \n }\n }\n };\n\n scanRangeSequence();\n\n } else if (!useCoordinates && highlightPages) {\n const firstKey = orderedKeys.find(k => highlightPages[k] > 0);\n if (firstKey !== undefined) {\n const firstPage = highlightPages[firstKey] - 1;\n jumpToPage(firstPage);\n setTimeout(() => {\n hideNonTargetHighlights(highlightPageSet);\n deduplicateHighlights(firstPage);\n }, 1000);\n }\n }\n\n requestAnimationFrame(() => {\n if (shouldAutoJumpToFirstMatch) {\n tryJump();\n }\n if (!useCoordinates && jumpToPageValue > 0 && !useRange) {\n scrollToHighlight();\n }\n });\n }}\n onPageChange={(e: PageChangeEvent) => {\n const currentPage = e.currentPage;\n setCurrentPage(currentPage);\n onCurrentPageChange?.(currentPage + 1);\n if (!highlightPageSet.has(currentPage)) {\n hideNonTargetHighlights(highlightPageSet);\n return;\n }\n deduplicateHighlights(currentPage);\n hideNonTargetHighlights(highlightPageSet);\n }}\n renderPage={resolvedRenderPage}\n setRenderRange={setRenderRange}\n />\n </div>\n );\n};\n\nexport default PdfViewer;\n"],"names":["pdfUrl","highlightText","highlightPages","highlightCordinatePages","highlightColor","activeHighlightColor","jumpToPageValue","pdfName","onClose","customStyles","customClasses","customIcons","useCoordinates","fallbackPages","activeCitationIndex","onActiveCitationChange","headerAction","isZoomEnabled","showHighlightsAction","defaultScale","SpecialZoomLevel","ActualSize","useRange","rangeOfPages","showFullScreenAction","showRotateButton","segments","title","start_page","end_page","page_count","segmentTooltipText","onCurrentPageChange","navigationRequest","onNavigationSettled","disablePdfAnnotations","disablePdfTextLayer","renderPage","setRenderRange","onError","viewerRef","useRef","resolvedDefaultScale","scale","PageFit","PageWidth","getResolvedScale","currentPage","setCurrentPage","useState","totalPages","setTotalPages","currentPageRotation","setCurrentPageRotation","lastNavigationRequestRef","navigationSettleTimerRef","navigationSettleSequenceRef","mutationObserverRef","pdfIdentifier","useMemo","URL","window","location","origin","pathname","split","pop","useEffect","rotationManager","setPdfIdentifier","onRotationChange","pageNum","angle","observer","MutationObserver","pageElements","current","querySelectorAll","registeredPages","Set","forEach","pageElement","match","getAttribute","length","pageNumber","parseInt","has","registerPageElement","add","observe","childList","subtree","attributes","disconnect","clearAll","getRotation","resolvedRenderPage","props","resolvedTextLayerChildren","jsx","style","display","children","textLayer","resolvedProps","annotationLayer","jsxs","Fragment","canvasLayer","highlightPageSet","map","h","pageIndex","set","Object","values","p","removeRedundantHighlightTexts","texts","filter","text","some","otherText","includes","highlightIndex","setHighlightIndex","cursorIndex","setCursorIndex","orderedKeys","totalHighlights","getValidPosition","tryJump","jumpToPage","zoomTo","plugins","controls","hideNonTargetHighlights","deduplicateHighlights","scrollToCoord","PdfHighlightControls","currentPosition","currentSegment","find","segment","modifiedControls","goToNext","goToPrevious","waitForNavigationToSettle","React","useCallback","request","settleSequence","clearTimeout","previousScrollTop","stableChecks","attempts","checkScrollPosition","scrollContainer","querySelector","targetPage","requestId","setTimeout","scrollTop","scrollRect","getBoundingClientRect","pageRect","isTargetVisible","Boolean","bottom","top","nextPage","Math","min","max","trunc","requestKey","ScannedDocCitation","pages","ref","className","pdfViewerWrapper","join","height","minHeight","minWidth","overflow","flexDirection","pdfStyles","pdfViewer","width","backgroundColor","PdfToolbar","onPageNavigate","onRotatePage","rotatePageBy90","PdfContainer","onLoad","e","doc","numPages","shouldAutoJumpToFirstMatch","index","key","page","cordinateTargetHighlight","console","log","async","startPage","endPage","targetPageIndex","Promise","resolve","matchSize","scanRangeSequence","firstKey","k","firstPage","requestAnimationFrame","pageVisitMap","i","push","occurrence","indexOf","doScrollToHighlight","scrollContainerRect","target","highlightRect","clientHeight","scrollTo","behavior","scrollToHighlight","onPageChange"],"mappings":"guBAgIkB,EAChBA,SACAC,gBACAC,iBACAC,0BACAC,iBAAiB,SACjBC,uBAAuB,UACvBC,kBAAkB,EAClBC,UACAC,UACAC,eACAC,gBACAC,cACAC,iBACAC,gBACAC,sBACAC,yBACAC,eACAC,iBAAgB,EAChBC,wBAAuB,EACvBC,eAAeC,EAAiBA,iBAAAC,WAChCC,YAAW,EACXC,eAAe,KACfC,wBAAqB,EACrBC,oBAAmB,EACnBC,WAAW,CACT,CACEC,MAAO,aACPC,WAAY,GACZC,SAAU,GACVC,WAAY,IAGhBC,qBACAC,sBACAC,oBACAC,sBACAC,yBAAwB,EACxBC,uBAAsB,EACtBC,aACAC,iBACAC,cAGM,MAAAC,EAAYC,SAA8B,MAC1CC,EAxEiB,CACvBC,IAEA,OAAQA,GACN,IAAK,aACH,OAAOvB,EAAAA,iBAAiBC,WAE1B,IAAK,UACH,OAAOD,EAAAA,iBAAiBwB,QAE1B,IAAK,YACH,OAAOxB,EAAAA,iBAAiByB,UAE1B,QACE,OAAOF,GAASvB,EAAiBA,iBAAAyB,YA0DRC,CAAiB3B,IACvC4B,EAAaC,GAAkBC,WAAS,IACxCC,EAAYC,GAAiBF,WAAS,IACtCG,EAAqBC,GAA0BJ,WAAS,GACzDK,EAA2Bb,SAAsB,MACjDc,EAA2Bd,SAAsB,MACjDe,GAA8Bf,SAAO,GACrCgB,GAAsBhB,SAAgC,MAGtDiB,GAAgBC,EAAAA,QAAQ,KACxB,IAAC3D,EAAe,MAAA,GAEhB,IAEF,OADY,IAAI4D,IAAI5D,EAAQ6D,OAAOC,SAASC,QACjCC,SAASC,MAAM,KAAKC,OAAS,SAAA,CAClC,MACC,MAAA,SACT,GACC,CAAClE,IAGJmE,EAAAA,UAAU,KACJT,IACFU,kBAAgBC,iBAAiBX,KAElC,CAACA,KAWJS,EAAAA,UAAU,IACYC,EAAAA,gBAAgBE,iBAAiB,CAACC,EAASC,KAEzDD,IAAYxB,EAAc,GAC5BM,EAAuBmB,KAK1B,CAACzB,IAGJoB,EAAAA,UAAU,KACF,MAAAM,EAAW,IAAIC,iBAAiB,KAE9B,MAAAC,EAAenC,EAAUoC,SAASC,iBACtC,sCAGIC,MAAsBC,IAEdJ,GAAAK,QAASC,IACrB,MAAMC,EAASD,EACZE,aAAa,gBACZD,MAAM,0BACN,GAAAA,GAASA,EAAME,QAAU,EAAG,CAC9B,MACMC,EADYC,SAASJ,EAAM,GAAI,IACN,EAG1BJ,EAAgBS,IAAIF,KACPjB,EAAAA,gBAAAoB,oBAAoBH,EAAYJ,GAChDH,EAAgBW,IAAIJ,GAExB,MAaJ,OATI7C,EAAUoC,UACHH,EAAAiB,QAAQlD,EAAUoC,QAAS,CAClCe,WAAW,EACXC,SAAS,EACTC,YAAY,IAEdpC,GAAoBmB,QAAUH,GAGzB,KACLA,EAASqB,aACTrC,GAAoBmB,QAAU,OAE/B,IAGHT,EAAAA,UAAU,IACD,KACLC,EAAAA,gBAAgB2B,WACZtC,GAAoBmB,SACtBnB,GAAoBmB,QAAQkB,cAG/B,IAGH3B,EAAAA,UAAU,KACR,MAAMkB,EAAatC,EAAc,EACVM,EAAAe,EAAAA,gBAAgB4B,YAAYX,KAClD,CAACtC,IACE,MAAAkD,GAAqBtC,EAAAA,QAAgC,IACpDxB,GAA0BC,EAEvB8D,IACN,MAAMC,EAA4B/D,EAChCgE,MAAC,MAAI,CAAA,cAAY,OAAOC,MAAO,CAAEC,QAAS,QACvCC,SAAML,EAAAM,UAAUD,WAEjBL,EAAMM,UAAUD,SACdE,EAAgB,IACjBP,EACHQ,gBAAiB,IACZR,EAAMQ,gBACTH,SAAUpE,EAAwB,KAAO+D,EAAMQ,gBAAgBH,UAEjEC,UAAW,IACNN,EAAMM,UACTD,SAAUJ,IAcP,OAVc9D,EACjBA,EAAWoE,GAGRE,OAAAC,EAAAA,SAAA,CAAAL,SAAA,CAAAL,EAAMW,YAAYN,SAClBJ,GACChE,GAAyB+D,EAAMQ,gBAAgBH,aA1BElE,EAgC1D,CAACF,EAAuBC,EAAqBC,IAW1CyE,GAAmBnD,EAAAA,QAAQ,KAC/B,GAAI/C,EACK,OAAA,IAAImE,IAAI5E,EAAwB4G,IAAKC,GAAWA,EAAEC,YACpD,CACC,MAAAC,MAAUnC,IAIT,OAHPoC,OAAOC,OAAOlH,GAAgB8E,QAASqC,IACjCA,EAAI,GAAOH,EAAAzB,IAAI4B,EAAI,KAElBH,CACT,GACC,CAAC/G,EAAyBD,EAAgBU,IAEvC0G,IArBuBC,GAqB6BtH,IApBzB,IAAjBsH,GAAMnC,OACbmC,GAAMC,OAAQC,IACXF,GAAMG,KACXC,GAAcA,IAAcF,GAAQE,EAAUC,SAASH,KAHnBF,GADf,IAACA,GAuBvB,MAAAM,eACJA,GAAAC,kBACAA,GAAAC,YACAA,GAAAC,eACAA,GAAAC,YACAA,GAAAC,gBACAA,GAAAC,iBACAA,GAAAC,QACAA,GAAAC,WACAA,GAAAC,OACAA,GAAAC,QACAA,GAAAC,SACAA,GAAAC,wBACAA,GAAAC,sBACAA,GAAAC,cACAA,IACEC,EAAAA,qBACFtB,GACC1G,EAAkC,CAAC,EAAlBV,EAClBsC,EACAsE,GACAlG,EACAA,EAAiBT,EAA0B,GAC3CC,EACAC,GAGIwI,GAAkBV,GAAiBJ,IACnCe,GAAiBnF,EAAAA,QAAQ,KAC7B,MAAM0B,EAAatC,EAAc,EACjC,OAAOrB,EAASqH,KACbC,GACC3D,GAAc2D,EAAQpH,YAAcyD,GAAc2D,EAAQnH,WAE7D,CAACkB,EAAarB,IAGjByC,EAAAA,UAAU,UAC+B,IAAnCrD,GACAA,IAAwBiH,IAC5BC,GAAelH,IACd,CAACA,IAGJ,MAYMmI,GAAmB,IACpBT,GACHU,SAdqB,KACjBnB,IAAeG,GAAkB,IACrCM,GAASU,WACLnI,GAA+CA,EAAAgH,GAAc,KAYjEoB,aATyB,KACrBpB,IAAe,IACnBS,GAASW,eACLpI,GAA+CA,EAAAgH,GAAc,MAe7DqB,GAA4BC,EAAA,QAAMC,YAAY,CAClDC,EACAlE,KAEA7B,GAA4BoB,SAAW,EACvC,MAAM4E,EAAiBhG,GAA4BoB,QACX,MAApCrB,EAAyBqB,SACpBf,OAAA4F,aAAalG,EAAyBqB,SAG/C,IAAI8E,EAAmC,KACnCC,EAAe,EACfC,EAAW,EAEf,MAAMC,EAAsB,KACtB,GAAArG,GAA4BoB,UAAY4E,EAAgB,OAEhDI,GAAA,EAEN,MAAAE,EAAkBtH,EAAUoC,SAASmF,cACzC,0BAEIC,EAAaxH,EAAUoC,SAASmF,cACpC,kCAAkC1E,EAAa,OAM7C,IAACyE,IAAoBE,EACvB,OAAIJ,GAAY,IACdrG,EAAyBqB,QAAU,UACb1C,IAAA,CACpBmD,aACA4E,UAAWV,EAAQU,kBAKvB1G,EAAyBqB,QAAUf,OAAOqG,WAAWL,EAAqB,KAIxEH,IAAsBI,EAAgBK,UACxBR,GAAA,GAEhBD,EAAoBI,EAAgBK,UACrBR,EAAA,GAGX,MAAAS,EAAaN,EAAgBO,wBAC7BC,EAAWN,EAAWK,wBACtBE,EAAkBC,QACtBJ,GACAE,GACAA,EAASG,OAASL,EAAWM,KAC7BJ,EAASI,IAAMN,EAAWK,QAK5B,GAHmBd,GAAgB,GAAKY,GACjBX,GAAY,GAQjC,OALArG,EAAyBqB,QAAU,UACb1C,IAAA,CACpBmD,aACA4E,UAAWV,EAAQU,YAKvB1G,EAAyBqB,QAAUf,OAAOqG,WAAWL,EAAqB,KAG5EtG,EAAyBqB,QAAUf,OAAOqG,WAAWL,EAAqB,KACzE,CAAC3H,IAyBJ,GAvBAiC,EAAAA,UAAU,IAAM,KACdX,GAA4BoB,SAAW,EACC,MAApCrB,EAAyBqB,SACpBf,OAAA4F,aAAalG,EAAyBqB,UAE9C,IAEHT,EAAAA,UAAU,KACJ,IAAClC,GAAqBiB,GAAc,EAAG,OAE3C,MAAMyH,EAAWC,KAAKC,IACpBD,KAAKE,IAAIF,KAAKG,MAAM9I,EAAkBoD,YAAa,GACnDnC,GAEI8H,EAAa,GAAG/I,EAAkBgI,WAAaU,KAAYA,IAC7DrH,EAAyBsB,UAAYoG,IAEzC1H,EAAyBsB,QAAUoG,EACnChI,EAAe2H,EAAW,GAC1BtC,GAAWsC,EAAW,GACtBvB,GAA0BnH,EAAmB0I,KAC5C,CAACtC,GAAYpG,EAAmBiB,EAAYkG,MAE1CpJ,EAED,OAAAoG,EAAAA,IAAC6E,EAAA,QAAA,CACCC,MAAOrK,EACPC,sBACAC,yBACAC,iBAwFJ,OAAA2F,EAAAA,KAAC,MAAA,CACCwE,IAAK3I,EACL4I,UAAW,CAAC,sBAAuB1K,GAAe2K,kBAC/C7D,OAAOgD,SACPc,KAAK,KACR,+BACEnJ,EAAwB,YAAS,EAEnC,oBACEO,IAAyBtB,EAAAA,iBAAiBwB,QAAU,YAAS,EAE/DyD,MAAO,CACLkF,OAAQ,OACRC,UAAW,EACXC,SAAU,EACVC,SAAU,SACVpF,QAAS,OACTqF,cAAe,YACZC,EAAUA,UAAAC,UApGjBvF,QAAS,OACTqF,cAAe,SACfJ,OAAQ,OACRO,MAAO,OACPC,gBAAiB,aAkGVtL,GAAcoL,UACjBE,gBAAiB,WAGnBxF,SAAA,CAAAH,EAAAA,IAAC4F,EAAA,QAAA,CACCnE,kBACAK,mBACAM,SAAUS,GACVJ,mBACAtI,UACAC,UACAR,SACAwC,YACA/B,eACAC,gBACAC,cACAK,eACAC,gBACAC,uBACAM,uBACAsH,kBACA/G,qBACAgB,YAAaA,EAAc,EAC3BG,aACA+I,eAnPsB5G,IACpB,MAAAsF,EAAWC,KAAKC,IAAID,KAAKE,IAAIzF,EAAY,GAAInC,GAAcmC,GACjErC,EAAe2H,EAAW,GAC1BtC,GAAWsC,EAAW,IAiPlBuB,aAxbmB,KACvB,MAAM7G,EAAatC,EAAc,EACjCqB,kBAAgB+H,eAAe9G,GAERhC,EAAAe,EAAAA,gBAAgB4B,YAAYX,KAqb/CjC,sBACA3B,qBAEF2E,EAAAA,IAACgG,EAAA,QAAA,CACCjL,aAAcuB,EACd1C,SACAuI,WACA9H,eACA8B,UACA8J,OAASC,IACOnJ,EAAAmJ,EAAEC,IAAIC,UAEpB,MAAMC,GACH7L,IAAmBU,GAAYhB,GAAmB,EAEjD,GAAAA,EAAkB,IAAMgB,EAAU,CACpC,MAAMoL,EAAQpM,EAAkB,EAC1BqM,EAAM1E,GAAYyE,GAClBE,EAAO1M,EAAeyM,GACtBE,EAA2B1M,EAAwBuM,GACzD1E,GAAe0E,GAEPI,QAAAC,IAAIF,EAA0B,4BAClCjM,GAAkBiM,EAAyB5F,UAAY,GACzDoB,GAAWwE,EAAyB5F,WAElC2F,EAAO,IACT1C,WAAW,KACTzB,GAAwB3B,IACxB4B,GAAsBkE,EAAO,IAC5B,KACEhM,GACHyH,GAAWuE,EAAO,GAGb,MAAA,GAAAtL,GAAYC,GAAwC,IAAxBA,EAAa6D,OAAc,CAGtC4H,WAClB,MAACC,EAAWC,GAAW3L,EAE7B,IAAA,IAAS8F,EAAI4F,EAAW5F,GAAK6F,EAAS7F,IAAK,CACzC,MAAM8F,EAAkB9F,EAAI,EAE5BgB,GAAW8E,SAGL,IAAIC,QAASC,GAAYnD,WAAWmD,EAAS,MAEnD5E,GAAwB3B,IAClB,MAAAwG,EAAY5E,GAAsByE,GAGpC,GAAAG,GAAaA,EAAY,EAC3B,KAEJ,GAGgBC,EAAA,MAEpB,IAAY3M,GAAkBV,EAAgB,CAC5C,MAAMsN,EAAWvF,GAAYc,QAAU7I,EAAeuN,GAAK,GAC3D,QAA4B,IAAxBD,EAAwB,CACpB,MAAAE,EAAYxN,EAAesN,GAAY,EAC7CnF,GAAWqF,GACXxD,WAAW,KACTzB,GAAwB3B,IACxB4B,GAAsBgF,IACrB,IACL,CACF,CAEAC,sBAAsB,KAChBlB,GACMrE,MAELxH,GAAkBN,EAAkB,IAAMgB,GAtM/B,MACpB,IAACkB,EAAUoC,QAAS,OAExB,MAAM8H,EAAQpM,EAAkB,EAC1BqM,EAAM1E,GAAYyE,GAClBE,EAAO1M,EAAeyM,GACtB3C,EAAa4C,EAAO,EAAIA,EAAO,EAAI,EAEnCgB,EAAyC,CAAA,EACnC3F,GAAAjD,QAAQ,CAACyI,EAAGI,KAChB,MAAAxG,EAAInH,EAAeuN,GACrBpG,EAAI,IACDuG,EAAavG,KAAiBuG,EAAAvG,GAAK,IAC3BuG,EAAAvG,GAAGyG,KAAKD,MAGzB,MACME,GADSH,EAAahB,IAAS,IACXoB,QAAQtB,GAElC,IAAI9C,EAAW,EACf,MAEMqE,EAAsB,KAE1B,GADArE,IACIA,EAJc,GAIU,OAEtB,MAAAE,EAAkBtH,EAAUoC,SAASmF,cACzC,0BAEF,IAAKD,EAEH,YADAI,WAAW+D,EAAqB,KAI5B,MAAAhJ,EAAczC,EAAUoC,SAASmF,cACrC,kCAAkCC,OAEpC,IAAK/E,EAEH,YADAiF,WAAW+D,EAAqB,KAI5B,MAAAC,EAAsBpE,EAAgBO,wBACtCC,EAAWrF,EAAYoF,wBAK7B,KAHEC,EAASI,IAAMwD,EAAoBzD,QACnCH,EAASG,OAASyD,EAAoBxD,KAItC,YADAR,WAAW+D,EAAqB,KAI5B,MACAE,EADgBlJ,EAAYJ,iBAAiB,0BACtBkJ,GAE7B,IAAKI,EAEH,YADAjE,WAAW+D,EAAqB,KAI5B,MAAAG,EAAgBD,EAAO9D,wBACvBF,EACJL,EAAgBK,WACfiE,EAAc1D,IAAMwD,EAAoBxD,KACzCZ,EAAgBuE,aAAe,EAC/BD,EAAc7C,OAAS,EAEzBzB,EAAgBwE,SAAS,CAAE5D,IAAKP,EAAWoE,SAAU,YAGvDrE,WAAW+D,EAAqB,MAgIJO,MAIxBC,aAAenC,IACb,MAAMvJ,EAAcuJ,EAAEvJ,YACtBC,EAAeD,GACff,IAAsBe,EAAc,GAC/B+D,GAAiBvB,IAAIxC,IAI1B2F,GAAsB3F,GACtB0F,GAAwB3B,KAJtB2B,GAAwB3B,KAM5BzE,WAAY4D,GACZ3D"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("@mui/material/Box"),i=require("@mui/material/Stack"),t=require("@mui/material/Typography");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=a(r),l=a(i),n=a(t);exports.default=function({icon:r,description:i}){return e.jsxs(l.default,{direction:"row",alignItems:"flex-start",spacing:.625,sx:{px:.75,py:.625,border:"1px solid #86EFAC",borderRadius:2,bgcolor:"#FFFFFF",color:"#16A34A"},children:[e.jsx(o.default,{"aria-hidden":"true",sx:{display:"flex",flexShrink:0,mt:"1px",fontSize:14},children:r}),e.jsx(n.default,{sx:{minWidth:0,color:"inherit",fontSize:11,lineHeight:1.5,overflowWrap:"anywhere"},children:i})]})};
|
|
2
|
+
//# sourceMappingURL=ApprovalDescriptionBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalDescriptionBanner.js","sources":["../../../../src/features/SegmentReviewComponents/ApprovalDescriptionBanner.tsx"],"sourcesContent":["import { type ReactNode } from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nexport interface ApprovalDescriptionBannerProps {\n icon: ReactNode;\n description: string;\n}\n\n/**\n * Green confirmation banner shown above the revert action, e.g.\n * \"A reviewer confirmed this document's page range.\"\n */\nexport default function ApprovalDescriptionBanner({\n icon,\n description,\n}: ApprovalDescriptionBannerProps) {\n return (\n <Stack\n direction=\"row\"\n alignItems=\"flex-start\"\n spacing={0.625}\n sx={{\n px: 0.75,\n py: 0.625,\n border: '1px solid #86EFAC',\n borderRadius: 2,\n bgcolor: '#FFFFFF',\n color: '#16A34A',\n }}\n >\n <Box\n aria-hidden=\"true\"\n sx={{ display: 'flex', flexShrink: 0, mt: '1px', fontSize: 14 }}\n >\n {icon}\n </Box>\n <Typography\n sx={{\n minWidth: 0,\n color: 'inherit',\n fontSize: 11,\n lineHeight: 1.5,\n overflowWrap: 'anywhere',\n }}\n >\n {description}\n </Typography>\n </Stack>\n );\n}"],"names":["icon","description","jsxs","Stack","direction","alignItems","spacing","sx","px","py","border","borderRadius","bgcolor","color","children","jsx","Box","display","flexShrink","mt","fontSize","Typography","minWidth","lineHeight","overflowWrap"],"mappings":"8TAcA,UAAkDA,KAChDA,EAAAC,YACAA,IAGE,OAAAC,EAAAA,KAACC,EAAA,QAAA,CACCC,UAAU,MACVC,WAAW,aACXC,QAAS,KACTC,GAAI,CACFC,GAAI,IACJC,GAAI,KACJC,OAAQ,oBACRC,aAAc,EACdC,QAAS,UACTC,MAAO,WAGTC,SAAA,CAAAC,EAAAA,IAACC,EAAA,QAAA,CACC,cAAY,OACZT,GAAI,CAAEU,QAAS,OAAQC,WAAY,EAAGC,GAAI,MAAOC,SAAU,IAE1DN,SAAAd,IAEHe,EAAAA,IAACM,EAAA,QAAA,CACCd,GAAI,CACFe,SAAU,EACVT,MAAO,UACPO,SAAU,GACVG,WAAY,IACZC,aAAc,YAGfV,SAAAb,MAIT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),i=require("@mui/icons-material/ChevronRight"),r=require("@mui/icons-material/Close"),o=require("@mui/icons-material/ExpandMore"),n=require("@mui/material/Box"),l=require("@mui/material/Button"),a=require("@mui/material/ButtonBase"),d=require("@mui/material/Divider"),s=require("@mui/material/IconButton"),u=require("@mui/material/Paper"),c=require("@mui/material/Radio"),x=require("@mui/material/Stack"),p=require("@mui/material/TextField"),f=require("@mui/material/Typography"),h=require("./RevertSummaryNotice.js"),g=require("./CognitiveIcon.js"),m=require("./CognitiveScoreBadge.js"),b=require("../../assests/icons/InfoAlert.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=E(i),j=E(r),F=E(o),S=E(n),y=E(l),v=E(a),w=E(d),R=E(s),M=E(u),A=E(c),I=E(x),T=E(p),z=E(f);const W=(e,t)=>[e,...Array.isArray(t)?t:null==t?[]:[t]],k="MERGE_ADJACENT";var P=(e=>(e.KEEP="KEEP",e.SPLIT_HERE="SPLIT_HERE",e.MERGE_NEXT="MERGE_NEXT",e.MERGE_PREV="MERGE_PREV",e.MERGE_PREVIOUS="MERGE_PREVIOUS",e.SET_RANGE="SET_RANGE",e))(P||{});const _=e=>Object.values(P).includes(e),N=(e,t,i,r)=>{if(!t||!e)return[];const o=t.additional_decisions,n=Array.isArray(o)?o:o?Object.values(o).flat():[],l=Array.from(new Set([...t.allowed_decisions,...n]));return l.flatMap(t=>{const o=e.focus_page,n=l.find(e=>e.toLowerCase().includes("merge")),a=null!=o&&null!=i&&null!=r&&o===i&&o===r,d=null!=o&&null!=i&&o===i,s=null!=o&&null!=r&&(o===r||o===r+1),u=d||s||!(null!=o&&(!(null!=i&&null!=r)||o>i&&o<r));switch(t){case"SET_RANGE":return[];case"KEEP":return[{id:t,title:"Keep as is",description:"Keep the current document boundary unchanged."}];case"SPLIT_HERE":return[{id:t,title:"Split to a separate document",description:u?"A valid page inside the document is required to split it.":o?`Start a new document at page ${o}.`:"Create a new document at this boundary.",disabled:u}];case"MERGE_PREV":case"MERGE_NEXT":case"MERGE_PREVIOUS":return t!==n?[]:a?[{id:k,title:"Merge with an adjacent document",description:"Choose to merge with the previous or next document."}]:d?[{id:"MERGE_PREVIOUS",title:"Merge with previous document",description:"Combine this document with the previous document."}]:s?[{id:"MERGE_NEXT",title:"Merge with next document",description:"Combine this document with the next document."}]:[{id:k,title:"Merge with an adjacent document",description:"Choose to merge with the previous or next document."}]}return[]})};exports.BoundaryReviewActionEnum=P,exports.createBoundaryCardOptions=N,exports.default=function({headerName:i="Boundary Check",title:r,pageNo:o,content:n,revertSummary:l,cognitiveScore:a,config:d,metadata:s,previousSegmentTitle:u,nextSegmentTitle:c,selectedIndex:x,defaultSelectedIndex:p=null,defaultStartPage:f,defaultEndPage:E,onSelectionChange:P,onConfirm:B,onActionConfirm:G,onCognitiveClick:D,onAdjustManually:q,onClose:H,confirmLabel:O="Confirm",manualPrompt:V="Didn't find the right option?",manualActionLabel:L="Adjust Manually",cognitiveLabel:U="Cognitive Integrity",showAdjustManually:X=!0,showCognitiveIntegrity:K=!0,showCloseButton:$=!0,confirmDisabled:J=!1,width:Y=260,maxWidth:Q=260,className:Z,styles:ee,reviewAction:te,totalPages:ie}){console.log("LOG: Total pages",ie);const re=t.useMemo(()=>(d??(s?N(s,te,f,E):[])).filter(e=>"SET_RANGE"!==e.id),[d,E,f,s,te]),[oe,ne]=t.useState(p),[le,ae]=t.useState(null==f?"":String(f)),[de,se]=t.useState(null==E?"":String(E)),[ue,ce]=t.useState(!1),[xe,pe]=t.useState(!1),[fe,he]=t.useState(null),[ge,me]=t.useState(!1),be=void 0===x?oe:x,Ee=null==be?void 0:re[be],Ce=Ee?.id===k,je=null!=u,Fe=null!=c,Se=e=>!0===e.disabled||"MERGE_PREV"===e.id&&!je||"MERGE_PREVIOUS"===e.id&&!je||"MERGE_NEXT"===e.id&&!Fe||e.id===k&&!je&&!Fe,ye=Number(le),ve=Number(de),we=le.trim().length>0&&de.trim().length>0&&Number.isInteger(ye)&&Number.isInteger(ve)&&ye>0&&ve>0,Re=null!=ie&&ye>ie,Me=null!=ie&&ve>ie,Ae=le.trim().length>0&&de.trim().length>0&&Number.isInteger(ye)&&Number.isInteger(ve)&&ye>ve,Ie=we&&ye<=ve&&!Re&&!Me,Te=Ie&&ye===f&&ve===E,ze=J||!Ee||Se(Ee)||Ce&&null==fe||!B&&!G;return e.jsx(M.default,{className:Z,elevation:4,sx:W({width:Y,maxWidth:Q,borderTop:"4px solid",borderColor:"error.main",borderRadius:2,bgcolor:"background.paper",overflow:"hidden",boxSizing:"border-box","@media (max-width: 372px)":{width:"calc(100vw - 32px)"}},ee?.root),children:e.jsxs(I.default,{spacing:.75,sx:{p:1},children:[e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:.75,sx:ee?.header,children:[e.jsx(b.default,{color:"error",height:16,width:16}),e.jsx(z.default,{sx:{flex:1,color:"error.main",fontSize:12,fontWeight:500,lineHeight:1.25,textTransform:"uppercase"},children:i}),$&&e.jsx(R.default,{size:"small",onClick:H,disabled:!H,"aria-label":"Close boundary check",sx:{p:0,"&.Mui-disabled":{color:"text.secondary"}},children:e.jsx(j.default,{sx:{fontSize:17}})})]}),e.jsxs(S.default,{children:[e.jsx(z.default,{sx:{color:"text.primary",fontSize:14,fontWeight:500},children:r}),null!=o&&e.jsx(z.default,{sx:{mt:.125,color:"text.secondary",fontSize:12},children:o}),e.jsx(w.default,{sx:{my:.625}}),null!=l?e.jsx(h.default,{children:l}):null!=n&&e.jsx(z.default,{component:"div",sx:{color:"text.secondary",fontSize:11.5,lineHeight:1.3},children:n})]}),e.jsxs(I.default,{spacing:.625,role:"radiogroup","aria-label":"Boundary options",children:[re.map((t,i)=>{const r=be===i,o=Se(t);return e.jsxs(M.default,{variant:"outlined",sx:W({borderColor:r?"#1976d2":"divider",borderRadius:2,bgcolor:o?"#F8FAFC":"background.paper",overflow:"hidden"},ee?.option),children:[e.jsxs(v.default,{role:"radio","aria-checked":r,disabled:J||o,onClick:()=>((e,t)=>{J||Se(t)||(void 0===x&&ne(e),t.id!==k&&he(null),ue&&(ce(!1),pe(!1)),P?.(e,t))})(i,t),sx:{width:"100%",justifyContent:"flex-start",px:.75,py:.5,textAlign:"left"},children:[e.jsx(A.default,{checked:r,disabled:J||o,tabIndex:-1,size:"small",sx:{p:.25,mr:.5,"&.Mui-disabled":{color:"#CBD5E1"}}}),e.jsxs(S.default,{sx:{minWidth:0},children:[e.jsx(z.default,{sx:{color:o?"#94A3B8":"text.primary",fontSize:12.5,fontWeight:500},children:t.title}),null!=t.description&&e.jsx(z.default,{sx:{mt:.125,color:o?"#94A3B8":"text.secondary",fontSize:11},children:t.description})]})]}),r&&t.id===k&&e.jsx(I.default,{direction:"row",spacing:.75,sx:W({px:.75,pb:.75},ee?.adjacentSelector),children:[{direction:"previous",title:u??"No Previous document",caption:"← Merge into Previous",available:je},{direction:"next",title:c??"No Next document",caption:"Merge into Next →",available:Fe}].map(t=>{const i=fe===t.direction;return e.jsxs(I.default,{sx:{flex:1,minWidth:0},children:[e.jsx(v.default,{disabled:J||!t.available,onClick:()=>he(t.direction),"aria-pressed":i,sx:{width:"100%",minWidth:0,minHeight:46,alignItems:"flex-start",justifyContent:"flex-start",p:.625,border:"1px solid",borderColor:i?"#7F56D9":"#D0D5DD",borderRadius:1.5,bgcolor:i?"#E0E7FF":"background.paper",color:i?"#7F56D9":t.available?"text.primary":"#98A2B3",textAlign:"left","&.Mui-disabled":{color:"#98A2B3",bgcolor:"#F8FAFC"}},children:e.jsx(z.default,{sx:{color:"inherit",fontSize:11,fontWeight:500,lineHeight:1.25,overflowWrap:"anywhere"},children:t.title})}),e.jsx(z.default,{sx:{mt:.5,color:i?"#5925DC":"text.secondary",fontSize:9.5,lineHeight:1.2,whiteSpace:"nowrap",textAlign:"next"===t.direction?"right":"left"},children:t.caption})]},t.direction)})})]},t.id)}),Ce&&null!=fe&&e.jsxs(I.default,{direction:"row",alignItems:"flex-start",spacing:.625,sx:W({p:.75,border:"1px solid #FCA5A5",borderRadius:1.5,bgcolor:"#FEF2F2"},ee?.impactWarning),children:[e.jsx(b.default,{color:"error",height:14,width:14,sx:{mt:.125}}),e.jsxs(z.default,{sx:{color:"#DC2626",fontSize:10.5,lineHeight:1.4},children:["This will impact the ",fe," document. Its content and page range will change."]})]}),e.jsx(y.default,{variant:"contained",fullWidth:!0,disabled:ze,onClick:()=>{if(ze||null==be||!Ee)return;const e=Ce?"previous"===fe?"MERGE_PREVIOUS":"MERGE_NEXT":Ee.id,t=Ce?{...Ee,id:e}:Ee,i={selectedIndex:be,option:t,metadata:s};B?.(be,t,i),G&&_(e)&&G(e,i)},sx:W({minHeight:32,mt:.25,borderRadius:2,fontSize:13,fontWeight:600,textTransform:"none",backgroundColor:"#5925DC","&:hover":{backgroundColor:"#4A1FB8"},"&.Mui-disabled":{backgroundColor:"#D9D6FE",color:"#FFFFFF"}},ee?.confirmButton),children:O})]}),X&&e.jsxs(I.default,{spacing:.625,sx:ee?.manualSection,children:[e.jsxs(v.default,{disabled:J,onClick:()=>{const e=!ue;ce(e),pe(!1),e&&(void 0===x&&ne(null),q?.())},"aria-expanded":ue,sx:{width:"100%",justifyContent:"space-between",borderRadius:1,textAlign:"left"},children:[e.jsx(S.default,{children:e.jsx(z.default,{sx:{color:"text.primary",fontSize:12,fontWeight:600},children:V})}),e.jsx(F.default,{sx:{color:"text.secondary",fontSize:16,transform:ue?"rotate(180deg)":"none",transition:"transform 150ms ease"}})]}),ue&&!xe&&e.jsxs(S.default,{sx:{pt:.5,fontFamily:'Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif'},children:[e.jsxs(S.default,{sx:{display:"grid",gridTemplateColumns:"1fr 1fr",columnGap:"8px",mb:"4px"},children:[e.jsx(z.default,{sx:{fontSize:"10.5px",fontWeight:400,lineHeight:"14px",color:"#57697E",margin:0},children:"Starts"}),e.jsx(z.default,{sx:{fontSize:"10.5px",fontWeight:400,lineHeight:"14px",color:"#57697E",margin:0},children:"Ends"})]}),e.jsxs(S.default,{sx:{display:"grid",gridTemplateColumns:"1fr 1fr",columnGap:"8px",mb:"4px"},children:[e.jsxs(S.default,{children:[e.jsx(T.default,{size:"small",type:"text",value:le,disabled:J,error:Re||Ae,onChange:e=>{const t=e.target.value;/^\d*$/.test(t)&&ae(t)},inputProps:{inputMode:"numeric",pattern:"[0-9]*"},sx:{"& .MuiOutlinedInput-root":{height:"30px",backgroundColor:"#FFFFFF","& fieldset":{borderColor:Re||Ae?"#EF4444":"#C3CFDC",borderWidth:"1px",borderRadius:"6px"},"&:hover fieldset":{borderColor:Re||Ae?"#EF4444":"#C3CFDC"},"&.Mui-focused fieldset":{borderColor:Re||Ae?"#EF4444":"#9488F6",borderWidth:"1px"}},"& .MuiOutlinedInput-input":{fontSize:"12px",fontWeight:400,lineHeight:"1",color:"#34445A",padding:"0 10px",height:"30px"}}}),Re&&e.jsxs(z.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:["Must be ≤ ",ie," (total pages)"]}),Ae&&!Re&&e.jsx(z.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:"Must be ≤ end page"})]}),e.jsxs(S.default,{children:[e.jsx(T.default,{size:"small",type:"text",value:de,disabled:J,error:Me||Ae,onChange:e=>{const t=e.target.value;/^\d*$/.test(t)&&se(t)},inputProps:{inputMode:"numeric",pattern:"[0-9]*"},sx:{"& .MuiOutlinedInput-root":{height:"30px",backgroundColor:"#FFFFFF","& fieldset":{borderColor:Me||Ae?"#EF4444":"#C3CFDC",borderWidth:"1px",borderRadius:"6px"},"&:hover fieldset":{borderColor:Me||Ae?"#EF4444":"#C3CFDC"},"&.Mui-focused fieldset":{borderColor:Me||Ae?"#EF4444":"#9488F6",borderWidth:"1px"}},"& .MuiOutlinedInput-input":{fontSize:"12px",fontWeight:400,lineHeight:"1",color:"#34445A",padding:"0 10px",height:"30px"}}}),Me&&e.jsxs(z.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:["Must be ≤ ",ie," (total pages)"]}),Ae&&!Me&&e.jsx(z.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:"Must be ≥ start page"})]})]}),e.jsx(S.default,{children:e.jsx(y.default,{onClick:()=>{Ie&&(Te?me(!0):pe(!0))},disabled:J||!Ie||Te,sx:{height:"30px",padding:"0 12px",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",backgroundColor:"#FFFFFF",border:"1px solid #8E80F3",borderRadius:"6px",fontFamily:'Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif',fontSize:"12px",fontWeight:600,lineHeight:"1",color:"#4A24CF",outline:"none",cursor:"pointer",textTransform:"none",transition:"all 150ms ease-in-out","&:hover":!Ie||Te?{}:{backgroundColor:"#FAF9FF",borderColor:"#7F6FF0"},"&:active":!Ie||Te?{}:{transform:"translateY(1px)"},"&.Mui-disabled":{backgroundColor:"#FFFFFF",borderColor:"#C3CFDC",color:"#A0ABBE",cursor:"not-allowed"}},children:"Apply"})}),Te&&ge&&e.jsx(S.default,{sx:{backgroundColor:"#FEF3C7",border:"1px solid #FBBF24",borderRadius:"6px",padding:"8px 10px",marginTop:"4px"},children:e.jsx(z.default,{sx:{fontSize:"10px",color:"#B45309",fontWeight:500,lineHeight:1.4},children:"Please change the boundary to change the document boundary as no changes will be applied."})}),e.jsx(S.default,{sx:{width:"100%",height:"1px",marginTop:"8px",backgroundColor:"#EEF0F2",border:"0"}})]}),ue&&xe&&e.jsxs(I.default,{spacing:.75,sx:W({p:.75,borderRadius:1.5,bgcolor:"#FFF7ED"},ee?.manualConfirmation),children:[e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:.5,children:[e.jsx(b.default,{color:"warning",height:14,width:14}),e.jsx(z.default,{sx:{color:"#EA580C",fontSize:11,fontWeight:600},children:"Confirm this change?"})]}),e.jsxs(z.default,{sx:{color:"text.secondary",fontSize:10.5,lineHeight:1.4},children:["Pages ",ye,"-",ve," will become part of ",r,", including pages from other documents in this range."]}),e.jsxs(I.default,{direction:"row",spacing:.75,children:[e.jsx(y.default,{variant:"outlined",fullWidth:!0,onClick:()=>pe(!1),sx:{minHeight:28,borderRadius:1.5,fontSize:11,textTransform:"none"},children:"Cancel"}),e.jsx(y.default,{variant:"contained",fullWidth:!0,disabled:J||!B||!Ie||Te,onClick:()=>{if(!Ie||Te||!B)return;const e={id:"SET_RANGE",title:L};B(-1,e,{selectedIndex:-1,option:e,startPage:ye,endPage:ve,metadata:s})},sx:{minHeight:28,borderRadius:1.5,bgcolor:"#EA580C",fontSize:11,textTransform:"none","&:hover":{bgcolor:"#C2410C"}},children:"Confirm"})]})]})]}),e.jsx(I.default,{spacing:.625,sx:ee?.footer,children:K&&e.jsxs(e.Fragment,{children:[e.jsx(w.default,{}),e.jsxs(v.default,{onClick:D,disabled:!D,sx:{justifyContent:"space-between",borderRadius:1,textAlign:"left",cursor:D?"pointer":"not-allowed"},children:[e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:1,children:[e.jsx(g.default,{sx:{color:"text.secondary"}}),e.jsx(z.default,{sx:{color:"text.primary",fontSize:12},children:U})]}),e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:.5,children:[e.jsx(m.default,{score:a}),e.jsx(C.default,{sx:{color:"text.secondary"}})]})]})]})})]})})},exports.isBoundaryReviewAction=_;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),i=require("@mui/icons-material/ChevronRight"),r=require("@mui/icons-material/Close"),o=require("@mui/icons-material/ExpandMore"),n=require("@mui/material/Box"),l=require("@mui/material/Button"),a=require("@mui/material/ButtonBase"),d=require("@mui/material/Divider"),s=require("@mui/material/IconButton"),u=require("@mui/material/Paper"),c=require("@mui/material/Radio"),x=require("@mui/material/Stack"),h=require("@mui/material/TextField"),f=require("@mui/material/Typography"),p=require("./RevertSummaryNotice.js"),g=require("./CognitiveIcon.js"),m=require("./CognitiveScoreBadge.js"),b=require("../../assests/icons/InfoAlert.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=E(i),j=E(r),F=E(o),S=E(n),y=E(l),v=E(a),R=E(d),w=E(s),M=E(u),A=E(c),I=E(x),T=E(h),W=E(f);const z=(e,t)=>[e,...Array.isArray(t)?t:null==t?[]:[t]],k="MERGE_ADJACENT";var P=(e=>(e.KEEP="KEEP",e.SPLIT_HERE="SPLIT_HERE",e.MERGE_NEXT="MERGE_NEXT",e.MERGE_PREV="MERGE_PREV",e.MERGE_PREVIOUS="MERGE_PREVIOUS",e.SET_RANGE="SET_RANGE",e))(P||{});const _=e=>Object.values(P).includes(e),N=(e,t,i,r)=>{if(!t||!e)return[];const o=t.additional_decisions,n=Array.isArray(o)?o:o?Object.values(o).flat():[],l=Array.from(new Set([...t.allowed_decisions,...n]));return l.flatMap(t=>{const o=e.focus_page,n=l.find(e=>e.toLowerCase().includes("merge")),a=null!=o&&null!=i&&null!=r&&o===i&&o===r,d=null!=o&&null!=i&&o===i,s=null!=o&&null!=r&&(o===r||o===r+1),u=d||s||!(null!=o&&(!(null!=i&&null!=r)||o>i&&o<r));switch(t){case"SET_RANGE":return[];case"KEEP":return[{id:t,title:"Keep as is",description:"Keep the current document boundary unchanged."}];case"SPLIT_HERE":return[{id:t,title:"Split to a separate document",description:u?"A valid page inside the document is required to split it.":o?`Start a new document at page ${o}.`:"Create a new document at this boundary.",disabled:u}];case"MERGE_PREV":case"MERGE_NEXT":case"MERGE_PREVIOUS":return t!==n?[]:a?[{id:k,title:"Merge with an adjacent document",description:"Choose to merge with the previous or next document."}]:d?[{id:"MERGE_PREVIOUS",title:"Merge with previous document",description:"Combine this document with the previous document."}]:s?[{id:"MERGE_NEXT",title:"Merge with next document",description:"Combine this document with the next document."}]:[{id:k,title:"Merge with an adjacent document",description:"Choose to merge with the previous or next document."}]}return[]})};exports.BoundaryReviewActionEnum=P,exports.createBoundaryCardOptions=N,exports.default=function({headerName:i="Boundary Check",title:r,pageNo:o,content:n,revertSummary:l,cognitiveScore:a,config:d,metadata:s,previousSegmentTitle:u,nextSegmentTitle:c,selectedIndex:x,defaultSelectedIndex:h=null,defaultStartPage:f,defaultEndPage:E,onSelectionChange:P,onConfirm:B,onActionConfirm:G,onCognitiveClick:D,onAdjustManually:q,onClose:H,confirmLabel:O="Confirm",manualPrompt:V="Didn't find the right option?",manualActionLabel:L="Adjust Manually",cognitiveLabel:U="Cognitive Integrity",showAdjustManually:X=!0,showCognitiveIntegrity:K=!0,showCloseButton:$=!0,confirmDisabled:J=!1,width:Y=260,maxWidth:Q="100%",className:Z,styles:ee,reviewAction:te,totalPages:ie}){console.log("LOG: Total pages",ie);const re=t.useMemo(()=>(d??(s?N(s,te,f,E):[])).filter(e=>"SET_RANGE"!==e.id),[d,E,f,s,te]),[oe,ne]=t.useState(h),[le,ae]=t.useState(null==f?"":String(f)),[de,se]=t.useState(null==E?"":String(E)),[ue,ce]=t.useState(!1),[xe,he]=t.useState(!1),[fe,pe]=t.useState(null),[ge,me]=t.useState(!1),be=void 0===x?oe:x,Ee=null==be?void 0:re[be],Ce=Ee?.id===k,je=null!=u,Fe=null!=c,Se=e=>!0===e.disabled||"MERGE_PREV"===e.id&&!je||"MERGE_PREVIOUS"===e.id&&!je||"MERGE_NEXT"===e.id&&!Fe||e.id===k&&!je&&!Fe,ye=Number(le),ve=Number(de),Re=le.trim().length>0&&de.trim().length>0&&Number.isInteger(ye)&&Number.isInteger(ve)&&ye>0&&ve>0,we=null!=ie&&ye>ie,Me=null!=ie&&ve>ie,Ae=le.trim().length>0&&de.trim().length>0&&Number.isInteger(ye)&&Number.isInteger(ve)&&ye>ve,Ie=Re&&ye<=ve&&!we&&!Me,Te=Ie&&ye===f&&ve===E,We=J||!Ee||Se(Ee)||Ce&&null==fe||!B&&!G;return e.jsx(M.default,{className:Z,elevation:4,sx:z({width:Y,maxWidth:Q,borderTop:"4px solid",borderColor:"error.main",borderRadius:2,bgcolor:"background.paper",overflow:"hidden",boxSizing:"border-box",minWidth:0},ee?.root),children:e.jsxs(I.default,{spacing:.75,sx:{p:1},children:[e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:.75,sx:ee?.header,children:[e.jsx(b.default,{color:"error",height:16,width:16}),e.jsx(W.default,{sx:{flex:1,color:"error.main",fontSize:12,fontWeight:500,lineHeight:1.25,textTransform:"uppercase"},children:i}),$&&e.jsx(w.default,{size:"small",onClick:H,disabled:!H,"aria-label":"Close boundary check",sx:{p:0,"&.Mui-disabled":{color:"text.secondary"}},children:e.jsx(j.default,{sx:{fontSize:17}})})]}),e.jsxs(S.default,{children:[e.jsx(W.default,{sx:{color:"text.primary",fontSize:14,fontWeight:500},children:r}),null!=o&&e.jsx(W.default,{sx:{mt:.125,color:"text.secondary",fontSize:12},children:o}),e.jsx(R.default,{sx:{my:.625}}),null!=l?e.jsx(p.default,{children:l}):null!=n&&e.jsx(W.default,{component:"div",sx:{color:"text.secondary",fontSize:11.5,lineHeight:1.3},children:n})]}),e.jsxs(I.default,{spacing:.625,role:"radiogroup","aria-label":"Boundary options",children:[re.map((t,i)=>{const r=be===i,o=Se(t);return e.jsxs(M.default,{variant:"outlined",sx:z({borderColor:r?"#1976d2":"divider",borderRadius:2,bgcolor:o?"#F8FAFC":"background.paper",overflow:"hidden"},ee?.option),children:[e.jsxs(v.default,{role:"radio","aria-checked":r,disabled:J||o,onClick:()=>((e,t)=>{J||Se(t)||(void 0===x&&ne(e),t.id!==k&&pe(null),ue&&(ce(!1),he(!1)),P?.(e,t))})(i,t),sx:{width:"100%",justifyContent:"flex-start",px:.75,py:.5,textAlign:"left"},children:[e.jsx(A.default,{checked:r,disabled:J||o,tabIndex:-1,size:"small",sx:{p:.25,mr:.5,"&.Mui-disabled":{color:"#CBD5E1"}}}),e.jsxs(S.default,{sx:{minWidth:0},children:[e.jsx(W.default,{sx:{color:o?"#94A3B8":"text.primary",fontSize:12.5,fontWeight:500},children:t.title}),null!=t.description&&e.jsx(W.default,{sx:{mt:.125,color:o?"#94A3B8":"text.secondary",fontSize:11},children:t.description})]})]}),r&&t.id===k&&e.jsx(I.default,{direction:"row",spacing:.75,sx:z({px:.75,pb:.75,minWidth:0,"& > *":{minWidth:0}},ee?.adjacentSelector),children:[{direction:"previous",title:u??"No Previous document",caption:"← Merge into Previous",available:je},{direction:"next",title:c??"No Next document",caption:"Merge into Next →",available:Fe}].map(t=>{const i=fe===t.direction;return e.jsxs(I.default,{sx:{flex:1,minWidth:0},children:[e.jsx(v.default,{disabled:J||!t.available,onClick:()=>pe(t.direction),"aria-pressed":i,sx:{width:"100%",minWidth:0,minHeight:46,alignItems:"flex-start",justifyContent:"flex-start",p:.625,border:"1px solid",borderColor:i?"#7F56D9":"#D0D5DD",borderRadius:1.5,bgcolor:i?"#E0E7FF":"background.paper",color:i?"#7F56D9":t.available?"text.primary":"#98A2B3",textAlign:"left","&.Mui-disabled":{color:"#98A2B3",bgcolor:"#F8FAFC"}},children:e.jsx(W.default,{sx:{color:"inherit",fontSize:11,fontWeight:500,lineHeight:1.25,overflowWrap:"anywhere"},children:t.title})}),e.jsx(W.default,{sx:{mt:.5,color:i?"#5925DC":"text.secondary",fontSize:9.5,lineHeight:1.2,whiteSpace:"normal",overflowWrap:"anywhere",textAlign:"next"===t.direction?"right":"left"},children:t.caption})]},t.direction)})})]},t.id)}),Ce&&null!=fe&&e.jsxs(I.default,{direction:"row",alignItems:"flex-start",spacing:.625,sx:z({p:.75,border:"1px solid #FCA5A5",borderRadius:1.5,bgcolor:"#FEF2F2"},ee?.impactWarning),children:[e.jsx(b.default,{color:"error",height:14,width:14,sx:{mt:.125}}),e.jsxs(W.default,{sx:{color:"#DC2626",fontSize:10.5,lineHeight:1.4},children:["This will impact the ",fe," document. Its content and page range will change."]})]}),e.jsx(y.default,{variant:"contained",fullWidth:!0,disabled:We,onClick:()=>{if(We||null==be||!Ee)return;const e=Ce?"previous"===fe?"MERGE_PREVIOUS":"MERGE_NEXT":Ee.id,t=Ce?{...Ee,id:e}:Ee,i={selectedIndex:be,option:t,metadata:s};B?.(be,t,i),G&&_(e)&&G(e,i)},sx:z({minHeight:32,mt:.25,borderRadius:2,fontSize:13,fontWeight:600,textTransform:"none",backgroundColor:"#5925DC","&:hover":{backgroundColor:"#4A1FB8"},"&.Mui-disabled":{backgroundColor:"#D9D6FE",color:"#FFFFFF"}},ee?.confirmButton),children:O})]}),X&&e.jsxs(I.default,{spacing:.625,sx:ee?.manualSection,children:[e.jsxs(v.default,{disabled:J,onClick:()=>{const e=!ue;ce(e),he(!1),e&&(void 0===x&&ne(null),q?.())},"aria-expanded":ue,sx:{width:"100%",justifyContent:"space-between",borderRadius:1,textAlign:"left"},children:[e.jsx(S.default,{children:e.jsx(W.default,{sx:{color:"text.primary",fontSize:12,fontWeight:600},children:V})}),e.jsx(F.default,{sx:{color:"text.secondary",fontSize:16,transform:ue?"rotate(180deg)":"none",transition:"transform 150ms ease"}})]}),ue&&!xe&&e.jsxs(S.default,{sx:{pt:.5,fontFamily:'Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif'},children:[e.jsxs(S.default,{sx:{display:"grid",gridTemplateColumns:"1fr 1fr",columnGap:"8px",mb:"4px"},children:[e.jsx(W.default,{sx:{fontSize:"10.5px",fontWeight:400,lineHeight:"14px",color:"#57697E",margin:0},children:"Starts"}),e.jsx(W.default,{sx:{fontSize:"10.5px",fontWeight:400,lineHeight:"14px",color:"#57697E",margin:0},children:"Ends"})]}),e.jsxs(S.default,{sx:{display:"grid",gridTemplateColumns:"1fr 1fr",columnGap:"8px",mb:"4px"},children:[e.jsxs(S.default,{children:[e.jsx(T.default,{size:"small",type:"text",value:le,disabled:J,error:we||Ae,onChange:e=>{const t=e.target.value;/^\d*$/.test(t)&&ae(t)},inputProps:{inputMode:"numeric",pattern:"[0-9]*"},sx:{"& .MuiOutlinedInput-root":{height:"30px",backgroundColor:"#FFFFFF","& fieldset":{borderColor:we||Ae?"#EF4444":"#C3CFDC",borderWidth:"1px",borderRadius:"6px"},"&:hover fieldset":{borderColor:we||Ae?"#EF4444":"#C3CFDC"},"&.Mui-focused fieldset":{borderColor:we||Ae?"#EF4444":"#9488F6",borderWidth:"1px"}},"& .MuiOutlinedInput-input":{fontSize:"12px",fontWeight:400,lineHeight:"1",color:"#34445A",padding:"0 10px",height:"30px"}}}),we&&e.jsxs(W.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:["Must be ≤ ",ie," (total pages)"]}),Ae&&!we&&e.jsx(W.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:"Must be ≤ end page"})]}),e.jsxs(S.default,{children:[e.jsx(T.default,{size:"small",type:"text",value:de,disabled:J,error:Me||Ae,onChange:e=>{const t=e.target.value;/^\d*$/.test(t)&&se(t)},inputProps:{inputMode:"numeric",pattern:"[0-9]*"},sx:{"& .MuiOutlinedInput-root":{height:"30px",backgroundColor:"#FFFFFF","& fieldset":{borderColor:Me||Ae?"#EF4444":"#C3CFDC",borderWidth:"1px",borderRadius:"6px"},"&:hover fieldset":{borderColor:Me||Ae?"#EF4444":"#C3CFDC"},"&.Mui-focused fieldset":{borderColor:Me||Ae?"#EF4444":"#9488F6",borderWidth:"1px"}},"& .MuiOutlinedInput-input":{fontSize:"12px",fontWeight:400,lineHeight:"1",color:"#34445A",padding:"0 10px",height:"30px"}}}),Me&&e.jsxs(W.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:["Must be ≤ ",ie," (total pages)"]}),Ae&&!Me&&e.jsx(W.default,{sx:{fontSize:"10px",color:"#EF4444",marginTop:"2px",fontWeight:500},children:"Must be ≥ start page"})]})]}),e.jsx(S.default,{children:e.jsx(y.default,{onClick:()=>{Ie&&(Te?me(!0):he(!0))},disabled:J||!Ie||Te,sx:{height:"30px",padding:"0 12px",display:"inline-flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",backgroundColor:"#FFFFFF",border:"1px solid #8E80F3",borderRadius:"6px",fontFamily:'Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif',fontSize:"12px",fontWeight:600,lineHeight:"1",color:"#4A24CF",outline:"none",cursor:"pointer",textTransform:"none",transition:"all 150ms ease-in-out","&:hover":!Ie||Te?{}:{backgroundColor:"#FAF9FF",borderColor:"#7F6FF0"},"&:active":!Ie||Te?{}:{transform:"translateY(1px)"},"&.Mui-disabled":{backgroundColor:"#FFFFFF",borderColor:"#C3CFDC",color:"#A0ABBE",cursor:"not-allowed"}},children:"Apply"})}),Te&&ge&&e.jsx(S.default,{sx:{backgroundColor:"#FEF3C7",border:"1px solid #FBBF24",borderRadius:"6px",padding:"8px 10px",marginTop:"4px"},children:e.jsx(W.default,{sx:{fontSize:"10px",color:"#B45309",fontWeight:500,lineHeight:1.4},children:"Please change the boundary to change the document boundary as no changes will be applied."})}),e.jsx(S.default,{sx:{width:"100%",height:"1px",marginTop:"8px",backgroundColor:"#EEF0F2",border:"0"}})]}),ue&&xe&&e.jsxs(I.default,{spacing:.75,sx:z({p:.75,borderRadius:1.5,bgcolor:"#FFF7ED"},ee?.manualConfirmation),children:[e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:.5,children:[e.jsx(b.default,{color:"warning",height:14,width:14}),e.jsx(W.default,{sx:{color:"#EA580C",fontSize:11,fontWeight:600},children:"Confirm this change?"})]}),e.jsxs(W.default,{sx:{color:"text.secondary",fontSize:10.5,lineHeight:1.4},children:["Pages ",ye,"-",ve," will become part of ",r,", including pages from other documents in this range."]}),e.jsxs(I.default,{direction:"row",spacing:.75,children:[e.jsx(y.default,{variant:"outlined",fullWidth:!0,onClick:()=>he(!1),sx:{minHeight:28,borderRadius:1.5,fontSize:11,textTransform:"none"},children:"Cancel"}),e.jsx(y.default,{variant:"contained",fullWidth:!0,disabled:J||!B||!Ie||Te,onClick:()=>{if(!Ie||Te||!B)return;const e={id:"SET_RANGE",title:L};B(-1,e,{selectedIndex:-1,option:e,startPage:ye,endPage:ve,metadata:s})},sx:{minHeight:28,borderRadius:1.5,bgcolor:"#EA580C",fontSize:11,textTransform:"none","&:hover":{bgcolor:"#C2410C"}},children:"Confirm"})]})]})]}),e.jsx(I.default,{spacing:.625,sx:ee?.footer,children:K&&e.jsxs(e.Fragment,{children:[e.jsx(R.default,{}),e.jsxs(v.default,{onClick:D,disabled:!D,sx:{justifyContent:"space-between",borderRadius:1,textAlign:"left",cursor:D?"pointer":"not-allowed"},children:[e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:1,children:[e.jsx(g.default,{sx:{color:"text.secondary"}}),e.jsx(W.default,{sx:{color:"text.primary",fontSize:12},children:U})]}),e.jsxs(I.default,{direction:"row",alignItems:"center",spacing:.5,children:[e.jsx(m.default,{score:a}),e.jsx(C.default,{sx:{color:"text.secondary"}})]})]})]})})]})})},exports.isBoundaryReviewAction=_;
|
|
2
2
|
//# sourceMappingURL=BoundaryCard.js.map
|
|
@@ -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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"}
|