diff --git a/packages/components/src/tailwind/Select/Select.stories.tsx b/packages/components/src/tailwind/Select/Select.stories.tsx
new file mode 100644
index 00000000000..5638c46d96a
--- /dev/null
+++ b/packages/components/src/tailwind/Select/Select.stories.tsx
@@ -0,0 +1,34 @@
+import React from 'react';
+import { Select } from './Select';
+
+export default {
+ title: 'Tailwind/Select',
+ component: Select,
+ parameters: {
+ layout: 'centered',
+ },
+ tags: ['autodocs'],
+ argTypes: {},
+ args: {},
+};
+
+const software = [
+ { id: 1, name: 'Adobe Photoshop' },
+ { id: 2, name: 'Sketch' },
+ { id: 3, name: 'Figma' },
+ { id: 4, name: 'Adobe XD' },
+ { id: 5, name: 'InVision' },
+];
+
+export const Default = (args: any) => {
+ return (
+
+
+
+ );
+};
+
+Default.args = {
+ label: 'Software',
+ items: software,
+};
diff --git a/packages/components/src/tailwind/Select/Select.tsx b/packages/components/src/tailwind/Select/Select.tsx
new file mode 100644
index 00000000000..b82541e15c5
--- /dev/null
+++ b/packages/components/src/tailwind/Select/Select.tsx
@@ -0,0 +1,199 @@
+import React from 'react';
+import { Description, FieldError, Label } from '../Field/Field';
+import { composeTailwindRenderProps, focusRing } from '../utils';
+import { ChevrondownIcon } from '../../components/icons/ChevrondownIcon';
+import { CheckboxIcon } from '../../components/icons/CheckboxIcon';
+
+import type {
+ ListBoxProps,
+ PopoverProps,
+ SelectProps as AriaSelectProps,
+ ValidationResult,
+ Key,
+} from 'react-aria-components';
+import {
+ Button,
+ Select as AriaSelect,
+ SelectValue,
+ composeRenderProps,
+ Popover,
+ Dialog,
+ ListBoxItem,
+ ListBox,
+} from 'react-aria-components';
+import { tv } from 'tailwind-variants';
+
+export type Option = {
+ id: Key;
+ name: string;
+};
+
+const selectTriggerStyles = tv({
+ extend: focusRing,
+ base: [
+ 'btr border-input flex h-10 w-full cursor-default items-center gap-4 gap-x-2 rounded-lg border py-2 pr-2 pl-3 text-start shadow-[inset_0_1px_0_0_rgba(255,255,255,0.1)] transition group-disabled:opacity-50 **:data-[slot=icon]:size-4 dark:shadow-none',
+ 'group-data-open:border-ring/70 group-data-open:ring-ring/20 group-data-open:ring-4',
+ 'text-fg group-invalid:border-danger group-invalid:ring-danger/20 forced-colors:group-invalid:border-[Mark]',
+ ],
+ variants: {
+ isDisabled: {
+ true: 'opacity-50 forced-colors:border-[GrayText] forced-colors:text-[GrayText]',
+ },
+ },
+});
+
+interface SelectTriggerProps extends React.ComponentProps {
+ className?: string;
+}
+
+const SelectTrigger = ({ className }: SelectTriggerProps) => {
+ return (
+
+ );
+};
+
+const content = tv({
+ base: [
+ 'bg-overlay text-overlay-fg max-w-xs rounded-xl border bg-clip-padding shadow-xs transition-transform [scrollbar-width:thin] sm:max-w-3xl sm:text-sm dark:backdrop-saturate-200 forced-colors:bg-[Canvas] [&::-webkit-scrollbar]:size-0.5',
+ ],
+ variants: {
+ isEntering: {
+ true: [
+ 'fade-in animate-in duration-150 ease-out',
+ 'data-[placement=left]:slide-in-from-right-1 data-[placement=right]:slide-in-from-left-1 data-[placement=top]:slide-in-from-bottom-1 data-[placement=bottom]:slide-in-from-top-1',
+ ],
+ },
+ isExiting: {
+ true: [
+ 'fade-out animate-out duration-100 ease-in',
+ 'data-[placement=left]:slide-out-to-right-1 data-[placement=right]:slide-out-to-left-1 data-[placement=top]:slide-out-to-bottom-1 data-[placement=bottom]:slide-out-to-top-1',
+ ],
+ },
+ },
+});
+
+interface SelectListProps
+ extends Omit, 'layout' | 'orientation'>,
+ Pick {
+ items?: Iterable;
+ listBoxclassName?:
+ | string
+ | ((values: { defaultClassName?: string }) => string);
+ popoverClassname?:
+ | string
+ | ((values: { defaultClassName?: string }) => string);
+}
+
+const SelectList = ({
+ items,
+ listBoxclassName,
+ popoverClassname,
+ placement = 'bottom',
+ ...props
+}: SelectListProps) => {
+ return (
+
+ content({
+ ...renderProps,
+ className: popoverClassname,
+ }),
+ )}
+ placement={placement}
+ >
+
+
+ );
+};
+
+interface SelectProps extends AriaSelectProps {
+ label?: string;
+ description?: string;
+ errorMessage?: string | ((validation: ValidationResult) => string);
+ items?: Iterable;
+ className?: string;
+ listBoxclassName?:
+ | string
+ | ((values: { defaultClassName?: string }) => string);
+ popoverClassname?:
+ | string
+ | ((values: { defaultClassName?: string }) => string);
+ placement?: PopoverProps['placement'];
+}
+
+export const Select = ({
+ label,
+ description,
+ errorMessage,
+ className,
+ items,
+ listBoxclassName,
+ popoverClassname,
+ placement,
+ ...props
+}: SelectProps) => {
+ return (
+
+ {label && }
+
+
+ {description && {description}}
+ {errorMessage}
+
+ );
+};