diff --git a/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx b/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx
index 91492e374e..b2167f3b71 100644
--- a/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx
+++ b/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/MilestoneListRenderer.tsx
@@ -11,7 +11,7 @@ const StyledConnection = styled('div')(({ theme }) => ({
width: 2,
height: theme.spacing(2),
backgroundColor: theme.palette.divider,
- marginLeft: theme.spacing(3.25),
+ marginLeft: theme.spacing(3.5),
}));
interface MilestoneListRendererCoreProps {
diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneAutomationSection.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneAutomationSection.tsx
index 90f562fd81..8e87ad43fb 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneAutomationSection.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneAutomationSection.tsx
@@ -4,10 +4,11 @@ import type { MilestoneStatus } from './ReleasePlanMilestoneStatus.tsx';
const StyledAutomationContainer = styled('div', {
shouldForwardProp: (prop) => prop !== 'status',
})<{ status?: MilestoneStatus }>(({ theme, status }) => ({
- border: `${status === 'active' ? '1.25px' : '1px'} solid ${status === 'active' ? theme.palette.success.border : theme.palette.divider}`,
+ border: `${status === 'active' ? '1.5px' : '1px'} solid ${status === 'active' ? theme.palette.success.border : theme.palette.divider}`,
borderTop: `1px solid ${theme.palette.divider}`,
borderRadius: `0 0 ${theme.shape.borderRadiusLarge}px ${theme.shape.borderRadiusLarge}px`,
padding: theme.spacing(1.5, 2),
+ paddingLeft: theme.spacing(2.25),
backgroundColor:
status === 'completed'
? theme.palette.background.default
diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneTransitionDisplay.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneTransitionDisplay.tsx
index 235a8925a5..2afed24fdc 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneTransitionDisplay.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneTransitionDisplay.tsx
@@ -11,6 +11,26 @@ import type { ChangeMilestoneProgressionSchema } from 'openapi';
import type { ReactNode } from 'react';
import { useEffect } from 'react';
+const StyledFormWrapper = styled('div', {
+ shouldForwardProp: (prop) => prop !== 'hasChanged',
+})<{ hasChanged: boolean }>(({ theme, hasChanged }) => ({
+ display: 'flex',
+ flexDirection: 'column',
+ gap: theme.spacing(1.5),
+ width: '100%',
+ transition: theme.transitions.create(
+ ['background-color', 'padding', 'border-radius'],
+ {
+ duration: theme.transitions.duration.short,
+ },
+ ),
+ ...(hasChanged && {
+ backgroundColor: theme.palette.background.elevation1,
+ padding: theme.spacing(1.5, 2),
+ borderRadius: `${theme.shape.borderRadiusLarge}px`,
+ }),
+}));
+
const StyledDisplayContainer = styled('div')(({ theme }) => ({
display: 'flex',
alignItems: 'center',
@@ -50,10 +70,24 @@ const StyledLabel = styled('span', {
flexShrink: 0,
}));
-const StyledButtonGroup = styled('div')(({ theme }) => ({
+const StyledButtonGroup = styled('div', {
+ shouldForwardProp: (prop) => prop !== 'hasChanged',
+})<{ hasChanged: boolean }>(({ theme, hasChanged }) => ({
display: 'flex',
gap: theme.spacing(1),
alignItems: 'center',
+ justifyContent: 'flex-end',
+ transition: theme.transitions.create(
+ ['border-top', 'padding-top', 'margin-top'],
+ {
+ duration: theme.transitions.duration.short,
+ },
+ ),
+ ...(hasChanged && {
+ paddingTop: theme.spacing(1),
+ marginTop: theme.spacing(0.5),
+ borderTop: `1px solid ${theme.palette.divider}`,
+ }),
}));
interface IMilestoneTransitionDisplayProps {
@@ -130,21 +164,44 @@ export const MilestoneTransitionDisplay = ({
};
return (
-
-
-
-
- Proceed to the next milestone after
-
-
-
-
- {hasChanged && (
+
+
+
+
+
+ Proceed to the next milestone after
+
+
+
+ {!hasChanged && (
+
+ {badge}
+
+
+
+
+ )}
+
+ {hasChanged && (
+
+
- )}
- {badge}
-
-
-
-
-
+
+ )}
+
);
};
diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx
index 599aa85a2a..eafa04bd0c 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone.tsx
@@ -23,10 +23,10 @@ const StyledAccordion = styled(Accordion, {
shouldForwardProp: (prop) => prop !== 'status' && prop !== 'hasAutomation',
})<{ status: MilestoneStatus; hasAutomation?: boolean }>(
({ theme, status, hasAutomation }) => ({
- border: `${status === 'active' ? '1.25px' : '1px'} solid ${status === 'active' ? theme.palette.success.border : theme.palette.divider}`,
+ border: `${status === 'active' ? '1.5px' : '1px'} solid ${status === 'active' ? theme.palette.success.border : theme.palette.divider}`,
borderBottom: hasAutomation
? 'none'
- : `${status === 'active' ? '1.25px' : '1px'} solid ${status === 'active' ? theme.palette.success.border : theme.palette.divider}`,
+ : `${status === 'active' ? '1.5px' : '1px'} solid ${status === 'active' ? theme.palette.success.border : theme.palette.divider}`,
overflow: 'hidden',
boxShadow: 'none',
margin: 0,
@@ -58,6 +58,11 @@ const StyledTitleContainer = styled('div')(({ theme }) => ({
gap: theme.spacing(0.5),
}));
+const StyledMilestoneLabel = styled('span')(({ theme }) => ({
+ fontSize: theme.typography.caption.fontSize,
+ color: theme.palette.text.secondary,
+}));
+
const StyledTitle = styled('span', {
shouldForwardProp: (prop) => prop !== 'status',
})<{ status?: MilestoneStatus }>(({ theme, status }) => ({
@@ -121,6 +126,9 @@ export const ReleasePlanMilestone = ({
+
+ Milestone
+
{milestone.name}
@@ -175,6 +183,7 @@ export const ReleasePlanMilestone = ({
>
}>
+ Milestone
{milestone.name}
diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/ReleasePlanMilestoneItem.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/ReleasePlanMilestoneItem.tsx
index 0da33c4873..eaff57ffdc 100644
--- a/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/ReleasePlanMilestoneItem.tsx
+++ b/frontend/src/component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestoneItem/ReleasePlanMilestoneItem.tsx
@@ -19,7 +19,7 @@ const StyledConnection = styled('div', {
backgroundColor: isCompleted
? theme.palette.divider
: theme.palette.primary.main,
- marginLeft: theme.spacing(3.25),
+ marginLeft: theme.spacing(3.5),
}));
export interface PendingProgressionChange {
@@ -133,7 +133,7 @@ export const ReleasePlanMilestoneItem = ({
getPendingProgressionData(milestone, getPendingProgressionChange);
const shouldShowAutomation =
- isNotLastMilestone && milestoneProgressionsEnabled;
+ isNotLastMilestone && milestoneProgressionsEnabled && !readonly;
const automationSection = shouldShowAutomation ? (