カラーピッカー

色を選択するコンポーネント。

使用法

ColorPickerの値を制御するには、v-modelディレクティブを使用します。

<script setup lang="ts">
const value = ref('#00C16A')
</script>

<template>
  <UColorPicker v-model="value" />
</template>
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('#00C16A')
</script>

<template>
  <UColorPicker v-model="value" />
</template>

状態を制御する必要がない場合は、default-valueプロパティを使用して初期値を設定します。

<template>
  <UColorPicker default-value="#00BCD4" />
</template>

RGBフォーマット

formatプロパティを使用して、ColorPickerのrgb値を設定します。

<script setup lang="ts">
const value = ref('rgb(0, 193, 106)')
</script>

<template>
  <UColorPicker format="rgb" v-model="value" />
</template>
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('rgb(0, 193, 106)')
</script>

<template>
  <UColorPicker format="rgb" v-model="value" />
</template>

HSLフォーマット

formatプロパティを使用して、ColorPickerのhsl値を設定します。

<script setup lang="ts">
const value = ref('hsl(153, 100%, 37.8%)')
</script>

<template>
  <UColorPicker format="hsl" v-model="value" />
</template>
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('hsl(153, 100%, 37.8%)')
</script>

<template>
  <UColorPicker format="hsl" v-model="value" />
</template>

CMYKフォーマット

formatプロパティを使用して、ColorPickerのcmyk値を設定します。

<script setup lang="ts">
const value = ref('cmyk(100%, 0%, 45.08%, 24.31%)')
</script>

<template>
  <UColorPicker format="cmyk" v-model="value" />
</template>
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('cmyk(100%, 0%, 45.08%, 24.31%)')
</script>

<template>
  <UColorPicker format="cmyk" v-model="value" />
</template>

CIELabフォーマット

formatプロパティを使用して、ColorPickerのlab値を設定します。

<script setup lang="ts">
const value = ref('lab(68.88% -60.41% 32.55%)')
</script>

<template>
  <UColorPicker format="lab" v-model="value" />
</template>
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('lab(68.88% -60.41% 32.55%)')
</script>

<template>
  <UColorPicker format="lab" v-model="value" />
</template>

スロットル

throttleプロパティを使用して、ColorPickerのスロットル値を設定します。

<script setup lang="ts">
const value = ref('#00C16A')
</script>

<template>
  <UColorPicker :throttle="100" v-model="value" />
</template>
<script setup lang="ts">
import { ref } from 'vue'

const value = ref('#00C16A')
</script>

<template>
  <UColorPicker :throttle="100" v-model="value" />
</template>

サイズ

sizeプロパティを使用してColorPickerのサイズを設定します。

<template>
  <UColorPicker size="xl" />
</template>

無効

disabledプロパティを使用してColorPickerを無効にします。

<template>
  <UColorPicker disabled />
</template>

例

カラーセレクターとして

カラーセレクターを作成するには、ButtonとPopoverコンポーネントを使用します。

<script setup lang="ts">
const color = ref('#00C16A')

const chip = computed(() => ({ backgroundColor: color.value }))
</script>

<template>
  <UPopover>
    <UButton label="Choose color" color="neutral" variant="outline">
      <template #leading>
        <span :style="chip" class="size-3 rounded-full" />
      </template>
    </UButton>

    <template #content>
      <UColorPicker v-model="color" class="p-2" />
    </template>
  </UPopover>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue'

const color = ref('#00C16A')

const chip = computed(() => ({ backgroundColor: color.value }))
</script>

<template>
  <UPopover>
    <UButton label="Choose color" color="neutral" variant="outline">
      <template #leading>
        <span :style="chip" class="size-3 rounded-full" />
      </template>
    </UButton>

    <template #content>
      <UColorPicker v-model="color" class="p-2" />
    </template>
  </UPopover>
</template>

API

Props

Prop Default Type
as
'div'
any

The element or component this component should render as.

throttle
50
number

Throttle time in ms for the color picker

disabled
boolean

Disable the color picker

defaultValue
'#FFFFFF'
string

The default value of the color picker

format
'hex'
"hex" | "rgb" | "hsl" | "cmyk" | "lab"

Format of the color

size
'md'
"xs" | "sm" | "md" | "lg" | "xl"
modelValue
string
ui
{ root?: SlotClass; picker?: SlotClass; selector?: SlotClass; selectorBackground?: SlotClass; selectorThumb?: SlotClass; track?: SlotClass; trackThumb?: SlotClass; }

Emits

Event Type
update:modelValue
[value: string | undefined]

Theme

app.config.ts
export default defineAppConfig({
  ui: {
    colorPicker: {
      slots: {
        root: 'data-[disabled]:opacity-75',
        picker: 'flex gap-4',
        selector: 'rounded-md touch-none',
        selectorBackground: 'w-full h-full relative rounded-md',
        selectorThumb: '-translate-y-1/2 -translate-x-1/2 absolute size-4 ring-2 ring-white rounded-full cursor-pointer data-[disabled]:cursor-not-allowed',
        track: 'w-[8px] relative rounded-md touch-none',
        trackThumb: 'absolute transform -translate-y-1/2 -translate-x-[4px] rtl:translate-x-[4px] size-4 rounded-full ring-2 ring-white cursor-pointer data-[disabled]:cursor-not-allowed'
      },
      variants: {
        size: {
          xs: {
            selector: 'w-38 h-38',
            track: 'h-38'
          },
          sm: {
            selector: 'w-40 h-40',
            track: 'h-40'
          },
          md: {
            selector: 'w-42 h-42',
            track: 'h-42'
          },
          lg: {
            selector: 'w-44 h-44',
            track: 'h-44'
          },
          xl: {
            selector: 'w-46 h-46',
            track: 'h-46'
          }
        }
      },
      defaultVariants: {
        size: 'md'
      }
    }
  }
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      ui: {
        colorPicker: {
          slots: {
            root: 'data-[disabled]:opacity-75',
            picker: 'flex gap-4',
            selector: 'rounded-md touch-none',
            selectorBackground: 'w-full h-full relative rounded-md',
            selectorThumb: '-translate-y-1/2 -translate-x-1/2 absolute size-4 ring-2 ring-white rounded-full cursor-pointer data-[disabled]:cursor-not-allowed',
            track: 'w-[8px] relative rounded-md touch-none',
            trackThumb: 'absolute transform -translate-y-1/2 -translate-x-[4px] rtl:translate-x-[4px] size-4 rounded-full ring-2 ring-white cursor-pointer data-[disabled]:cursor-not-allowed'
          },
          variants: {
            size: {
              xs: {
                selector: 'w-38 h-38',
                track: 'h-38'
              },
              sm: {
                selector: 'w-40 h-40',
                track: 'h-40'
              },
              md: {
                selector: 'w-42 h-42',
                track: 'h-42'
              },
              lg: {
                selector: 'w-44 h-44',
                track: 'h-44'
              },
              xl: {
                selector: 'w-46 h-46',
                track: 'h-46'
              }
            }
          },
          defaultVariants: {
            size: 'md'
          }
        }
      }
    })
  ]
})

Changelog

No recent changes