Socket
Socket
Sign inDemoInstall

@leafygreen-ui/text-input

Package Overview
Dependencies
147
Maintainers
5
Versions
100
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @leafygreen-ui/text-input

leafyGreen UI Kit Text Input


Version published
Weekly downloads
29K
decreased by-28.24%
Maintainers
5
Created
Weekly downloads
 

Readme

Source

Text Input

npm (scoped)

View on MongoDB.design

Installation

Yarn

yarn add @leafygreen-ui/text-input

NPM

npm install @leafygreen-ui/text-input

Peer Dependencies

PackageVersion
@leafygreen-ui/leafygreen-provider^1.1.0

Example

import TextInput from '@leafygreen-ui/text-input';

const [value, setValue] = useState('');

return (
  <TextInput
    label="Email"
    description="Enter your email below"
    placeholder="your.email@example.com"
    onChange={event => {
      /* Something to handle the change event */
    }}
    value={value}
  />
);

Properties

PropTypeDescriptionDefault
idstringid associated with the TextInput component.
labelstringText shown in bold above the input element.
descriptionstringText that gives more detail about the requirements for the input.
optionalbooleanMarks the input as optionalfalse
disabledbooleanDisabled the inputfalse
onChangefunctionThe event handler function for the 'onchange' event. Accepts the change event object as its argument and returns nothing.
onBlurfunctionThe event handler function for the 'onblur' event. Accepts the focus event object as its argument and returns nothing.
placeholderstringThe placeholder text shown in the input field before the user begins typing.
errorMessagestringText that gives more detail about the requirements for the input.'This input needs your attention'
successMessagestringText that indicates that the requirements for the input are met.'Success'
state'none', 'valid', 'error'Describes the state of the TextInput element before and after the input has been validated'none'
valuestringSets the HTML value attribute.''
classNamestringAdds a className to the class attribute.''
type'email', 'password', 'search', 'text', 'url', 'tel', 'number'Sets type for TextInput'text'
darkModebooleanDetermines whether or not the component will appear in dark mode.false
sizeVariant'xsmall', 'small', 'default', 'large',Sets the side padding, text size, and input height.default
baseFontSize14, 16Determines the base font-size of the component if the sizeVariant prop is set to default14
...native input attributesAny other props will be spread on the root input element

Special Case: Aria Labels

Either label or aria-labelledby must be provided a string, or there will be a console error. This is to ensure that screenreaders have a description for what the Text Input does.

Test Harnesses

getTestUtils()

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

Usage

import TextInput, { getTestUtils } from '@leafygreen-ui/text-input';

const utils = getTestUtils(lgId?: string); // lgId refers to the custom `data-lgid` attribute passed to `TextInput`. It defaults to 'lg-text_input' if left empty.
Single TextInput
import { render } from '@testing-library/react';
import TextInput, { getTestUtils } from '@leafygreen-ui/text-input';

...

test('text-input', () => {
  render(<TextInput label="label" value="text input" />);
  const { getInput, getInputValue } = getTestUtils();

  expect(getInput()).toBeInTheDocument();
  expect(getInputValue()).toBe('text input');
});
Multiple TextInput's

When testing multiple TextInput's it is recommended to add the custom data-lgid attribute to each TextInput.

import { render } from '@testing-library/react';
import TextInput, { getTestUtils } from '@leafygreen-ui/text-input';

...

test('text-input', () => {
  render(
    <>
      <TextInput data-lgid="text-input-1" label="label 1" />
      <TextInput data-lgid="text-input-2" label="label 2" value="text input" />
    </>,
  );
  const utilsOne = getTestUtils('text-input-1'); // data-lgid
  const utilsTwo = getTestUtils('text-input-2'); // data-lgid

  // First TextInput
  expect(utilsOne.getInput()).toBeInTheDocument();
  expect(utilsOne.getInputValue()).toBe('');

  // Second TextInput
  expect(utilsTwo.getInput()).toBeInTheDocument();
  expect(utilsTwo.getInputValue()).toBe('text input');
});
TextInput with other LG form elements
import { render } from '@testing-library/react';
import Toggle, { getTestUtils as getToggleTestUtils } from '@leafygreen-ui/toggle';
import TextInput, { getTestUtils as getTextInputTestUtils } from '@leafygreen-ui/text-input';
import TextArea, { getTestUtils as getTextAreaTestUtils } from '@leafygreen-ui/text-area';

...

test('Form', () => {
  render(
    <Form>
      <Toggle aria-label="Toggle label" />
      <TextInput label="TextInput label" />
      <TextArea label="TextArea label" />
    </Form>,
  );
  const toggleInputUtils = getToggleTestUtils();
  const textInputUtils = getTextInputTestUtils();
  const textAreaUtils = getTextAreaTestUtils();

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

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

  // LG TextArea
  expect(textAreaUtils.getInput()).toBeInTheDocument();
  expect(textAreaUtils.getInputValue()).toBe('');
});

Test Utils

const {
  getInput,
  getLabel,
  getDescription,
  getErrorMessage,
  getInputValue,
  isDisabled,
  isValid,
  isError,
  isOptional,
} = getTestUtils();
UtilDescriptionReturns
getInputReturns the input nodeHTMLButtonElement
getLabelReturns the label nodeHTMLButtonElement | null
getDescriptionReturns the description nodeHTMLButtonElement | null
getErrorMessageReturns the error message nodeHTMLButtonElement | null
getInputValueReturns the input valuestring
isDisabledReturns whether the input is disabledboolean
isValidReturns whether the input state is validboolean
isErrorReturns whether the input state is errorboolean
isOptionalReturns whether the input is optionalboolean

FAQs

Last updated on 15 Apr 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc