Props
| Name | Type | Default | Description |
|---|---|---|---|
adaptive | boolean | undefined | `config.adaptive` (`true`) | When Only the picker adapts: below |
alpha | boolean | undefined | false | Enable the alpha channel. Shows an opacity slider and uses It widens the mask as well as the picker, which is why an incoming |
append:icon | string | undefined | - | Name of the icon to be added at the end of the input. The append position is where the swatch dot already lives, and the clear button and error icon compete for it too. Anything that must stay visible belongs in |
autocomplete | string | undefined | "off" | Guides the browser as to the type of information expected in the field. |
autofocus | Booleanish | undefined | - | Sets autofocus on page load. |
clearable | boolean | undefined | false | Displays a clear button when the input has a value and is being interacted with. Emits |
compact | boolean | undefined | false | Displays the component in a compact version. See example |
description | string | undefined | - | Descriptive text displayed below the label and above the input. Unlike the hint it is always
visible, and it is linked to the input via |
direction | InputDirection | undefined | - | Direction of the layout of the component. Can either be a predefined value or a pattern separated by a space like Worth reaching for on a settings page, where a column of colors reads better as label-then-swatch rows. As everywhere in the family it applies only while the resolved label mode is |
disabled | boolean | undefined | false | Disables the component. Blocks the picker dot as well as the text. For an imported or derived color prefer |
errors | string | string[] | undefined | - | Can be a string or an array of string containing the messages to display.
They render in an The mask guarantees the shape, so "that is not a color" is not an error this field can produce. What is left is presence — a |
eyeDropper | boolean | undefined | false | Show an eyedropper button to sample any color on screen. Uses the native EyeDropper API — hidden automatically on unsupported browsers. The button renders only where the browser implements the native |
hasErrors | boolean | undefined | false | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
hasWarnings | boolean | undefined | false | Define if the component should be in a warning state.
Same chrome as errors with |
hideLabel | boolean | undefined | false | Visually hides the label of the input while maintaining accessibility. |
hint | string | undefined | - | Text box to be displayed near the input, usually to indicate instructions. See example |
id | string | undefined | - | The identifier of the component. |
labelrequired | string | - | Text content of the label of the element. Required, and display and accessibility only — it does not set the |
labelMode | "outside" | "floating" | "inside" | undefined | - | Label rendering mode: |
labelPosition | "left" | "center" | "right" | undefined | - | Sets the text alignment of the label. |
loading | boolean | undefined | false | Sets the component in a loading state, usually triggering some visual styles. |
modelValuerequired | string | null | null | Used by v-model. |
name | string | undefined | - | Defines the name of the input. Unset, the rendered |
offCanvasProps | Partial<BbOffCanvasProps> | undefined | - | Props for the phone sheet. A |
persistentHint | boolean | undefined | false | Keeps the hint displayed. |
placeholder | string | undefined | - | String displayed when there's no data. |
prepend:icon | string | undefined | - | Name of the icon to be added at the start of the input. |
pt | (PtMap<BbColorInputPtPart, FormControlPtState> & { 'swatch:selected'?: PtValue | undefined; }) | undefined | - | Passthrough, object form: |
pt:box | PtValue | undefined | - | |
pt:box:disabled | PtValue | undefined | - | |
pt:box:errors | PtValue | undefined | - | |
pt:box:has-value | PtValue | undefined | - | |
pt:box:loading | PtValue | undefined | - | |
pt:box:readonly | PtValue | undefined | - | |
pt:box:warnings | PtValue | undefined | - | |
pt:clear | PtValue | undefined | - | |
pt:clear:disabled | PtValue | undefined | - | |
pt:clear:errors | PtValue | undefined | - | |
pt:clear:has-value | PtValue | undefined | - | |
pt:clear:loading | PtValue | undefined | - | |
pt:clear:readonly | PtValue | undefined | - | |
pt:clear:warnings | PtValue | undefined | - | |
pt:description | PtValue | undefined | - | |
pt:description:disabled | PtValue | undefined | - | |
pt:description:errors | PtValue | undefined | - | |
pt:description:has-value | PtValue | undefined | - | |
pt:description:loading | PtValue | undefined | - | |
pt:description:readonly | PtValue | undefined | - | |
pt:description:warnings | PtValue | undefined | - | |
pt:hint | PtValue | undefined | - | |
pt:hint:disabled | PtValue | undefined | - | |
pt:hint:errors | PtValue | undefined | - | |
pt:hint:has-value | PtValue | undefined | - | |
pt:hint:loading | PtValue | undefined | - | |
pt:hint:readonly | PtValue | undefined | - | |
pt:hint:warnings | PtValue | undefined | - | |
pt:icon | PtValue | undefined | - | |
pt:icon:disabled | PtValue | undefined | - | |
pt:icon:errors | PtValue | undefined | - | |
pt:icon:has-value | PtValue | undefined | - | |
pt:icon:loading | PtValue | undefined | - | |
pt:icon:readonly | PtValue | undefined | - | |
pt:icon:warnings | PtValue | undefined | - | |
pt:indicator | PtValue | undefined | - | |
pt:indicator:disabled | PtValue | undefined | - | |
pt:indicator:errors | PtValue | undefined | - | |
pt:indicator:has-value | PtValue | undefined | - | |
pt:indicator:loading | PtValue | undefined | - | |
pt:indicator:readonly | PtValue | undefined | - | |
pt:indicator:warnings | PtValue | undefined | - | |
pt:input | PtValue | undefined | - | |
pt:input:disabled | PtValue | undefined | - | |
pt:input:errors | PtValue | undefined | - | |
pt:input:has-value | PtValue | undefined | - | |
pt:input:loading | PtValue | undefined | - | |
pt:input:readonly | PtValue | undefined | - | |
pt:input:warnings | PtValue | undefined | - | |
pt:label | PtValue | undefined | - | |
pt:label:disabled | PtValue | undefined | - | |
pt:label:errors | PtValue | undefined | - | |
pt:label:has-value | PtValue | undefined | - | |
pt:label:loading | PtValue | undefined | - | |
pt:label:readonly | PtValue | undefined | - | |
pt:label:warnings | PtValue | undefined | - | |
pt:message | PtValue | undefined | - | |
pt:message:disabled | PtValue | undefined | - | |
pt:message:errors | PtValue | undefined | - | |
pt:message:has-value | PtValue | undefined | - | |
pt:message:loading | PtValue | undefined | - | |
pt:message:readonly | PtValue | undefined | - | |
pt:message:warnings | PtValue | undefined | - | |
pt:panel | PtValue | undefined | - | |
pt:panel:disabled | PtValue | undefined | - | |
pt:panel:errors | PtValue | undefined | - | |
pt:panel:has-value | PtValue | undefined | - | |
pt:panel:loading | PtValue | undefined | - | |
pt:panel:readonly | PtValue | undefined | - | |
pt:panel:warnings | PtValue | undefined | - | |
pt:prefix | PtValue | undefined | - | |
pt:prefix:disabled | PtValue | undefined | - | |
pt:prefix:errors | PtValue | undefined | - | |
pt:prefix:has-value | PtValue | undefined | - | |
pt:prefix:loading | PtValue | undefined | - | |
pt:prefix:readonly | PtValue | undefined | - | |
pt:prefix:warnings | PtValue | undefined | - | |
pt:root | PtValue | undefined | - | |
pt:root:disabled | PtValue | undefined | - | |
pt:root:errors | PtValue | undefined | - | |
pt:root:has-value | PtValue | undefined | - | |
pt:root:loading | PtValue | undefined | - | |
pt:root:readonly | PtValue | undefined | - | |
pt:root:warnings | PtValue | undefined | - | |
pt:sheet | PtValue | undefined | - | |
pt:sheet:disabled | PtValue | undefined | - | |
pt:sheet:errors | PtValue | undefined | - | |
pt:sheet:has-value | PtValue | undefined | - | |
pt:sheet:loading | PtValue | undefined | - | |
pt:sheet:readonly | PtValue | undefined | - | |
pt:sheet:warnings | PtValue | undefined | - | |
pt:spinner | PtValue | undefined | - | |
pt:spinner:disabled | PtValue | undefined | - | |
pt:spinner:errors | PtValue | undefined | - | |
pt:spinner:has-value | PtValue | undefined | - | |
pt:spinner:loading | PtValue | undefined | - | |
pt:spinner:readonly | PtValue | undefined | - | |
pt:spinner:warnings | PtValue | undefined | - | |
pt:suffix | PtValue | undefined | - | |
pt:suffix:disabled | PtValue | undefined | - | |
pt:suffix:errors | PtValue | undefined | - | |
pt:suffix:has-value | PtValue | undefined | - | |
pt:suffix:loading | PtValue | undefined | - | |
pt:suffix:readonly | PtValue | undefined | - | |
pt:suffix:warnings | PtValue | undefined | - | |
pt:swatch | PtValue | undefined | - | |
pt:swatch:disabled | PtValue | undefined | - | |
pt:swatch:errors | PtValue | undefined | - | |
pt:swatch:has-value | PtValue | undefined | - | |
pt:swatch:loading | PtValue | undefined | - | |
pt:swatch:readonly | PtValue | undefined | - | |
pt:swatch:selected | PtValue | undefined | - | |
pt:swatch:warnings | PtValue | undefined | - | |
readonly | boolean | undefined | false | Sets the input in a readonly state. Blocks the picker dot too, while the hex stays focusable, selectable and copyable. The honest state for a color that was imported rather than chosen. See example |
required | boolean | undefined | false | Sets the input as required. |
reverse | boolean | undefined | false | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
swatches | boolean | string[][] | undefined | - | Controls swatches display in the picker:
- Each inner array is a **column** of shades, so ramps are designed vertically. A row-wise |
variant | InputVariantType | undefined | 'outline' | Visual variant of the field box — the same names and tokens as the
|
warnings | string | string[] | undefined | - | Warning messages to display beneath the field, in their own |
v-model
Values kept in sync through v-model.
| Name | Type | Description |
|---|---|---|
modelValue | string | null | Hex only, lowercase on emit, and it moves only when the typed text is a complete color — or |
Events
| Name | Type | Description |
|---|---|---|
blur | (event: "blur", event: FocusEvent): void | |
change | (event: "change", event: Event): void | |
click | (event: "click", event: MouseEvent): void | |
compositionend | (event: "compositionend", event: CompositionEvent): void | |
compositionstart | (event: "compositionstart", event: CompositionEvent): void | |
focus | (event: "focus", event: FocusEvent): void | |
hidden | (event: "hidden"): void | |
hide | (event: "hide"): void | |
input | (event: "input", event: Event): void | The raw DOM event, fired per keystroke on text that may not be a color yet. Do not parse it — the model is the one that only ever holds a complete hex. See example |
keydown | (event: "keydown", event: KeyboardEvent): void | |
keyup | (event: "keyup", event: KeyboardEvent): void | |
mousedown | (event: "mousedown", event: MouseEvent): void | |
mouseup | (event: "mouseup", event: MouseEvent): void | |
paste | (event: "paste", event: ClipboardEvent): void | |
show | (event: "show"): void | |
shown | (event: "shown"): void | |
update:modelValue | (event: "update:modelValue", value: string | null): void | Fires on every drag frame while someone is inside the picker, so a live preview is free and a save on this event is not. Debounce persistence, or hang it on |
Slots
The listed properties are the ones exposed to the slot scope.
| Name | Type | Description |
|---|---|---|
append | Record<string, never> | Content rendered after the color picker indicator button, at the end of the inner container.
Mutually exclusive with Renders after the swatch dot the component draws there, and replaces the default suffix wrapper. For an action beside the field use |
append-outer | Record<string, never> | Content rendered after the entire input control, outside the input chrome. This slot receives no scoped props. |
description | BbColorInputDescriptionSlotProps | Replaces the description text. Provided alone (no |
label | BbColorInputLabelSlotProps | Replaces the default label text rendered above the color input. |
prefix | Record<string, never> | Inline content rendered at the start of the input field area, before the typed text. This slot receives no scoped props. |
prepend | Record<string, never> | Content rendered before the text input, at the start of the inner container. This slot receives no scoped props. |
prepend-outer | Record<string, never> | Content rendered before the entire input control, outside the input chrome. This slot receives no scoped props. |
suffix | Record<string, never> | Inline content rendered at the end of the input field area, after the typed text.
Renders inside the default |
Changes from v2
Props removed or renamed in 3.0. If you are coming from v2, the answer is here.
hasWarninghasWarningsfails silentlypickereyeDropperfails silently