Props
| Name | Description |
|---|---|
adaptive Type: booleanDefaultconfig.adaptive (true) | When Only the picker adapts: below |
alpha Type: booleanDefaultfalse | 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 Type: string | 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 Type: stringDefault"off" | Guides the browser as to the type of information expected in the field. |
autofocus Type: Booleanish | Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field. |
clearable Type: booleanDefaultfalse | Displays a clear button when the input has a value and is being interacted with. Emits |
compact Type: booleanDefaultfalse | Compact density: the field uses the |
description Type: string | Text between the label and the input. Unlike the hint it is always visible; it joins the input's |
disabled Type: booleanDefaultfalse | Disables the component. Blocks the picker dot as well as the text. For an imported or derived colour prefer |
errors Type: string | string[] | Error messages under the field, a string or array, in an The mask guarantees the shape, so "that is not a colour" is not an error this field can produce. What is left is presence (a |
eyeDropper Type: booleanDefaultfalse | 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 |
formless Type: booleanDefaultfalse | Keep this control out of the enclosing |
hasErrors Type: booleanDefaultfalse | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
hasWarnings Type: booleanDefaultfalse | Define if the component should be in a warning state. Same chrome as errors with |
hideLabel Type: booleanDefaultfalse | Visually hides the label of the input while maintaining accessibility. |
hint Type: string | Text box to be displayed near the input, usually to indicate instructions. See example |
id Type: string | The |
inputAlign Type: FieldCrossAlign | Vertical position of the control in a side-by-side row; not |
label requiredType: string | Text content of the label of the element. Required, and display and accessibility only: it does not set the |
labelAlign Type: FieldCrossAlign | Vertical position of the label block in a side-by-side row; not |
labelMode Type: "outside" | "floating" | "inside" | Label rendering mode: |
labelPosition Type: "left" | "center" | "right" | Sets the text alignment of the label. |
layout Type: Responsive<FieldLayout> | How label and input sit together: Worth reaching for on a settings page, where a column of colours reads better as label-then-swatch rows. As everywhere in the family it applies only while the resolved label mode is |
loading Type: booleanDefaultfalse | Sets the component in a loading state, usually triggering some visual styles. |
modelValue Type: string | nullDefaultnull | Used by v-model. |
name Type: string | Defines the name of the input. Unset, the rendered |
offCanvasProps Type: Partial<BbOffCanvasProps> | Props for the phone sheet (the |
persistentHint Type: booleanDefaultfalse | Keeps the hint displayed. |
placeholder Type: string | Text shown while the field is empty. |
prepend:icon Type: string | Name of the icon to be added at the start of the input. |
pt Type: (PtMap<BbColorInputPtPart, FormControlPtState> & { 'swatch:selected'?: PtValue | undefined; } & { "root:outline"?: PtValue | undefined; "icon:outline"?: PtValue | undefined; "root:secondary"?: PtValue | undefined; "icon:secondary"?: PtValue | undefined; "spinner:outline"?: PtValue | undefined; "spinner:secondary"?: PtValue | undefined; "clear:outline"?: PtValue | undefined; "clear:secondary"?: PtValue | undefined; "root:ghost"?: PtValue | undefined; "icon:ghost"?: PtValue | undefined; "spinner:ghost"?: PtValue | undefined; "clear:ghost"?: PtValue | undefined; "label:outline"?: PtValue | undefined; "label:secondary"?: PtValue | undefined; "label:ghost"?: PtValue | undefined; "description:outline"?: PtValue | undefined; "description:secondary"?: PtValue | undefined; "description:ghost"?: PtValue | undefined; "message:outline"?: PtValue | undefined; "message:secondary"?: PtValue | undefined; "message:ghost"?: PtValue | undefined; "hint:outline"?: PtValue | undefined; "hint:secondary"?: PtValue | undefined; "hint:ghost"?: PtValue | undefined; "input:outline"?: PtValue | undefined; "input:secondary"?: PtValue | undefined; "input:ghost"?: PtValue | undefined; "box:outline"?: PtValue | undefined; "box:secondary"?: PtValue | undefined; "box:ghost"?: PtValue | undefined; "prefix:outline"?: PtValue | undefined; "prefix:secondary"?: PtValue | undefined; "prefix:ghost"?: PtValue | undefined; "suffix:outline"?: PtValue | undefined; "suffix:secondary"?: PtValue | undefined; "suffix:ghost"?: PtValue | undefined; }) | Passthrough, object form: |
pt:<part> Type: PtValue | Passthrough, attribute form: one attribute per part, |
readonly Type: booleanDefaultfalse | 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 colour that was imported rather than chosen. See example |
required Type: booleanDefaultfalse | Sets the input as required. |
reverse Type: booleanDefaultfalse | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
rules Type: RuleExpression<string | null> | vee-validate rules for this field. Only inside a Read only inside a |
swatches Type: boolean | string[][] | Controls swatches display in the picker:
- Each inner array is a column of shades, so ramps are designed vertically. A row-wise |
validationLabel Type: string | The field's name in validation messages ( |
validationMode Type: ValidationMode | When the field validates: |
variant Type: InputVariantTypeDefault'outline' | The field box's look, with |
warnings Type: string | string[] | Warning messages under the field, a string or array: amber, in their own |
v-model
Values kept in sync through v-model.
| Name | Description |
|---|---|
modelValue Type: string | null | Hex only, lowercase on emit, and it moves only when the typed text is a complete colour, or |
Events
| Name | Description |
|---|---|
blur Type: (event: FocusEvent): void | Emitted when the native text input loses focus. Forwards the original DOM |
change Type: (event: Event): void | Emitted when the native text input fires a change event. Forwards the original DOM |
click Type: (event: MouseEvent): void | Emitted when the input area receives a click. Forwards the original DOM |
compositionend Type: (event: CompositionEvent): void | An IME composition ended. Forwards the original DOM |
compositionstart Type: (event: CompositionEvent): void | An IME composition started. Forwards the original DOM |
focus Type: (event: FocusEvent): void | Emitted when the native text input gains focus. Forwards the original DOM |
hide Type: (): void | Emitted as soon as the palette starts to close. |
input Type: (event: Event): void | Emitted on native input events from the text field. Forwards the original DOM The raw DOM event, fired per keystroke on text that may not be a colour yet. Do not parse it: the model is the one that only ever holds a complete hex. See example |
keydown Type: (event: KeyboardEvent): void | Emitted for keyboard interaction on the input. Forwards the original DOM |
keyup Type: (event: KeyboardEvent): void | Emitted when a key is released on the input. Forwards the original DOM |
mousedown Type: (event: MouseEvent): void | Emitted when a pointing device button is pressed over the input. Forwards the original DOM |
mouseup Type: (event: MouseEvent): void | Emitted when a pointing device button is released over the input. Forwards the original DOM |
paste Type: (event: ClipboardEvent): void | Native clipboard paste. Forwards the original DOM |
show Type: (): void | Emitted as soon as the palette (the popover, or the sheet on a phone) starts to open. |
shown Type: (): void | Emitted once the palette is open and its open transition has finished. |
update:modelValue Type: (value: string | null): void | Emitted when the value becomes a valid hex color via typing/masking, when the field is cleared, or when the palette selects a color. Emits:
- 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 | Description |
|---|---|
append Type: Record<string, never> | Content after the colour indicator button, at the end of the inner container. It replaces the Renders after the swatch dot the component draws there, and replaces the default suffix wrapper. For an action beside the field use |
append:outer Type: Record<string, never> | Content rendered after the entire input control, outside the input chrome. This slot receives no scoped props. |
description Type: BbColorInputDescriptionSlotProps | Replaces the description text. Provided alone (no |
label Type: BbColorInputLabelSlotProps | Replaces the default label text rendered above the color input. |
prefix Type: 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 Type: Record<string, never> | Content rendered before the text input, at the start of the inner container. This slot receives no scoped props. |
prepend:outer Type: Record<string, never> | Content rendered before the entire input control, outside the input chrome. This slot receives no scoped props. |
suffix Type: Record<string, never> | Inline content at the end of the field, after the typed text, inside the default |
Renamed and removed
Names from v2 and from earlier 3.0 betas that no longer work, and what to write instead.
- slot
append-outerappend:outerfails silently directionlayoutfails silentlyhasWarninghasWarningsfails silentlypickereyeDropperfails silently- slot
prepend-outerprepend:outerfails silently validateOnvalidationModefails silentlyAn array of events became one mode (
aggressive|balanced|lazy|submit-only|submit-live). The old defaults (['blur'],['inactive'], a toggle's['update:modelValue', 'change', 'blur']) arebalanced, the new default: delete the prop. A text field on['update:modelValue']isvalidation-mode="aggressive". Set it once on<BbForm validation-mode>instead of per field.vidremovedfails silentlyA display name (v2:
vid="Email address") is nowvalidation-label; a field path (3.0 betas:vid="address.city") is nowname(brackets for a native post:address[city]).check --fixpicks by the value.