13.1.0 • Published 24 days ago

@leafygreen-ui/checkbox v13.1.0

Weekly downloads
364
License
Apache-2.0
Repository
github
Last release
24 days ago

Checkbox

npm (scoped)

View on MongoDB.design

Installation

Yarn

yarn add @leafygreen-ui/checkbox

NPM

npm install @leafygreen-ui/checkbox

Example

import Checkbox from '@leafygreen-ui/checkbox';

<Checkbox
  className="my-checkbox"
  onChange={event => {
    /* Something to handle the click event */
  }}
  label="This is how you enable a thing"
  checked={true}
  bold={false}
/>;

Output HTML

<label
  class="css-1rgbgdt my-checkbox"
  title="Create an item"
  for="checkbox-14827892"
>
  <input
    checked
    type="checkbox"
    role="checkbox"
    class="css-32kjhsdaf"
    id="checkbox-14827892"
    name="checkbox-14827892"
    aria-disabled="false"
    aria-checked="true"
    aria-labeledby="checkbox-14827892-label"
  />

  <div class="css-34kjkdfg">
    <div class="css-98sdfjsad"></div>
  </div>

  <span class="css-8xdsjfh9" id="checkbox-14827892-label">
    This is how you enable a thing
  </span>
</label>

Properties

PropTypeDescriptionDefault
darkModebooleanDetermines whether or not the Checkbox will appear in dark mode.false
checkedbooleanChecks the checkboxfalse
labelnodeThe label for the checkbox.''
descriptionstringA description for the checkbox.''
disabledbooleanDisables the checkbox.false
indeterminatebooleanSets the checkbox as indeterminate. NOTE: the checkbox will become out of sync with the indeterminate prop when it's clicked. Make sure to unset the indeterminate prop on change where you're controlling your input.false
classNamestringAdds a className to the outermost element.''
animatebooleanDetermines whether the checkbox will be animated when checked or unchecked. Note the "ripple" animation will only run when Checkbox is rendered within LeafygreenProvider, and only on click.true
idstring or numberAdds an ID only to the input, and it's used elsewhere for accessibility props.randomly generated string
onChangefunctionThe event handler function for the onChange event. Receives the associated event object as the first argument.() => {}
boldbooleanDetermines whether the text will be bold or not. (Currently disregarded in the new design)false
aria-labelledbystringA value for aria-labelledby. Allows use of the component with an external <label> element
aria-labelstringA value for aria-label. Allows use of the component without a label
...native input attributesAny other props will be spread on the root input element

Any other properties will be spread on the input element.

Test Harnesses

getTestUtils()

getTestUtils() is a util that allows consumers to reliably interact with LG Checkbox in a product test suite. If the Checkbox component cannot be found, an error will be thrown.

Usage

import Checkbox, { getTestUtils } from '@leafygreen-ui/checkbox';

const utils = getTestUtils(lgId?: string); // lgId refers to the custom `data-lgid` attribute passed to `Checkbox`. It defaults to 'lg-checkbox' if left empty.

Single Checkbox

import { render } from '@testing-library/react';
import Checkbox, { getTestUtils } from '@leafygreen-ui/checkbox';

...

test('checkbox', () => {
  render(<Checkbox label="label" checked />);
  const { getInput, getInputValue } = getTestUtils();

  expect(getInput()).toBeInTheDocument();
  expect(getInputValue()).toBe(true);
});

Multiple Checkbox components

When testing multiple Checkbox components it is recommended to add the custom data-lgid attribute to each Checkbox.

import { render } from '@testing-library/react';
import Checkbox, { getTestUtils } from '@leafygreen-ui/checkbox';

...

test('checkbox', () => {
  render(
    <>
      <Checkbox data-lgid="checkbox-1" label="label 1" />
      <Checkbox data-lgid="checkbox-2" label="label 2" checked />
    </>,
  );
  const utilsOne = getTestUtils('checkbox-1'); // data-lgid
  const utilsTwo = getTestUtils('checkbox-2'); // data-lgid
  // First Checkbox
  expect(utilsOne.checkboxetInput()).toBeInTheDocument();
  expect(utilsOne.getInputValue()).toBe(false);

  // Second Checkbox
  expect(utilsTwo.getInput()).toBeInTheDocument();
  expect(utilsTwo.getInputValue()).toBe(true);
});

Checkbox with other LG form elements

import { render } from '@testing-library/react';
import Toggle, { getTestUtils as getLGToggleTestUtils } from '@leafygreen-ui/toggle';
import TextInput, { getTestUtils as getLGTextInputTestUtils } from '@leafygreen-ui/text-input';
import Checkbox, { getTestUtils } from '@leafygreen-ui/checkbox';

...

test('Form', () => {
  render(
    <Form>
      <Toggle aria-label="Toggle label" />
      <TextInput label="TextInput label" />
      <Checkbox label="Checkbox label" />
    </Form>,
  );

  const toggleInputUtils = getLGToggleTestUtils();
  const textInputUtils = getLGTextInputTestUtils();
  const checkboxUtils = getTestUtils();

  // LG Toggle
  expect(toggleInputUtils.getInput()).toBeInTheDocument();
  expect(toggleInputUtils.getInputValue()).toBe('false');

  // LG TextInput
  expect(textInputUtils.getInput()).toBeInTheDocument();
  expect(textInputUtils.getInputValue()).toBe('');

  // LG Checkbox
  expect(checkboxUtils.getInput()).toBeInTheDocument();
  expect(checkboxUtils.getInputValue()).toBe(false);
});

Test Utils

Elements

const {
  getInput,
  getLabel,
  getDescription,
  getInputValue,
  isDisabled,
  isIndeterminate,
} = getTestUtils();
UtilDescriptionReturns
getInputReturns the input nodeHTMLButtonElement
getLabelReturns the label nodeHTMLButtonElement | null
getDescriptionReturns the description nodeHTMLButtonElement | null
getInputValueReturns the input valueboolean
isDisabledReturns whether the input is disabledboolean
isIndeterminateReturns whether the input is indeterminateboolean
13.1.0

24 days ago

13.0.0

1 month ago

12.1.1

2 months ago

12.1.0

3 months ago

12.0.20

7 months ago

12.0.17

9 months ago

12.0.16

9 months ago

12.0.19

8 months ago

12.0.18

8 months ago

12.0.13

10 months ago

12.0.15

9 months ago

12.0.14

9 months ago

13.0.0-alpha.1

10 months ago

13.0.0-alpha.0

10 months ago

12.0.9

12 months ago

12.0.12

11 months ago

12.0.11

11 months ago

12.0.10

12 months ago

12.0.11-next.6

12 months ago

12.0.11-next.5

12 months ago

12.0.11-next.7

12 months ago

12.0.11-next.2

12 months ago

12.0.11-next.1

12 months ago

12.0.11-next.4

12 months ago

12.0.11-next.3

12 months ago

12.0.11-next.0

12 months ago

12.0.7

1 year ago

12.0.8

1 year ago

12.0.5

1 year ago

12.0.6

1 year ago

12.0.3

1 year ago

12.0.4

1 year ago

12.0.0

1 year ago

12.0.1

1 year ago

12.0.2

1 year ago

10.0.4

2 years ago

11.0.0

2 years ago

11.0.1

2 years ago

10.1.0

2 years ago

10.1.1

2 years ago

10.1.0-next.0

2 years ago

10.1.0-next.1

2 years ago

10.0.1

2 years ago

10.0.2

2 years ago

10.0.3

2 years ago

10.1.0-test.0

2 years ago

10.1.0-next.2

2 years ago

10.0.0

2 years ago

9.0.0

2 years ago

8.0.1

2 years ago

8.0.3

2 years ago

8.0.2

2 years ago

7.0.0

2 years ago

7.0.1

2 years ago

8.0.0

2 years ago

6.0.6

3 years ago

6.0.5

3 years ago

6.0.4

3 years ago

6.0.3

3 years ago

6.0.2

3 years ago

6.0.1

4 years ago

6.0.0

4 years ago

5.0.0

4 years ago

4.1.1

4 years ago

4.1.0

4 years ago

4.0.4

4 years ago

4.0.3

4 years ago

4.0.2

4 years ago

4.0.1

4 years ago

4.0.0

4 years ago

3.2.1

5 years ago

3.2.0

5 years ago

3.1.6

5 years ago

3.1.5

5 years ago

3.1.4

5 years ago

3.1.3

5 years ago

3.1.2

5 years ago

3.1.1

5 years ago

3.1.0

5 years ago

3.0.2

5 years ago

3.0.1

5 years ago

3.0.0

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.1.2

5 years ago