diff --git a/site/src/index.css b/site/src/index.css index f3bf0918ddb3a..36f1c62954614 100644 --- a/site/src/index.css +++ b/site/src/index.css @@ -107,4 +107,9 @@ --removed-body-scroll-bar-size: 0 !important; margin-right: 0 !important; } + + /* Prevent layout shift when modals open by maintaining scrollbar width */ + html { + scrollbar-gutter: stable; + } } diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx index fc74a3a46a005..96727cd0c796f 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx @@ -89,9 +89,7 @@ export const DynamicParameter: FC = ({ /> )} - {parameter.diagnostics.length > 0 && ( - - )} + ); }; @@ -112,6 +110,9 @@ const ParameterLabel: FC = ({ const displayName = parameter.display_name ? parameter.display_name : parameter.name; + const hasRequiredDiagnostic = parameter.diagnostics?.find( + (d) => d.extra?.code === "required", + ); return (
@@ -186,6 +187,22 @@ const ParameterLabel: FC = ({ )} + {hasRequiredDiagnostic && ( + + + + + + Required + + + + + {hasRequiredDiagnostic.summary || "Required parameter"} + + + + )} {Boolean(parameter.description) && ( @@ -558,21 +575,26 @@ const ParameterDiagnostics: FC = ({ diagnostics, }) => { return ( -
- {diagnostics.map((diagnostic, index) => ( -
-

{diagnostic.summary}

- {diagnostic.detail &&

{diagnostic.detail}

} -
- ))} -
+ <> + {diagnostics.map((diagnostic, index) => { + if (diagnostic.extra?.code === "required") { + return null; + } + return ( +
+

{diagnostic.summary}

+ {diagnostic.detail &&

{diagnostic.detail}

} +
+ ); + })} + ); };