## Feature Examples

### Size
- description: Adjust the size of the input using the `size` prop. It supports 3 sizes: - For most common cases, use the default `medium.` - To emphasize specific inputs in onboarding flows, use `large`. - Use `small` for more dense and compact layouts.
- example:
```jsx
<StorybookComponents.Stack flexDirection="column">
  <InputShell size="large" placeholder="Large" />
  <InputShell size="medium" placeholder="Medium" />
  <InputShell size="small" placeholder="Small" />
</StorybookComponents.Stack>;
```

### Menu arrow
- description: Use `menuArrow` prop to change InputShell to look like a Dropdown.
- example:
```jsx
<StorybookComponents.Stack flexDirection="column">
  <InputShell placeholder="No dropdown arrow" />
  <InputShell placeholder="With drodown arrow" menuArrow />
</StorybookComponents.Stack>;
```

### Disabled
- description: `disabled` removes all interactions and creates a disabled input state. Use it to highlight functions that are unavailable.
- example:
```jsx
<InputShell disabled={true}>Disabled</InputShell>;
```

### Render as
- description: `<InputShell/>` can be rendered as `div` or as `button`
- example:
```jsx
<StorybookComponents.Stack flexDirection="column">
  <InputShell
    as="div"
    placeholder="Rendered as div"
    dataHook="as-div-example"
  />
  <InputShell
    as="button"
    placeholder="Rendered as button"
    dataHook="as-button-example"
  />
</StorybookComponents.Stack>;
```

## Developer Examples

### Masked InputShell using use-mask-input
- description: _Requires use of external package. In this example `use-mask-input` package is used._
- example:
```jsx
() => {
  const { withMask } = require('use-mask-input');
  const maskRef = React.useMemo(
    () =>
      withMask('99 / 99', {
        placeholder: '_',
        showMaskOnHover: false,
      }),
    [],
  );
  return (
    <InputShell>
      <Input border="none" placeholder="MM / YY" inputRef={maskRef} />
    </InputShell>
  );
};
```

## Common Use Case Examples

### Border style
- description: To show border style in the dropdown you can use `<InputShell/>` as a `div` and use css or even an svg to create such designs.
- example:
```jsx
() => {
  const [opacity, setOpacity] = React.useState(50);

  return (
    <SidePanel onCloseButtonClick={() => {}} skin="floating" width="288px">
      <SidePanel.Header title="Design" />
      <SidePanel.Content>
        <FieldSet
          suffix={
            <ToggleButton labelValue="Small" size="tiny">
              <Icons.AdjustSmall />
            </ToggleButton>
          }
          legend="Borders"
          legendSize="small"
          legendPlacement="top"
          alignment="center"
          columns="32px auto 120px"
        >
          <div style={{ height: '32px' }}>
            <FillPreview fill="#000000" aspectRatio={1} />{' '}
          </div>
          <NumberInput
            value={opacity}
            min={0}
            max={10}
            onChange={(value) => setOpacity(value)}
            suffix={<Input.Affix>px</Input.Affix>}
            hideStepper
          />
          <InputShell menuArrow>
            <div
              style={{
                height: '20px',
                width: '80px',
                alignItems: 'center',
                justifyContent: 'center',
              }}
            >
              <div
                style={{
                  height: '10px',
                  borderBottom: '2px solid black',
                }}
              ></div>
            </div>
          </InputShell>
        </FieldSet>
      </SidePanel.Content>
    </SidePanel>
  );
};
```
