combobox

A combobox with an icon addon

A combobox with an icon addon

Загрузка превью…

src/combobox/c-combobox-9.vue

<script setup lang="ts">
/**
 * `InputGroupAddon`/`InputGroupInput` вне области порта (только
 * `select`/`combobox`), поэтому дополнительный addon-слот с иконкой
 * инлайнен буквально теми же классами, что и в `ComboboxInput.vue`
 * (см. `packages/ui/src/ui/combobox/variants.ts` для их происхождения).
 */
import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxList } from "@/components/ui/combobox"
import { Field } from "@/components/ui/field"

const frameworks = ["Next.js", "SvelteKit", "Nuxt.js", "Remix", "Astro"]

function focusInputUnlessButton(event: MouseEvent) {
  const target = event.target as HTMLElement
  if (target.closest("button")) return
  ;(event.currentTarget as HTMLElement).parentElement?.querySelector("input")?.focus()
}
</script>

<template>
  <Field class="max-w-xs">
    <Combobox>
      <ComboboxInput placeholder="Select a framework">
        <div
          data-slot="input-group-addon"
          role="group"
          data-align="inline-start"
          class="cn-input-group-addon flex cursor-text items-center justify-center select-none cn-input-group-addon-align-inline-start order-first"
          @click="focusInputUnlessButton"
        >
          <svg
            xmlns="http://www.w3.org/2000/svg"
            width="24"
            height="24"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
            class="text-muted-foreground size-4"
          >
            <circle cx="12" cy="12" r="10" />
            <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" />
            <path d="M2 12h20" />
          </svg>
        </div>
      </ComboboxInput>
      <ComboboxContent>
        <ComboboxEmpty>No items found.</ComboboxEmpty>
        <ComboboxList>
          <ComboboxItem v-for="item in frameworks" :key="item" :value="item">
            {{ item }}
          </ComboboxItem>
        </ComboboxList>
      </ComboboxContent>
    </Combobox>
  </Field>
</template>

Установка

npx shadcn-vue@latest add https://revueui.rootapi.dev/r/c-combobox-9.json

Зависимости реестра

Источник: порт из ReUI (Keenthemes, MIT)