PlayfulSelect

Renders a custom select component with multiple states. The component uses downshift because it is well tested and includes good accessiblity practices.

<PlayfulSelect
  id="DynamicPlayfulSelect"
  name="DynamicPlayfulSelect"
  initialSelectedItem={{
    label: "Dropdown",
    value: "",
  }}
  items={[
    {
      label: "Label1",
      value: "Item1",
    },
    {
      label: "Label2",
      value: "Item2",
    },
    {
      label: "Label3",
      value: "Item3",
    },
    {
      label: "Label4",
      value: "Item4",
    },
  ]}
  onChange={(event: Event) => event}
/>

    With medium scale

    <PlayfulSelect
      id="DynamicPlayfulSelectMedium"
      name="DynamicPlayfulSelectMedium"
      initialSelectedItem={{
        label: "Dropdown",
        value: "",
      }}
      items={[
        {
          label: "Label1",
          value: "Item1",
        },
        {
          label: "Label2",
          value: "Item2",
        },
        {
          label: "Label3",
          value: "Item3",
        },
        {
          label: "Label4",
          value: "Item4",
        },
      ]}
      onChange={(event: Event) => event}
      scale="medium"
    />
    

      With scrollbar

      When using the default medium scale, 5 options will be shown with the 6th cut off. When using the small scale, 7 options will be shown with the 8th cut off.

      <PlayfulSelect
        id="DynamicPlayfulSelectWithScrollBar"
        name="DynamicPlayfulSelectWithScrollBar"
        initialSelectedItem={{
          label: "Dropdown",
          value: "",
        }}
        items={[
          {
            label: "Label1",
            value: "Item1",
          },
          {
            label: "Label2",
            value: "Item2",
          },
          {
            label: "Label3",
            value: "Item3",
          },
          {
            label: "Label4",
            value: "Item4",
          },
          {
            label: "Label5",
            value: "Item5",
          },
          {
            label: "Label6",
            value: "Item6",
          },
          {
            label: "Label7",
            value: "Item7",
          },
          {
            label: "Label8",
            value: "Item8",
          },
          {
            label: "Label9",
            value: "Item9",
          },
          {
            label: "Label10",
            value: "Item10",
          },
        ]}
        onChange={(event: Event) => event}
      />
      

        Disabled

        <PlayfulSelect
          id="DynamicPlayfulSelectDisabled"
          name="DynamicPlayfulSelectDisabled"
          initialSelectedItem={{
            label: "Dropdown",
            value: "",
          }}
          items={[
            {
              label: "Label1",
              value: "Item1",
            },
            {
              label: "Label2",
              value: "Item2",
            },
            {
              label: "Label3",
              value: "Item3",
            },
            {
              label: "Label4",
              value: "Item4",
            },
          ]}
          onChange={(event: Event) => event}
          disabled
        />
        

          Error state

          <PlayfulSelect
            id="DynamicPlayfulSelectInvalid"
            name="DynamicPlayfulSelectInvalid"
            initialSelectedItem={{
              label: "Dropdown",
              value: "",
            }}
            items={[
              {
                label: "Label1",
                value: "Item1",
              },
              {
                label: "Label2",
                value: "Item2",
              },
              {
                label: "Label3",
                value: "Item3",
              },
              {
                label: "Label4",
                value: "Item4",
              },
            ]}
            onChange={(event: Event) => event}
            invalid
          />
          

            Props

            PropsTypeRequiredValuesDefault
            initialSelectedItemItem--
            itemsItem[]--
            onChange(event: Event) => void--
            idstring--
            namestring--
            valueItem--
            scalestringsmall or mediumsmall
            disabledboolean--
            invalidboolean--

            Types

            type Item = {
              label: string;
              value: string;
            };
            
            type Event = {
              target: {
                id: string;
                name: string;
                value: string;
              };
            };