n-color-picker Component
The n-color-picker component allows users to select colors from various color modes (RGB, HEX, HSL, HSV). It supports alpha channel adjustment, color swatches, custom triggers, and integration with the browser's native color selector.
When to Use
Use n-color-picker when you need to:
- Allow users to select colors for themes, designs, or preferences
- Build color customization interfaces
- Support multiple color formats (RGB, HEX, HSL, HSV)
- Provide preset color swatches for quick selection
- Integrate with form validation
- Create custom color picker triggers
Basic Usage
Basic Color Picker
<template>
<n-color-picker v-model:value="color" />
</template>
<script setup>
import { ref } from 'vue'
const color = ref('#18A058')
</script>
Without Alpha Channel
<template>
<n-color-picker
v-model:value="color"
:show-alpha="false"
:actions="['confirm']"
/>
</template>
Different Sizes
<template>
<n-space vertical>
<n-color-picker size="small" />
<n-color-picker size="medium" />
<n-color-picker size="large" />
</n-space>
</template>
API Reference
Props
| Name | Type | Default | Description |
|---|---|---|---|
value / v-model:value |
string | null |
undefined |
Value of the picker. |
actions |
Array<'confirm' | 'clear'> | null |
null |
The types of buttons in the panel. |
default-show |
boolean |
undefined |
Whether to show the color panel by default. |
default-value |
string |
Black color | Default value of the picker. |
disabled |
boolean |
false |
Whether to disable the color picker. |
modes |
Array<'rgb' | 'hex' | 'hsl' | 'hsv'> |
['rgb', 'hex', 'hsl'] |
Available color modes. |
placement |
'top-start' | 'top' | ... |
'bottom-start' |
Color panel placement. |
render-label |
(color: string | null) => VNodeChild |
undefined |
Label render function. |
show |
boolean |
undefined |
Whether the color panel is shown. |
show-alpha |
boolean |
true |
Whether alpha channel can be adjusted. |
show-preview |
boolean |
false |
Whether the color preview is shown. |
size |
'small' | 'medium' | 'large' |
'medium' |
Size of the picker. |
swatches |
string[] |
undefined |
Preset color swatches. |
to |
string | HTMLElement | false |
'body' |
Where to attach the panel. |
Events
| Name | Parameters | Description |
|---|---|---|
update:value |
(value: string) |
Triggered when value changes. |
update:show |
(value: boolean) |
Triggered when panel show status changes. |
complete |
(value: string) |
Triggered when value change is complete (not during drag). |
confirm |
(value: string) |
Triggered when confirm button is clicked. |
clear |
() |
Triggered when clear button is clicked. |
Slots
| Name | Parameters | Description |
|---|---|---|
action |
() |
Custom action buttons. |
label |
(color: string | null) |
Label of the color picker trigger. |
trigger |
{ value, onClick, ref } |
Custom trigger element. |
Common Patterns
Color Swatches
<template>
<n-color-picker
v-model:value="color"
:swatches="[
'#FFFFFF',
'#18A058',
'#2080F0',
'#F0A020',
'rgba(208, 48, 80, 1)'
]"
/>
</template>
Specific Color Mode
<template>
<n-color-picker v-model:value="color" :modes="['hex']" />
</template>
Clearable Color Picker
<template>
<n-color-picker v-model:value="color" :actions="['clear']" />
</template>
With Confirm Button
<template>
<n-color-picker
v-model:value="color"
:show-alpha="false"
:actions="['confirm']"
@confirm="handleConfirm"
/>
</template>
<script setup>
import { ref } from 'vue'
const color = ref('#18A058')
const handleConfirm = (value) => {
console.log('Confirmed color:', value)
}
</script>
Custom Trigger
<template>
<n-flex :wrap="false" align="center">
<n-color-picker v-model:value="color">
<template #trigger="{ value, onClick, ref: triggerRef }">
<n-button :ref="triggerRef" circle quaternary @click="onClick">
<template #icon>
<n-icon :color="value || '#000'">
<PaletteIcon />
</n-icon>
</template>
</n-button>
</template>
</n-color-picker>
</n-flex>
</template>
<script setup>
import { ref } from 'vue'
import { ColorWand as PaletteIcon } from '@vicons/ionicons5'
const color = ref('#18a058')
</script>
Native Color Selector
<template>
<n-color-picker :show-preview="true" />
</template>
With Form Validation
<template>
<n-form :model="model">
<n-form-item label="Color (#18A058)" path="color" :rule="colorRule">
<n-color-picker v-model:value="model.color" :show-alpha="false" />
</n-form-item>
</n-form>
</template>
<script setup>
import { ref } from 'vue'
const model = ref({
color: null
})
const colorRule = {
required: true,
validator: (rule, value) => {
return value === '#18A058'
},
message: 'Please select #18A058',
trigger: ['blur', 'change']
}
</script>
Disabled State
<template>
<n-color-picker disabled />
</template>
Custom Label Rendering
<template>
<n-color-picker v-model:value="color" :render-label="renderLabel" />
</template>
<script setup>
import { ref, h } from 'vue'
const color = ref('#18A058')
const renderLabel = (color) => {
return h('span', { style: { color } }, color || 'No color')
}
</script>
Best Practices
Use
show-alpha: falsefor solid colors: When alpha transparency is not needed, disable it to simplify the UI.Provide swatches for common colors: Use the
swatchesprop to offer preset colors for quick selection.Use
actions: ['confirm']for important selections: When color selection has significant effects, require explicit confirmation.Leverage
show-previewfor native picker: Enable preview to allow users to use browser's native color picker features.Choose appropriate modes: Limit
modesto only those needed by your application to reduce complexity.Use custom triggers for unique designs: The
triggerslot allows complete customization of the picker's appearance.Handle
completevsupdate:value: Usecompletefor operations that should only run after user finishes dragging.Consider form integration: The color picker works well with
n-formfor validation scenarios.