Propel

Select Field

A labeled select with description, popup options, and helper or error text.

Basic

Choose the default role for new members.

You can change this later.

Show code
import { SelectField } from "@makeplane/propel/components/select-field";

const ROLES = [
  { label: "Admin", value: "admin" },
  { label: "Member", value: "member" },
  { label: "Guest", value: "guest" },
];

export default function BasicDemo() {
  return (
    <SelectField
      name="role"
      label="Member role"
      description="Choose the default role for new members."
      magnitude="md"
      options={ROLES}
      defaultValue="member"
      hint="You can change this later."
    />
  );
}

Magnitudes

Magnitude steps the label and helper-text size; the trigger scale follows, with xl mapping onto the largest trigger.

Show code
import { SelectField } from "@makeplane/propel/components/select-field";

const VISIBILITY = [
  { label: "Private", value: "private" },
  { label: "Workspace", value: "workspace" },
  { label: "Public", value: "public" },
];

const MAGNITUDES = ["md", "lg", "xl"] as const;

export default function MagnitudesDemo() {
  return (
    <div className="flex flex-col gap-4">
      {MAGNITUDES.map((magnitude) => (
        <SelectField
          key={magnitude}
          name={`visibility-${magnitude}`}
          label={magnitude}
          magnitude={magnitude}
          options={VISIBILITY}
          defaultValue="workspace"
        />
      ))}
    </div>
  );
}

Disabled

Contact an admin to change your plan.

Show code
import { SelectField } from "@makeplane/propel/components/select-field";

const PLANS = [
  { label: "Free", value: "free" },
  { label: "Pro", value: "pro" },
  { label: "Enterprise", value: "enterprise" },
];

export default function DisabledDemo() {
  return (
    <SelectField
      name="plan"
      label="Workspace plan"
      description="Contact an admin to change your plan."
      magnitude="md"
      options={PLANS}
      defaultValue="pro"
      disabled
    />
  );
}

Invalid

Passing error marks the field invalid and replaces the helper text with the error message.

A project lead is required before publishing.
Show code
import { SelectField } from "@makeplane/propel/components/select-field";

const MEMBERS = [
  { label: "Unassigned", value: "unassigned" },
  { label: "Ana Silva", value: "ana" },
  { label: "Ravi Kumar", value: "ravi" },
];

export default function InvalidDemo() {
  return (
    <SelectField
      name="lead"
      label="Project lead"
      magnitude="md"
      options={MEMBERS}
      defaultValue="unassigned"
      error="A project lead is required before publishing."
    />
  );
}

Controlled

Selected: medium

Show code
import { SelectField } from "@makeplane/propel/components/select-field";
import * as React from "react";

const PRIORITIES = [
  { label: "Urgent", value: "urgent" },
  { label: "High", value: "high" },
  { label: "Medium", value: "medium" },
  { label: "Low", value: "low" },
];

export default function ControlledDemo() {
  const [value, setValue] = React.useState<string | null>("medium");
  return (
    <SelectField
      name="priority"
      label="Priority"
      description={`Selected: ${value ?? "none"}`}
      magnitude="md"
      options={PRIORITIES}
      value={value}
      onValueChange={setValue}
    />
  );
}

Installation

import { SelectField } from "@makeplane/propel/components/select-field";

Props

SelectField

PropTypeRequiredDescription
descriptionReactNodeNoSupporting text shown below the trigger. Replaced by `error` when an error is set.
errorReactNodeNoError text shown below the control.
hintReactNodeNoHelper text shown below the control. Replaced by `error` when an error is set.
labelstringYesVisible field label.
magnitude"md" | "lg" | "xl"YesLabel and helper text size.
optionsreadonly SelectFieldOption[]YesOptions rendered in the popup.