A customizable select component for choosing from a list of options.
"use client";
import { Button } from "@/components/ui/button/button";
import {
  Select,
  SelectIcon,
  SelectItem,
  SelectItemIndicator,
  SelectItemText,
  SelectList,
  SelectPopup,
  SelectPortal,
  SelectPositioner,
  SelectTrigger,
  SelectValue,
} from "@/components/ui/select/select";
import styles from "./select-demo.module.css";
const subscriptionPlans = [
  { value: "placeholder", label: "Select a Plan" },
  { value: "Starter", label: "Starter" },
  { value: "Professional", label: "Professional" },
  { value: "Business", label: "Business" },
  { value: "Enterprise", label: "Enterprise" },
];
export default function SelectDemo() {
  return (
    <Select defaultValue="placeholder" items={subscriptionPlans}>
      <SelectTrigger
        render={
          <Button className={styles.trigger} size="sm" variant="outline" />
        }
      >
        <SelectValue>
          {(value) => (
            <span
              className={
                value === "placeholder" ? styles.placeholder : undefined
              }
            >
              {subscriptionPlans.find((item) => item.value === value)?.label}
            </span>
          )}
        </SelectValue>
        <SelectIcon />
      </SelectTrigger>
      <SelectPortal>
        <SelectPositioner sideOffset={8}>
          <SelectPopup>
            <SelectList>
              <SelectItem disabled value="placeholder">
                <SelectItemText className={styles.itemText}>
                  Select a Plan
                </SelectItemText>
              </SelectItem>
              <SelectItem value="Starter">
                <SelectItemText>Starter</SelectItemText>
                <SelectItemIndicator />
              </SelectItem>
              <SelectItem value="Professional">
                <SelectItemText>Professional</SelectItemText>
                <SelectItemIndicator />
              </SelectItem>
              <SelectItem value="Business">
                <SelectItemText>Business</SelectItemText>
                <SelectItemIndicator />
              </SelectItem>
              <SelectItem value="Enterprise">
                <SelectItemText>Enterprise</SelectItemText>
                <SelectItemIndicator />
              </SelectItem>
            </SelectList>
          </SelectPopup>
        </SelectPositioner>
      </SelectPortal>
    </Select>
  );
}
npx shadcn@latest add https://roiui.com/r/select.json<Select>
  <SelectTrigger>
      <SelectValue />
      <SelectIcon />
  </SelectTrigger>
  <SelectPortal>
      <SelectOverlay />
      <SelectPositioner>
          <SelectScrollUpArrow />
          <SelectPopup>
              <SelectArrow />
              <SelectList>
                  <SelectItem>
                      <SelectItemText />
                      <SelectItemIndicator />
                  </SelectItem>
                  <SelectSeparator />
                  <SelectGroup>
                      <SelectGroupLabel />
                      <SelectItem>
                          <SelectItemText />
                          <SelectItemIndicator />
                      </SelectItem>
                  </SelectGroup>
              </SelectList>
          </SelectPopup>
          <SelectScrollDownArrow />
      </SelectPositioner>
  </SelectPortal>
</Select>