Select
View .mdWrapper around the native select element for choosing one option.
Default
Loading interactive example. Full source is available below.
View example source
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import type { SelectProps } from "@coreai-ds/react-components";
import type { JSXElement } from "@coreai-ds/react-components";
import { useId } from "@coreai-ds/react-components";
import { Select } from "@coreai-ds/react-components";
import * as React from 'react';
export const Default = (props: SelectProps): JSXElement => {
const selectId = useId();
return (<>
<label htmlFor={selectId}>Color</label>
<Select id={selectId} {...props}>
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</>);
};
export default Default;
API referenceGenerated CoreAI prop and type summaries
API
Generated CoreAI prop summaries, not replacement type declarations. Most native DOM/event and ARIA props are omitted. ? means optional; JSDoc shows defaults, deprecations, and conditional requirements. Defaults assume the standard CoreAI provider.
Select API
interface SelectProps {
/**
* Controls the colors and borders of the Select.
* @default 'filled-darker'
*/
appearance?: "outline" | "filled-darker" | "filled-lighter" | "underline";
as?: "select";
children?: any;
className?: string;
/**
* the icon, typically a down arrow
*/
icon?: WithSlotShorthandValue<{ as?: "span"; } & Omit<Omit<DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & { ref?: ((instance: HTMLSpanElement | null) => void) | RefObject<HTMLSpanElement> | null; }, "children"> & { children?: any; }> | null | undefined;
/**
* Called when the user changes the select element's value by selecting an option.
*/
onChange?: ((ev: ChangeEvent<HTMLSelectElement>, data: SelectOnChangeData) => void);
ref?: Ref<HTMLSelectElement>;
root?: NonNullable<WithSlotShorthandValue<{ as?: "span"; } & Omit<Omit<DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & { ref?: ((instance: HTMLSpanElement | null) => void) | RefObject<HTMLSpanElement> | null; }, "children"> & { children?: any; }> | null> | undefined;
/**
* Primary slot: the actual `<select>` element
*/
select?: NonNullable<WithSlotShorthandValue<{ as?: "select"; } & Omit<Omit<DetailedHTMLProps<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, "ref"> & { ref?: ((instance: HTMLSelectElement | null) => void) | RefObject<HTMLSelectElement> | null; }, "children"> & { children?: any; }> | null> | undefined;
/**
* Matches the Input sizes
* @default 'medium'
*/
size?: "small" | "medium" | "large";
style?: CSSProperties;
}
Implementation
CoreAI 0.12.0; Fluent 9.74.9.
Import components from @coreai-ds/react-components. CoreAI guidance above takes precedence over API demonstration examples.
Appearance
Loading interactive example. Full source is available below.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import type { JSXElement } from "@coreai-ds/react-components";
import { makeStyles } from "@coreai-ds/react-components";
import { tokens } from "@coreai-ds/react-components";
import { useId } from "@coreai-ds/react-components";
import { Select } from "@coreai-ds/react-components";
import { mergeClasses } from "@coreai-ds/react-components";
import * as React from 'react';
const useStyles = makeStyles({
base: {
display: 'flex',
flexDirection: 'column',
maxWidth: '500px',
},
field: {
display: 'grid',
gridRowGap: tokens.spacingVerticalXXS,
marginTop: tokens.spacingVerticalMNudge,
padding: `${tokens.spacingVerticalMNudge} ${tokens.spacingHorizontalMNudge}`,
},
filledLighter: {
backgroundColor: tokens.colorNeutralBackgroundInverted,
'> label': {
color: tokens.colorNeutralForegroundInverted2,
},
},
filledDarker: {
backgroundColor: tokens.colorNeutralBackgroundInverted,
'> label': {
color: tokens.colorNeutralForegroundInverted2,
},
},
});
export const Appearance = (): JSXElement => {
const styles = useStyles();
const selectId = useId();
return (<div className={styles.base}>
<div className={styles.field}>
<label htmlFor={`${selectId}-outline`}>Outline</label>
<Select id={`${selectId}-outline`} appearance="outline">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</div>
<div className={styles.field}>
<label htmlFor={`${selectId}-underline`}>Underline</label>
<Select id={`${selectId}-underline`} appearance="underline">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</div>
<div className={mergeClasses(styles.field, styles.filledLighter)}>
<label htmlFor={`${selectId}-filledLighter`}>Filled Lighter</label>
<Select id={`${selectId}-filledLighter`} appearance="filled-lighter">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</div>
<div className={mergeClasses(styles.field, styles.filledDarker)}>
<label htmlFor={`${selectId}-filledDarker`}>Filled Darker</label>
<Select id={`${selectId}-filledDarker`} appearance="filled-darker">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</div>
</div>);
};
export default Appearance;
Controlled
Loading interactive example. Full source is available below.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import type { JSXElement } from "@coreai-ds/react-components";
import { useId } from "@coreai-ds/react-components";
import * as React from 'react';
import type { SelectProps } from "@coreai-ds/react-components";
import { Select } from "@coreai-ds/react-components";
export const Controlled = (): JSXElement => {
const selectId = useId();
const [value, setValue] = React.useState('Red');
const onChange: SelectProps['onChange'] = (event, data) => {
setValue(data.value);
};
return (<>
<label htmlFor={selectId}>Color</label>
<Select id={selectId} onChange={onChange} value={value}>
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
<button onClick={() => setValue('Blue')}>Select Blue</button>
</>);
};
export default Controlled;
Disabled
Loading interactive example. Full source is available below.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import type { JSXElement } from "@coreai-ds/react-components";
import { useId } from "@coreai-ds/react-components";
import { Select } from "@coreai-ds/react-components";
import * as React from 'react';
export const Disabled = (): JSXElement => {
const selectId = useId();
return (<>
<label htmlFor={selectId}>Color</label>
<Select disabled id={selectId}>
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</>);
};
export default Disabled;
Initial Value
Loading interactive example. Full source is available below.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import type { JSXElement } from "@coreai-ds/react-components";
import { useId } from "@coreai-ds/react-components";
import { Select } from "@coreai-ds/react-components";
import * as React from 'react';
export const InitialValue = (): JSXElement => {
const selectId = useId();
return (<>
<label htmlFor={selectId}>Color</label>
<Select defaultValue="Green" id={selectId}>
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</>);
};
export default InitialValue;
Size
Loading interactive example. Full source is available below.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
import type { JSXElement } from "@coreai-ds/react-components";
import { useId } from "@coreai-ds/react-components";
import { Select } from "@coreai-ds/react-components";
import * as React from 'react';
export const Size = (): JSXElement => {
const selectId = useId();
return (<>
<label htmlFor={`${selectId}-small`}>Small</label>
<Select id={`${selectId}-small`} size="small">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
<label htmlFor={`${selectId}-med`}>Medium</label>
<Select id={`${selectId}-med`} size="medium">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
<label htmlFor={`${selectId}-large`}>Large</label>
<Select id={`${selectId}-large`} size="large">
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</Select>
</>);
};
export default Size;