From 192ce2d34a4cf2e975bda2e5fd07447428b16a86 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Mon, 26 Jan 2026 12:43:25 +0300 Subject: [PATCH] feat(select): add shadcn select component --- src/shared/shadcn/ui/select/index.ts | 37 ++++++++++++++ .../shadcn/ui/select/select-content.svelte | 48 +++++++++++++++++++ .../ui/select/select-group-heading.svelte | 21 ++++++++ .../shadcn/ui/select/select-group.svelte | 7 +++ .../shadcn/ui/select/select-item.svelte | 41 ++++++++++++++++ .../shadcn/ui/select/select-label.svelte | 23 +++++++++ .../shadcn/ui/select/select-portal.svelte | 7 +++ .../select/select-scroll-down-button.svelte | 23 +++++++++ .../ui/select/select-scroll-up-button.svelte | 23 +++++++++ .../shadcn/ui/select/select-separator.svelte | 18 +++++++ .../shadcn/ui/select/select-trigger.svelte | 32 +++++++++++++ src/shared/shadcn/ui/select/select.svelte | 11 +++++ 12 files changed, 291 insertions(+) create mode 100644 src/shared/shadcn/ui/select/index.ts create mode 100644 src/shared/shadcn/ui/select/select-content.svelte create mode 100644 src/shared/shadcn/ui/select/select-group-heading.svelte create mode 100644 src/shared/shadcn/ui/select/select-group.svelte create mode 100644 src/shared/shadcn/ui/select/select-item.svelte create mode 100644 src/shared/shadcn/ui/select/select-label.svelte create mode 100644 src/shared/shadcn/ui/select/select-portal.svelte create mode 100644 src/shared/shadcn/ui/select/select-scroll-down-button.svelte create mode 100644 src/shared/shadcn/ui/select/select-scroll-up-button.svelte create mode 100644 src/shared/shadcn/ui/select/select-separator.svelte create mode 100644 src/shared/shadcn/ui/select/select-trigger.svelte create mode 100644 src/shared/shadcn/ui/select/select.svelte diff --git a/src/shared/shadcn/ui/select/index.ts b/src/shared/shadcn/ui/select/index.ts new file mode 100644 index 0000000..8c303c3 --- /dev/null +++ b/src/shared/shadcn/ui/select/index.ts @@ -0,0 +1,37 @@ +import Content from './select-content.svelte'; +import GroupHeading from './select-group-heading.svelte'; +import Group from './select-group.svelte'; +import Item from './select-item.svelte'; +import Label from './select-label.svelte'; +import Portal from './select-portal.svelte'; +import ScrollDownButton from './select-scroll-down-button.svelte'; +import ScrollUpButton from './select-scroll-up-button.svelte'; +import Separator from './select-separator.svelte'; +import Trigger from './select-trigger.svelte'; +import Root from './select.svelte'; + +export { + Content, + Content as SelectContent, + Group, + Group as SelectGroup, + GroupHeading, + GroupHeading as SelectGroupHeading, + Item, + Item as SelectItem, + Label, + Label as SelectLabel, + Portal, + Portal as SelectPortal, + Root, + // + Root as Select, + ScrollDownButton, + ScrollDownButton as SelectScrollDownButton, + ScrollUpButton, + ScrollUpButton as SelectScrollUpButton, + Separator, + Separator as SelectSeparator, + Trigger, + Trigger as SelectTrigger, +}; diff --git a/src/shared/shadcn/ui/select/select-content.svelte b/src/shared/shadcn/ui/select/select-content.svelte new file mode 100644 index 0000000..572f197 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-content.svelte @@ -0,0 +1,48 @@ + + + + + + + {@render children?.()} + + + + diff --git a/src/shared/shadcn/ui/select/select-group-heading.svelte b/src/shared/shadcn/ui/select/select-group-heading.svelte new file mode 100644 index 0000000..4e8f720 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-group-heading.svelte @@ -0,0 +1,21 @@ + + + + {@render children?.()} + diff --git a/src/shared/shadcn/ui/select/select-group.svelte b/src/shared/shadcn/ui/select/select-group.svelte new file mode 100644 index 0000000..8e0e694 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-group.svelte @@ -0,0 +1,7 @@ + + + diff --git a/src/shared/shadcn/ui/select/select-item.svelte b/src/shared/shadcn/ui/select/select-item.svelte new file mode 100644 index 0000000..e375e45 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-item.svelte @@ -0,0 +1,41 @@ + + + + {#snippet children({ selected, highlighted })} + + {#if selected} + + {/if} + + {#if childrenProp} + {@render childrenProp({ selected, highlighted })} + {:else} + {label || value} + {/if} + {/snippet} + diff --git a/src/shared/shadcn/ui/select/select-label.svelte b/src/shared/shadcn/ui/select/select-label.svelte new file mode 100644 index 0000000..301930d --- /dev/null +++ b/src/shared/shadcn/ui/select/select-label.svelte @@ -0,0 +1,23 @@ + + +
+ {@render children?.()} +
diff --git a/src/shared/shadcn/ui/select/select-portal.svelte b/src/shared/shadcn/ui/select/select-portal.svelte new file mode 100644 index 0000000..c4fc326 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-portal.svelte @@ -0,0 +1,7 @@ + + + diff --git a/src/shared/shadcn/ui/select/select-scroll-down-button.svelte b/src/shared/shadcn/ui/select/select-scroll-down-button.svelte new file mode 100644 index 0000000..bdb96f5 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-scroll-down-button.svelte @@ -0,0 +1,23 @@ + + + + + diff --git a/src/shared/shadcn/ui/select/select-scroll-up-button.svelte b/src/shared/shadcn/ui/select/select-scroll-up-button.svelte new file mode 100644 index 0000000..b28fbc9 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-scroll-up-button.svelte @@ -0,0 +1,23 @@ + + + + + diff --git a/src/shared/shadcn/ui/select/select-separator.svelte b/src/shared/shadcn/ui/select/select-separator.svelte new file mode 100644 index 0000000..a570547 --- /dev/null +++ b/src/shared/shadcn/ui/select/select-separator.svelte @@ -0,0 +1,18 @@ + + + diff --git a/src/shared/shadcn/ui/select/select-trigger.svelte b/src/shared/shadcn/ui/select/select-trigger.svelte new file mode 100644 index 0000000..b9b280f --- /dev/null +++ b/src/shared/shadcn/ui/select/select-trigger.svelte @@ -0,0 +1,32 @@ + + + + {@render children?.()} + + diff --git a/src/shared/shadcn/ui/select/select.svelte b/src/shared/shadcn/ui/select/select.svelte new file mode 100644 index 0000000..8eca78b --- /dev/null +++ b/src/shared/shadcn/ui/select/select.svelte @@ -0,0 +1,11 @@ + + +