Skip to content

feat: migration to latest ui components library with file viewer#2281

Draft
kemuru wants to merge 8 commits into
devfrom
feat/file-viewer-from-ui-components-library
Draft

feat: migration to latest ui components library with file viewer#2281
kemuru wants to merge 8 commits into
devfrom
feat/file-viewer-from-ui-components-library

Conversation

@kemuru
Copy link
Copy Markdown
Contributor

@kemuru kemuru commented May 15, 2026

needs also:

  1. ui components library package redeployment first to 3.8.0
  2. do yarn build to generate the new yarn.lock again and commit it to this PR.

Summary by CodeRabbit

  • New Features

    • Switched to the integrated file viewer from the UI library for improved document viewing.
  • Bug Fixes

    • Standardized button disabled/loading and press interactions for consistent behavior.
    • Fixed dropdown/cascader selection and search input handling.
  • Improvements

    • Upgraded UI inputs and components for consistent value callbacks, typing, and text-direction support.
    • Centralized theme and base typography for more predictable styling.
  • Chores

    • Updated web dependency versions.

Review Change Stack


PR-Codex overview

This PR primarily focuses on updating various components to replace onClick event handlers with onPress for better consistency across the codebase. Additionally, it involves styling adjustments, component imports, and the transition to using TextField instead of Field.

Detailed summary

  • Replaced onClick with onPress in multiple components.
  • Updated Field component to TextField in several instances.
  • Adjusted CSS styles for various components, including margins and padding.
  • Enhanced accessibility by modifying aria attributes.
  • Refactored event handlers to accept direct value inputs.
  • Removed deprecated components and imports.
  • Updated theme styles for consistency.
  • Improved component structure for better readability and maintainability.

The following files were skipped due to too many changes: web/src/pages/Cases/CaseDetails/Tabs.tsx, web/src/components/Radio.tsx, web/src/components/DisputeFeatures/Features/GatedErc20.tsx, web/src/pages/Profile/Votes/StatsAndFilters/Filters.tsx, web/src/components/DisputeFeatures/Features/GatedErc1155.tsx, web/src/components/CasesDisplay/Filters.tsx, web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx, web/src/components/Verdict/DisputeTimeline.tsx

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

@netlify
Copy link
Copy Markdown

netlify Bot commented May 15, 2026

Deploy Preview for kleros-v2-testnet-devtools failed. Why did it fail? →

Name Link
🔨 Latest commit c784f5f
🔍 Latest deploy log https://app.netlify.com/projects/kleros-v2-testnet-devtools/deploys/6a0f6069e256f1000866bda7

@netlify
Copy link
Copy Markdown

netlify Bot commented May 15, 2026

Deploy Preview for kleros-v2-testnet failed. Why did it fail? →

Name Link
🔨 Latest commit c784f5f
🔍 Latest deploy log https://app.netlify.com/projects/kleros-v2-testnet/deploys/6a0f606979d2340008667c83

@netlify
Copy link
Copy Markdown

netlify Bot commented May 15, 2026

Deploy Preview for kleros-v2-neo failed. Why did it fail? →

Name Link
🔨 Latest commit c784f5f
🔍 Latest deploy log https://app.netlify.com/projects/kleros-v2-neo/deploys/6a0f606940197c00087aef7a

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 15, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Upgrade UI library to v3, add global library CSS, migrate Field→TextField and event-based onChange→value, remap Button props (disabled→isDisabled, onClick→onPress), reshape Dropdown/Cascader items, migrate timeline/tabs typings, and apply assorted styling and small API fixes.

Changes

Kleros UI v3 migration

Layer / File(s) Summary
Dependencies, global CSS & base elements
web/package.json, web/src/app.tsx, web/src/styles/base-elements.css, web/src/styles/global-style.ts, web/src/styles/themes.ts, web/src/styles/styled.d.ts
Bumped @kleros/ui-components-library to v3.8.0, removed @cyntler/react-doc-viewer, added global UI CSS imports, moved base typography to base-elements.css, defined local themes and augmented styled-components DefaultTheme.
Utility types & Radio
web/src/utils/uiComponentsTypes.ts, web/src/components/Radio.tsx
Add derived UI component item types (SelectItem, CascaderItem, CustomTimelineItem) and introduce a local single-radio Radio component to preserve prior single-radio behavior.
Field→TextField & value callbacks
many web/src/components/**, web/src/pages/**, web/src/layout/**
Replace Field with TextField across inputs, update styled wrappers, change onChange handlers from event-based signatures to direct value callbacks, and use inputProps={{ dir: "auto" }}.
Button API migration
many web/src/components/**, web/src/pages/**, web/src/layout/**
Replace disabledisDisabled and onClickonPress across buttons while keeping business logic unchanged.
Dropdown / Cascader shapes & callbacks
web/src/components/CasesDisplay/*, web/src/pages/Home/**, web/src/pages/Courts/**, web/src/pages/Profile/**, web/src/pages/Jurors/**
Dropdown items now use { id, itemValue, text, ... }; callbacks accept typed SelectItem/CascaderItem; selection props moved to defaultSelectedKey/selectedKey.
Timeline & stake steps typing
web/src/components/Verdict/DisputeTimeline.tsx, web/src/pages/Courts/**/stakeSteps.tsx, web/src/pages/Courts/**/StakeWithdrawPopup/*
Timeline items typed as CustomTimelineItem; removed rightSided from constructed items and updated local tuple typings and styled wrappers.
Tabs API updates
web/src/pages/Cases/**/Tabs.tsx, web/src/pages/Profile/index.tsx, web/src/layout/Header/**/Settings/index.tsx, web/src/pages/Cases/CaseDetails/Voting/VotingHistory.tsx
Tabs migrated from currentValue to selectedKey/defaultSelectedKey; items restructured to include id, value, and content; callbacks now use two-parameter signature (_key, value).
Misc styles & small API fixes
assorted files
Minor prop renames (CircularProgress progressvalue, LinearProgress progressvalue, NumberInputField readOnlyisReadOnly), tooltip styling, internal-link layout tweaks, Loader theme key update, Tag onPress forwarding, FileViewer lazy import switched to library, and several spacing/h2 margin adjustments.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested labels

Type: Maintenance :construction:

Suggested reviewers

  • alcercu

Poem

🐰 Field hopped out, TextField hopped in,
Buttons learned to listen to "press" with a grin.
Dropdowns carry itemValue, keys set free,
Timelines trimmed, styles moved — a migration jubilee! 🥕

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/file-viewer-from-ui-components-library

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
web/src/pages/Resolver/Parameters/Jurors.tsx (1)

81-82: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Avoid rendering "undefined" in the jurors input.

Line 88 stringifies noOfVotes unconditionally. When disputeData.numberOfJurors is undefined, the field shows "undefined" instead of empty input.

💡 Proposed fix
-  const noOfVotes = Number.isNaN(disputeData.numberOfJurors) ? "" : disputeData.numberOfJurors;
+  const noOfVotes =
+    isUndefined(disputeData.numberOfJurors) || Number.isNaN(disputeData.numberOfJurors)
+      ? ""
+      : String(disputeData.numberOfJurors);
...
-        value={String(noOfVotes)}
+        value={noOfVotes}

Also applies to: 88-88

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@web/src/pages/Resolver/Parameters/Jurors.tsx` around lines 81 - 82, The
jurors input shows "undefined" because noOfVotes is set using
Number.isNaN(disputeData.numberOfJurors) which returns false for undefined;
change the assignment so non-numeric or null/undefined values map to an empty
string. For example, update the noOfVotes calculation (the noOfVotes variable
that reads disputeData.numberOfJurors) to: if typeof disputeData.numberOfJurors
=== 'number' && !Number.isNaN(disputeData.numberOfJurors) use the numeric value,
otherwise use ""; also ensure when rendering you convert only numeric noOfVotes
to a string (e.g., noOfVotes === "" ? "" : String(noOfVotes)) so the input never
displays "undefined".
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/src/components/LabeledInput.tsx`:
- Around line 28-33: The label is using id={label} and the input id is derived
from label text which is unstable; update the LabeledInput component to generate
a stable unique id (use React.useId()) and use that id for the input
(StyledField) and htmlFor on the label (StyledLabel); if props includes an
explicit id respect and use props.id fallback, otherwise generate idFromHook and
use that, and only render StyledLabel with htmlFor when a label exists.

In `@web/src/components/Radio.tsx`:
- Around line 23-33: The radio input's explicit cursor rule overrides the
label's disabled state; update the Radio component styles to set the input's
cursor to not-allowed when disabled (target the input[type="radio"]:disabled
selector inside the Radio component or inside the &:has(input:disabled) block)
so both the label and the actual input show the not-allowed cursor when
disabled, preserving the existing accent-color/size rules and only changing the
cursor for disabled inputs.

In `@web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx`:
- Around line 56-59: handleOptionWrite is mutating disputeData.answers in place
which can break memoization; instead create a new answers array and a new answer
object for the specific key and call setDisputeData with a new disputeData
object. Concretely, in handleOptionWrite copy disputeData.answers (e.g., const
newAnswers = [...disputeData.answers]), replace newAnswers[key] with a
shallow-copied updated object, then call setDisputeData({ ...disputeData,
answers: newAnswers }) to avoid mutating answers by reference.

---

Outside diff comments:
In `@web/src/pages/Resolver/Parameters/Jurors.tsx`:
- Around line 81-82: The jurors input shows "undefined" because noOfVotes is set
using Number.isNaN(disputeData.numberOfJurors) which returns false for
undefined; change the assignment so non-numeric or null/undefined values map to
an empty string. For example, update the noOfVotes calculation (the noOfVotes
variable that reads disputeData.numberOfJurors) to: if typeof
disputeData.numberOfJurors === 'number' &&
!Number.isNaN(disputeData.numberOfJurors) use the numeric value, otherwise use
""; also ensure when rendering you convert only numeric noOfVotes to a string
(e.g., noOfVotes === "" ? "" : String(noOfVotes)) so the input never displays
"undefined".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d591b8fd-b856-4877-9e8a-6a1a2c432cbe

📥 Commits

Reviewing files that changed from the base of the PR and between 185686b and 8c7d78a.

📒 Files selected for processing (71)
  • web/package.json
  • web/src/app.tsx
  • web/src/components/CasesDisplay/Filters.tsx
  • web/src/components/CasesDisplay/Search.tsx
  • web/src/components/ClaimPnkButton.tsx
  • web/src/components/ConnectWallet/index.tsx
  • web/src/components/DisputeFeatures/Features/GatedErc1155.tsx
  • web/src/components/DisputeFeatures/Features/GatedErc20.tsx
  • web/src/components/DisputeFeatures/Features/index.tsx
  • web/src/components/EnsureAuth.tsx
  • web/src/components/FileViewer/Viewers/MarkdownViewer.tsx
  • web/src/components/FileViewer/index.tsx
  • web/src/components/LabeledInput.tsx
  • web/src/components/LightButton.tsx
  • web/src/components/Loader.tsx
  • web/src/components/NumberInputField.tsx
  • web/src/components/Radio.tsx
  • web/src/components/Verdict/DisputeTimeline.tsx
  • web/src/hooks/queries/useCourtTree.ts
  • web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/FormContact.tsx
  • web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/index.tsx
  • web/src/layout/Header/navbar/Menu/Settings/index.tsx
  • web/src/pages/AttachmentDisplay/index.tsx
  • web/src/pages/Cases/CaseDetails/Appeal/Classic/Fund.tsx
  • web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx
  • web/src/pages/Cases/CaseDetails/Appeal/Shutter/Fund.tsx
  • web/src/pages/Cases/CaseDetails/Evidence/EvidenceSearch.tsx
  • web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/DistributeRewards.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/DrawButton.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/ExecuteRuling.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/PassPeriodButton.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/SetJurorsButton.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/WithdrawAppealFees.tsx
  • web/src/pages/Cases/CaseDetails/Tabs.tsx
  • web/src/pages/Cases/CaseDetails/Voting/Classic/Reveal.tsx
  • web/src/pages/Cases/CaseDetails/Voting/OptionsContainer.tsx
  • web/src/pages/Cases/CaseDetails/Voting/Shutter/Reveal.tsx
  • web/src/pages/Cases/CaseDetails/Voting/VotingHistory.tsx
  • web/src/pages/Courts/CourtDetails/Description.tsx
  • web/src/pages/Courts/CourtDetails/JurorsStakedByCourt/Search.tsx
  • web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawButton.tsx
  • web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx
  • web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx
  • web/src/pages/Courts/CourtDetails/StakingHistoryByCourt/Search.tsx
  • web/src/pages/Courts/CourtDetails/TopSearch.tsx
  • web/src/pages/Courts/StakeMaintenanceButton/ExecuteDelayedStakeButton.tsx
  • web/src/pages/Courts/StakeMaintenanceButton/PassPhaseButton.tsx
  • web/src/pages/Home/CourtOverview/Chart.tsx
  • web/src/pages/Home/CourtOverview/ExtraStats.tsx
  • web/src/pages/Jurors/Search.tsx
  • web/src/pages/Jurors/StatsAndFilters.tsx
  • web/src/pages/Profile/JurorCard/BottomContent/Coherence.tsx
  • web/src/pages/Profile/Votes/StatsAndFilters/Filters.tsx
  • web/src/pages/Profile/index.tsx
  • web/src/pages/Resolver/Briefing/Title.tsx
  • web/src/pages/Resolver/Landing/CreationCard.tsx
  • web/src/pages/Resolver/Landing/index.tsx
  • web/src/pages/Resolver/NavigationButtons/NextButton.tsx
  • web/src/pages/Resolver/NavigationButtons/SubmitBatchDisputesButton.tsx
  • web/src/pages/Resolver/NavigationButtons/SubmitDisputeButton.tsx
  • web/src/pages/Resolver/Parameters/Category.tsx
  • web/src/pages/Resolver/Parameters/Court/index.tsx
  • web/src/pages/Resolver/Parameters/Jurors.tsx
  • web/src/pages/Resolver/Parameters/NotablePersons/PersonFields.tsx
  • web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx
  • web/src/pages/Resolver/Parameters/VotingOptions/index.tsx
  • web/src/pages/Resolver/Preview/BatchCreationCard.tsx
  • web/src/styles/styled.d.ts
  • web/src/styles/themes.ts
  • web/src/utils/uiComponentsTypes.ts
💤 Files with no reviewable changes (3)
  • web/src/components/FileViewer/Viewers/MarkdownViewer.tsx
  • web/src/components/FileViewer/index.tsx
  • web/src/styles/themes.ts

Comment thread web/src/components/LabeledInput.tsx Outdated
Comment thread web/src/components/Radio.tsx
Comment thread web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/src/pages/AttachmentDisplay/index.tsx`:
- Line 16: The lazy-loaded FileViewer (const FileViewer = lazy(...)) can throw
on chunk load failures and currently only has Suspense for loading; wrap the
Suspense subtree (where FileViewer is rendered) with an ErrorBoundary component
to catch import/rejection errors and render a fallback UI. Add or reuse an
ErrorBoundary component (or create one) and place it as the parent of the
Suspense that renders FileViewer so any lazy import failures are caught and
handled instead of crashing the tree.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 01996863-7c8e-4d49-95b6-d9ce75a6910d

📥 Commits

Reviewing files that changed from the base of the PR and between 8c7d78a and 7c63a75.

📒 Files selected for processing (1)
  • web/src/pages/AttachmentDisplay/index.tsx

Comment thread web/src/pages/AttachmentDisplay/index.tsx
Comment thread web/src/components/LightButton.tsx Outdated
label: string;
}

const Radio: React.FC<RadioProps> = ({ label, small, className, ...props }) => (
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the Radio component exported by the library

Copy link
Copy Markdown
Contributor Author

@kemuru kemuru May 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

v3 still exports Radio, but it now points to the RadioGroup component — there's no single-radio component behind that name anymore. So import { Radio } gives you a group control (single-select, options: { label }[]), and although RadioOption extends AriaRadioProps so the type looks like it accepts children, the component overwrites children with its own circle+label renderer, so only the label string ever shows — there's no slot for custom per-item content. That's the blocker here, because all three places this is used need exactly that: the dispute-feature picker (Court step) wraps each option in a help tooltip and renders a token-address TextField under the gated ERC-20/1155 options, the appeal OptionCard puts the indicator inside a card with a funding progress bar (its input is even display:none, so the card is the click target), and CreationCard is a rich icon/title/description card with a case-ID field. So this local component keeps the single-radio contract those cases need, rather than the group component.

Comment thread web/src/layout/Header/navbar/Menu/Settings/index.tsx Outdated
Comment thread web/src/pages/AttachmentDisplay/index.tsx Outdated
Comment thread web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx Outdated
content: null,
}))}
callback={(i: number) => setCurrentTab(i)}
callback={(_key, value) => setCurrentTab(value)}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If not needed externally, we can let Tab handle the currentTab itself

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if not needed externally condition doesn't hold here: currentTab feeds PendingVotesBox, VotesAccordion, the drawnJurors memo and isHiddenVotes, and the useEffect that auto-jumps to the latest round needs to set the selected tab, which only controlled selectedKey allows (defaultSelectedKey can't). So letting Tab own it would break the auto-latest-round behavior.

did the equivalent simplification on CaseDetails/Tabs instead, where the value isn't needed externally.

Comment thread web/src/pages/Cases/CaseDetails/Tabs.tsx Outdated
Comment thread web/src/utils/uiComponentsTypes.ts Outdated
Comment thread web/src/styles/themes.ts
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 20, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@web/src/components/LabeledInput.tsx`:
- Around line 28-33: LabeledInput currently overwrites any caller-provided
inputProps by setting inputProps={{ id: inputId, dir: "auto" }} on StyledField;
instead, merge the caller's inputProps with the injected id/dir so existing
properties are preserved. Locate the LabeledInput component (inputId) and change
the StyledField prop to combine props.inputProps (or props.inputProps ?? {})
with { id: inputId, dir: "auto" } before passing it to StyledField, ensuring
other props from callers remain intact.

In `@web/src/styles/base-elements.css`:
- Around line 58-64: The global CSS rule for the selector "a" in
base-elements.css removes the underline and relies solely on color, which breaks
accessibility; restore a non-color affordance by removing the blanket
text-decoration:none from the global "a" rule (or restrict that removal to a
specific utility class like ".no-underline"), and ensure links retain an
underline or another clear non-color indicator (and visible focus/hover styles)
so that the "a" rule, focus states, and any new ".no-underline" utility behave
accessibly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ad550fb5-7d85-4bb1-a495-3e7b787fd7fd

📥 Commits

Reviewing files that changed from the base of the PR and between 7c63a75 and 8cc96a1.

📒 Files selected for processing (69)
  • web/src/app.tsx
  • web/src/components/CaseStarButton.tsx
  • web/src/components/CasesDisplay/Filters.tsx
  • web/src/components/ClaimPnkButton.tsx
  • web/src/components/ConnectWallet/index.tsx
  • web/src/components/DisputeFeatures/GroupsUI.tsx
  • web/src/components/EnsureAuth.tsx
  • web/src/components/ErrorFallback.tsx
  • web/src/components/ExternalLinkWarning.tsx
  • web/src/components/Field.tsx
  • web/src/components/LabeledInput.tsx
  • web/src/components/LightButton.tsx
  • web/src/components/Popup/Description/SwapSuccess.tsx
  • web/src/components/Popup/index.tsx
  • web/src/components/Tag.tsx
  • web/src/components/Verdict/DisputeTimeline.tsx
  • web/src/index.html
  • web/src/layout/Header/DesktopHeader.tsx
  • web/src/layout/Header/MobileHeader.tsx
  • web/src/layout/Header/navbar/Menu/Settings/General/index.tsx
  • web/src/layout/Header/navbar/Menu/Settings/Notifications/FormContactDetails/EmailVerificationInfo.tsx
  • web/src/layout/Header/navbar/Menu/Settings/index.tsx
  • web/src/layout/Header/navbar/Menu/index.tsx
  • web/src/layout/Header/navbar/index.tsx
  • web/src/pages/AttachmentDisplay/Header.tsx
  • web/src/pages/AttachmentDisplay/index.tsx
  • web/src/pages/Cases/CaseDetails/Appeal/Classic/Fund.tsx
  • web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx
  • web/src/pages/Cases/CaseDetails/Appeal/Shutter/Fund.tsx
  • web/src/pages/Cases/CaseDetails/Evidence/EvidenceSearch.tsx
  • web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx
  • web/src/pages/Cases/CaseDetails/Evidence/index.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/DistributeRewards.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/DrawButton.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/ExecuteRuling.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/PassPeriodButton.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/SetJurorsButton.tsx
  • web/src/pages/Cases/CaseDetails/MaintenanceButtons/WithdrawAppealFees.tsx
  • web/src/pages/Cases/CaseDetails/Tabs.tsx
  • web/src/pages/Cases/CaseDetails/Timeline.tsx
  • web/src/pages/Cases/CaseDetails/Voting/Classic/Reveal.tsx
  • web/src/pages/Cases/CaseDetails/Voting/OptionsContainer.tsx
  • web/src/pages/Cases/CaseDetails/Voting/Shutter/Reveal.tsx
  • web/src/pages/Cases/CaseDetails/Voting/VotesDetails/AccordionTitle.tsx
  • web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx
  • web/src/pages/Cases/CaseDetails/Voting/VotingHistory.tsx
  • web/src/pages/Courts/CourtDetails/Description.tsx
  • web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawButton.tsx
  • web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx
  • web/src/pages/Courts/CourtDetails/Stats/index.tsx
  • web/src/pages/Courts/StakeMaintenanceButton/ExecuteDelayedStakeButton.tsx
  • web/src/pages/Courts/StakeMaintenanceButton/PassPhaseButton.tsx
  • web/src/pages/Home/CourtOverview/Chart.tsx
  • web/src/pages/Home/CourtOverview/ExtraStats.tsx
  • web/src/pages/Home/CourtOverview/Header.tsx
  • web/src/pages/Jurors/StatsAndFilters.tsx
  • web/src/pages/Profile/Votes/StatsAndFilters/Filters.tsx
  • web/src/pages/Profile/index.tsx
  • web/src/pages/Resolver/Landing/index.tsx
  • web/src/pages/Resolver/NavigationButtons/NextButton.tsx
  • web/src/pages/Resolver/NavigationButtons/PreviousButton.tsx
  • web/src/pages/Resolver/NavigationButtons/SubmitBatchDisputesButton.tsx
  • web/src/pages/Resolver/NavigationButtons/SubmitDisputeButton.tsx
  • web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx
  • web/src/pages/Resolver/Timeline.tsx
  • web/src/styles/base-elements.css
  • web/src/styles/global-style.ts
  • web/src/styles/themes.ts
  • web/src/utils/uiComponentsTypes.ts
💤 Files with no reviewable changes (1)
  • web/src/utils/uiComponentsTypes.ts
✅ Files skipped from review due to trivial changes (6)
  • web/src/app.tsx
  • web/src/layout/Header/navbar/Menu/Settings/General/index.tsx
  • web/src/pages/Home/CourtOverview/Header.tsx
  • web/src/pages/Cases/CaseDetails/Voting/VotesDetails/AccordionTitle.tsx
  • web/src/pages/Cases/CaseDetails/Timeline.tsx
  • web/src/pages/Resolver/Timeline.tsx

Comment thread web/src/components/LabeledInput.tsx Outdated
Comment thread web/src/styles/base-elements.css
coderabbitai[bot]
coderabbitai Bot previously approved these changes May 21, 2026
@sonarqubecloud
Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)
5.6% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants