diff --git a/.changeset/deep-gifts-slide.md b/.changeset/deep-gifts-slide.md new file mode 100644 index 0000000000..f3be77e74d --- /dev/null +++ b/.changeset/deep-gifts-slide.md @@ -0,0 +1,5 @@ +--- +'@backstage/ui': patch +--- + +Fixed CSS issues in Select component including popover width constraints, focus outline behavior, and overflow handling. diff --git a/packages/ui/report.api.md b/packages/ui/report.api.md index 1ae959a5ba..bfb0604a36 100644 --- a/packages/ui/report.api.md +++ b/packages/ui/report.api.md @@ -623,6 +623,7 @@ export const componentDefinitions: { readonly Select: { readonly classNames: { readonly root: 'bui-Select'; + readonly popover: 'bui-SelectPopover'; readonly trigger: 'bui-SelectTrigger'; readonly value: 'bui-SelectValue'; readonly icon: 'bui-SelectIcon'; diff --git a/packages/ui/src/components/Popover/Popover.module.css b/packages/ui/src/components/Popover/Popover.module.css index 873dc33e81..910c2b8c76 100644 --- a/packages/ui/src/components/Popover/Popover.module.css +++ b/packages/ui/src/components/Popover/Popover.module.css @@ -19,7 +19,8 @@ @layer components { .bui-Popover { margin-right: 12px; - overflow: scroll; + overflow-x: hidden; + overflow-y: auto; background-color: var(--bui-bg-surface-1); border: 1px solid var(--bui-border); border-radius: var(--bui-radius-3); diff --git a/packages/ui/src/components/Select/Select.module.css b/packages/ui/src/components/Select/Select.module.css index 3adfd5af52..d4e201ef3a 100644 --- a/packages/ui/src/components/Select/Select.module.css +++ b/packages/ui/src/components/Select/Select.module.css @@ -17,10 +17,8 @@ @layer tokens, base, components, utilities; @layer components { - .bui-Select[data-invalid] { - & .bui-SelectTrigger { - border-color: var(--bui-fg-danger); - } + .bui-SelectPopover { + min-width: var(--trigger-width); } .bui-SelectTrigger { @@ -74,6 +72,7 @@ outline: 0; } + .bui-Select[data-invalid] &, &[data-invalid] { border-color: var(--bui-fg-danger); } @@ -120,6 +119,14 @@ } } + .bui-SelectList:focus-visible { + /* Remove default focus-visible outline because React Aria + * triggers it on mouse click open of the list for some reason. + * On keyboard use, the top item receives the focus style, + * so it's not needed anyway. */ + outline: none; + } + .bui-SelectItem { position: relative; width: var(--anchor-width); diff --git a/packages/ui/src/components/Select/Select.tsx b/packages/ui/src/components/Select/Select.tsx index 733d0915e2..b1fec7dbe7 100644 --- a/packages/ui/src/components/Select/Select.tsx +++ b/packages/ui/src/components/Select/Select.tsx @@ -98,6 +98,8 @@ export const Select = forwardRef((props, ref) => { className={clsx( popoverClassNames.root, stylesPopover[popoverClassNames.root], + classNames.popover, + styles[classNames.popover], )} > diff --git a/packages/ui/src/utils/componentDefinitions.ts b/packages/ui/src/utils/componentDefinitions.ts index 8dcdf03f55..8f44e1e730 100644 --- a/packages/ui/src/utils/componentDefinitions.ts +++ b/packages/ui/src/utils/componentDefinitions.ts @@ -296,6 +296,7 @@ export const componentDefinitions = { Select: { classNames: { root: 'bui-Select', + popover: 'bui-SelectPopover', trigger: 'bui-SelectTrigger', value: 'bui-SelectValue', icon: 'bui-SelectIcon',