Configuration
TreatmentConsultant takes a single optional config prop — a deep-partial version of TreatmentConsultantConfig. Anything you don't provide falls back to sensible defaults, so most integrations only need to override a handful of fields.
<TreatmentConsultant
:config="{
behaviour: { currency: `GBP` },
text: { cta: { bookHref: `/book-appointment` } },
}"
/>Merge behaviour
The three top-level shapes in TreatmentConsultantConfig merge differently:
| Key | Merge strategy |
|---|---|
hairTypes, naturalColours, desiredColours, treatments, applicationTypes, cuts, greyCoverageOptions, shades, naturalShades | Replaced wholesale — provide the full array if you override any of these |
text | Deep-merged — override only the keys you need |
behaviour | Shallow-merged |
Behaviour
| Key | Type | Description |
|---|---|---|
autoAdvance | boolean | Automatically move to the next step once a selection is made |
allowMultipleTreatments | boolean | Let clients select more than one add-on treatment |
currency | string | Currency code used when formatting treatment/recommendation prices |
showCutStep | boolean | Show or hide the Cut step entirely |
showTreatmentsStep | boolean | Show or hide the Style & Treatments step entirely |
swatchVariant | "circle" | "square" | "portrait" | "landscape" | Shape applied to every colour/image swatch (and its option button) across the whole wizard. Default "circle" |
dreamColourMode | "basic" | "granular" | "granular" switches Dream Colour to a tabbed catalog of individual shades (config.shades) — requires a Premium license, see Granular shade catalog mode below. Default "basic" |
naturalColourMode | "basic" | "granular" | Same as dreamColourMode, for the Natural Colour step (config.naturalShades) — also requires a Premium license. Default "basic" |
theme | "default" | "monochrome-light" | "monochrome-dark" | Switches the component's colour treatment — see Themes. Default "default" |
sharpCorners | boolean | Squares off every rounded corner (cards, buttons, panels, the license watermark). Deliberately circular/pill shapes are unaffected. Default false |
Wizard steps
The wizard has 7 internal step indices. Application Type is auto-skipped when the client picks "none" for dream colour; Cut and Treatments can each be turned off entirely via behaviour above.
| Step | Notes |
|---|---|
| Hair Type | |
| Natural Colour | |
| Dream Colour | |
| Application Type | Auto-skipped when dream colour is "none" |
| Cut | Skippable via behaviour.showCutStep |
| Treatments | Skippable via behaviour.showTreatmentsStep |
| Results |
Text
Every user-facing string in the widget lives under text — step headings, navigation labels, the results screen, the summary sidebar, and the final call-to-action. Override just the keys you need; anything else falls back to the English defaults. See the TextConfig reference for the full shape.
Option arrays
hairTypes, naturalColours, desiredColours, treatments, applicationTypes, cuts, greyCoverageOptions, shades and naturalShades define the selectable options at each step. These replace the defaults entirely when provided, so a partial override isn't possible — supply the complete list. See the option type reference for each shape.
Granular shade catalog mode
Requires a Premium license. By default, Dream Colour and Natural Colour each show their 7-item broad-category grid. Setting behaviour.dreamColourMode and/or behaviour.naturalColourMode to "granular" switches that step to a tabbed catalog of individual named shades — config.shades for Dream Colour, config.naturalShades for Natural Colour — grouped into tabs derived from whatever category ids appear in the data. The two modes are independent.
On a Basic or Standard license (or no/invalid license), "granular" is silently treated as "basic" — no error, no locked/upsell UI. The same fallback applies on a Premium license if the relevant catalog is empty. Selecting a shade is functionally equivalent to selecting its broad category for suitability purposes; the specific shade is additionally tracked as ConsultationSelections.desiredShade / .naturalShade. See Licensing for how license tiers are enforced.
Grey coverage
A second, independent question shown beneath the Natural Colour swatches: config.greyCoverageOptions (default: None / Some / Significant / Mostly Grey). Tracked as ConsultationSelections.greyCoverage and shown as its own Results summary card, but — unlike hair type/natural colour/desired colour — it never feeds the suitability matrix and never triggers autoAdvance.
Header text & the header slot
text.header.brand (empty string hides it) and text.header.title set the built-in header shown above the step content — brand/salon name plus a persistent title, alongside a live progress label. To replace the header's markup entirely (a custom logo/progress bar), use the scoped #header slot instead — see the Slots reference.
Events
| Event | Payload | Fires when |
|---|---|---|
change | ConsultationSelections | Any selection changes |
complete | ConsultationSelections | The client reaches the Results step |