data-zinevu | placeholder element | no value needed | the element stays a plain element | Turns an element into a widget, once w.js is on the page. Placeholders that appear later are mounted automatically. |
data-zvRequired. Without it the widget draws nothing and says why in the console. | all but book and appointment | 16–40 letters and digits · auto | the widget draws nothing — except a form placeholder on your funnel page, which takes the slug from zv_form in the address | The lead form's slug. Found in the portal on the form itself. auto (or leaving it out) only on a form placeholder on your own funnel page. |
data-widget | all | size · price · match · question · cta · form · book · appointment · chat | size | Which widget is drawn. |
data-url | all · required for book and appointment | absolute URL | the widget asks for the address itself | Where the visitor goes. Also the safety net when settings cannot be read, and for cta and form it saves a network request entirely. |
data-mount | single script tag only | CSS selector | the script tag's own position | Puts the widget inside an existing element. If the selector matches nothing the widget does not draw and says so in the console. |
data-locale | all | auto · nl · en · de · fr · tr | single script tag: nl · placeholder: auto | The language of the widget, and of the funnel it hands over to. With auto the widget reads what language your page is in — a language switcher, WPML, Polylang, GTranslate, Google Translate — and changes with it the moment a visitor switches. Which languages actually exist is the dealer's setting (portal → settings → lead forms): ask for one that is switched off and the widget comes back in one that is on. |
data-target | all | 3d · onepage · quick | form · a placeholder on your funnel page follows zv_target | Hands over to the 3D configurator, with onepage to the same form with every question on one page, or with quick to the quick quote (size, budget, contact details — answered with packages within the budget), instead of the flat step form. If the form does not run the quick quote, quick goes to the ordinary form. |
data-ref | all | your own text, max 120 characters | none | Your own reference for this visit. It travels with the request and comes back on the zinevu:lead event, so your page knows which visit became a request — something we do not tell you, because we say nothing about the visitor. We never read it, we only carry it. If one is already on the address (a button earlier in the route set it), that first reference stays. |
data-step | all · required for question | step key | the funnel opens at step one | Opens the funnel at a given question. On the question widget it decides which question is shown. |
data-theme | all | dark | light | The dark variant, for a dark section on your site. |
data-accent | all | #rrggbb | the form's own accent colour | Overrides the accent colour. Six hex digits only; the text colour on the button is computed from it, so a pale brand colour gets black letters instead of unreadable white. |
data-layout | all | hero | card | Puts a second column beside the card for a heading, an explanation and a reassurance. Only appears if you also pass data-title, data-intro or data-note. |
data-title | all | free text | the built-in text | The heading above the widget. |
data-label | all | free text | the built-in text | The button's caption. |
data-intro | hero layout | free text | no second column | The sentence that makes somebody use the widget. |
data-note | hero layout | free text | — | The small line underneath: lead time, no obligation, warranty. |
data-open | all but form · on book and appointment only drawer and modal | navigate · page · drawer · modal | navigate | Where the funnel opens: the funnel's address in the same tab, your own funnel page (with data-page), a panel from the side, or a centred panel. A panel is deliberately never the default. See Where the funnel opens. |
data-page | data-open="page" | path or URL of your funnel page | data-open falls back to navigate, with a console message | Your own page with a form placeholder on it. The visitor goes there with their answers, zv_form and zv_target in the address. |
data-modal | same as data-open | 1 | off | The old spelling of data-open="modal". Still works; when data-open is also present, data-open wins. |
data-mode | appointment · cta | inline · popup · floating (cta: floating) | appointment: inline · cta: a card with a button | How the widget appears: in the page, as a button that opens a panel, or as a floating button bottom-right that can sit in a footer on every page. A floating booking button opens a panel; a floating cta follows data-open. |
data-position | chat | right · left | bottom right | Which corner the chat button sits in. data-side and data-bottom (pixels, 20 by default) move it clear of anything already there — a cookie bar, or a back-to-top button. |
data-height | form · book and appointment in the page | auto · fill · number (px) · CSS length | auto — a screen tall with data-target="3d" | auto grows with the funnel. fill makes the frame a screen tall, less data-offset. A fixed height stays put, even when the funnel asks for a screen-tall frame itself. |
data-offset | form · book and appointment in the page | number (px) | 0 | The height of your site's fixed header. A screen-tall frame is that much shorter, and when the funnel scrolls to its frame it stops that far below the top. |
data-name · data-email · data-postcode | appointment | free text | empty | Prefills the calendar with what your own page already knows, for example from a logged-in customer. Nothing is read off the visitor. |
data-ar | only with data-target="3d" | 1 | off | Opens the 3D configurator straight into AR, so the visitor sees the product at true size in their own garden. Ignored on the flat form. |
data-shop | match | URL with {width} {height} {panels} {pane_width} {pane_height} | no shop link | Where a visitor with a stock measurement may go. Only appears when the measurement really can be built from stock. |
data-shop-label | match | free text | the built-in text | That link's caption. |
data-cart | match | URL on your own domain | no cart button | Your own endpoint that receives the measurement and answers with where to send the visitor. Everything that decides whether the item may exist and what it costs happens there — server-side, on your domain. |
data-product | match | product id | no cart button | Which article your endpoint adds. Without both data-cart and data-product the button does not appear. |
data-origin | all | origin, e.g. https://app.zinevu.com | the address w.js was loaded from (else https://app.zinevu.com) | Advanced: reads settings, indicative prices and size checks from a different API origin. Normally you leave it out. |