diff --git a/.changeset/cyan-buses-visit.md b/.changeset/cyan-buses-visit.md new file mode 100644 index 00000000000..53c017704c1 --- /dev/null +++ b/.changeset/cyan-buses-visit.md @@ -0,0 +1,5 @@ +--- +"@primer/react": minor +--- + +Convert SelectPanel to CSS modules behind feature flag diff --git a/packages/react/src/SelectPanel/SelectPanel.module.css b/packages/react/src/SelectPanel/SelectPanel.module.css new file mode 100644 index 00000000000..753e6519e2c --- /dev/null +++ b/packages/react/src/SelectPanel/SelectPanel.module.css @@ -0,0 +1,33 @@ +.Wrapper { + display: flex; + height: inherit; + max-height: inherit; + flex-direction: column; +} + +.Content { + padding-top: var(--base-size-8); + padding-right: var(--base-size-16); + padding-left: var(--base-size-16); +} + +.Title { + font-size: var(--text-body-size-medium); +} + +.Subtitle { + font-size: var(--text-body-size-small); + color: var(--fgColor-muted); +} + +.Footer { + display: flex; + padding: var(--base-size-8); + border-color: var(--borderColor-default); + border-top: var(--borderWidth-thin) solid; +} + +.FilteredActionList { + height: inherit; + max-height: inherit; +} diff --git a/packages/react/src/SelectPanel/SelectPanel.tsx b/packages/react/src/SelectPanel/SelectPanel.tsx index 095615d6372..39d41d26094 100644 --- a/packages/react/src/SelectPanel/SelectPanel.tsx +++ b/packages/react/src/SelectPanel/SelectPanel.tsx @@ -19,6 +19,9 @@ import {useProvidedStateOrCreate} from '../hooks/useProvidedStateOrCreate' import {LiveRegion, LiveRegionOutlet, Message} from '../internal/components/LiveRegion' import {useFeatureFlag} from '../FeatureFlags' +import classes from './SelectPanel.module.css' +import {clsx} from 'clsx' + interface SelectPanelSingleSelection { selected: ItemInput | undefined onSelectedChange: (selected: ItemInput | undefined) => void @@ -112,6 +115,9 @@ export function SelectPanel({ [externalOnFilterChange, setInternalFilterValue], ) + const CSS_MODULES_FEATURE_FLAG = 'primer_react_css_modules_team' + const enabled = useFeatureFlag(CSS_MODULES_FEATURE_FLAG) + const anchorRef = useProvidedRefOrCreate(externalAnchorRef) const onOpen: AnchoredOverlayProps['onOpen'] = useCallback( (gesture: Parameters>[0]) => onOpenChange(true, gesture), @@ -220,13 +226,25 @@ export function SelectPanel({ } /> )} - - - + + + {title} {subtitle ? ( - + {subtitle} ) : null} @@ -247,17 +265,22 @@ export function SelectPanel({ inputRef={inputRef} // inheriting height and maxHeight ensures that the FilteredActionList is never taller // than the Overlay (which would break scrolling the items) - sx={{...sx, height: 'inherit', maxHeight: 'inherit'}} - className={className} + sx={enabled ? sx : {...sx, height: 'inherit', maxHeight: 'inherit'}} + className={enabled ? clsx(className, classes.FilteredActionList) : className} /> {footer && ( {footer}