mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-01-26 19:09:52 +00:00
## Summary Adds shadcn-vue Select components built on Reka UI primitives with design system styling. ## Changes **New Components** (`src/components/ui/select/`): - `Select.vue` - Root wrapper using `SelectRoot` from Reka UI - `SelectTrigger.vue` - Styled trigger with chevron icon - `SelectContent.vue` - Dropdown content with scroll buttons, z-index 3000 for PrimeVue dialog compatibility - `SelectItem.vue` - Individual option with check icon - `SelectGroup.vue`, `SelectLabel.vue`, `SelectSeparator.vue` - Grouping support - `SelectScrollUpButton.vue`, `SelectScrollDownButton.vue` - Overflow navigation - `SelectValue.vue` - Placeholder/value display **Styling**: - Uses design tokens (`bg-secondary-background`, `text-muted-foreground`, `border-border-default`) - Iconify icons via `icon-[lucide--*]` classes - Smooth transitions and focus states **Documentation**: - Comprehensive Storybook stories covering all variants - `AGENTS.md` with component creation guidelines ## Testing - [x] Storybook stories work correctly - [x] Components build without errors ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8205-feat-ui-add-shadcn-vue-Select-components-2ef6d73d365081fd994ddb1123c063e7) by [Unito](https://www.unito.io) --------- Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
37 lines
1.1 KiB
Vue
37 lines
1.1 KiB
Vue
<script setup lang="ts">
|
|
import type { SelectTriggerProps } from 'reka-ui'
|
|
import { SelectIcon, SelectTrigger } from 'reka-ui'
|
|
import type { HTMLAttributes } from 'vue'
|
|
|
|
import { cn } from '@/utils/tailwindUtil'
|
|
|
|
const { class: className, ...restProps } = defineProps<
|
|
SelectTriggerProps & { class?: HTMLAttributes['class'] }
|
|
>()
|
|
</script>
|
|
|
|
<template>
|
|
<SelectTrigger
|
|
v-bind="restProps"
|
|
:class="
|
|
cn(
|
|
'flex h-10 w-full cursor-pointer select-none items-center justify-between',
|
|
'rounded-lg px-4 py-2 text-sm',
|
|
'bg-secondary-background text-base-foreground',
|
|
'border-[2.5px] border-solid border-transparent',
|
|
'transition-all duration-200 ease-in-out',
|
|
'focus:border-node-component-border focus:outline-none',
|
|
'data-[placeholder]:text-muted-foreground',
|
|
'disabled:cursor-not-allowed disabled:opacity-60',
|
|
'[&>span]:truncate',
|
|
className
|
|
)
|
|
"
|
|
>
|
|
<slot />
|
|
<SelectIcon as-child>
|
|
<i class="icon-[lucide--chevron-down] shrink-0 text-muted-foreground" />
|
|
</SelectIcon>
|
|
</SelectTrigger>
|
|
</template>
|