Skip to content
UI Kit
Accent color

Trades

For plumbers, electricians, roofers, tilers and painters. Services by area of the house, before and after, a quote request with estimate, an emergency service and materials.

5 variants
Switch category

Trades

Services by area

A house in section with pins that pop in. Hover or tap a pin and the services for that area slide in, with prices from and duration.

Open in Studio

Before and after

Projects as tabs, each with a comparison slider that swings once when it scrolls in, and the facts of the job beside it.

Open in Studio

Quote request

Pick the job, set the size on a slider and the timing on a gliding switch, add photos. The estimate range glides along beside it.

Open in Studio

Emergency service

A dark band with the number in large type, a live dot and the response time. Next to it a postcode check that answers at once, and the fees.

Open in Studio

Materials

Pick a laying pattern and a material, the floor sample redraws with a soft blend. The room size sets the total, herringbone costs a little more.

Open in Studio

Details

What Trades brings along, read from the registry and the source.

Variants
5
Version
1.0.0 · since 1.1.0
File
components/ui/trades.tsx
Brings along
utilskitbuttoniconrevealsectionmotioninputsliderimage-compare
npm packages
None
Languages
English and German, 50 texts of its own
In collections
Local business

Props

The TradesProps interface from components/ui/trades.tsx, with the comments from the code.

  • variantoptional
    TradesVariant

    servicesbefore-afterquote-requestemergencymaterials

  • eyebrowoptional
    React.ReactNode
  • titleoptional
    React.ReactNode
  • descriptionoptional
    React.ReactNode
  • houseoptional
    React.ReactNode

    services: the house picture the pins sit on, and its areas

  • areasoptional
    TradeArea[]
  • projectsoptional
    TradeProject[]
  • optionsoptional
    TradeOption[]

    quote-request

  • phoneoptional
    string

    emergency

  • responseMinutesoptional
    number
  • emergenciesoptional
    { label: string; icon?: IconName }[]
  • coverageoptional
    string[]

    emergency: postcode prefixes that are covered

  • feesoptional
    { label: string; price: number }[]
  • materialsoptional
    TradeMaterial[]

    materials

  • currencyoptional
    string
  • onSubmitoptional
    (data: Record<string, string>) => void

Built-in texts

Trades writes these texts itself. The language follows the KitProvider, the labels prop replaces single ones.

Show all 50 texts
areasEnglish Areas of the houseGerman Bereiche im Haus
fromEnglish from {price}German ab {price}
durationEnglish DurationGerman Dauer
askEnglish Ask about {area}German Zu {area} anfragen
projectsEnglish ProjectsGerman Projekte
budgetEnglish BudgetGerman Budget
placeEnglish PlaceGerman Ort
tradeEnglish TradeGerman Gewerk
beforeEnglish BeforeGerman Vorher
afterEnglish AfterGerman Nachher
whatEnglish What needs doing?German Was soll gemacht werden?
sizeEnglish SizeGerman Größe
sqmEnglish {n} m²German {n} m²
whenEnglish When should we start?German Wann soll es losgehen?
asapEnglish As soon as possibleGerman So bald wie möglich
monthsEnglish In 1 to 3 monthsGerman In 1 bis 3 Monaten
laterEnglish Later this yearGerman Später im Jahr
photosEnglish Photos of the roomGerman Fotos vom Raum
photosHintEnglish Optional, but it helps us quote more precisely.German Freiwillig, aber so können wir genauer kalkulieren.
nameEnglish NameGerman Name
phoneEnglish PhoneGerman Telefon
emailEnglish EmailGerman E-Mail
requiredEnglish Please fill in this field.German Bitte füllen Sie dieses Feld aus.
invalidEmailEnglish Please enter a valid email address.German Bitte geben Sie eine gültige E-Mail-Adresse ein.
estimateEnglish Rough estimateGerman Grobe Schätzung
estimateNoteEnglish Labour and material for an average job. The binding quote follows after a visit, free of charge.German Arbeit und Material für einen durchschnittlichen Auftrag. Das verbindliche Angebot folgt nach einem kostenlosen Termin vor Ort.
sendEnglish Request a quoteGerman Angebot anfragen
sentEnglish Your request is with usGerman Ihre Anfrage ist bei uns
sentTextEnglish We will call you within one working day to arrange a visit.German Wir rufen Sie innerhalb eines Werktags an und vereinbaren einen Termin vor Ort.
againEnglish Send another requestGerman Weitere Anfrage senden
toEnglish toGerman bis
availableEnglish Technician available nowGerman Techniker jetzt verfügbar
responseEnglish On site in about {n} minutesGerman In etwa {n} Minuten vor Ort
callEnglish Call nowGerman Jetzt anrufen
emergenciesEnglish We come at once forGerman Wir kommen sofort bei
checkEnglish Check your areaGerman Einsatzgebiet prüfen
postcodeEnglish PostcodeGerman Postleitzahl
checkBtnEnglish CheckGerman Prüfen
inAreaEnglish We cover {code}. Call now and we are on our way.German {code} liegt in unserem Gebiet. Rufen Sie jetzt an, wir machen uns auf den Weg.
outAreaEnglish {code} is outside our emergency area. A partner nearby can help, we will put you in touch.German {code} liegt außerhalb unseres Notdienstgebiets. Ein Partner in der Nähe hilft, wir stellen den Kontakt her.
feesEnglish Emergency feesGerman Notdienstpreise
patternEnglish PatternGerman Verlegemuster
materialEnglish MaterialGerman Material
roomEnglish Room sizeGerman Raumgröße
totalEnglish Including layingGerman Inklusive Verlegung
perSqmEnglish {price} per m²German {price} pro m²
sampleEnglish Order a free sampleGerman Kostenloses Muster bestellen
gridEnglish GridGerman Raster
plankEnglish PlanksGerman Dielen
herringboneEnglish HerringboneGerman Fischgrät

Accessibility

Read from the source of the component.

  • Trades handles the keys Arrow up, Arrow down, Arrow left and Arrow right itself.
  • Sets aria-checked, aria-controls, aria-label, aria-live and aria-selected, so screen readers announce purpose and state.
  • Uses the roles radio, radiogroup, status, tab, tablist and tabpanel.
  • Announces changes through a live region without moving focus.
  • Every field has a label, visible or for screen readers.
  • Adds text for screen readers where icons and graphics stand alone.
  • Shows a visible focus ring when used with the keyboard.
  • The server renders the starting state in full, JavaScript only adds the interaction.

Motion

  • Rises in briefly the first time it comes into view (kit-rise, useInView).
  • Moves with the scroll, its progress follows the position on the page.
  • Brings animations of its own, calmly timed and without wobble.
  • With reduced motion (prefers-reduced-motion) it stays still. 2 places in the code switch motion off then.

Frequent questions

How do I install Trades?

With aiw add @ai-website/trades. The command puts components/ui/trades.tsx into your project, the code is yours from then on. It brings along button, icon, reveal, section, motion, input, slider and image-compare. It needs no further npm packages.

Which variants does Trades have?

5 variants, Services by area, Before and after, Quote request, Emergency service and Materials. You pick one with the variant prop, for example variant="before-after".

Can I translate the texts of Trades?

Yes. Trades carries 50 texts of its own in English and German, such as “Areas of the house”, “Duration” and “Projects”. The language follows the KitProvider, single texts change through the labels prop.

Can an AI assistant build with Trades?

Yes. Through the MCP server of the aiw CLI, Claude, Cursor, GitHub Copilot, Windsurf, Codex and Gemini find Trades with aiw_components and install it with aiw_add @ai-website/trades. Name the variant in your prompt, for example variant="services", and the assistant writes your content straight into the props.

Can I adjust Trades without code?

Yes, in the Studio. All 5 variants are editable there, texts, lists and switches. The Studio writes the matching Trades code to copy.

Often searched

Jump to

Copied to the clipboard