diff --git a/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx b/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx
index 6525eac211..e90c0578e8 100644
--- a/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx
+++ b/services/web/frontend/js/features/review-panel-new/components/review-panel-header.tsx
@@ -2,11 +2,10 @@ import { FC, memo, useState } from 'react'
import { ReviewPanelResolvedThreadsButton } from './review-panel-resolved-threads-button'
import { ReviewPanelTrackChangesMenu } from './review-panel-track-changes-menu'
import ReviewPanelTrackChangesMenuButton from './review-panel-track-changes-menu-button'
-import MaterialIcon from '@/shared/components/material-icon'
import { useLayoutContext } from '@/shared/context/layout-context'
-import SplitTestBadge from '@/shared/components/split-test-badge'
import { useTranslation } from 'react-i18next'
import getMeta from '@/utils/meta'
+import { PanelHeading } from '@/shared/components/panel-heading'
const isReviewerRoleEnabled = getMeta('ol-isReviewerRoleEnabled')
@@ -18,25 +17,13 @@ const ReviewPanelHeader: FC = () => {
return (
-
-
- {t('review')}
-
-
-
-
+
setReviewPanelOpen(false)}
+ splitTestName="review-panel-redesign"
+ >
{isReviewerRoleEnabled && }
-
-
+
{!isReviewerRoleEnabled && (
diff --git a/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx b/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx
index 596c9bd9fc..bd236f95c6 100644
--- a/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx
+++ b/services/web/frontend/js/features/review-panel-new/components/review-panel-overview-file.tsx
@@ -16,9 +16,9 @@ import {
} from '../../../../../types/change'
import { canAggregate } from '../utils/can-aggregate'
-import MaterialIcon from '@/shared/components/material-icon'
import useOverviewFileCollapsed from '../hooks/use-overview-file-collapsed'
import { useThreadsContext } from '../context/threads-context'
+import { CollapsibleFileHeader } from '@/shared/components/collapsible-file-header'
export const ReviewPanelOverviewFile: FC<{
doc: MainDocument
@@ -64,19 +64,12 @@ export const ReviewPanelOverviewFile: FC<{
return (
<>
-
+
{!collapsed && (
diff --git a/services/web/frontend/js/shared/components/collapsible-file-header.tsx b/services/web/frontend/js/shared/components/collapsible-file-header.tsx
new file mode 100644
index 0000000000..efcd51a74f
--- /dev/null
+++ b/services/web/frontend/js/shared/components/collapsible-file-header.tsx
@@ -0,0 +1,21 @@
+import MaterialIcon from '@/shared/components/material-icon'
+import { Dispatch, FC, SetStateAction } from 'react'
+
+export const CollapsibleFileHeader: FC<{
+ name: string
+ count: number
+ collapsed: boolean
+ toggleCollapsed: Dispatch
>
+}> = ({ name, count, collapsed, toggleCollapsed }) => (
+
+)
diff --git a/services/web/frontend/js/shared/components/panel-heading.tsx b/services/web/frontend/js/shared/components/panel-heading.tsx
new file mode 100644
index 0000000000..bdec33779a
--- /dev/null
+++ b/services/web/frontend/js/shared/components/panel-heading.tsx
@@ -0,0 +1,38 @@
+import { FC } from 'react'
+import SplitTestBadge from '@/shared/components/split-test-badge'
+import MaterialIcon from '@/shared/components/material-icon'
+import { useTranslation } from 'react-i18next'
+
+export const PanelHeading: FC<{
+ title: string
+ splitTestName?: string
+ children?: React.ReactNode
+ handleClose(): void
+}> = ({ title, splitTestName, children, handleClose }) => {
+ const { t } = useTranslation()
+
+ return (
+
+
+ {title}
+ {splitTestName && (
+
+ )}
+
+
+ {children}
+
+
+
+ )
+}
diff --git a/services/web/frontend/stylesheets/app/editor/review-panel-new.less b/services/web/frontend/stylesheets/app/editor/review-panel-new.less
index 338e2897e8..8b5e49018c 100644
--- a/services/web/frontend/stylesheets/app/editor/review-panel-new.less
+++ b/services/web/frontend/stylesheets/app/editor/review-panel-new.less
@@ -498,7 +498,7 @@
}
}
- .review-panel-overview-file-header {
+ .collapsible-file-header {
all: unset;
padding: 6px 8px;
font-size: 14px;
@@ -524,7 +524,7 @@
padding-bottom: 6px;
}
- .review-panel-overview-file-entry-count {
+ .collapsible-file-header-count {
background-color: @neutral-20;
padding: 2px 4px;
margin-left: auto;
diff --git a/services/web/frontend/stylesheets/bootstrap-5/components/all.scss b/services/web/frontend/stylesheets/bootstrap-5/components/all.scss
index 99f7cd2a45..269a51ec01 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/components/all.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/components/all.scss
@@ -34,3 +34,5 @@
@import 'recurly';
@import 'dev-toolbar';
@import 'tos';
+@import 'collapsible-file-header';
+@import 'panel-heading';
diff --git a/services/web/frontend/stylesheets/bootstrap-5/components/collapsible-file-header.scss b/services/web/frontend/stylesheets/bootstrap-5/components/collapsible-file-header.scss
new file mode 100644
index 0000000000..4a510ae798
--- /dev/null
+++ b/services/web/frontend/stylesheets/bootstrap-5/components/collapsible-file-header.scss
@@ -0,0 +1,18 @@
+.collapsible-file-header {
+ all: unset;
+ padding: var(--spacing-03) var(--spacing-04);
+ font-size: var(--font-size-02);
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-04);
+ box-sizing: border-box;
+ width: 100%;
+}
+
+.collapsible-file-header-count {
+ background-color: var(--neutral-20);
+ padding: var(--spacing-01) var(--spacing-02);
+ margin-left: auto;
+ border-radius: var(--border-radius-base);
+}
diff --git a/services/web/frontend/stylesheets/bootstrap-5/components/panel-heading.scss b/services/web/frontend/stylesheets/bootstrap-5/components/panel-heading.scss
new file mode 100644
index 0000000000..0792665cc5
--- /dev/null
+++ b/services/web/frontend/stylesheets/bootstrap-5/components/panel-heading.scss
@@ -0,0 +1,31 @@
+.panel-heading {
+ display: flex;
+ align-items: center;
+ padding: var(--spacing-03) var(--spacing-02);
+ gap: 2px;
+}
+
+.panel-heading-label {
+ font-size: var(--font-size-02);
+ font-weight: bold;
+ margin: 0;
+ flex: 1;
+ text-align: start;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-02);
+}
+
+.panel-heading-close-button {
+ display: flex;
+ align-items: center;
+ border: none;
+ background-color: transparent;
+ color: var(--content-primary);
+ padding: var(--spacing-01);
+
+ &:hover,
+ &:focus {
+ background-color: var(--neutral-20);
+ }
+}
diff --git a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss
index 2ea853e8e8..22544731ac 100644
--- a/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss
+++ b/services/web/frontend/stylesheets/bootstrap-5/pages/editor/review-panel-new.scss
@@ -253,39 +253,6 @@
}
}
- .review-panel-heading {
- display: flex;
- align-items: center;
- padding: var(--spacing-03) var(--spacing-02);
- gap: 2px;
-
- .review-panel-label {
- font-size: var(--font-size-02);
- font-weight: bold;
- margin: 0;
- flex: 1;
- text-align: start;
- }
-
- .review-panel-split-test-badge {
- margin-left: var(--spacing-02);
- }
-
- .review-panel-close-button {
- display: flex;
- align-items: center;
- border: none;
- background-color: transparent;
- color: var(--content-primary);
- padding: var(--spacing-01);
-
- &:hover,
- &:focus {
- background-color: var(--neutral-20);
- }
- }
- }
-
&.review-panel-resolved-comments {
--bs-popover-border-width: 1px;
--bs-popover-bg: var(--bg-light-secondary);
@@ -505,18 +472,6 @@
}
}
- .review-panel-overview-file-header {
- all: unset;
- padding: var(--spacing-03) var(--spacing-04);
- font-size: var(--font-size-02);
- cursor: pointer;
- display: flex;
- align-items: center;
- gap: var(--spacing-04);
- box-sizing: border-box;
- width: 100%;
- }
-
.review-panel-overfile-divider {
border-bottom: 1px solid var(--border-divider);
margin: var(--spacing-01) 0;
@@ -531,13 +486,6 @@
padding-bottom: var(--spacing-03);
}
- .review-panel-overview-file-entry-count {
- background-color: var(--neutral-20);
- padding: var(--spacing-01) var(--spacing-02);
- margin-left: auto;
- border-radius: var(--border-radius-base);
- }
-
.review-panel-footer {
position: fixed;
height: 60px;