@e-llm-studio/citation 0.0.251-beta.1 → 0.0.252

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/dist/cjs/features/CognitiveCompare/CitationAnchor.js +1 -1
  2. package/dist/cjs/features/CognitiveCompare/CitationAnchor.js.map +1 -1
  3. package/dist/cjs/features/CognitiveCompare/CitationRenderer.js +1 -1
  4. package/dist/cjs/features/CognitiveCompare/CitationRenderer.js.map +1 -1
  5. package/dist/cjs/features/CognitiveCompare/CitationRendererInner.js +2 -0
  6. package/dist/cjs/features/CognitiveCompare/CitationRendererInner.js.map +1 -0
  7. package/dist/cjs/features/CognitiveCompare/CognitiveCompare.js +1 -1
  8. package/dist/cjs/features/CognitiveCompare/CognitiveCompare.js.map +1 -1
  9. package/dist/cjs/features/CognitiveCompare/CognitiveCompareConstants.js +1 -1
  10. package/dist/cjs/features/CognitiveCompare/CognitiveCompareConstants.js.map +1 -1
  11. package/dist/cjs/features/CognitiveCompare/CognitiveComparehelpers.js +1 -1
  12. package/dist/cjs/features/CognitiveCompare/CognitiveComparehelpers.js.map +1 -1
  13. package/dist/cjs/features/CognitiveCompare/CognitivePopup.js +1 -1
  14. package/dist/cjs/features/CognitiveCompare/CognitivePopup.js.map +1 -1
  15. package/dist/cjs/features/CognitiveCompare/CompareContext.js +1 -1
  16. package/dist/cjs/features/CognitiveCompare/CompareContext.js.map +1 -1
  17. package/dist/cjs/features/CognitiveCompare/GptWebCitationPanel.js +2 -0
  18. package/dist/cjs/features/CognitiveCompare/GptWebCitationPanel.js.map +1 -0
  19. package/dist/cjs/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js +1 -1
  20. package/dist/cjs/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js.map +1 -1
  21. package/dist/cjs/features/CognitiveCompare/Guidelines/components/WebGptPanel.js +1 -1
  22. package/dist/cjs/features/CognitiveCompare/Guidelines/components/WebGptPanel.js.map +1 -1
  23. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js +2 -0
  24. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js.map +1 -0
  25. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js +2 -0
  26. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js.map +1 -0
  27. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js +1 -1
  28. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js.map +1 -1
  29. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js +2 -0
  30. package/dist/cjs/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js.map +1 -0
  31. package/dist/cjs/features/CognitiveCompare/components/GuidelineSkeletonLoader.js +2 -0
  32. package/dist/cjs/features/CognitiveCompare/components/GuidelineSkeletonLoader.js.map +1 -0
  33. package/dist/cjs/features/CognitiveCompare/components/LHSSectionRow.js +1 -1
  34. package/dist/cjs/features/CognitiveCompare/components/LHSSectionRow.js.map +1 -1
  35. package/dist/cjs/features/CognitiveCompare/components/RHSSectionRow.js +1 -1
  36. package/dist/cjs/features/CognitiveCompare/components/RHSSectionRow.js.map +1 -1
  37. package/dist/cjs/features/CognitiveCompare/components/SectionAccordion.js +1 -1
  38. package/dist/cjs/features/CognitiveCompare/components/SectionAccordion.js.map +1 -1
  39. package/dist/cjs/features/CognitiveCompare/components/SubSectionAccordion.js +1 -1
  40. package/dist/cjs/features/CognitiveCompare/components/SubSectionAccordion.js.map +1 -1
  41. package/dist/cjs/features/CognitiveCompare/components/SvgConnectors.js +1 -1
  42. package/dist/cjs/features/CognitiveCompare/components/SvgConnectors.js.map +1 -1
  43. package/dist/cjs/features/CognitiveCompare/hooks/memoizedMarkdown.js +1 -1
  44. package/dist/cjs/features/CognitiveCompare/hooks/memoizedMarkdown.js.map +1 -1
  45. package/dist/cjs/features/CognitiveCompare/hooks/useCompareData.js +1 -1
  46. package/dist/cjs/features/CognitiveCompare/hooks/useCompareData.js.map +1 -1
  47. package/dist/cjs/features/CognitiveCompare/hooks/useLinesCalculator.js +1 -1
  48. package/dist/cjs/features/CognitiveCompare/hooks/useLinesCalculator.js.map +1 -1
  49. package/dist/cjs/features/CognitiveCompare/hooks/useOnDemandCitationCache.js +2 -0
  50. package/dist/cjs/features/CognitiveCompare/hooks/useOnDemandCitationCache.js.map +1 -0
  51. package/dist/cjs/features/CognitiveCompare/hooks/useSideBySide.js +1 -1
  52. package/dist/cjs/features/CognitiveCompare/hooks/useSideBySide.js.map +1 -1
  53. package/dist/cjs/features/CognitiveCompare/onDemandCitations/cacheKey.js +2 -0
  54. package/dist/cjs/features/CognitiveCompare/onDemandCitations/cacheKey.js.map +1 -0
  55. package/dist/cjs/features/CognitiveCompare/onDemandCitations/contextBuilder.js +2 -0
  56. package/dist/cjs/features/CognitiveCompare/onDemandCitations/contextBuilder.js.map +1 -0
  57. package/dist/cjs/features/CognitiveCompare/onDemandCitations/href.js +2 -0
  58. package/dist/cjs/features/CognitiveCompare/onDemandCitations/href.js.map +1 -0
  59. package/dist/cjs/features/CognitiveCompare/onDemandCitations/payload.js +2 -0
  60. package/dist/cjs/features/CognitiveCompare/onDemandCitations/payload.js.map +1 -0
  61. package/dist/cjs/features/CognitiveCompare/onDemandCitations/response.js +2 -0
  62. package/dist/cjs/features/CognitiveCompare/onDemandCitations/response.js.map +1 -0
  63. package/dist/cjs/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js +2 -0
  64. package/dist/cjs/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js.map +1 -0
  65. package/dist/cjs/features/CognitiveCompare/utils/normalizeInlineMarkdown.js +2 -0
  66. package/dist/cjs/features/CognitiveCompare/utils/normalizeInlineMarkdown.js.map +1 -0
  67. package/dist/cjs/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js +2 -0
  68. package/dist/cjs/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js.map +1 -0
  69. package/dist/cjs/features/SegmentReviewComponents/BoundaryCard.js +1 -1
  70. package/dist/cjs/features/SegmentReviewComponents/BoundaryCard.js.map +1 -1
  71. package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
  72. package/dist/cjs/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
  73. package/dist/features/CognitiveCompare/CitationAnchor.js +1 -1
  74. package/dist/features/CognitiveCompare/CitationAnchor.js.map +1 -1
  75. package/dist/features/CognitiveCompare/CitationRenderer.js +1 -1
  76. package/dist/features/CognitiveCompare/CitationRenderer.js.map +1 -1
  77. package/dist/features/CognitiveCompare/CitationRendererInner.js +2 -0
  78. package/dist/features/CognitiveCompare/CitationRendererInner.js.map +1 -0
  79. package/dist/features/CognitiveCompare/CognitiveCompare.js +1 -1
  80. package/dist/features/CognitiveCompare/CognitiveCompare.js.map +1 -1
  81. package/dist/features/CognitiveCompare/CognitiveCompareConstants.js +1 -1
  82. package/dist/features/CognitiveCompare/CognitiveCompareConstants.js.map +1 -1
  83. package/dist/features/CognitiveCompare/CognitiveComparehelpers.js +1 -1
  84. package/dist/features/CognitiveCompare/CognitiveComparehelpers.js.map +1 -1
  85. package/dist/features/CognitiveCompare/CognitivePopup.js +1 -1
  86. package/dist/features/CognitiveCompare/CognitivePopup.js.map +1 -1
  87. package/dist/features/CognitiveCompare/CompareContext.js +1 -1
  88. package/dist/features/CognitiveCompare/CompareContext.js.map +1 -1
  89. package/dist/features/CognitiveCompare/GptWebCitationPanel.js +2 -0
  90. package/dist/features/CognitiveCompare/GptWebCitationPanel.js.map +1 -0
  91. package/dist/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js +1 -1
  92. package/dist/features/CognitiveCompare/Guidelines/components/GuidelinePanel.js.map +1 -1
  93. package/dist/features/CognitiveCompare/Guidelines/components/WebGptPanel.js +1 -1
  94. package/dist/features/CognitiveCompare/Guidelines/components/WebGptPanel.js.map +1 -1
  95. package/dist/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js +2 -0
  96. package/dist/features/CognitiveCompare/Guidelines/utils/guidelineTargets.js.map +1 -0
  97. package/dist/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js +2 -0
  98. package/dist/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.js.map +1 -0
  99. package/dist/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js +1 -1
  100. package/dist/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.js.map +1 -1
  101. package/dist/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js +2 -0
  102. package/dist/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.js.map +1 -0
  103. package/dist/features/CognitiveCompare/components/GuidelineSkeletonLoader.js +2 -0
  104. package/dist/features/CognitiveCompare/components/GuidelineSkeletonLoader.js.map +1 -0
  105. package/dist/features/CognitiveCompare/components/LHSSectionRow.js +1 -1
  106. package/dist/features/CognitiveCompare/components/LHSSectionRow.js.map +1 -1
  107. package/dist/features/CognitiveCompare/components/RHSSectionRow.js +1 -1
  108. package/dist/features/CognitiveCompare/components/RHSSectionRow.js.map +1 -1
  109. package/dist/features/CognitiveCompare/components/SectionAccordion.js +1 -1
  110. package/dist/features/CognitiveCompare/components/SectionAccordion.js.map +1 -1
  111. package/dist/features/CognitiveCompare/components/SubSectionAccordion.js +1 -1
  112. package/dist/features/CognitiveCompare/components/SubSectionAccordion.js.map +1 -1
  113. package/dist/features/CognitiveCompare/components/SvgConnectors.js +1 -1
  114. package/dist/features/CognitiveCompare/components/SvgConnectors.js.map +1 -1
  115. package/dist/features/CognitiveCompare/hooks/memoizedMarkdown.js +1 -1
  116. package/dist/features/CognitiveCompare/hooks/memoizedMarkdown.js.map +1 -1
  117. package/dist/features/CognitiveCompare/hooks/useCompareData.js +1 -1
  118. package/dist/features/CognitiveCompare/hooks/useCompareData.js.map +1 -1
  119. package/dist/features/CognitiveCompare/hooks/useLinesCalculator.js +1 -1
  120. package/dist/features/CognitiveCompare/hooks/useLinesCalculator.js.map +1 -1
  121. package/dist/features/CognitiveCompare/hooks/useOnDemandCitationCache.js +2 -0
  122. package/dist/features/CognitiveCompare/hooks/useOnDemandCitationCache.js.map +1 -0
  123. package/dist/features/CognitiveCompare/hooks/useSideBySide.js +1 -1
  124. package/dist/features/CognitiveCompare/hooks/useSideBySide.js.map +1 -1
  125. package/dist/features/CognitiveCompare/onDemandCitations/cacheKey.js +2 -0
  126. package/dist/features/CognitiveCompare/onDemandCitations/cacheKey.js.map +1 -0
  127. package/dist/features/CognitiveCompare/onDemandCitations/contextBuilder.js +2 -0
  128. package/dist/features/CognitiveCompare/onDemandCitations/contextBuilder.js.map +1 -0
  129. package/dist/features/CognitiveCompare/onDemandCitations/href.js +2 -0
  130. package/dist/features/CognitiveCompare/onDemandCitations/href.js.map +1 -0
  131. package/dist/features/CognitiveCompare/onDemandCitations/payload.js +2 -0
  132. package/dist/features/CognitiveCompare/onDemandCitations/payload.js.map +1 -0
  133. package/dist/features/CognitiveCompare/onDemandCitations/response.js +2 -0
  134. package/dist/features/CognitiveCompare/onDemandCitations/response.js.map +1 -0
  135. package/dist/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js +2 -0
  136. package/dist/features/CognitiveCompare/utils/normalizeCompactedGfmTables.js.map +1 -0
  137. package/dist/features/CognitiveCompare/utils/normalizeInlineMarkdown.js +2 -0
  138. package/dist/features/CognitiveCompare/utils/normalizeInlineMarkdown.js.map +1 -0
  139. package/dist/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js +2 -0
  140. package/dist/features/CognitiveCompare/utils/normalizeRedlineMarkdown.js.map +1 -0
  141. package/dist/features/SegmentReviewComponents/BoundaryCard.js +1 -1
  142. package/dist/features/SegmentReviewComponents/BoundaryCard.js.map +1 -1
  143. package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js +1 -1
  144. package/dist/features/SegmentReviewComponents/SegmentReviewPdfWrapper.js.map +1 -1
  145. package/dist/types/features/CognitiveCompare/CitationAnchor.d.ts +2 -0
  146. package/dist/types/features/CognitiveCompare/CitationAnchor.d.ts.map +1 -1
  147. package/dist/types/features/CognitiveCompare/CitationRenderer.d.ts +8 -1
  148. package/dist/types/features/CognitiveCompare/CitationRenderer.d.ts.map +1 -1
  149. package/dist/types/features/CognitiveCompare/CitationRendererInner.d.ts +13 -0
  150. package/dist/types/features/CognitiveCompare/CitationRendererInner.d.ts.map +1 -0
  151. package/dist/types/features/CognitiveCompare/CognitiveCompare.d.ts +1 -1
  152. package/dist/types/features/CognitiveCompare/CognitiveCompare.d.ts.map +1 -1
  153. package/dist/types/features/CognitiveCompare/CognitiveCompareConstants.d.ts +1 -1
  154. package/dist/types/features/CognitiveCompare/CognitiveCompareConstants.d.ts.map +1 -1
  155. package/dist/types/features/CognitiveCompare/CognitiveCompareTypes.d.ts +14 -1
  156. package/dist/types/features/CognitiveCompare/CognitiveCompareTypes.d.ts.map +1 -1
  157. package/dist/types/features/CognitiveCompare/CognitiveComparehelpers.d.ts +12 -0
  158. package/dist/types/features/CognitiveCompare/CognitiveComparehelpers.d.ts.map +1 -1
  159. package/dist/types/features/CognitiveCompare/CognitivePopup.d.ts.map +1 -1
  160. package/dist/types/features/CognitiveCompare/CompareContext.d.ts +10 -1
  161. package/dist/types/features/CognitiveCompare/CompareContext.d.ts.map +1 -1
  162. package/dist/types/features/CognitiveCompare/GptWebCitationPanel.d.ts +7 -0
  163. package/dist/types/features/CognitiveCompare/GptWebCitationPanel.d.ts.map +1 -0
  164. package/dist/types/features/CognitiveCompare/Guidelines/components/GuidelinePanel.d.ts.map +1 -1
  165. package/dist/types/features/CognitiveCompare/Guidelines/components/WebGptPanel.d.ts.map +1 -1
  166. package/dist/types/features/CognitiveCompare/Guidelines/utils/guidelineTargets.d.ts +3 -0
  167. package/dist/types/features/CognitiveCompare/Guidelines/utils/guidelineTargets.d.ts.map +1 -0
  168. package/dist/types/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.d.ts +3 -0
  169. package/dist/types/features/CognitiveCompare/Guidelines/utils/hasGptCitationObjects.d.ts.map +1 -0
  170. package/dist/types/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.d.ts +14 -1
  171. package/dist/types/features/CognitiveCompare/Guidelines/utils/processGuidelinesMarkdown.d.ts.map +1 -1
  172. package/dist/types/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.d.ts +19 -0
  173. package/dist/types/features/CognitiveCompare/Guidelines/utils/resolveGuidelineSelection.d.ts.map +1 -0
  174. package/dist/types/features/CognitiveCompare/components/GuidelineSkeletonLoader.d.ts +8 -0
  175. package/dist/types/features/CognitiveCompare/components/GuidelineSkeletonLoader.d.ts.map +1 -0
  176. package/dist/types/features/CognitiveCompare/components/LHSSectionRow.d.ts.map +1 -1
  177. package/dist/types/features/CognitiveCompare/components/RHSSectionRow.d.ts.map +1 -1
  178. package/dist/types/features/CognitiveCompare/components/SectionAccordion.d.ts.map +1 -1
  179. package/dist/types/features/CognitiveCompare/components/SubSectionAccordion.d.ts.map +1 -1
  180. package/dist/types/features/CognitiveCompare/components/SvgConnectors.d.ts +3 -2
  181. package/dist/types/features/CognitiveCompare/components/SvgConnectors.d.ts.map +1 -1
  182. package/dist/types/features/CognitiveCompare/hooks/memoizedMarkdown.d.ts +2 -1
  183. package/dist/types/features/CognitiveCompare/hooks/memoizedMarkdown.d.ts.map +1 -1
  184. package/dist/types/features/CognitiveCompare/hooks/useCompareData.d.ts +1 -1
  185. package/dist/types/features/CognitiveCompare/hooks/useCompareData.d.ts.map +1 -1
  186. package/dist/types/features/CognitiveCompare/hooks/useLinesCalculator.d.ts.map +1 -1
  187. package/dist/types/features/CognitiveCompare/hooks/useOnDemandCitationCache.d.ts +10 -0
  188. package/dist/types/features/CognitiveCompare/hooks/useOnDemandCitationCache.d.ts.map +1 -0
  189. package/dist/types/features/CognitiveCompare/hooks/useSideBySide.d.ts.map +1 -1
  190. package/dist/types/features/CognitiveCompare/onDemandCitations/cacheKey.d.ts +3 -0
  191. package/dist/types/features/CognitiveCompare/onDemandCitations/cacheKey.d.ts.map +1 -0
  192. package/dist/types/features/CognitiveCompare/onDemandCitations/contextBuilder.d.ts +16 -0
  193. package/dist/types/features/CognitiveCompare/onDemandCitations/contextBuilder.d.ts.map +1 -0
  194. package/dist/types/features/CognitiveCompare/onDemandCitations/href.d.ts +6 -0
  195. package/dist/types/features/CognitiveCompare/onDemandCitations/href.d.ts.map +1 -0
  196. package/dist/types/features/CognitiveCompare/onDemandCitations/index.d.ts +7 -0
  197. package/dist/types/features/CognitiveCompare/onDemandCitations/index.d.ts.map +1 -0
  198. package/dist/types/features/CognitiveCompare/onDemandCitations/payload.d.ts +4 -0
  199. package/dist/types/features/CognitiveCompare/onDemandCitations/payload.d.ts.map +1 -0
  200. package/dist/types/features/CognitiveCompare/onDemandCitations/response.d.ts +3 -0
  201. package/dist/types/features/CognitiveCompare/onDemandCitations/response.d.ts.map +1 -0
  202. package/dist/types/features/CognitiveCompare/onDemandCitations/types.d.ts +134 -0
  203. package/dist/types/features/CognitiveCompare/onDemandCitations/types.d.ts.map +1 -0
  204. package/dist/types/features/CognitiveCompare/utils/normalizeCompactedGfmTables.d.ts +7 -0
  205. package/dist/types/features/CognitiveCompare/utils/normalizeCompactedGfmTables.d.ts.map +1 -0
  206. package/dist/types/features/CognitiveCompare/utils/normalizeInlineMarkdown.d.ts +6 -0
  207. package/dist/types/features/CognitiveCompare/utils/normalizeInlineMarkdown.d.ts.map +1 -0
  208. package/dist/types/features/CognitiveCompare/utils/normalizeRedlineMarkdown.d.ts +6 -0
  209. package/dist/types/features/CognitiveCompare/utils/normalizeRedlineMarkdown.d.ts.map +1 -0
  210. package/dist/types/features/SegmentReviewComponents/BoundaryCard.d.ts.map +1 -1
  211. package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts +3 -1
  212. package/dist/types/features/SegmentReviewComponents/SegmentReviewPdfWrapper.d.ts.map +1 -1
  213. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BoundaryCard.js","sources":["../../../src/features/SegmentReviewComponents/BoundaryCard.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from 'react';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Paper from '@mui/material/Paper';\nimport Radio from '@mui/material/Radio';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport RevertSummaryNotice from './RevertSummaryNotice';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport CognitiveIcon from './CognitiveIcon';\nimport CognitiveScoreBadge from './CognitiveScoreBadge';\nimport InfoAlert from '../../assests/icons/InfoAlert';\nimport { SegmentReviewAction } from './reviewStepAdapters';\n\nconst mergeSx = (\n base: SxProps<Theme>,\n override?: SxProps<Theme>\n): SxProps<Theme> => [\n base,\n ...(Array.isArray(override) ? override : override == null ? [] : [override]),\n] as SxProps<Theme>;\n\nexport interface BoundaryCardOption {\n id: string;\n title: ReactNode;\n description?: ReactNode;\n disabled?: boolean;\n}\n\nconst MERGE_ADJACENT_OPTION_ID = 'MERGE_ADJACENT';\ntype AdjacentMergeDirection = 'previous' | 'next';\n\nexport enum BoundaryReviewActionEnum {\n KEEP = 'KEEP',\n SPLIT_HERE = 'SPLIT_HERE',\n MERGE_NEXT = 'MERGE_NEXT',\n MERGE_PREV = 'MERGE_PREV',\n MERGE_PREVIOUS = 'MERGE_PREVIOUS',\n SET_RANGE = 'SET_RANGE',\n}\n\nexport type BoundaryReviewAction = `${BoundaryReviewActionEnum}`;\n\nexport interface BoundaryReviewMetadata {\n focus_page?: number | null;\n boundary_margin?: number | null;\n user_actions: readonly BoundaryReviewAction[];\n}\n\nexport interface BoundaryReviewConfirmDetails {\n selectedIndex: number;\n option: BoundaryCardOption;\n metadata?: BoundaryReviewMetadata;\n startPage?: number;\n endPage?: number;\n}\n\nexport interface BoundaryCardStyles {\n root?: SxProps<Theme>;\n header?: SxProps<Theme>;\n option?: SxProps<Theme>;\n rangeInput?: SxProps<Theme>;\n confirmButton?: SxProps<Theme>;\n manualSection?: SxProps<Theme>;\n manualConfirmation?: SxProps<Theme>;\n adjacentSelector?: SxProps<Theme>;\n impactWarning?: SxProps<Theme>;\n footer?: SxProps<Theme>;\n}\n\nexport const isBoundaryReviewAction = (value: string): value is BoundaryReviewAction =>\n Object.values(BoundaryReviewActionEnum).includes(value as BoundaryReviewActionEnum);\n\nexport const createBoundaryCardOptions = (\n metadata?: BoundaryReviewMetadata,\n reviewAction?: SegmentReviewAction,\n startPage?: number | null,\n endPage?: number | null\n): BoundaryCardOption[] => {\n if (!reviewAction || !metadata) return [];\n\n const additionalDecisions = reviewAction.additional_decisions;\n const additionalActions = Array.isArray(additionalDecisions)\n ? additionalDecisions\n : additionalDecisions\n ? Object.values(additionalDecisions).flat()\n : [];\n const allActionsMerged = Array.from(new Set([\n ...reviewAction.allowed_decisions,\n ...additionalActions,\n ]));\n\n return allActionsMerged.flatMap<BoundaryCardOption>(\n (action): BoundaryCardOption[] => {\n const focusPage = metadata.focus_page;\n const firstMergeAction = allActionsMerged.find(\n (candidate) =>\n candidate.toLowerCase().includes('merge')\n );\n const isSinglePageRange =\n focusPage != null &&\n startPage != null &&\n endPage != null &&\n focusPage === startPage &&\n focusPage === endPage;\n const isAtStart = focusPage != null && startPage != null && focusPage === startPage;\n // Closing-boundary reviews may point either at the segment's final page or\n // at the first page after it, depending on the backend decision source.\n const isAtEnd =\n focusPage != null &&\n endPage != null &&\n (focusPage === endPage || focusPage === endPage + 1);\n const isAtRangeBoundary = isAtStart || isAtEnd;\n const hasCompleteRange = startPage != null && endPage != null;\n const isValidInteriorFocus = focusPage != null && (\n !hasCompleteRange || (focusPage > startPage && focusPage < endPage)\n );\n const isSplitDisabled = isAtRangeBoundary || !isValidInteriorFocus;\n\n switch (action) {\n case BoundaryReviewActionEnum.SET_RANGE:\n return [];\n case 'KEEP':\n return [{\n id: action,\n title: 'Keep as is',\n description: 'Keep the current document boundary unchanged.',\n }];\n case 'SPLIT_HERE':\n return [{\n id: action,\n title: 'Split to a separate document',\n description: isSplitDisabled\n ? 'A valid page inside the document is required to split it.'\n : focusPage\n ? `Start a new document at page ${focusPage}.`\n : 'Create a new document at this boundary.',\n disabled: isSplitDisabled,\n }];\n case 'MERGE_PREV':\n case 'MERGE_NEXT':\n case 'MERGE_PREVIOUS':\n if (action !== firstMergeAction) return [];\n\n if (isSinglePageRange) {\n return [{\n id: MERGE_ADJACENT_OPTION_ID,\n title: 'Merge with an adjacent document',\n description: 'Choose to merge with the previous or next document.',\n }];\n }\n\n if (isAtStart) {\n return [{\n id: BoundaryReviewActionEnum.MERGE_PREVIOUS,\n title: 'Merge with previous document',\n description: 'Combine this document with the previous document.',\n }];\n }\n\n if (isAtEnd) {\n return [{\n id: BoundaryReviewActionEnum.MERGE_NEXT,\n title: 'Merge with next document',\n description: 'Combine this document with the next document.',\n }];\n }\n\n return [{\n id: MERGE_ADJACENT_OPTION_ID,\n title: 'Merge with an adjacent document',\n description: 'Choose to merge with the previous or next document.',\n }];\n }\n\n return [];\n }\n);\n}\n\nexport interface BoundaryCardProps {\n headerName?: ReactNode;\n title: ReactNode;\n pageNo?: ReactNode;\n content?: ReactNode;\n /** Replaces content when the API provides an operation-level revert summary. */\n revertSummary?: ReactNode;\n cognitiveScore?: ReactNode;\n config?: readonly BoundaryCardOption[];\n metadata?: BoundaryReviewMetadata;\n reviewAction?: SegmentReviewAction;\n previousSegmentTitle?: ReactNode;\n nextSegmentTitle?: ReactNode;\n /** Total number of pages in the document for validating custom page ranges. */\n totalPages?: number;\n\n selectedIndex?: number | null;\n defaultSelectedIndex?: number | null;\n /** Initial page range shown when SET_RANGE is selected. */\n defaultStartPage?: number | null;\n defaultEndPage?: number | null;\n onSelectionChange?: (selectedIndex: number, option: BoundaryCardOption) => void;\n onConfirm?: (\n selectedIndex: number,\n option: BoundaryCardOption,\n details?: BoundaryReviewConfirmDetails\n ) => void;\n onActionConfirm?: (\n action: BoundaryReviewAction,\n details: BoundaryReviewConfirmDetails\n ) => void;\n onCognitiveClick?: () => void;\n onAdjustManually?: () => void;\n onClose?: () => void;\n confirmLabel?: ReactNode;\n manualPrompt?: ReactNode;\n manualActionLabel?: ReactNode;\n cognitiveLabel?: ReactNode;\n showAdjustManually?: boolean;\n showCognitiveIntegrity?: boolean;\n showCloseButton?: boolean;\n confirmDisabled?: boolean;\n width?: number | string;\n maxWidth?: number | string;\n className?: string;\n styles?: BoundaryCardStyles;\n}\n\nexport default function BoundaryCard({\n headerName = 'Boundary Check',\n title,\n pageNo,\n content,\n revertSummary,\n cognitiveScore,\n config,\n metadata,\n previousSegmentTitle,\n nextSegmentTitle,\n selectedIndex,\n defaultSelectedIndex = null,\n defaultStartPage,\n defaultEndPage,\n onSelectionChange,\n onConfirm,\n onActionConfirm,\n onCognitiveClick,\n onAdjustManually,\n onClose,\n confirmLabel = 'Confirm',\n manualPrompt = \"Didn't find the right option?\",\n manualActionLabel = 'Adjust Manually',\n cognitiveLabel = 'Cognitive Integrity',\n showAdjustManually = true,\n showCognitiveIntegrity = true,\n showCloseButton = true,\n confirmDisabled = false,\n width = 260,\n maxWidth = 260,\n className,\n styles,\n reviewAction,\n totalPages\n}: BoundaryCardProps) {\n console.log(\"LOG: Total pages\", totalPages);\n const resolvedConfig = useMemo(\n () => (config ?? (metadata\n ? createBoundaryCardOptions(metadata, reviewAction ,defaultStartPage, defaultEndPage)\n : []))\n .filter((option) => option.id !== BoundaryReviewActionEnum.SET_RANGE),\n [config, defaultEndPage, defaultStartPage, metadata, reviewAction]\n );\n const [internalSelectedIndex, setInternalSelectedIndex] = useState<number | null>(\n defaultSelectedIndex\n );\n const [startPageInput, setStartPageInput] = useState(\n defaultStartPage == null ? '' : String(defaultStartPage)\n );\n const [endPageInput, setEndPageInput] = useState(\n defaultEndPage == null ? '' : String(defaultEndPage)\n );\n const [isManualExpanded, setIsManualExpanded] = useState(false);\n const [isManualConfirmationOpen, setIsManualConfirmationOpen] = useState(false);\n const [adjacentMergeDirection, setAdjacentMergeDirection] =\n useState<AdjacentMergeDirection | null>(null);\n // Track if user has already attempted to apply an unchanged range\n const [hasAttemptedUnchanged, setHasAttemptedUnchanged] = useState(false);\n const resolvedSelectedIndex = selectedIndex === undefined\n ? internalSelectedIndex\n : selectedIndex;\n const selectedOption = resolvedSelectedIndex == null\n ? undefined\n : resolvedConfig[resolvedSelectedIndex];\n const isAdjacentMergeSelected = selectedOption?.id === MERGE_ADJACENT_OPTION_ID;\n const canMergePrevious = previousSegmentTitle != null;\n const canMergeNext = nextSegmentTitle != null;\n const isOptionDisabled = (option: BoundaryCardOption) =>\n option.disabled === true ||\n (option.id === BoundaryReviewActionEnum.MERGE_PREV && !canMergePrevious) ||\n (option.id === BoundaryReviewActionEnum.MERGE_PREVIOUS && !canMergePrevious) ||\n (option.id === BoundaryReviewActionEnum.MERGE_NEXT && !canMergeNext) ||\n (option.id === MERGE_ADJACENT_OPTION_ID && !canMergePrevious && !canMergeNext);\n const parsedStartPage = Number(startPageInput);\n const parsedEndPage = Number(endPageInput);\n \n // Validation state for comprehensive error tracking\n const hasValidPageInputs =\n startPageInput.trim().length > 0 &&\n endPageInput.trim().length > 0 &&\n Number.isInteger(parsedStartPage) &&\n Number.isInteger(parsedEndPage) &&\n parsedStartPage > 0 &&\n parsedEndPage > 0;\n \n const isStartPageOutOfRange = totalPages != null && parsedStartPage > totalPages;\n const isEndPageOutOfRange = totalPages != null && parsedEndPage > totalPages;\n \n // Check if start page is greater than end page\n // Check if start page is greater than end page\n const isStartGreaterThanEnd =\n startPageInput.trim().length > 0 &&\n endPageInput.trim().length > 0 &&\n Number.isInteger(parsedStartPage) &&\n Number.isInteger(parsedEndPage) &&\n parsedStartPage > parsedEndPage;\n \n // Consolidated validation: range is valid only if all conditions pass\n const isRangeValid =\n hasValidPageInputs &&\n parsedStartPage <= parsedEndPage &&\n !isStartPageOutOfRange &&\n !isEndPageOutOfRange;\n \n // Check if the entered range is identical to the existing boundary\n const isRangeUnchanged =\n isRangeValid &&\n parsedStartPage === defaultStartPage &&\n parsedEndPage === defaultEndPage;\n const isConfirmDisabled =\n confirmDisabled ||\n !selectedOption ||\n isOptionDisabled(selectedOption) ||\n (isAdjacentMergeSelected && adjacentMergeDirection == null) ||\n (!onConfirm && !onActionConfirm);\n\n const handleSelect = (index: number, option: BoundaryCardOption) => {\n if (confirmDisabled || isOptionDisabled(option)) return;\n if (selectedIndex === undefined) setInternalSelectedIndex(index);\n if (option.id !== MERGE_ADJACENT_OPTION_ID) setAdjacentMergeDirection(null);\n if (isManualExpanded) {\n setIsManualExpanded(false);\n setIsManualConfirmationOpen(false);\n }\n onSelectionChange?.(index, option);\n };\n\n const handleConfirm = () => {\n if (isConfirmDisabled || resolvedSelectedIndex == null || !selectedOption) return;\n const resolvedAction = isAdjacentMergeSelected\n ? adjacentMergeDirection === 'previous'\n ? BoundaryReviewActionEnum.MERGE_PREVIOUS\n : BoundaryReviewActionEnum.MERGE_NEXT\n : selectedOption.id;\n const confirmedOption = isAdjacentMergeSelected\n ? { ...selectedOption, id: resolvedAction }\n : selectedOption;\n const details: BoundaryReviewConfirmDetails = {\n selectedIndex: resolvedSelectedIndex,\n option: confirmedOption,\n metadata,\n };\n onConfirm?.(resolvedSelectedIndex, confirmedOption, details);\n if (onActionConfirm && isBoundaryReviewAction(resolvedAction)) {\n onActionConfirm(resolvedAction, details);\n }\n };\n\n const handleManualApply = () => {\n if (!isRangeValid) return;\n // Track that user attempted to apply an unchanged range\n if (isRangeUnchanged) {\n setHasAttemptedUnchanged(true);\n return;\n }\n setIsManualConfirmationOpen(true);\n };\n\n const handleManualRangeConfirm = () => {\n if (!isRangeValid || isRangeUnchanged || !onConfirm) return;\n\n const option: BoundaryCardOption = {\n id: BoundaryReviewActionEnum.SET_RANGE,\n title: manualActionLabel,\n };\n const details: BoundaryReviewConfirmDetails = {\n selectedIndex: -1,\n option,\n startPage: parsedStartPage,\n endPage: parsedEndPage,\n metadata,\n };\n onConfirm(-1, option, details);\n };\n\n return (\n <Paper\n className={className}\n elevation={4}\n sx={mergeSx(\n {\n width,\n maxWidth,\n borderTop: '4px solid',\n borderColor: 'error.main',\n borderRadius: 2,\n bgcolor: 'background.paper',\n overflow: 'hidden',\n boxSizing: 'border-box',\n '@media (max-width: 372px)': { width: 'calc(100vw - 32px)' },\n },\n styles?.root\n )}\n >\n <Stack spacing={0.75} sx={{ p: 1 }}>\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.75} sx={styles?.header}>\n <InfoAlert color=\"error\" height={16} width={16} />\n <Typography\n sx={{\n flex: 1,\n color: 'error.main',\n fontSize: 12,\n fontWeight: 500,\n lineHeight: 1.25,\n textTransform: 'uppercase',\n }}\n >\n {headerName}\n </Typography>\n {showCloseButton && (\n <IconButton\n size=\"small\"\n onClick={onClose}\n disabled={!onClose}\n aria-label=\"Close boundary check\"\n sx={{ p: 0, '&.Mui-disabled': { color: 'text.secondary' } }}\n >\n <CloseIcon sx={{ fontSize: 17 }} />\n </IconButton>\n )}\n </Stack>\n\n <Box>\n <Typography sx={{ color: 'text.primary', fontSize: 14, fontWeight: 500 }}>\n {title}\n </Typography>\n {pageNo != null && (\n <Typography sx={{ mt: 0.125, color: 'text.secondary', fontSize: 12 }}>\n {pageNo}\n </Typography>\n )}\n <Divider sx={{ my: 0.625 }} />\n {revertSummary != null ? (\n <RevertSummaryNotice>{revertSummary}</RevertSummaryNotice>\n ) : content != null && (\n <Typography\n component=\"div\"\n sx={{ color: 'text.secondary', fontSize: 11.5, lineHeight: 1.3 }}\n >\n {content}\n </Typography>\n )}\n </Box>\n\n <Stack spacing={0.625} role=\"radiogroup\" aria-label=\"Boundary options\">\n {resolvedConfig.map((item, index) => {\n const isSelected = resolvedSelectedIndex === index;\n const isDisabled = isOptionDisabled(item);\n\n return (\n <Paper\n key={item.id}\n variant=\"outlined\"\n sx={mergeSx(\n {\n borderColor: isSelected ? '#1976d2' : 'divider',\n borderRadius: 2,\n bgcolor: isDisabled ? '#F8FAFC' : 'background.paper',\n overflow: 'hidden',\n },\n styles?.option\n )}\n >\n <ButtonBase\n role=\"radio\"\n aria-checked={isSelected}\n disabled={confirmDisabled || isDisabled}\n onClick={() => handleSelect(index, item)}\n sx={{\n width: '100%',\n justifyContent: 'flex-start',\n px: 0.75,\n py: 0.5,\n textAlign: 'left',\n }}\n >\n <Radio\n checked={isSelected}\n disabled={confirmDisabled || isDisabled}\n tabIndex={-1}\n size=\"small\"\n sx={{\n p: 0.25,\n mr: 0.5,\n '&.Mui-disabled': { color: '#CBD5E1' },\n }}\n />\n <Box sx={{ minWidth: 0 }}>\n <Typography\n sx={{\n color: isDisabled ? '#94A3B8' : 'text.primary',\n fontSize: 12.5,\n fontWeight: 500,\n }}\n >\n {item.title}\n </Typography>\n {item.description != null && (\n <Typography\n sx={{\n mt: 0.125,\n color: isDisabled ? '#94A3B8' : 'text.secondary',\n fontSize: 11,\n }}\n >\n {item.description}\n </Typography>\n )}\n </Box>\n </ButtonBase>\n\n {isSelected && item.id === MERGE_ADJACENT_OPTION_ID && (\n <Stack\n direction=\"row\"\n spacing={0.75}\n sx={mergeSx({ px: 0.75, pb: 0.75 }, styles?.adjacentSelector)}\n >\n {([\n {\n direction: 'previous' as const,\n title: previousSegmentTitle ?? 'No Previous document',\n caption: '← Merge into Previous',\n available: canMergePrevious,\n },\n {\n direction: 'next' as const,\n title: nextSegmentTitle ?? 'No Next document',\n caption: 'Merge into Next →',\n available: canMergeNext,\n },\n ]).map((adjacentOption) => {\n const isAdjacentSelected =\n adjacentMergeDirection === adjacentOption.direction;\n\n return (\n <Stack key={adjacentOption.direction} sx={{ flex: 1, minWidth: 0 }}>\n <ButtonBase\n disabled={confirmDisabled || !adjacentOption.available}\n onClick={() => setAdjacentMergeDirection(adjacentOption.direction)}\n aria-pressed={isAdjacentSelected}\n sx={{\n width: '100%',\n minWidth: 0,\n minHeight: 46,\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n p: 0.625,\n border: '1px solid',\n borderColor: isAdjacentSelected ? '#7F56D9' : '#D0D5DD',\n borderRadius: 1.5,\n bgcolor: isAdjacentSelected ? '#E0E7FF' : 'background.paper',\n color: isAdjacentSelected ? '#7F56D9' : (adjacentOption.available ? 'text.primary' : '#98A2B3'),\n textAlign: 'left',\n '&.Mui-disabled': {\n color: '#98A2B3',\n bgcolor: '#F8FAFC',\n },\n }}\n >\n <Typography\n sx={{\n color: 'inherit',\n fontSize: 11,\n fontWeight: 500,\n lineHeight: 1.25,\n overflowWrap: 'anywhere',\n }}\n >\n {adjacentOption.title}\n </Typography>\n </ButtonBase>\n <Typography\n sx={{\n mt: 0.5,\n color: isAdjacentSelected ? '#5925DC' : 'text.secondary',\n fontSize: 9.5,\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n textAlign: adjacentOption.direction === 'next' ? 'right' : 'left',\n }}\n >\n {adjacentOption.caption}\n </Typography>\n </Stack>\n );\n })}\n </Stack>\n )}\n </Paper>\n );\n })}\n\n {isAdjacentMergeSelected && adjacentMergeDirection != null && (\n <Stack\n direction=\"row\"\n alignItems=\"flex-start\"\n spacing={0.625}\n sx={mergeSx(\n {\n p: 0.75,\n border: '1px solid #FCA5A5',\n borderRadius: 1.5,\n bgcolor: '#FEF2F2',\n },\n styles?.impactWarning\n )}\n >\n <InfoAlert color=\"error\" height={14} width={14} sx={{ mt: 0.125 }} />\n <Typography sx={{ color: '#DC2626', fontSize: 10.5, lineHeight: 1.4 }}>\n This will impact the {adjacentMergeDirection} document. Its content and page\n range will change.\n </Typography>\n </Stack>\n )}\n\n <Button\n variant=\"contained\"\n fullWidth\n disabled={isConfirmDisabled}\n onClick={handleConfirm}\n sx={mergeSx(\n {\n minHeight: 32,\n mt: 0.25,\n borderRadius: 2,\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'none',\n backgroundColor: '#5925DC',\n '&:hover': { backgroundColor: '#4A1FB8' },\n '&.Mui-disabled': {\n backgroundColor: '#D9D6FE',\n color: '#FFFFFF',\n },\n },\n styles?.confirmButton\n )}\n >\n {confirmLabel}\n </Button>\n </Stack>\n\n {showAdjustManually && (\n <Stack spacing={0.625} sx={styles?.manualSection}>\n <ButtonBase\n disabled={confirmDisabled}\n onClick={() => {\n const nextIsExpanded = !isManualExpanded;\n setIsManualExpanded(nextIsExpanded);\n setIsManualConfirmationOpen(false);\n if (nextIsExpanded) {\n if (selectedIndex === undefined) setInternalSelectedIndex(null);\n onAdjustManually?.();\n }\n }}\n aria-expanded={isManualExpanded}\n sx={{\n width: '100%',\n justifyContent: 'space-between',\n borderRadius: 1,\n textAlign: 'left',\n }}\n >\n <Box>\n <Typography sx={{ color: 'text.primary', fontSize: 12, fontWeight:600 }}>\n {manualPrompt}\n </Typography>\n </Box>\n <ExpandMoreIcon\n sx={{\n color: 'text.secondary',\n fontSize: 16,\n transform: isManualExpanded ? 'rotate(180deg)' : 'none',\n transition: 'transform 150ms ease',\n }}\n />\n </ButtonBase>\n\n {isManualExpanded && !isManualConfirmationOpen && (\n <Box\n sx={{\n pt: 0.5,\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif',\n }}\n >\n {/* Labels Row */}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n columnGap: '8px',\n mb: '4px',\n }}\n >\n <Typography\n sx={{\n fontSize: '10.5px',\n fontWeight: 400,\n lineHeight: '14px',\n color: '#57697E',\n margin: 0,\n }}\n >\n Starts\n </Typography>\n <Typography\n sx={{\n fontSize: '10.5px',\n fontWeight: 400,\n lineHeight: '14px',\n color: '#57697E',\n margin: 0,\n }}\n >\n Ends\n </Typography>\n </Box>\n\n {/* Input Fields Grid */}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n columnGap: '8px',\n mb: '4px',\n }}\n >\n <Box>\n <TextField\n size=\"small\"\n type=\"text\"\n value={startPageInput}\n disabled={confirmDisabled}\n error={isStartPageOutOfRange || isStartGreaterThanEnd}\n onChange={(event) => {\n const value = event.target.value;\n if (/^\\d*$/.test(value)) {\n setStartPageInput(value);\n }\n }}\n inputProps={{\n inputMode: 'numeric',\n pattern: '[0-9]*',\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: '30px',\n backgroundColor: '#FFFFFF',\n\n '& fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n borderWidth: '1px',\n borderRadius: '6px',\n },\n\n '&:hover fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n },\n\n '&.Mui-focused fieldset': {\n borderColor: isStartPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#9488F6',\n borderWidth: '1px',\n },\n },\n\n '& .MuiOutlinedInput-input': {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: '1',\n color: '#34445A',\n padding: '0 10px',\n height: '30px',\n },\n }}\n />\n {isStartPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ {totalPages} (total pages)\n </Typography>\n )}\n {isStartGreaterThanEnd && !isStartPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ end page\n </Typography>\n )}\n </Box>\n <Box>\n <TextField\n size=\"small\"\n type=\"text\"\n value={endPageInput}\n disabled={confirmDisabled}\n error={isEndPageOutOfRange || isStartGreaterThanEnd}\n onChange={(event) => {\n const value = event.target.value;\n\n // Allow only positive integer characters\n if (/^\\d*$/.test(value)) {\n setEndPageInput(value);\n }\n }}\n inputProps={{\n inputMode: 'numeric',\n pattern: '[0-9]*',\n }}\n sx={{\n '& .MuiOutlinedInput-root': {\n height: '30px',\n backgroundColor: '#FFFFFF',\n\n '& fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n borderWidth: '1px',\n borderRadius: '6px',\n },\n\n '&:hover fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#C3CFDC',\n },\n\n '&.Mui-focused fieldset': {\n borderColor: isEndPageOutOfRange || isStartGreaterThanEnd ? '#EF4444' : '#9488F6',\n borderWidth: '1px',\n },\n },\n\n '& .MuiOutlinedInput-input': {\n fontSize: '12px',\n fontWeight: 400,\n lineHeight: '1',\n color: '#34445A',\n padding: '0 10px',\n height: '30px',\n },\n }}\n />\n {isEndPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≤ {totalPages} (total pages)\n </Typography>\n )}\n {isStartGreaterThanEnd && !isEndPageOutOfRange && (\n <Typography\n sx={{\n fontSize: '10px',\n color: '#EF4444',\n marginTop: '2px',\n fontWeight: 500,\n }}\n >\n Must be ≥ start page\n </Typography>\n )}\n </Box>\n </Box>\n\n {/* Apply Button */}\n <Box>\n <Button\n onClick={handleManualApply}\n disabled={confirmDisabled || !isRangeValid || isRangeUnchanged}\n sx={{\n height: '30px',\n padding: '0 12px',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n backgroundColor: '#FFFFFF',\n border: '1px solid #8E80F3',\n borderRadius: '6px',\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif',\n fontSize: '12px',\n fontWeight: 600,\n lineHeight: '1',\n color: '#4A24CF',\n outline: 'none',\n cursor: 'pointer',\n textTransform: 'none',\n transition: 'all 150ms ease-in-out',\n '&:hover': !isRangeValid || isRangeUnchanged ? {} : {\n backgroundColor: '#FAF9FF',\n borderColor: '#7F6FF0',\n },\n '&:active': !isRangeValid || isRangeUnchanged ? {} : {\n transform: 'translateY(1px)',\n },\n '&.Mui-disabled': {\n backgroundColor: '#FFFFFF',\n borderColor: '#C3CFDC',\n color: '#A0ABBE',\n cursor: 'not-allowed',\n },\n }}\n >\n Apply\n </Button>\n </Box>\n\n {/* Unchanged Range Warning */}\n {isRangeUnchanged && hasAttemptedUnchanged && (\n <Box\n sx={{\n backgroundColor: '#FEF3C7',\n border: '1px solid #FBBF24',\n borderRadius: '6px',\n padding: '8px 10px',\n marginTop: '4px',\n }}\n >\n <Typography\n sx={{\n fontSize: '10px',\n color: '#B45309',\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n Please change the boundary to change the document boundary as no changes will be applied.\n </Typography>\n </Box>\n )}\n\n {/* Divider */}\n <Box\n sx={{\n width: '100%',\n height: '1px',\n marginTop: '8px',\n backgroundColor: '#EEF0F2',\n border: '0',\n }}\n />\n </Box>\n )}\n\n {isManualExpanded && isManualConfirmationOpen && (\n <Stack\n spacing={0.75}\n sx={mergeSx(\n {\n p: 0.75,\n borderRadius: 1.5,\n bgcolor: '#FFF7ED',\n },\n styles?.manualConfirmation\n )}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\n <InfoAlert color=\"warning\" height={14} width={14} />\n <Typography sx={{ color: '#EA580C', fontSize: 11, fontWeight: 600 }}>\n Confirm this change?\n </Typography>\n </Stack>\n <Typography sx={{ color: 'text.secondary', fontSize: 10.5, lineHeight: 1.4 }}>\n Pages {parsedStartPage}-{parsedEndPage} will become part of {title}, including\n pages from other documents in this range.\n </Typography>\n <Stack direction=\"row\" spacing={0.75}>\n <Button\n variant=\"outlined\"\n fullWidth\n onClick={() => setIsManualConfirmationOpen(false)}\n sx={{\n minHeight: 28,\n borderRadius: 1.5,\n fontSize: 11,\n textTransform: 'none',\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n fullWidth\n disabled={\n confirmDisabled || !onConfirm || !isRangeValid || isRangeUnchanged\n }\n onClick={handleManualRangeConfirm}\n sx={{\n minHeight: 28,\n borderRadius: 1.5,\n bgcolor: '#EA580C',\n fontSize: 11,\n textTransform: 'none',\n '&:hover': { bgcolor: '#C2410C' },\n }}\n >\n Confirm\n </Button>\n </Stack>\n </Stack>\n )}\n </Stack>\n )}\n\n <Stack spacing={0.625} sx={styles?.footer}>\n\n {showCognitiveIntegrity && (\n <>\n <Divider />\n <ButtonBase\n onClick={onCognitiveClick}\n disabled={!onCognitiveClick}\n sx={{\n justifyContent: 'space-between',\n borderRadius: 1,\n textAlign: 'left',\n cursor: onCognitiveClick ? 'pointer' : 'not-allowed',\n }}\n >\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <CognitiveIcon sx={{ color: 'text.secondary' }} />\n <Typography sx={{ color: 'text.primary', fontSize: 12 }}>\n {cognitiveLabel}\n </Typography>\n </Stack>\n <Stack direction=\"row\" alignItems=\"center\" spacing={0.5}>\n <CognitiveScoreBadge score={cognitiveScore} />\n <ChevronRightIcon sx={{ color: 'text.secondary' }} />\n </Stack>\n </ButtonBase>\n </>\n )}\n </Stack>\n </Stack>\n </Paper>\n );\n}\n"],"names":["mergeSx","base","override","Array","isArray","MERGE_ADJACENT_OPTION_ID","BoundaryReviewActionEnum","isBoundaryReviewAction","value","Object","values","includes","createBoundaryCardOptions","metadata","reviewAction","startPage","endPage","additionalDecisions","additional_decisions","additionalActions","flat","allActionsMerged","from","Set","allowed_decisions","flatMap","action","focusPage","focus_page","firstMergeAction","find","candidate","toLowerCase","isSinglePageRange","isAtStart","isAtEnd","isSplitDisabled","id","title","description","disabled","BoundaryCard","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","BoundaryCard","headerName","pageNo","content","revertSummary","cognitiveScore","config","previousSegmentTitle","nextSegmentTitle","selectedIndex","defaultSelectedIndex","defaultStartPage","defaultEndPage","onSelectionChange","onConfirm","onActionConfirm","onCognitiveClick","onAdjustManually","onClose","confirmLabel","manualPrompt","manualActionLabel","cognitiveLabel","showAdjustManually","showCognitiveIntegrity","showCloseButton","confirmDisabled","width","maxWidth","className","styles","totalPages","console","log","resolvedConfig","useMemo","filter","option","internalSelectedIndex","setInternalSelectedIndex","useState","startPageInput","setStartPageInput","String","endPageInput","setEndPageInput","isManualExpanded","setIsManualExpanded","isManualConfirmationOpen","setIsManualConfirmationOpen","adjacentMergeDirection","setAdjacentMergeDirection","hasAttemptedUnchanged","setHasAttemptedUnchanged","resolvedSelectedIndex","selectedOption","isAdjacentMergeSelected","canMergePrevious","canMergeNext","isOptionDisabled","parsedStartPage","Number","parsedEndPage","hasValidPageInputs","trim","length","isInteger","isStartPageOutOfRange","isEndPageOutOfRange","isStartGreaterThanEnd","isRangeValid","isRangeUnchanged","isConfirmDisabled","jsx","Paper","elevation","sx","borderTop","borderColor","borderRadius","bgcolor","overflow","boxSizing","minWidth","root","children","jsxs","Stack","spacing","p","direction","alignItems","header","InfoAlert","color","height","Typography","flex","fontSize","fontWeight","lineHeight","textTransform","IconButton","size","onClick","CloseIcon","Box","mt","Divider","my","RevertSummaryNotice","component","role","map","item","index","isSelected","isDisabled","variant","ButtonBase","handleSelect","justifyContent","px","py","textAlign","Radio","checked","tabIndex","mr","pb","adjacentSelector","caption","available","adjacentOption","isAdjacentSelected","minHeight","border","overflowWrap","whiteSpace","impactWarning","Button","fullWidth","resolvedAction","confirmedOption","details","backgroundColor","confirmButton","manualSection","nextIsExpanded","ExpandMoreIcon","transform","transition","pt","fontFamily","display","gridTemplateColumns","columnGap","mb","margin","TextField","type","error","onChange","event","target","test","inputProps","inputMode","pattern","borderWidth","padding","marginTop","outline","cursor","manualConfirmation","footer","Fragment","CognitiveIcon","CognitiveScoreBadge","score","ChevronRightIcon"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useMemo as n,useState as i,useEffect as r,useRef as a,useCallback as o}from"react";import{SpecialZoomLevel as s}from"@react-pdf-viewer/core";import l from"../PdfViewer/PdfViewer.js";import d,{BoundaryReviewActionEnum as g,isBoundaryReviewAction as c}from"./BoundaryCard.js";import p from"./CardWrapper.js";import u from"./CognitiveIntegrity.js";import m from"./LabelCheck.js";import h,{PageCheckActionEnum as f}from"./PageCheck.js";import v from"./PageTypeChoiceCheck.js";import{extractSegmentReviewData as w,getSegmentReviewKey as b}from"./reviewStepAdapters.js";import{CircleCheck as y,Check as _,GitMerge as x}from"lucide-react";import{Typography as S,Tooltip as C,Portal as E,Box as k}from"@mui/material";import P from"./ReviewedCard.js";import I from"./ReviewedBoundaryActions.js";import R from"./RevertCard.js";import N from"./RevertSuccessCard.js";import{getPendingMergeImpactedSegmentKeys as M,hasPolledStructuralAction as A,getOptimisticMergeImpactedSegmentKeys as F,shouldHideStructuralBoundaryReview as T,getResolvedScore as B,getConfidenceColors as W,getBoundaryReviewActionBadgeLabel as L,getTitleReviewActionBadgeLabel as z,isReviewStepResolutionCurrent as $,isReviewStepResolved as j,formatScore as q}from"./helper.js";import G from"./ChartBreakoutCircle.js";import{getReviewScoreBand as O}from"./reviewScore.js";const D=260;var V=(e=>(e.ActualSize="ActualSize",e.PageFit="PageFit",e.PageWidth="PageWidth",e))(V||{});const H={ActualSize:s.ActualSize,PageFit:s.PageFit,PageWidth:s.PageWidth},U=e=>({reviewId:e.id,segment:e.segment,pageNumber:e.pageNumber});function X({pdfUrl:V,pdfName:X,segments:Y,totalPages:J,styles:Z,pdfViewerProps:K,specialZoomLevel:Q,showBadges:ee=!0,sortByConfidence:te="low",filterByConfidence:ne="all",showBadgeNavigation:ie=!0,autoSelectReviewOnPageChange:re=!1,autoAdvanceAfterConfirm:ae=!0,autoAdvanceScoreBand:oe,badgePreloadPages:se=8,badgeOffsetTop:le=20,badgeOffsetRight:de=68,badgeOffsetLeft:ge=0,initialReviewId:ce,manualPrompt:pe,heightBuffer:ue,onBoundaryAction:me,onLabelAction:he,onPageAction:fe,onPageTypeRevert:ve,onRevert:we,onActiveReviewChange:be,onCurrentPageChange:ye,onActionError:_e,disableAllActions:xe=!1,disablePdfAnnotations:Se=!1,disablePdfTextLayer:Ce=!0,disableTitleCheckUntilBoundaryCheckCompleted:Ee=!1,onAdjustManually:ke,onCognitiveClick:Pe,className:Ie,style:Re,viewerStyle:Ne,railStyle:Me,redirectionData:Ae,onBadgeSelected:Fe}){console.log("LOG: TOTAL PAGE IN PARENT",J);const{boundaryReviews:Te,labelReviews:Be,pageReviews:We}=n(()=>w(Y),[Y]),[Le,ze]=i(()=>new Map),[$e,je]=i(()=>new Set),qe=n(()=>{const e=new Map;let t=1;return Y.forEach((n,i)=>{const r=b(n,i);e.has(r)||(e.set(r,t),t+=1)}),e},[Y]),Ge=n(()=>new Set(Be.map(e=>b(e.segment))),[Be]),Oe=n(()=>M(Y),[Y]);r(()=>{ze(e=>{let t=!1;const n=new Map(e);return e.forEach((e,i)=>{const r=Y.find(e=>b(e)===i);r&&!A(r,e)||(n.delete(i),t=!0)}),t?n:e})},[Y]),r(()=>{je(e=>{let t=!1;const n=new Set(e);return e.forEach(e=>{Le.has(e)||(n.delete(e),t=!0)}),t?n:e})},[Le]);const De=n(()=>F(Y,Le,$e),[$e,Le,Y]),Ve=a(null),He=n(()=>[...Te.filter(e=>!Oe.has(b(e.segment))&&!De.has(b(e.segment))&&!T(e.review_step,e.segment,Ge.has(b(e.segment)),Le.get(b(e.segment)))).map(e=>({...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page})),...Be.filter(e=>!Oe.has(b(e.segment))&&!De.has(b(e.segment))).map(e=>({...e,kind:"label",pageNumber:e.segment.start_page})),...We.filter(e=>!Oe.has(b(e.segment))&&!De.has(b(e.segment))).map(e=>({...e,kind:"page",pageNumber:e.metadata.page_num??e.segment.start_page}))].sort((e,t)=>{const n=qe.get(b(e.segment))??Number.MAX_SAFE_INTEGER,i=qe.get(b(t.segment))??Number.MAX_SAFE_INTEGER;return e.pageNumber-t.pageNumber||n-i||e.reviewStepIndex-t.reviewStepIndex||e.id.localeCompare(t.id)}),[Te,Be,We,De,Le,Oe,qe,Ge]),Ue=n(()=>Y.map(e=>({...e,title:e.label?.trim()||e.title,page_count:e.page_count??e.end_page-e.start_page+1})),[Y]),[Xe,Ye]=i(1),[Je,Ze]=i(ce??null),[Ke,Qe]=i(ce??null),[et,tt]=i(!1),[nt,it]=i(null),[rt,at]=i(null),[ot,st]=i(()=>new Set),[lt,dt]=i(null),[gt,ct]=i(null),[pt,ut]=i(null),[mt,ht]=i(!1),ft=a(0),vt=a(null),wt=a(null),bt=a(new Map),yt=a(null),_t=a(null),xt=a(null),[St,Ct]=i(D),Et=Z?.aside?.width??"40%",kt=`min(${"number"==typeof Et?`${Et}px`:Et}, 260px, 100%)`;r(()=>{st(e=>{if(0===e.size)return e;const t=new Set(e);let n=!1;return He.forEach(e=>{null!=e.review_step.review?.action&&t.has(e.id)&&(t.delete(e.id),n=!0)}),n?t:e})},[He]),r(()=>{const e=Ve.current;if(!e||!ee)return;const t=()=>{const t=e.getBoundingClientRect().width;t>0&&Ct(t)};t();const n="undefined"==typeof ResizeObserver?null:new ResizeObserver(t);return n?.observe(e),()=>n?.disconnect()},[ee]);const Pt=n(()=>{const e=new Set;return He.forEach(t=>{null!=t.review_step.review?.action&&e.add(t.id)}),e},[He]),It=n(()=>He.find(e=>e.id===Je)??null,[Je,He]),Rt=n(()=>!(!Ee||"label"!==It?.kind)&&Te.some(e=>{if(b(e.segment)!==b(It.segment)||Pt.has(e.id))return!1;const t=B(e.review_step.score,e.review_step.confidence);return null==t||t<85}),[It,Te,Ee,Pt]),Nt=null==It?-1:Y.findIndex(e=>b(e)===b(It.segment)),Mt=Nt>0?Y[Nt-1]:void 0,At=Nt>=0?Y[Nt+1]:void 0,Ft=Mt?.label?.trim()||Mt?.title,Tt=At?.label?.trim()||At?.title,Bt=W(It?.review_step.score,It?.review_step.confidence,It?.segment.confidence?.awaiting_llm),Wt=It?.review_step.reasons?.length?It.review_step.reasons:It?.segment.confidence?.reasons??[],Lt=Boolean(Wt.some(e=>e.text.trim()&&["evidence","gap"].includes(e.type.trim().toLowerCase()))||It?.review_step.reason?.trim()||It?.review_step.gap?.trim()),zt=null==It?null:"boundary"===It.kind?L(It.review_step,It.segment,Le.get(It.segment.stable_key??"")):z(It.review_step,It.segment,Le.get(It.segment.stable_key??"")),$t="label"===It?.kind?[zt,It.review_step.human_action_enum,It.review_step.review?.action,It.review_step.human_resolution?.action]:[],jt="label"===It?.kind&&$t.some(e=>{const t=e?.trim().toUpperCase()??"";return t.includes("MERGE")||t.includes("SPLIT")}),qt=null!=It&&He.some(e=>"boundary"===e.kind&&b(e.segment)===b(It.segment)),Gt=jt&&!qt,Ot=("boundary"===It?.kind||Gt)&&null!=It?(()=>{if("boundary"===It.kind)return It;const e=Te.find(e=>b(e.segment)===b(It.segment));return e?{...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page}:{...It,kind:"boundary",pageNumber:It.segment.review_action?.focus_page??It.segment.start_page,metadata:{focus_page:It.segment.review_action?.focus_page??null,boundary_margin:It.segment.boundary_margin??null,user_actions:[]}}})():void 0,Dt=null==It?"":It.segment.label?.trim()||It.segment.title,Vt=It?.review_step.revert,Ht=It?.segment.revert,Ut=e=>e?.trim().toLowerCase(),Xt=null==It?void 0:[...It.segment.review_steps??[]].reverse().find(e=>{const t=e.type?.trim().toLowerCase();return("page_boundary"===t||"page boundary review"===t)&&"boundary"===Ut(e.revert?.type)})?.revert,Yt=Vt??It?.segment.revert??Xt,Jt=Yt?.decision.trim().toUpperCase();zt??(Jt?.includes("SPLIT")||Jt?.includes("MERGE"));const Zt="label"===It?.kind&&"SET_RANGE"===Xt?.decision?.trim().toUpperCase()&&Xt.current_segment_ids.length!==Xt.previous_state.length,Kt="Merged"===zt||"Split"===zt||Zt,Qt=null==It?void 0:Kt?"boundary"===Ut(Xt?.type)?Xt:"boundary"===Ut(Ht?.type)?Ht:"boundary"===Ut(Vt?.type)?Vt:void 0:"label"===It.kind?"label"===Ut(Vt?.type)?Vt:void 0:"boundary"===It.kind?"boundary"===Ut(Vt?.type)?Vt:"boundary"===Ut(Xt?.type)?Xt:"boundary"===Ut(Ht?.type)?Ht:void 0:void 0,en=Kt&&Qt?.operation_id?Y.flatMap(e=>e.review_steps??[]).find(e=>{const t=e.type?.trim().toLowerCase();if(!("page_boundary"===t||"page boundary review"===t))return!1;return(e.human_resolution?.operation_id??e.revert?.operation_id??e.operation_id)===Qt.operation_id&&Boolean(e.human_resolution?.change_summary?.trim())}):void 0,tn=Qt?.summary?.trim()||null,nn=Kt?en?.human_resolution?.change_summary?.trim()||Qt?.summary?.trim()||"":It?.review_step?.human_resolution?.change_summary?.trim()||It?.review_step?.summary?.trim()||"",rn="page"===It?.kind?{currentSegment:{title:Dt,startPage:It.segment.start_page,endPage:It.segment.end_page},previousSegments:[]}:It&&Qt?{currentSegment:{title:Dt,startPage:It.segment.start_page,endPage:It.segment.end_page},previousSegments:(Qt.previous_state??[]).flatMap(e=>{const t=null===e.label?"Untitled document":e.label?.trim();return t?[{title:t,startPage:e.start_page,endPage:e.end_page}]:[]})}:null,an="page"===It?.kind?It.metadata.type_choices?.map(e=>e.classification_id)??(It.metadata.classification_id?[It.metadata.classification_id]:[]):[],on="page"===It?.kind?Boolean(ve&&an.length>0):Boolean(Qt?.operation_id&&Qt?.type&&!1!==Qt?.revertable),sn=Boolean(rn&&on),ln=o((e,t)=>{ft.current+=1,vt.current={requestId:ft.current,pageNumber:e,reviewId:t},at({pageNumber:e,requestId:ft.current})},[]),dn=o(e=>{!0!==e.segment.confidence?.awaiting_llm&&(Fe?.({reviewId:e.id,segment_id:e.segment.segment_id??null,reviewStepIndex:e.reviewStepIndex,kind:e.kind,pageNumber:e.pageNumber,metadata:e.metadata}),ct(null),ut(null),Ze(e.id),Qe(e.id),tt(!1),it(null),ln(e.pageNumber,e.id),be?.(e.id,e.segment))},[be,Fe,ln]);r(()=>{if(!pt)return;const e=requestAnimationFrame(()=>ht(!0)),t=window.setTimeout(()=>{ht(!1)},3500),n=window.setTimeout(()=>{ut(null)},4e3);return()=>{cancelAnimationFrame(e),window.clearTimeout(t),window.clearTimeout(n)}},[pt]),r(()=>{if(!Ae)return;if("pageGroup"===Ae.type){const e=Ae.pages??[],t=Ae.pageIndex??0,n=e[t];if(null==n)return;return gn(),ct({pages:e,index:t,label:Ae.groupLabel??""}),ft.current+=1,void at({pageNumber:n,requestId:ft.current})}if(ct(null),Ae.reviewId){const e=He.find(e=>e.id===Ae.reviewId&&(!Ae.type||e.kind===Ae.type));if(e)return void dn(e)}if(Ae.classificationId){const e=He.find(e=>"page"===e.kind&&(e.metadata.classification_id===Ae.classificationId||e.metadata.type_choices?.some(e=>e.classification_id===Ae.classificationId))&&(!Ae.segmentId||e.segment.segment_id===Ae.segmentId)&&(!Ae.type||e.kind===Ae.type));if(e)return void dn(e)}if(!Ae.pageNumber||!Ae.type)return;const e=Number(Ae.pageNumber);if(!Number.isInteger(e)||e<1)return;const t=Ae.pageType?.trim().toLowerCase(),n=He.find(n=>{const i="page"===n.kind?n.pageNumber:n.segment.start_page,r="page"!==n.kind||!t||n.metadata.page_type===t||n.metadata.type_choices?.some(e=>e.page_type===t);return(!Ae.segmentId||n.segment.segment_id===Ae.segmentId)&&i===e&&n.kind===Ae.type&&r});n?dn(n):"page"===Ae.type&&(gn(),ft.current+=1,at({pageNumber:e,requestId:ft.current}))},[Ae,dn,He]);const gn=o(()=>{vt.current=null,tt(!1),Ze(null),it(null),be?.(null,null)},[be]),cn=o(e=>{ht(!1),ut(null);const t=He.find(t=>!Pt.has(t.id)&&"boundary"===t.kind&&t.segment.start_page===e.startPage&&t.segment.end_page===e.endPage)??He.find(t=>!Pt.has(t.id)&&t.segment.start_page<=e.startPage&&t.segment.end_page>=e.startPage);t?dn(t):(gn(),ft.current+=1,at({pageNumber:e.startPage,requestId:ft.current}))},[gn,Pt,He,dn]),pn=o((e,t)=>{const n=O(e.review_step.score),i=null==oe||n===oe,r=ot.has(e.id)&&$(e.review_step,e.segment);return e.id!==t&&i&&!0!==e.segment.confidence?.awaiting_llm&&!j(e.review_step,e.segment)&&!r},[oe,ot]),un=o(e=>{if(!ae)return void gn();const t=He.findIndex(t=>t.id===e),n=He.find((n,i)=>i>t&&pn(n,e))??He.find(t=>pn(t,e));n?requestAnimationFrame(()=>dn(n)):gn()},[ae,gn,pn,He,dn]),mn=o(async(e,t)=>{if(xe||!fe||0===t.length)return;const n=e.metadata.type_choices??[];if(2!==n.length)return;const i=new Set(t),r=U(e),a=[...n].sort((e,t)=>{const n=i.has(e.page_type);return n===i.has(t.page_type)?0:n?-1:1});dt(e.id);try{for(const t of a){const n=i.has(t.page_type)?f.YES:f.NO;await fe(n,{action:n,pageType:t.page_type,metadata:{user_actions:[f.YES,f.NO],page_num:e.metadata.page_num,page_type:t.page_type,classification_id:t.classification_id}},r)}st(t=>{const n=new Set(t);return n.add(e.id),n}),un(e.id)}catch(e){_e?.(e,r)}finally{dt(null)}},[xe,_e,fe,un]),hn=o(async(e,t,n)=>{if(xe)return;if("boundary"===e.kind&&!me)return;if("label"===e.kind&&!he)return;if("page"===e.kind&&!fe)return;const i=U(e),r=t,a=n,o=r===g.SET_RANGE?(()=>{const t=a.startPage,n=a.endPage;if(null==t||null==n)return null;const i=t<e.segment.start_page||n>e.segment.end_page,r=t>e.segment.start_page||n<e.segment.end_page;return i&&!r?t<e.segment.start_page?g.MERGE_PREV:g.MERGE_NEXT:r?g.SPLIT_HERE:null})():r,s="boundary"===e.kind&&null!=me&&ae&&(o===g.SPLIT_HERE||o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS),l=s?Y.findIndex(t=>b(t)===b(e.segment)):-1;s&&l>=0&&o&&(wt.current={action:o,originalSegmentIndex:l,segmentSignature:JSON.stringify(Y.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null}))),ready:!1}),dt(e.id);try{"boundary"===e.kind?await(me?.(t,n,i)):"label"===e.kind?await(he?.(t,n,i)):"page"===e.kind&&await(fe?.(t,n,i)),st(t=>{const n=new Set(t);return n.add(e.id),n});const a="boundary"===e.kind&&(o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS);if(("boundary"===e.kind&&o===g.SPLIT_HERE||a)&&o){const t=b(e.segment);je(e=>{const n=new Set(e);return r===g.SET_RANGE?n.add(t):n.delete(t),n}),ze(e=>{const n=new Map(e);return n.set(t,o),n})}if(wt.current){if(wt.current.ready=!0,a){const t=He.find(t=>"label"===t.kind&&b(t.segment)===b(e.segment));t&&requestAnimationFrame(()=>dn(t))}}else un(e.id)}catch(e){s&&(wt.current=null),_e?.(e,i)}finally{dt(null)}},[ae,xe,_e,me,he,fe,ve,He,Y,dn,un]);r(()=>{const e=wt.current;if(!e?.ready)return;if(JSON.stringify(Y.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null})))===e.segmentSignature)return;const t=e.action===g.SPLIT_HERE?e.originalSegmentIndex+1:e.action===g.MERGE_PREV||e.action===g.MERGE_PREVIOUS?Math.max(0,e.originalSegmentIndex-1):e.originalSegmentIndex,n=new Map(Y.map((e,t)=>[b(e,t),t])),i=He.find(e=>{const i=n.get(b(e.segment));return null!=i&&i>=t&&pn(e)});if(!i)return wt.current=null,void gn();requestAnimationFrame(()=>{wt.current=null,dn(i)})},[gn,pn,He,Y,dn]),r(()=>{wt.current||Je&&!He.some(e=>e.id===Je)&&gn()},[Je,gn,He]),r(()=>{if(!re)return;if(wt.current)return;const e=He.find(e=>e.pageNumber===Xe);e&&e.id!==Je&&dn(e)},[Je,re,Xe,dn,He]),r(()=>{wt.current||Je&&!He.some(e=>e.id===Je&&!0!==e.segment.confidence?.awaiting_llm)&&gn()},[Je,gn,He]);const fn=n(()=>{const e=He.filter(e=>!0!==e.segment.confidence?.awaiting_llm);if("all"===ne)return e;const t=["low","medium","high"].filter(e=>e!==te),n=[te,...t],i=new Map(n.map((e,t)=>[e,t]));return e.map((e,t)=>({item:e,index:t})).sort((e,t)=>{const r=e.item.review_step.confidence?.trim().toLowerCase(),a=t.item.review_step.confidence?.trim().toLowerCase();return(null==r?n.length:i.get(r)??n.length)-(null==a?n.length:i.get(a)??n.length)||e.index-t.index}).map(({item:e})=>e)},[ne,te,He]),vn=fn.findIndex(e=>e.id===Ke),[wn,bn]=i(null),[yn,_n]=i(null),xn=a(!1),Sn=o(e=>{const t=fn[e];t&&dn(t)},[fn,dn]);o(e=>{if(!gt||e<0||e>=gt.pages.length)return;const t=gt.pages[e];null!=t&&(gn(),ct(t=>null==t?t:{...t,index:e}),ft.current+=1,at({pageNumber:t,requestId:ft.current}))},[gt,gn]),r(()=>{Ke&&!fn.some(e=>e.id===Ke)&&Qe(null)},[fn,Ke]),r(()=>{xn.current=!1,_n(null),bn(vn>=0?String(vn+1):null)},[vn,fn.length]),r(()=>{if(!xn.current||null==wn)return;const e=window.setTimeout(()=>{const e=Number(wn.trim()),t=e-1;Number.isInteger(e)&&t>=0&&t<fn.length&&(xn.current=!1,Sn(t))},300);return()=>window.clearTimeout(e)},[Sn,wn,fn.length]);const Cn=n(()=>{const e=new Map;He.forEach(t=>{const n=e.get(b(t.segment))??[];n.push(t),e.set(b(t.segment),n)});const t=new Map;return e.forEach((e,n)=>{const i=qe.get(n)??1;e.sort((e,t)=>e.reviewStepIndex-t.reviewStepIndex).forEach((e,n)=>{t.set(e.id,`${i}${(e=>{let t=e+1,n="";for(;t>0;)t-=1,n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26);return n})(n)}`)})}),t},[He,qe]),En=n(()=>{const e=new Map;He.forEach(t=>{const n=e.get(t.pageNumber)??[];n.push(t),e.set(t.pageNumber,n)});const t=new Map;return e.forEach(e=>{e.forEach((e,n)=>t.set(e.id,n))}),t},[He]),kn=o(e=>({startPage:Math.max(0,e.startPage-se),endPage:Math.min(e.numPages-1,e.endPage+se)}),[se]),Pn=o(()=>{const e=_t.current,t=xt.current;if(!e||!t)return;const n=e.getBoundingClientRect(),i=t.querySelector(".rpv-core__inner-pages"),r=i?.getBoundingClientRect()??t.getBoundingClientRect();He.forEach(e=>{const i=bt.current.get(e.id);if(!i)return;const a=t.querySelector(`[data-testid="core__page-layer-${e.pageNumber-1}"]`);if(!a)return void(i.style.visibility="hidden");const o=a.getBoundingClientRect(),s=En.get(e.id)??0,l=o.top+le+40*s,d=l+(i.offsetHeight||32),g=l>=r.top&&d<=r.bottom;i.style.top=l-n.top+"px",i.style.visibility=g?"visible":"hidden"});const a=yt.current;if(a){const e=gt?.pages[gt.index],i=null==e?null:t.querySelector(`[data-testid="core__page-layer-${e-1}"]`);if(gt&&i){const e=i.getBoundingClientRect().top+le,t=e+(a.offsetHeight||25),o=e>=r.top&&t<=r.bottom;a.style.top=e-n.top+"px",a.style.visibility=o?"visible":"hidden"}else a.style.visibility="hidden"}if(Je&&null==vt.current){const e=bt.current.get(Je);e&&"hidden"!==e.style.visibility&&it(t=>t===e?t:e)}},[gt,Je,le,En,He]),In=o(e=>{const t=vt.current;t&&t.requestId===e.requestId&&t.pageNumber===e.pageNumber&&(vt.current=null,Pn(),requestAnimationFrame(()=>{if(null!=vt.current)return;const e=bt.current.get(t.reviewId);e&&"hidden"!==e.style.visibility&&it(e)}))},[Pn]);return r(()=>{const e=xt.current;if(!e||!ee)return;let t=null;const n=()=>{null==t&&(t=requestAnimationFrame(()=>{t=null,Pn()}))};e.addEventListener("scroll",n,!0),window.addEventListener("resize",n);const i=new MutationObserver(n);i.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style"]});const r="undefined"==typeof ResizeObserver?null:new ResizeObserver(n);return r?.observe(e),n(),()=>{null!=t&&cancelAnimationFrame(t),e.removeEventListener("scroll",n,!0),window.removeEventListener("resize",n),i.disconnect(),r?.disconnect()}},[ee,Pn]),e("div",{ref:_t,className:Ie,style:{...Re,display:"block",position:"relative",width:"100%",height:"100%",minWidth:0,overflowX:"auto",overflowY:"hidden"},children:[e("div",{className:"segment-review-wrapper__container",style:{display:"flex",alignItems:"stretch",gap:0,width:"100%",minWidth:700,height:"100%"},children:[t("div",{ref:xt,style:{...Ne,flex:"1 1 auto",width:ee?"auto":"100%",minWidth:0,height:"100%",boxSizing:"border-box"},children:t(l,{highlightText:[],highlightPages:{},highlightCordinatePages:[],useCoordinates:!1,showRotateButton:!0,...K,defaultScale:void 0===Q?K?.defaultScale??s.PageFit:H[Q],disablePdfAnnotations:Se,disablePdfTextLayer:Ce,pdfUrl:V,pdfName:X,segments:Ue,navigationRequest:rt,onNavigationSettled:In,setRenderRange:kn,onCurrentPageChange:e=>{Ye(e),null==vt.current&&It&&It.pageNumber!==e&&gn(),ye?.(e)}})}),ee&&e("aside",{"aria-label":"Page review badges",ref:Ve,style:{...Me,position:"relative",width:kt,maxWidth:D,flex:`0 1 ${kt}`,minHeight:0,overflow:"hidden",boxSizing:"border-box"},children:[gt&&t("span",{ref:yt,style:{position:"absolute",top:0,left:10,visibility:"hidden",zIndex:2,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,minHeight:25,padding:"2px 8px",border:"1px solid #E2E8F0",borderRadius:16,backgroundColor:"#F8FAFC",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)",font:"inherit"},children:e(S,{fontFamily:"Inter",sx:{fontSize:11,fontWeight:500,color:"#475569",whiteSpace:"nowrap"},children:[gt.label||"Pages"," Pg: ",gt.index+1]})}),ie&&fn.length>0&&!gt&&e("nav",{"aria-label":"Review badge navigation",style:{position:"absolute",top:8,right:de||"auto",left:ge||"auto",zIndex:2,display:"flex",alignItems:"center",gap:7,width:128,minHeight:40,padding:"4px 6px",border:"1px solid #CBD5E1",borderRadius:6,backgroundColor:"#FFFFFF",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.06)",font:"inherit"},children:[t(C,{title:"out-of-range"===yn?"Please enter valid number present in the range":"Please enter valid numbers",open:null!=yn,placement:"top",arrow:!0,children:t("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:wn??"-",min:0,max:fn.length,"aria-label":"Review badge number","aria-invalid":null!=yn,onFocus:()=>{null==wn&&bn("")},onBlur:()=>{_n(null);const e=Number(wn);(null==wn||""===wn||!Number.isInteger(e)||e<1||e>fn.length)&&(xn.current=!1,bn(vn>=0?String(vn+1):null))},onChange:e=>{const t=e.target.value;if(!/^\d*$/.test(t))return void _n("invalid-number");const n=Number(t),i=""!==t&&(n<1||n>fn.length);_n(i?"out-of-range":null),xn.current=!0,bn(t)},style:{width:30,height:28,padding:0,border:"1px solid "+(yn?"#DC2626":"#A5B4FC"),borderRadius:3,color:"#4F46E5",backgroundColor:"#FFFFFF",textAlign:"center",font:"inherit",fontSize:15,outline:"none"}})}),e("span",{"aria-label":`${fn.length} reviews`,style:{flex:1,color:"#4F46E5",fontSize:14,whiteSpace:"nowrap",textAlign:"center"},children:["of ",fn.length]}),["previous","next"].map(e=>{const n="previous"===e,i=vn+(n?-1:1),r=i<0||i>=fn.length;return t("button",{type:"button","aria-label":(n?"Previous":"Next")+" review badge",disabled:r,onClick:()=>Sn(i),style:{display:"grid",placeItems:"center",width:17,height:28,padding:0,border:0,background:"transparent",color:r?"#C7D2FE":"#4F46E5",cursor:r?"default":"pointer"},children:t("svg",{width:"12",height:"8",viewBox:"0 0 12 8",fill:"none",children:t("path",{d:n?"M1 7L6 2L11 7":"M1 1L6 6L11 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})},e)})]}),!gt&&He.map(n=>{const i=Je===n.id,r=Cn.get(n.id)??"1A",a=n.review_step.score,o=n.review_step.confidence,s=q(a,o),l="boundary"===n.kind?L(n.review_step,n.segment,Le.get(b(n.segment))):"label"===n.kind?z(n.review_step,n.segment,Le.get(b(n.segment))):null,d=l??("N/A"===s?s:`${s}%`),g=!0===n.segment.confidence?.awaiting_llm,c=W(a,o,g),p=Pt.has(n.id);return t(C,{title:g?"data is being processed":"",arrow:!0,children:t("span",{ref:e=>{e?bt.current.set(n.id,e):bt.current.delete(n.id)},style:{position:"absolute",top:0,left:10,visibility:"hidden",display:"inline-flex",cursor:g?"not-allowed":"pointer"},children:t("button",{disabled:g,type:"button","aria-pressed":i,"aria-label":g?`${n.review_step.type} · Page ${n.pageNumber} · Data is being processed`:`${n.review_step.type} · Page ${n.pageNumber}`,onClick:()=>dn(n),style:{cursor:"inherit",display:"flex",alignItems:"center",justifyContent:"space-around",gap:4,width:l?p&&!g?115:90:p&&!g?105:80,minHeight:25,padding:"2px 5px",border:`1px solid ${p&&!g?"#E2E8F0":c.border}`,borderRadius:16,backgroundColor:p&&!g?"#F8FAFC":c.background,color:p&&!g?"#475569":c.text,font:"inherit",alignContent:"center",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)"},children:e(S,p&&!g?{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:r}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]}),e("span",{style:{fontSize:11,fontWeight:500,display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{display:"flex",marginLeft:"7px",alignItems:"center"},children:t(y,{height:14,width:14,strokeWidth:2,color:"#16A34A"})})]})]}:{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:r}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:c.divider,strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]})]})})})},n.id)})]})]}),It&&nt&&e(p,{anchorElement:nt,placement:"bottom-start",offset:{top:8},width:Math.min(St,D),maxWidth:D,heightBuffer:ue??25,children:[et&&t(u,{width:"100%",maxWidth:"100%",score:It.review_step.score,reasons:Wt,reason:It.review_step.reason,gap:It.review_step.gap,onBack:()=>tt(!1),onClose:gn}),t("div",{style:{display:et?"none":"block"},children:Pt.has(It.id)?t(P,{width:"100%",maxWidth:"100%",headerName:"page"===It.kind?"Page format approved":"Split"===zt?"Split approved":"Merged"===zt?"Merge approved":"User approved",headerIcon:"page"===It.kind?t(_,{size:18,strokeWidth:2}):"Merged"===zt?t(x,{size:18,strokeWidth:2}):"Split"===zt?t(G,{width:18,height:18}):t(y,{size:18,strokeWidth:2}),title:Dt,pageNo:`Page ${It.segment.start_page}-${It.segment.end_page}`,summary:sn&&rn?t(R,{icon:t(y,{size:14,strokeWidth:2}),title:Dt,pageRange:`Page ${It.segment.start_page}-${It.segment.end_page}`,description:nn??null,revertData:rn,confirmDisabled:"page"===It.kind?!on:null==we||!on,showDocumentHeader:!1,onRevert:async()=>{if("page"===It.kind){if(!ve||0===an.length){const e=new Error("SegmentReviewPdfWrapper requires onPageTypeRevert and at least one classification id to revert a page-type decision.");throw _e?.(e,U(It)),e}let e;for(const t of an)e=await ve({classification_id:t,human_verdict:"No"},U(It));return e}if(!we)throw new Error("SegmentReviewPdfWrapper requires onRevert to handle a revert confirmation.");if(!Qt)throw new Error("There is no valid revert operation for this review.");const e=Kt?"boundary":"label"===It.kind?"label":"boundary"===It.kind?"boundary":null,t=Ut(Qt.type);if(e&&t!==e)throw new Error(`Cannot use ${t??"unknown"} revert metadata for this review. Expected ${e}.`);return we(Qt,U(It))},onRevertError:e=>{_e?.(e,U(It))},onRevertComplete:e=>{st(()=>new Set),"page"!==It.kind&&(je(()=>new Set),ze(()=>new Map)),It.id;const t=rn.previousSegments[0]??rn.currentSegment,n=nt?.getBoundingClientRect(),i=xt.current?.getBoundingClientRect(),r=Math.min(D,Math.max(220,St)),a=n?.left??(i?.right??window.innerWidth-r-8)+8,o=Math.max(8,Math.min(a,window.innerWidth-r-8)),s=null==n?.bottom?Math.max(8,i?.top??8):n.bottom+8;st(()=>new Set),"page"!==It.kind&&(wt.current=null),ht(!1),ut({title:"Split"===zt?"Split reverted":"Merged"===zt?"Merge reverted":"Approval reverted",description:e?.message?.trim()||null,segment:t,position:{top:s,left:o,width:r}}),gn()}},It.id):void 0,additionalActions:Ot?t(I,{metadata:Ot.metadata,reviewAction:It.segment.review_action??void 0,startPage:It.segment.start_page,endPage:It.segment.end_page,title:Dt,previousSegmentTitle:Ft,nextSegmentTitle:Tt,disabled:xe||!me||lt===It.id,onConfirm:(e,t)=>{hn(Ot,e,t)}}):void 0,cognitiveScore:It.review_step.score,styles:{root:{borderColor:"#16A34A"},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:"#16A34A"}}},onCognitiveClick:Lt?()=>{tt(!0),Pe?.(U(It))}:void 0,onClose:gn}):"boundary"===It.kind?t(d,{width:"100%",maxWidth:"100%",totalPages:J,title:It.segment.label||It.segment.title,pageNo:`Page ${It.pageNumber}`,content:It.review_step.question??null,revertSummary:tn,cognitiveScore:It.review_step.score,metadata:It.metadata,reviewAction:It.segment.review_action??void 0,previousSegmentTitle:Ft,nextSegmentTitle:Tt,manualPrompt:pe??"Set a custom boundary",defaultStartPage:It.segment.start_page,defaultEndPage:It.segment.end_page,styles:{root:{borderColor:Bt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Bt.text}}},confirmDisabled:xe||!me||lt===It.id,onConfirm:(e,t,n)=>{n&&c(t.id)&&hn(It,t.id,n)},onAdjustManually:()=>ke?.(U(It)),onCognitiveClick:Lt?()=>{tt(!0),Pe?.(U(It))}:void 0,onClose:gn},It.id):"label"===It.kind?t(m,{width:"100%",maxWidth:"100%",title:It.metadata.current_label||It.segment.label||It.segment.title,pageNo:`Pages ${It.segment.start_page}-${It.segment.end_page}`,content:It.review_step.question??null,revertSummary:tn,cognitiveScore:It.review_step.score,metadata:It.metadata,styles:{root:{borderColor:Bt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Bt.text}}},confirmDisabled:xe||!he||lt===It.id,confirmationBlocked:Rt,confirmationWarning:Rt?"Please confirm the boundary before confirming the title.":void 0,onActionConfirm:(e,t)=>{hn(It,e,t)},onAdjustManually:()=>ke?.(U(It)),onCognitiveClick:Lt?()=>{tt(!0),Pe?.(U(It))}:void 0,onClose:gn},It.id):2===It.metadata.type_choices?.length?t(v,{width:"100%",maxWidth:"100%",title:It.segment.label||It.segment.title,pageNo:`Page ${It.pageNumber}`,content:It.review_step.reason,choices:It.metadata.type_choices,cognitiveScore:It.review_step.score,styles:{root:{borderColor:Bt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Bt.text}}},confirmDisabled:xe||!fe||lt===It.id,onConfirm:e=>{mn(It,e)},onCognitiveClick:Lt?()=>{tt(!0),Pe?.(U(It))}:void 0,onClose:gn},It.id):t(h,{width:"100%",maxWidth:"100%",title:It.segment.label||It.segment.title,pageNo:`Page ${It.pageNumber}`,content:It.review_step.reason,cognitiveScore:It.review_step.score,pageType:It.metadata.page_type,metadata:It.metadata,styles:{root:{borderColor:Bt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Bt.text}}},confirmDisabled:xe||!fe||lt===It.id,onActionConfirm:(e,t)=>{hn(It,e,t)},onCognitiveClick:Lt?()=>{tt(!0),Pe?.(U(It))}:void 0,onClose:gn},It.id)})]}),pt&&t(E,{children:t(k,{"aria-live":"polite",sx:{position:"fixed",top:pt.position.top,left:pt.position.left,zIndex:1600,width:pt.position.width,maxWidth:"calc(100vw - 16px)",opacity:mt?1:0,transform:mt?"translateY(0)":"translateY(-6px)",transition:"opacity 500ms ease, transform 500ms ease",filter:"drop-shadow(0 12px 24px rgba(15, 23, 42, 0.18))",pointerEvents:mt?"auto":"none"},children:t(N,{title:pt.title,description:pt.description,onReview:()=>cn(pt.segment)})})})]})}export{V as SegmentPdfSpecialZoomLevel,X as default};
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useMemo as n,useState as i,useEffect as r,useRef as a,useCallback as o}from"react";import{SpecialZoomLevel as s}from"@react-pdf-viewer/core";import l from"../PdfViewer/PdfViewer.js";import d,{BoundaryReviewActionEnum as g,isBoundaryReviewAction as u}from"./BoundaryCard.js";import c from"./CardWrapper.js";import p from"./CognitiveIntegrity.js";import m from"./LabelCheck.js";import h,{PageCheckActionEnum as f}from"./PageCheck.js";import v from"./PageTypeChoiceCheck.js";import{extractSegmentReviewData as w,getSegmentReviewKey as b}from"./reviewStepAdapters.js";import{CircleCheck as y,Check as _,GitMerge as x}from"lucide-react";import{Typography as S,Tooltip as C,Portal as E,Box as k}from"@mui/material";import P from"./ReviewedCard.js";import I from"./ReviewedBoundaryActions.js";import R from"./RevertCard.js";import N from"./RevertSuccessCard.js";import{getPendingMergeImpactedSegmentKeys as M,hasPolledStructuralAction as A,getOptimisticMergeImpactedSegmentKeys as F,shouldHideStructuralBoundaryReview as T,getResolvedScore as B,getConfidenceColors as W,getBoundaryReviewActionBadgeLabel as L,getTitleReviewActionBadgeLabel as z,isReviewStepResolutionCurrent as $,isReviewStepResolved as j,formatScore as q}from"./helper.js";import G from"./ChartBreakoutCircle.js";import{getReviewScoreBand as O}from"./reviewScore.js";const D=260;var V=(e=>(e.ActualSize="ActualSize",e.PageFit="PageFit",e.PageWidth="PageWidth",e))(V||{});const H={ActualSize:s.ActualSize,PageFit:s.PageFit,PageWidth:s.PageWidth},U=e=>({reviewId:e.id,segment:e.segment,pageNumber:e.pageNumber});function X({pdfUrl:V,pdfName:X,segments:Y,totalPages:J,styles:Z,pdfViewerProps:K,specialZoomLevel:Q,showBadges:ee=!0,sortByConfidence:te="low",filterByConfidence:ne="all",showBadgeNavigation:ie=!0,autoSelectReviewOnPageChange:re=!1,autoAdvanceAfterConfirm:ae=!0,autoAdvanceScoreBand:oe,badgePreloadPages:se=8,badgeOffsetTop:le=20,badgeOffsetRight:de=68,badgeOffsetLeft:ge=0,initialReviewId:ue,manualPrompt:ce,heightBuffer:pe,onBoundaryAction:me,onLabelAction:he,onPageAction:fe,onPageTypeRevert:ve,onRevert:we,onActiveReviewChange:be,onCurrentPageChange:ye,onActionError:_e,disableAllActions:xe=!1,disablePdfAnnotations:Se=!1,disablePdfTextLayer:Ce=!0,disableTitleCheckUntilBoundaryCheckCompleted:Ee=!1,onAdjustManually:ke,onCognitiveClick:Pe,className:Ie,style:Re,viewerStyle:Ne,railStyle:Me,redirectionData:Ae,onBadgeSelected:Fe,closePopups:Te=!1}){console.log("LOG: TOTAL PAGE IN PARENT",J);const{boundaryReviews:Be,labelReviews:We,pageReviews:Le}=n(()=>w(Y),[Y]),[ze,$e]=i(()=>new Map),[je,qe]=i(()=>new Set),Ge=n(()=>{const e=new Map;let t=1;return Y.forEach((n,i)=>{const r=b(n,i);e.has(r)||(e.set(r,t),t+=1)}),e},[Y]),Oe=n(()=>new Set(We.map(e=>b(e.segment))),[We]),De=n(()=>M(Y),[Y]);r(()=>{$e(e=>{let t=!1;const n=new Map(e);return e.forEach((e,i)=>{const r=Y.find(e=>b(e)===i);r&&!A(r,e)||(n.delete(i),t=!0)}),t?n:e})},[Y]),r(()=>{qe(e=>{let t=!1;const n=new Set(e);return e.forEach(e=>{ze.has(e)||(n.delete(e),t=!0)}),t?n:e})},[ze]);const Ve=n(()=>F(Y,ze,je),[je,ze,Y]),He=a(null),Ue=n(()=>[...Be.filter(e=>!De.has(b(e.segment))&&!Ve.has(b(e.segment))&&!T(e.review_step,e.segment,Oe.has(b(e.segment)),ze.get(b(e.segment)))).map(e=>({...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page})),...We.filter(e=>!De.has(b(e.segment))&&!Ve.has(b(e.segment))).map(e=>({...e,kind:"label",pageNumber:e.segment.start_page})),...Le.filter(e=>!De.has(b(e.segment))&&!Ve.has(b(e.segment))).map(e=>({...e,kind:"page",pageNumber:e.metadata.page_num??e.segment.start_page}))].sort((e,t)=>{const n=Ge.get(b(e.segment))??Number.MAX_SAFE_INTEGER,i=Ge.get(b(t.segment))??Number.MAX_SAFE_INTEGER;return e.pageNumber-t.pageNumber||n-i||e.reviewStepIndex-t.reviewStepIndex||e.id.localeCompare(t.id)}),[Be,We,Le,Ve,ze,De,Ge,Oe]),Xe=n(()=>Y.map(e=>({...e,title:e.label?.trim()||e.title,page_count:e.page_count??e.end_page-e.start_page+1})),[Y]),[Ye,Je]=i(1),[Ze,Ke]=i(ue??null),[Qe,et]=i(ue??null),[tt,nt]=i(!1),[it,rt]=i(null),[at,ot]=i(null),[st,lt]=i(()=>new Set),[dt,gt]=i(null),[ut,ct]=i(null),[pt,mt]=i(null),[ht,ft]=i(!1),vt=a(0),wt=a(null),bt=a(null),yt=a(new Map),_t=a(null),xt=a(null),St=a(null),[Ct,Et]=i(D),kt=Z?.aside?.width??"40%",Pt=`min(${"number"==typeof kt?`${kt}px`:kt}, 260px, 100%)`,It=o(()=>{wt.current=null,nt(!1),Ke(null),rt(null),ct(null),mt(null),ft(!1),be?.(null,null)},[be]);r(()=>{Te&&It()},[It,Te]),r(()=>{lt(e=>{if(0===e.size)return e;const t=new Set(e);let n=!1;return Ue.forEach(e=>{null!=e.review_step.review?.action&&t.has(e.id)&&(t.delete(e.id),n=!0)}),n?t:e})},[Ue]),r(()=>{const e=He.current;if(!e||!ee)return;const t=()=>{const t=e.getBoundingClientRect().width;t>0&&Et(t)};t();const n="undefined"==typeof ResizeObserver?null:new ResizeObserver(t);return n?.observe(e),()=>n?.disconnect()},[ee]);const Rt=n(()=>{const e=new Set;return Ue.forEach(t=>{null!=t.review_step.review?.action&&e.add(t.id)}),e},[Ue]),Nt=n(()=>Ue.find(e=>e.id===Ze)??null,[Ze,Ue]),Mt=n(()=>!(!Ee||"label"!==Nt?.kind)&&Be.some(e=>{if(b(e.segment)!==b(Nt.segment)||Rt.has(e.id))return!1;const t=B(e.review_step.score,e.review_step.confidence);return null==t||t<85}),[Nt,Be,Ee,Rt]),At=null==Nt?-1:Y.findIndex(e=>b(e)===b(Nt.segment)),Ft=At>0?Y[At-1]:void 0,Tt=At>=0?Y[At+1]:void 0,Bt=Ft?.label?.trim()||Ft?.title,Wt=Tt?.label?.trim()||Tt?.title,Lt=W(Nt?.review_step.score,Nt?.review_step.confidence,Nt?.segment.confidence?.awaiting_llm),zt=Nt?.review_step.reasons?.length?Nt.review_step.reasons:Nt?.segment.confidence?.reasons??[],$t=Boolean(zt.some(e=>e.text.trim()&&["evidence","gap"].includes(e.type.trim().toLowerCase()))||Nt?.review_step.reason?.trim()||Nt?.review_step.gap?.trim()),jt=null==Nt?null:"boundary"===Nt.kind?L(Nt.review_step,Nt.segment,ze.get(Nt.segment.stable_key??"")):z(Nt.review_step,Nt.segment,ze.get(Nt.segment.stable_key??"")),qt="label"===Nt?.kind?[jt,Nt.review_step.human_action_enum,Nt.review_step.review?.action,Nt.review_step.human_resolution?.action]:[],Gt="label"===Nt?.kind&&qt.some(e=>{const t=e?.trim().toUpperCase()??"";return t.includes("MERGE")||t.includes("SPLIT")}),Ot=null!=Nt&&Ue.some(e=>"boundary"===e.kind&&b(e.segment)===b(Nt.segment)),Dt=Gt&&!Ot,Vt=("boundary"===Nt?.kind||Dt)&&null!=Nt?(()=>{if("boundary"===Nt.kind)return Nt;const e=Be.find(e=>b(e.segment)===b(Nt.segment));return e?{...e,kind:"boundary",pageNumber:e.metadata.focus_page??e.segment.start_page}:{...Nt,kind:"boundary",pageNumber:Nt.segment.review_action?.focus_page??Nt.segment.start_page,metadata:{focus_page:Nt.segment.review_action?.focus_page??null,boundary_margin:Nt.segment.boundary_margin??null,user_actions:[]}}})():void 0,Ht=null==Nt?"":Nt.segment.label?.trim()||Nt.segment.title,Ut=Nt?.review_step.revert,Xt=Nt?.segment.revert,Yt=e=>e?.trim().toLowerCase(),Jt=null==Nt?void 0:[...Nt.segment.review_steps??[]].reverse().find(e=>{const t=e.type?.trim().toLowerCase();return("page_boundary"===t||"page boundary review"===t)&&"boundary"===Yt(e.revert?.type)})?.revert,Zt=Ut??Nt?.segment.revert??Jt,Kt=Zt?.decision.trim().toUpperCase();jt??(Kt?.includes("SPLIT")||Kt?.includes("MERGE"));const Qt="label"===Nt?.kind&&"SET_RANGE"===Jt?.decision?.trim().toUpperCase()&&Jt.current_segment_ids.length!==Jt.previous_state.length,en="Merged"===jt||"Split"===jt||Qt,tn=null==Nt?void 0:en?"boundary"===Yt(Jt?.type)?Jt:"boundary"===Yt(Xt?.type)?Xt:"boundary"===Yt(Ut?.type)?Ut:void 0:"label"===Nt.kind?"label"===Yt(Ut?.type)?Ut:void 0:"boundary"===Nt.kind?"boundary"===Yt(Ut?.type)?Ut:"boundary"===Yt(Jt?.type)?Jt:"boundary"===Yt(Xt?.type)?Xt:void 0:void 0,nn=en&&tn?.operation_id?Y.flatMap(e=>e.review_steps??[]).find(e=>{const t=e.type?.trim().toLowerCase();if(!("page_boundary"===t||"page boundary review"===t))return!1;return(e.human_resolution?.operation_id??e.revert?.operation_id??e.operation_id)===tn.operation_id&&Boolean(e.human_resolution?.change_summary?.trim())}):void 0,rn=tn?.summary?.trim()||null,an=en?nn?.human_resolution?.change_summary?.trim()||tn?.summary?.trim()||"":Nt?.review_step?.human_resolution?.change_summary?.trim()||Nt?.review_step?.summary?.trim()||"",on="page"===Nt?.kind?{currentSegment:{title:Ht,startPage:Nt.segment.start_page,endPage:Nt.segment.end_page},previousSegments:[]}:Nt&&tn?{currentSegment:{title:Ht,startPage:Nt.segment.start_page,endPage:Nt.segment.end_page},previousSegments:(tn.previous_state??[]).flatMap(e=>{const t=null===e.label?"Untitled document":e.label?.trim();return t?[{title:t,startPage:e.start_page,endPage:e.end_page}]:[]})}:null,sn="page"===Nt?.kind?Nt.metadata.type_choices?.map(e=>e.classification_id)??(Nt.metadata.classification_id?[Nt.metadata.classification_id]:[]):[],ln="page"===Nt?.kind?Boolean(ve&&sn.length>0):Boolean(tn?.operation_id&&tn?.type&&!1!==tn?.revertable),dn=Boolean(on&&ln),gn=o((e,t)=>{vt.current+=1,wt.current={requestId:vt.current,pageNumber:e,reviewId:t},ot({pageNumber:e,requestId:vt.current})},[]),un=o(e=>{!0!==e.segment.confidence?.awaiting_llm&&(Fe?.({reviewId:e.id,segment_id:e.segment.segment_id??null,reviewStepIndex:e.reviewStepIndex,kind:e.kind,pageNumber:e.pageNumber,metadata:e.metadata}),ct(null),mt(null),Ke(e.id),et(e.id),nt(!1),rt(null),gn(e.pageNumber,e.id),be?.(e.id,e.segment))},[be,Fe,gn]);r(()=>{if(!pt)return;const e=requestAnimationFrame(()=>ft(!0)),t=window.setTimeout(()=>{ft(!1)},3500),n=window.setTimeout(()=>{mt(null)},4e3);return()=>{cancelAnimationFrame(e),window.clearTimeout(t),window.clearTimeout(n)}},[pt]),r(()=>{if(!Ae)return;if("pageGroup"===Ae.type){const e=Ae.pages??[],t=Ae.pageIndex??0,n=e[t];if(null==n)return;return cn(),ct({pages:e,index:t,label:Ae.groupLabel??""}),vt.current+=1,void ot({pageNumber:n,requestId:vt.current})}if(ct(null),Ae.reviewId){const e=Ue.find(e=>e.id===Ae.reviewId&&(!Ae.type||e.kind===Ae.type));if(e)return void un(e)}if(Ae.classificationId){const e=Ue.find(e=>"page"===e.kind&&(e.metadata.classification_id===Ae.classificationId||e.metadata.type_choices?.some(e=>e.classification_id===Ae.classificationId))&&(!Ae.segmentId||e.segment.segment_id===Ae.segmentId)&&(!Ae.type||e.kind===Ae.type));if(e)return void un(e)}if(!Ae.pageNumber||!Ae.type)return;const e=Number(Ae.pageNumber);if(!Number.isInteger(e)||e<1)return;const t=Ae.pageType?.trim().toLowerCase(),n=Ue.find(n=>{const i="page"===n.kind?n.pageNumber:n.segment.start_page,r="page"!==n.kind||!t||n.metadata.page_type===t||n.metadata.type_choices?.some(e=>e.page_type===t);return(!Ae.segmentId||n.segment.segment_id===Ae.segmentId)&&i===e&&n.kind===Ae.type&&r});n?un(n):"page"===Ae.type&&(cn(),vt.current+=1,ot({pageNumber:e,requestId:vt.current}))},[Ae,un,Ue]);const cn=o(()=>{wt.current=null,nt(!1),Ke(null),rt(null),be?.(null,null)},[be]),pn=o(e=>{ft(!1),mt(null);const t=Ue.find(t=>!Rt.has(t.id)&&"boundary"===t.kind&&t.segment.start_page===e.startPage&&t.segment.end_page===e.endPage)??Ue.find(t=>!Rt.has(t.id)&&t.segment.start_page<=e.startPage&&t.segment.end_page>=e.startPage);t?un(t):(cn(),vt.current+=1,ot({pageNumber:e.startPage,requestId:vt.current}))},[cn,Rt,Ue,un]),mn=o((e,t)=>{const n=O(e.review_step.score),i=null==oe||n===oe,r=st.has(e.id)&&$(e.review_step,e.segment);return e.id!==t&&i&&!0!==e.segment.confidence?.awaiting_llm&&!j(e.review_step,e.segment)&&!r},[oe,st]),hn=o(e=>{if(!ae)return void cn();const t=Ue.findIndex(t=>t.id===e),n=Ue.find((n,i)=>i>t&&mn(n,e))??Ue.find(t=>mn(t,e));n?requestAnimationFrame(()=>un(n)):cn()},[ae,cn,mn,Ue,un]),fn=o(async(e,t)=>{if(xe||!fe||0===t.length)return;const n=e.metadata.type_choices??[];if(2!==n.length)return;const i=new Set(t),r=U(e),a=[...n].sort((e,t)=>{const n=i.has(e.page_type);return n===i.has(t.page_type)?0:n?-1:1});gt(e.id);try{for(const t of a){const n=i.has(t.page_type)?f.YES:f.NO;await fe(n,{action:n,pageType:t.page_type,metadata:{user_actions:[f.YES,f.NO],page_num:e.metadata.page_num,page_type:t.page_type,classification_id:t.classification_id}},r)}lt(t=>{const n=new Set(t);return n.add(e.id),n}),hn(e.id)}catch(e){_e?.(e,r)}finally{gt(null)}},[xe,_e,fe,hn]),vn=o(async(e,t,n)=>{if(xe)return;if("boundary"===e.kind&&!me)return;if("label"===e.kind&&!he)return;if("page"===e.kind&&!fe)return;const i=U(e),r=t,a=n,o=r===g.SET_RANGE?(()=>{const t=a.startPage,n=a.endPage;if(null==t||null==n)return null;const i=t<e.segment.start_page||n>e.segment.end_page,r=t>e.segment.start_page||n<e.segment.end_page;return i&&!r?t<e.segment.start_page?g.MERGE_PREV:g.MERGE_NEXT:r?g.SPLIT_HERE:null})():r,s="boundary"===e.kind&&null!=me&&ae&&(o===g.SPLIT_HERE||o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS),l=s?Y.findIndex(t=>b(t)===b(e.segment)):-1;s&&l>=0&&o&&(bt.current={action:o,originalSegmentIndex:l,segmentSignature:JSON.stringify(Y.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null}))),ready:!1}),gt(e.id);try{"boundary"===e.kind?await(me?.(t,n,i)):"label"===e.kind?await(he?.(t,n,i)):"page"===e.kind&&await(fe?.(t,n,i)),lt(t=>{const n=new Set(t);return n.add(e.id),n});const a="boundary"===e.kind&&(o===g.MERGE_NEXT||o===g.MERGE_PREV||o===g.MERGE_PREVIOUS);if(("boundary"===e.kind&&o===g.SPLIT_HERE||a)&&o){const t=b(e.segment);qe(e=>{const n=new Set(e);return r===g.SET_RANGE?n.add(t):n.delete(t),n}),$e(e=>{const n=new Map(e);return n.set(t,o),n})}if(bt.current){if(bt.current.ready=!0,a){const t=Ue.find(t=>"label"===t.kind&&b(t.segment)===b(e.segment));t&&requestAnimationFrame(()=>un(t))}}else hn(e.id)}catch(e){s&&(bt.current=null),_e?.(e,i)}finally{gt(null)}},[ae,xe,_e,me,he,fe,ve,Ue,Y,un,hn]);r(()=>{const e=bt.current;if(!e?.ready)return;if(JSON.stringify(Y.map((e,t)=>({key:b(e,t),startPage:e.start_page,endPage:e.end_page,version:e.version??null})))===e.segmentSignature)return;const t=e.action===g.SPLIT_HERE?e.originalSegmentIndex+1:e.action===g.MERGE_PREV||e.action===g.MERGE_PREVIOUS?Math.max(0,e.originalSegmentIndex-1):e.originalSegmentIndex,n=new Map(Y.map((e,t)=>[b(e,t),t])),i=Ue.find(e=>{const i=n.get(b(e.segment));return null!=i&&i>=t&&mn(e)});if(!i)return bt.current=null,void cn();requestAnimationFrame(()=>{bt.current=null,un(i)})},[cn,mn,Ue,Y,un]),r(()=>{bt.current||Ze&&!Ue.some(e=>e.id===Ze)&&cn()},[Ze,cn,Ue]),r(()=>{if(!re)return;if(bt.current)return;const e=Ue.find(e=>e.pageNumber===Ye);e&&e.id!==Ze&&un(e)},[Ze,re,Ye,un,Ue]),r(()=>{bt.current||Ze&&!Ue.some(e=>e.id===Ze&&!0!==e.segment.confidence?.awaiting_llm)&&cn()},[Ze,cn,Ue]);const wn=n(()=>{const e=Ue.filter(e=>!0!==e.segment.confidence?.awaiting_llm);if("all"===ne)return e;const t=["low","medium","high"].filter(e=>e!==te),n=[te,...t],i=new Map(n.map((e,t)=>[e,t]));return e.map((e,t)=>({item:e,index:t})).sort((e,t)=>{const r=e.item.review_step.confidence?.trim().toLowerCase(),a=t.item.review_step.confidence?.trim().toLowerCase();return(null==r?n.length:i.get(r)??n.length)-(null==a?n.length:i.get(a)??n.length)||e.index-t.index}).map(({item:e})=>e)},[ne,te,Ue]),bn=wn.findIndex(e=>e.id===Qe),[yn,_n]=i(null),[xn,Sn]=i(null),Cn=a(!1),En=o(e=>{const t=wn[e];t&&un(t)},[wn,un]);o(e=>{if(!ut||e<0||e>=ut.pages.length)return;const t=ut.pages[e];null!=t&&(cn(),ct(t=>null==t?t:{...t,index:e}),vt.current+=1,ot({pageNumber:t,requestId:vt.current}))},[ut,cn]),r(()=>{Qe&&!wn.some(e=>e.id===Qe)&&et(null)},[wn,Qe]),r(()=>{Cn.current=!1,Sn(null),_n(bn>=0?String(bn+1):null)},[bn,wn.length]),r(()=>{if(!Cn.current||null==yn)return;const e=window.setTimeout(()=>{const e=Number(yn.trim()),t=e-1;Number.isInteger(e)&&t>=0&&t<wn.length&&(Cn.current=!1,En(t))},300);return()=>window.clearTimeout(e)},[En,yn,wn.length]);const kn=n(()=>{const e=new Map;Ue.forEach(t=>{const n=e.get(b(t.segment))??[];n.push(t),e.set(b(t.segment),n)});const t=new Map;return e.forEach((e,n)=>{const i=Ge.get(n)??1;e.sort((e,t)=>e.reviewStepIndex-t.reviewStepIndex).forEach((e,n)=>{t.set(e.id,`${i}${(e=>{let t=e+1,n="";for(;t>0;)t-=1,n=String.fromCharCode(65+t%26)+n,t=Math.floor(t/26);return n})(n)}`)})}),t},[Ue,Ge]),Pn=n(()=>{const e=new Map;Ue.forEach(t=>{const n=e.get(t.pageNumber)??[];n.push(t),e.set(t.pageNumber,n)});const t=new Map;return e.forEach(e=>{e.forEach((e,n)=>t.set(e.id,n))}),t},[Ue]),In=o(e=>({startPage:Math.max(0,e.startPage-se),endPage:Math.min(e.numPages-1,e.endPage+se)}),[se]),Rn=o(()=>{const e=xt.current,t=St.current;if(!e||!t)return;const n=e.getBoundingClientRect(),i=t.querySelector(".rpv-core__inner-pages"),r=i?.getBoundingClientRect()??t.getBoundingClientRect();Ue.forEach(e=>{const i=yt.current.get(e.id);if(!i)return;const a=t.querySelector(`[data-testid="core__page-layer-${e.pageNumber-1}"]`);if(!a)return void(i.style.visibility="hidden");const o=a.getBoundingClientRect(),s=Pn.get(e.id)??0,l=o.top+le+40*s,d=l+(i.offsetHeight||32),g=l>=r.top&&d<=r.bottom;i.style.top=l-n.top+"px",i.style.visibility=g?"visible":"hidden"});const a=_t.current;if(a){const e=ut?.pages[ut.index],i=null==e?null:t.querySelector(`[data-testid="core__page-layer-${e-1}"]`);if(ut&&i){const e=i.getBoundingClientRect().top+le,t=e+(a.offsetHeight||25),o=e>=r.top&&t<=r.bottom;a.style.top=e-n.top+"px",a.style.visibility=o?"visible":"hidden"}else a.style.visibility="hidden"}if(Ze&&null==wt.current){const e=yt.current.get(Ze);e&&"hidden"!==e.style.visibility&&rt(t=>t===e?t:e)}},[ut,Ze,le,Pn,Ue]),Nn=o(e=>{const t=wt.current;t&&t.requestId===e.requestId&&t.pageNumber===e.pageNumber&&(wt.current=null,Rn(),requestAnimationFrame(()=>{if(null!=wt.current)return;const e=yt.current.get(t.reviewId);e&&"hidden"!==e.style.visibility&&rt(e)}))},[Rn]);return r(()=>{const e=St.current;if(!e||!ee)return;let t=null;const n=()=>{null==t&&(t=requestAnimationFrame(()=>{t=null,Rn()}))};e.addEventListener("scroll",n,!0),window.addEventListener("resize",n);const i=new MutationObserver(n);i.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["style"]});const r="undefined"==typeof ResizeObserver?null:new ResizeObserver(n);return r?.observe(e),n(),()=>{null!=t&&cancelAnimationFrame(t),e.removeEventListener("scroll",n,!0),window.removeEventListener("resize",n),i.disconnect(),r?.disconnect()}},[ee,Rn]),e("div",{ref:xt,className:Ie,style:{...Re,display:"block",position:"relative",width:"100%",height:"100%",minWidth:0,overflowX:"auto",overflowY:"hidden"},children:[e("div",{className:"segment-review-wrapper__container",style:{display:"flex",alignItems:"stretch",gap:0,width:"100%",minWidth:700,height:"100%"},children:[t("div",{ref:St,style:{...Ne,flex:"1 1 auto",width:ee?"auto":"100%",minWidth:0,height:"100%",boxSizing:"border-box"},children:t(l,{highlightText:[],highlightPages:{},highlightCordinatePages:[],useCoordinates:!1,showRotateButton:!0,...K,defaultScale:void 0===Q?K?.defaultScale??s.PageFit:H[Q],disablePdfAnnotations:Se,disablePdfTextLayer:Ce,pdfUrl:V,pdfName:X,segments:Xe,navigationRequest:at,onNavigationSettled:Nn,setRenderRange:In,onCurrentPageChange:e=>{Je(e),null==wt.current&&Nt&&Nt.pageNumber!==e&&cn(),ye?.(e)}})}),ee&&e("aside",{"aria-label":"Page review badges",ref:He,style:{...Me,position:"relative",width:Pt,maxWidth:D,flex:`0 1 ${Pt}`,minHeight:0,overflow:"hidden",boxSizing:"border-box"},children:[ut&&t("span",{ref:_t,style:{position:"absolute",top:0,left:10,visibility:"hidden",zIndex:2,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,minHeight:25,padding:"2px 8px",border:"1px solid #E2E8F0",borderRadius:16,backgroundColor:"#F8FAFC",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)",font:"inherit"},children:e(S,{fontFamily:"Inter",sx:{fontSize:11,fontWeight:500,color:"#475569",whiteSpace:"nowrap"},children:[ut.label||"Pages"," Pg: ",ut.index+1]})}),ie&&wn.length>0&&!ut&&e("nav",{"aria-label":"Review badge navigation",style:{position:"absolute",top:8,right:de||"auto",left:ge||"auto",zIndex:2,display:"flex",alignItems:"center",gap:7,width:128,minHeight:40,padding:"4px 6px",border:"1px solid #CBD5E1",borderRadius:6,backgroundColor:"#FFFFFF",boxSizing:"border-box",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.06)",font:"inherit"},children:[t(C,{title:"out-of-range"===xn?"Please enter valid number present in the range":"Please enter valid numbers",open:null!=xn,placement:"top",arrow:!0,children:t("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:yn??"-",min:0,max:wn.length,"aria-label":"Review badge number","aria-invalid":null!=xn,onFocus:()=>{null==yn&&_n("")},onBlur:()=>{Sn(null);const e=Number(yn);(null==yn||""===yn||!Number.isInteger(e)||e<1||e>wn.length)&&(Cn.current=!1,_n(bn>=0?String(bn+1):null))},onChange:e=>{const t=e.target.value;if(!/^\d*$/.test(t))return void Sn("invalid-number");const n=Number(t),i=""!==t&&(n<1||n>wn.length);Sn(i?"out-of-range":null),Cn.current=!0,_n(t)},style:{width:30,height:28,padding:0,border:"1px solid "+(xn?"#DC2626":"#A5B4FC"),borderRadius:3,color:"#4F46E5",backgroundColor:"#FFFFFF",textAlign:"center",font:"inherit",fontSize:15,outline:"none"}})}),e("span",{"aria-label":`${wn.length} reviews`,style:{flex:1,color:"#4F46E5",fontSize:14,whiteSpace:"nowrap",textAlign:"center"},children:["of ",wn.length]}),["previous","next"].map(e=>{const n="previous"===e,i=bn+(n?-1:1),r=i<0||i>=wn.length;return t("button",{type:"button","aria-label":(n?"Previous":"Next")+" review badge",disabled:r,onClick:()=>En(i),style:{display:"grid",placeItems:"center",width:17,height:28,padding:0,border:0,background:"transparent",color:r?"#C7D2FE":"#4F46E5",cursor:r?"default":"pointer"},children:t("svg",{width:"12",height:"8",viewBox:"0 0 12 8",fill:"none",children:t("path",{d:n?"M1 7L6 2L11 7":"M1 1L6 6L11 1",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})},e)})]}),!ut&&Ue.map(n=>{const i=Ze===n.id,r=kn.get(n.id)??"1A",a=n.review_step.score,o=n.review_step.confidence,s=q(a,o),l="boundary"===n.kind?L(n.review_step,n.segment,ze.get(b(n.segment))):"label"===n.kind?z(n.review_step,n.segment,ze.get(b(n.segment))):null,d=l??("N/A"===s?s:`${s}%`),g=!0===n.segment.confidence?.awaiting_llm,u=W(a,o,g),c=Rt.has(n.id);return t(C,{title:g?"data is being processed":"",arrow:!0,children:t("span",{ref:e=>{e?yt.current.set(n.id,e):yt.current.delete(n.id)},style:{position:"absolute",top:0,left:10,visibility:"hidden",display:"inline-flex",cursor:g?"not-allowed":"pointer"},children:t("button",{disabled:g,type:"button","aria-pressed":i,"aria-label":g?`${n.review_step.type} · Page ${n.pageNumber} · Data is being processed`:`${n.review_step.type} · Page ${n.pageNumber}`,onClick:()=>un(n),style:{cursor:"inherit",display:"flex",alignItems:"center",justifyContent:"space-around",gap:4,width:l?c&&!g?115:90:c&&!g?105:80,minHeight:25,padding:"2px 5px",border:`1px solid ${c&&!g?"#E2E8F0":u.border}`,borderRadius:16,backgroundColor:c&&!g?"#F8FAFC":u.background,color:c&&!g?"#475569":u.text,font:"inherit",alignContent:"center",boxShadow:"0 1px 2px rgba(16, 24, 40, 0.08)"},children:e(S,c&&!g?{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:r}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]}),e("span",{style:{fontSize:11,fontWeight:500,display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:"#CBD5E1",strokeWidth:"0.8"})}),t("span",{style:{display:"flex",marginLeft:"7px",alignItems:"center"},children:t(y,{height:14,width:14,strokeWidth:2,color:"#16A34A"})})]})]}:{fontFamily:"Inter",sx:{display:"flex",gap:1,alignItems:"center",flexDirection:"row"},children:[t("span",{style:{fontSize:11,fontWeight:500},children:r}),e("span",{style:{display:"flex",alignItems:"center"},children:[t("svg",{width:"2",height:"14",viewBox:"0 0 1 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t("path",{d:"M0.399902 0V14",stroke:u.divider,strokeWidth:"0.8"})}),t("span",{style:{fontSize:11,fontWeight:500,marginLeft:"7px",display:"flex",alignItems:"center"},children:d})]})]})})})},n.id)})]})]}),Nt&&it&&e(c,{anchorElement:it,placement:"bottom-start",offset:{top:8},width:Math.min(Ct,D),maxWidth:D,heightBuffer:pe??25,children:[tt&&t(p,{width:"100%",maxWidth:"100%",score:Nt.review_step.score,reasons:zt,reason:Nt.review_step.reason,gap:Nt.review_step.gap,onBack:()=>nt(!1),onClose:cn}),t("div",{style:{display:tt?"none":"block"},children:Rt.has(Nt.id)?t(P,{width:"100%",maxWidth:"100%",headerName:"page"===Nt.kind?"Page format approved":"Split"===jt?"Split approved":"Merged"===jt?"Merge approved":"User approved",headerIcon:"page"===Nt.kind?t(_,{size:18,strokeWidth:2}):"Merged"===jt?t(x,{size:18,strokeWidth:2}):"Split"===jt?t(G,{width:18,height:18}):t(y,{size:18,strokeWidth:2}),title:Ht,pageNo:`Page ${Nt.segment.start_page}-${Nt.segment.end_page}`,summary:dn&&on?t(R,{icon:t(y,{size:14,strokeWidth:2}),title:Ht,pageRange:`Page ${Nt.segment.start_page}-${Nt.segment.end_page}`,description:an??null,revertData:on,confirmDisabled:"page"===Nt.kind?!ln:null==we||!ln,showDocumentHeader:!1,onRevert:async()=>{if("page"===Nt.kind){if(!ve||0===sn.length){const e=new Error("SegmentReviewPdfWrapper requires onPageTypeRevert and at least one classification id to revert a page-type decision.");throw _e?.(e,U(Nt)),e}let e;for(const t of sn)e=await ve({classification_id:t,human_verdict:"No"},U(Nt));return e}if(!we)throw new Error("SegmentReviewPdfWrapper requires onRevert to handle a revert confirmation.");if(!tn)throw new Error("There is no valid revert operation for this review.");const e=en?"boundary":"label"===Nt.kind?"label":"boundary"===Nt.kind?"boundary":null,t=Yt(tn.type);if(e&&t!==e)throw new Error(`Cannot use ${t??"unknown"} revert metadata for this review. Expected ${e}.`);return we(tn,U(Nt))},onRevertError:e=>{_e?.(e,U(Nt))},onRevertComplete:e=>{lt(()=>new Set),"page"!==Nt.kind&&(qe(()=>new Set),$e(()=>new Map)),Nt.id;const t=on.previousSegments[0]??on.currentSegment,n=it?.getBoundingClientRect(),i=St.current?.getBoundingClientRect(),r=Math.min(D,Math.max(220,Ct)),a=n?.left??(i?.right??window.innerWidth-r-8)+8,o=Math.max(8,Math.min(a,window.innerWidth-r-8)),s=null==n?.bottom?Math.max(8,i?.top??8):n.bottom+8;lt(()=>new Set),"page"!==Nt.kind&&(bt.current=null),ft(!1),mt({title:"Split"===jt?"Split reverted":"Merged"===jt?"Merge reverted":"Approval reverted",description:e?.message?.trim()||null,segment:t,position:{top:s,left:o,width:r}}),cn()}},Nt.id):void 0,additionalActions:Vt?t(I,{metadata:Vt.metadata,reviewAction:Nt.segment.review_action??void 0,startPage:Nt.segment.start_page,endPage:Nt.segment.end_page,title:Ht,previousSegmentTitle:Bt,nextSegmentTitle:Wt,disabled:xe||!me||dt===Nt.id,onConfirm:(e,t)=>{vn(Vt,e,t)}}):void 0,cognitiveScore:Nt.review_step.score,styles:{root:{borderColor:"#16A34A"},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:"#16A34A"}}},onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn}):"boundary"===Nt.kind?t(d,{width:"100%",maxWidth:"100%",totalPages:J,title:Nt.segment.label||Nt.segment.title,pageNo:`Page ${Nt.pageNumber}`,content:Nt.review_step.question??null,revertSummary:rn,cognitiveScore:Nt.review_step.score,metadata:Nt.metadata,reviewAction:Nt.segment.review_action??void 0,previousSegmentTitle:Bt,nextSegmentTitle:Wt,manualPrompt:ce??"Set a custom boundary",defaultStartPage:Nt.segment.start_page,defaultEndPage:Nt.segment.end_page,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!me||dt===Nt.id,onConfirm:(e,t,n)=>{n&&u(t.id)&&vn(Nt,t.id,n)},onAdjustManually:()=>ke?.(U(Nt)),onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id):"label"===Nt.kind?t(m,{width:"100%",maxWidth:"100%",title:Nt.metadata.current_label||Nt.segment.label||Nt.segment.title,pageNo:`Pages ${Nt.segment.start_page}-${Nt.segment.end_page}`,content:Nt.review_step.question??null,revertSummary:rn,cognitiveScore:Nt.review_step.score,metadata:Nt.metadata,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!he||dt===Nt.id,confirmationBlocked:Mt,confirmationWarning:Mt?"Please confirm the boundary before confirming the title.":void 0,onActionConfirm:(e,t)=>{vn(Nt,e,t)},onAdjustManually:()=>ke?.(U(Nt)),onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id):2===Nt.metadata.type_choices?.length?t(v,{width:"100%",maxWidth:"100%",title:Nt.segment.label||Nt.segment.title,pageNo:`Page ${Nt.pageNumber}`,content:Nt.review_step.reason,choices:Nt.metadata.type_choices,cognitiveScore:Nt.review_step.score,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!fe||dt===Nt.id,onConfirm:e=>{fn(Nt,e)},onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id):t(h,{width:"100%",maxWidth:"100%",title:Nt.segment.label||Nt.segment.title,pageNo:`Page ${Nt.pageNumber}`,content:Nt.review_step.reason,cognitiveScore:Nt.review_step.score,pageType:Nt.metadata.page_type,metadata:Nt.metadata,styles:{root:{borderColor:Lt.cardBorder},header:{"& > .MuiSvgIcon-root, & .MuiTypography-root":{color:Lt.text}}},confirmDisabled:xe||!fe||dt===Nt.id,onActionConfirm:(e,t)=>{vn(Nt,e,t)},onCognitiveClick:$t?()=>{nt(!0),Pe?.(U(Nt))}:void 0,onClose:cn},Nt.id)})]}),pt&&t(E,{children:t(k,{"aria-live":"polite",sx:{position:"fixed",top:pt.position.top,left:pt.position.left,zIndex:1600,width:pt.position.width,maxWidth:"calc(100vw - 16px)",opacity:ht?1:0,transform:ht?"translateY(0)":"translateY(-6px)",transition:"opacity 500ms ease, transform 500ms ease",filter:"drop-shadow(0 12px 24px rgba(15, 23, 42, 0.18))",pointerEvents:ht?"auto":"none"},children:t(N,{title:pt.title,description:pt.description,onReview:()=>pn(pt.segment)})})})]})}export{V as SegmentPdfSpecialZoomLevel,X as default};
2
2
  //# sourceMappingURL=SegmentReviewPdfWrapper.js.map