@neo4j-ndl/react
Version:
React implementation of Neo4j Design System
168 lines (120 loc) • 4.23 kB
Markdown
Import: `import { Switch } from '@neo4j-ndl/react'`
| Prop | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| `ariaLabel` | `string` | | | The aria label of the switch. Required if the label is not a string. |
| `hasLeadingLabel` | `boolean` | | | Whether the label should be displayed before the switch |
| `isChecked` | `boolean` | | | Whether the switch is checked |
| `isDefaultChecked` | `boolean` | | | Checks the input by default in uncontrolled mode |
| `isDisabled` | `boolean` | | `false` | Whether the switch is disabled |
| `isFluid` | `boolean` | | `false` | Whether the switch & label should take the full available width of its container |
| `isIndeterminate` | `boolean` | | `false` | Whether the switch is indeterminate |
| `label` | `ReactNode` | | | The label of the switch. If not a string, supply an aria label for screen reader support. |
| `onChange` | `((event: ChangeEvent<HTMLInputElement, Element>) => void)` | | | The callback function triggered when the switch value changes |
| `onClick` | `((event: MouseEvent<HTMLInputElement, MouseEvent>) => void)` | | | The callback function triggered when the switch is clicked |
| `ref` | `Ref<HTMLInputElement>` | | | A ref to apply to the root element. |
| `value` | `string \| number \| readonly string[]` | | | The value of the switch |
The Switch component uses implicit label wrapping to associate the visible label with the input for screen readers. If you omit the label prop or use an invalid label (no text content), the `ariaLabel` prop will be required to ensure an accessible name.
## Examples
### Default
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Switch } from '@neo4j-ndl/react';
const Component = () => {
return <Switch label="Label" />;
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Switch } from '@neo4j-ndl/react';
import { useState } from 'react';
const Component = () => {
const [isChecked, setIsChecked] = useState(false);
return (
<Switch
isChecked={isChecked}
label="Controlled switch"
onChange={(event) => setIsChecked(event.target.checked)}
/>
);
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Switch } from '@neo4j-ndl/react';
const Component = () => {
return <Switch label="Label" isDisabled />;
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Switch } from '@neo4j-ndl/react';
import { useState } from 'react';
const Component = () => {
const [isChecked, setIsChecked] = useState<boolean>(false);
const handleClick = (event: React.MouseEvent<HTMLInputElement>) => {
console.info('Switch clicked!', event);
};
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setIsChecked(event.target.checked);
console.info('Switch changed:', event.target.checked);
};
return (
<Switch
label="Label"
ariaLabel="Comprehensive switch example with all props"
isChecked={isChecked}
hasLeadingLabel={false}
isDisabled={false}
isFluid={false}
value="switch-value"
onClick={handleClick}
onChange={handleChange}
/>
);
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Switch } from '@neo4j-ndl/react';
const Component = () => {
return (
<Switch
label="Label"
hasLeadingLabel
onClick={() => console.info('Clicked on the switch!')}
/>
);
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Switch } from '@neo4j-ndl/react';
const Component = () => {
return <Switch label="Label" isIndeterminate />;
};
export default Component;
```
```tsx
import '@neo4j-ndl/base/lib/neo4j-ds-styles.css';
import { Switch } from '@neo4j-ndl/react';
const Component = () => {
return <Switch ariaLabel="Label" />;
};
export default Component;
```