addedInput schema / properties / branding / additionalProperties
Added value: +false
changedInput schema / properties / branding / description
Previous value: -"Brand changes: { accentColor?: '#RRGGBB', settings?: { ...brand tokens } }."New value: +"Brand changes. accentColor sits at this level; every other token goes inside settings."
addedInput schema / properties / branding / properties
Added value: +{
+ "accentColor": {
+ "description": "The brand accent: markers, links, active controls.",
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ },
+ "settings": {
+ "additionalProperties": false,
+ "properties": {
+ "backgroundColor": {
+ "description": "Six-digit hex colour, e.g. #1F2A44.",
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ },
+ "borderColor": {
+ "anyOf": [
+ {
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "null derives a hairline from the text colour."
+ },
+ "borderWeight": {
+ "enum": [
+ "hairline",
+ "standard",
+ "bold"
+ ],
+ "type": "string"
+ },
+ "borderWidthPx": {
+ "anyOf": [
+ {
+ "maximum": 8,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Overrides borderWeight."
+ },
+ "buttonColor": {
+ "description": "Six-digit hex colour, e.g. #1F2A44.",
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ },
+ "buttonSize": {
+ "enum": [
+ "small",
+ "medium",
+ "large"
+ ],
+ "type": "string"
+ },
+ "cornerRadiusPx": {
+ "anyOf": [
+ {
+ "maximum": 48,
+ "minimum": 0,
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Overrides cornerStyle."
+ },
+ "cornerStyle": {
+ "enum": [
+ "sharp",
+ "soft",
+ "pill"
+ ],
+ "type": "string"
+ },
+ "customFontDisplay": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "faces": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "url": {
+ "description": "Public https URL of a .woff2 file.",
+ "type": "string"
+ },
+ "weight": {
+ "enum": [
+ 400,
+ 600
+ ],
+ "type": "number"
+ }
+ },
+ "required": [
+ "weight",
+ "url"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "family": {
+ "description": "CSS family name, e.g. \"Cormorant Garamond\".",
+ "type": "string"
+ },
+ "source": {
+ "enum": [
+ "google",
+ "upload"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "family",
+ "faces"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "A self-hosted web font. Also set fontDisplay (or fontText) to \"custom\" for it to be used. null removes it."
+ },
+ "customFontText": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "faces": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "url": {
+ "description": "Public https URL of a .woff2 file.",
+ "type": "string"
+ },
+ "weight": {
+ "enum": [
+ 400,
+ 600
+ ],
+ "type": "number"
+ }
+ },
+ "required": [
+ "weight",
+ "url"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "family": {
+ "description": "CSS family name, e.g. \"Cormorant Garamond\".",
+ "type": "string"
+ },
+ "source": {
+ "enum": [
+ "google",
+ "upload"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "family",
+ "faces"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "A self-hosted web font. Also set fontDisplay (or fontText) to \"custom\" for it to be used. null removes it."
+ },
+ "fontDisplay": {
+ "description": "Headings and the business name.",
+ "enum": [
+ "system",
+ "website",
+ "humanist",
+ "serif",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "fontFamily": {
+ "description": "Legacy single font. Prefer fontDisplay and fontText.",
+ "enum": [
+ "system",
+ "website",
+ "humanist",
+ "serif",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "fontScale": {
+ "enum": [
+ "compact",
+ "standard",
+ "large"
+ ],
+ "type": "string"
+ },
+ "fontText": {
+ "description": "Body copy, addresses and controls.",
+ "enum": [
+ "system",
+ "website",
+ "humanist",
+ "serif",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "markerImageUrl": {
+ "anyOf": [
+ {
+ "pattern": "^https://",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "A custom map-marker image, hosted anywhere over https (upload it to your own storage and paste the link, like Webflow). Also set the markerStyle setting to \"custom\" for it to show; null clears it and returns to the pin/dot style."
+ },
+ "primaryButtonStyle": {
+ "enum": [
+ "filled",
+ "outline"
+ ],
+ "type": "string"
+ },
+ "secondaryButtonColor": {
+ "anyOf": [
+ {
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "null follows the accent colour."
+ },
+ "shadowStyle": {
+ "enum": [
+ "none",
+ "soft",
+ "hard"
+ ],
+ "type": "string"
+ },
+ "spacing": {
+ "enum": [
+ "compact",
+ "comfortable",
+ "spacious"
+ ],
+ "type": "string"
+ },
+ "tagChipBackground": {
+ "anyOf": [
+ {
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Fill colour of the category chips on result cards. null keeps the faint ink tint. Pair with tagChipTextColor for the neutral grey-pill look."
+ },
+ "tagChipTextColor": {
+ "anyOf": [
+ {
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Text colour inside category chips. null follows the body text colour."
+ },
+ "textColor": {
+ "description": "Six-digit hex colour, e.g. #1F2A44.",
+ "pattern": "^#[0-9A-Fa-f]{6}$",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+}
addedInput schema / properties / labels / additionalProperties
Added value: +false
changedInput schema / properties / labels / description
Previous value: -"Visitor-facing wording overrides, by label key."New value: +"Visitor-facing wording overrides. {place} and {count} are substituted where the default uses them."
addedInput schema / properties / labels / properties
Added value: +{
+ "approximateNear": {
+ "description": "search. Default: \"Near {place}\".",
+ "type": "string"
+ },
+ "backToResults": {
+ "description": "results. Default: \"Back to results\".",
+ "type": "string"
+ },
+ "clearGroup": {
+ "description": "search. Default: \"Clear {group}\".",
+ "type": "string"
+ },
+ "clearSearch": {
+ "description": "search. Default: \"Clear search\".",
+ "type": "string"
+ },
+ "closedDay": {
+ "description": "hours. Default: \"Closed\".",
+ "type": "string"
+ },
+ "closedNow": {
+ "description": "hours. Default: \"Closed now\".",
+ "type": "string"
+ },
+ "closedToday": {
+ "description": "hours. Default: \"Closed today\".",
+ "type": "string"
+ },
+ "closedUntil": {
+ "description": "hours. Default: \"Opens {day} at {time}\".",
+ "type": "string"
+ },
+ "directions": {
+ "description": "links. Default: \"Directions\".",
+ "type": "string"
+ },
+ "email": {
+ "description": "links. Default: \"Email\".",
+ "type": "string"
+ },
+ "empty": {
+ "description": "results. Default: \"No locations to show yet.\".",
+ "type": "string"
+ },
+ "emptyInitial": {
+ "description": "results. Default: \"Search to see locations.\".",
+ "type": "string"
+ },
+ "enquiryCancel": {
+ "description": "results. Default: \"Cancel\".",
+ "type": "string"
+ },
+ "enquiryEmail": {
+ "description": "results. Default: \"Your email\".",
+ "type": "string"
+ },
+ "enquiryMessage": {
+ "description": "results. Default: \"What can we help with?\".",
+ "type": "string"
+ },
+ "enquiryName": {
+ "description": "results. Default: \"Your name\".",
+ "type": "string"
+ },
+ "enquiryOpen": {
+ "description": "results. Default: \"Send an enquiry\".",
+ "type": "string"
+ },
+ "enquiryPhone": {
+ "description": "results. Default: \"Phone (optional)\".",
+ "type": "string"
+ },
+ "enquirySending": {
+ "description": "results. Default: \"Sending\".",
+ "type": "string"
+ },
+ "enquirySent": {
+ "description": "results. Default: \"Thanks. Someone will be in touch.\".",
+ "type": "string"
+ },
+ "enquirySubmit": {
+ "description": "results. Default: \"Send\".",
+ "type": "string"
+ },
+ "enquiryTitle": {
+ "description": "results. Default: \"We will pass this to the right branch\".",
+ "type": "string"
+ },
+ "expandSearch": {
+ "description": "search. Default: \"Expand search\".",
+ "type": "string"
+ },
+ "fallback": {
+ "description": "results. Default: \"No exact matches - showing all {count} locations.\".",
+ "type": "string"
+ },
+ "filterNoMatches": {
+ "description": "search. Default: \"No matching filters\".",
+ "type": "string"
+ },
+ "hideMap": {
+ "description": "search. Default: \"Hide map\".",
+ "type": "string"
+ },
+ "loadError": {
+ "description": "results. Default: \"Couldn’t load locations. Please try again later.\".",
+ "type": "string"
+ },
+ "loading": {
+ "description": "results. Default: \"Loading locations…\".",
+ "type": "string"
+ },
+ "locateMe": {
+ "description": "search. Default: \"Use my location\".",
+ "type": "string"
+ },
+ "locationBlocked": {
+ "description": "search. Default: \"Location is blocked for this site. Allow it in your browser settings, or search for a town or postcode instead.\".",
+ "type": "string"
+ },
+ "locationUnavailable": {
+ "description": "search. Default: \"We couldn't use your location. Search for a town or postcode instead.\".",
+ "type": "string"
+ },
+ "mapError": {
+ "description": "results. Default: \"Map failed to load.\".",
+ "type": "string"
+ },
+ "mapKeyMissing": {
+ "description": "results. Default: \"Map unavailable - a map key has not been added yet.\".",
+ "type": "string"
+ },
+ "nearMe": {
+ "description": "search. Default: \"Your location\".",
+ "type": "string"
+ },
+ "nearNotFound": {
+ "description": "search. Default: \"We couldn't find that place. Try a postcode or a town name.\".",
+ "type": "string"
+ },
+ "nearPlaceholder": {
+ "description": "search. Default: \"Enter a town or postcode\". The search box placeholder while searchBehaviour is nearLocation (the default).",
+ "type": "string"
+ },
+ "nearSubmit": {
+ "description": "search. Default: \"Search\".",
+ "type": "string"
+ },
+ "nearbyTab": {
+ "description": "results. Default: \"Nearby locations ({count})\".",
+ "type": "string"
+ },
+ "nearestLocation": {
+ "description": "results. Default: \"Nearest location\".",
+ "type": "string"
+ },
+ "noMatches": {
+ "description": "results. Default: \"No locations match your search.\".",
+ "type": "string"
+ },
+ "noNearby": {
+ "description": "results. Default: \"No locations found near {place}.\".",
+ "type": "string"
+ },
+ "onlineTab": {
+ "description": "results. Default: \"Online options ({count})\".",
+ "type": "string"
+ },
+ "openNow": {
+ "description": "search. Default: \"Open now\".",
+ "type": "string"
+ },
+ "openUntil": {
+ "description": "hours. Default: \"Open until {time}\".",
+ "type": "string"
+ },
+ "opensAt": {
+ "description": "hours. Default: \"Opens {time}\".",
+ "type": "string"
+ },
+ "radiusAny": {
+ "description": "search. Default: \"Any distance\".",
+ "type": "string"
+ },
+ "radiusLabel": {
+ "description": "search. Default: \"Search radius\".",
+ "type": "string"
+ },
+ "radiusOption": {
+ "description": "search. Default: \"{radius}\".",
+ "type": "string"
+ },
+ "resetAll": {
+ "description": "search. Default: \"Reset\".",
+ "type": "string"
+ },
+ "searchPlaceholder": {
+ "description": "search. Default: \"Search by name, city, or zip\". The search box placeholder only while searchBehaviour is filterText.",
+ "type": "string"
+ },
+ "serviceArea": {
+ "description": "results. Default: \"Serves {radius}km radius\".",
+ "type": "string"
+ },
+ "sheetExpandedLabel": {
+ "description": "results. Default: \"Tap to view map\".",
+ "type": "string"
+ },
+ "sheetPeekLabel": {
+ "description": "results. Default: \"{count} results - tap to view list\".",
+ "type": "string"
+ },
+ "showMap": {
+ "description": "search. Default: \"Show map\".",
+ "type": "string"
+ },
+ "website": {
+ "description": "links. Default: \"Website\".",
+ "type": "string"
+ }
+}
addedInput schema / properties / layouts / additionalProperties
Added value: +false
changedInput schema / properties / layouts / description
Previous value: -"Field layout per surface: { card?, popup?, detail? }, each { order, hidden, regions }."New value: +"Which fields each surface shows, and in what order."
addedInput schema / properties / layouts / properties
Added value: +{
+ "card": {
+ "additionalProperties": false,
+ "properties": {
+ "hidden": {
+ "description": "Fields not shown on this surface.",
+ "items": {
+ "enum": [
+ "image",
+ "openStatus",
+ "serviceArea",
+ "distance",
+ "address",
+ "description",
+ "categories",
+ "hours",
+ "phone",
+ "email",
+ "website",
+ "directions",
+ "customFields"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "order": {
+ "description": "The fields to show, top to bottom. Fields you leave out keep their current place.",
+ "items": {
+ "enum": [
+ "image",
+ "openStatus",
+ "serviceArea",
+ "distance",
+ "address",
+ "description",
+ "categories",
+ "hours",
+ "phone",
+ "email",
+ "website",
+ "directions",
+ "customFields"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "detail": {
+ "additionalProperties": false,
+ "properties": {
+ "hidden": {
+ "description": "Fields not shown on this surface.",
+ "items": {
+ "enum": [
+ "image",
+ "openStatus",
+ "serviceArea",
+ "distance",
+ "address",
+ "description",
+ "categories",
+ "hours",
+ "phone",
+ "email",
+ "website",
+ "directions",
+ "customFields"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "order": {
+ "description": "The fields to show, top to bottom. Fields you leave out keep their current place.",
+ "items": {
+ "enum": [
+ "image",
+ "openStatus",
+ "serviceArea",
+ "distance",
+ "address",
+ "description",
+ "categories",
+ "hours",
+ "phone",
+ "email",
+ "website",
+ "directions",
+ "customFields"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "popup": {
+ "additionalProperties": false,
+ "properties": {
+ "hidden": {
+ "description": "Fields not shown on this surface.",
+ "items": {
+ "enum": [
+ "image",
+ "openStatus",
+ "serviceArea",
+ "distance",
+ "address",
+ "description",
+ "categories",
+ "hours",
+ "phone",
+ "email",
+ "website",
+ "directions",
+ "customFields"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "order": {
+ "description": "The fields to show, top to bottom. Fields you leave out keep their current place.",
+ "items": {
+ "enum": [
+ "image",
+ "openStatus",
+ "serviceArea",
+ "distance",
+ "address",
+ "description",
+ "categories",
+ "hours",
+ "phone",
+ "email",
+ "website",
+ "directions",
+ "customFields"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ }
+}
addedInput schema / properties / settings / additionalProperties
Added value: +false
changedInput schema / properties / settings / description
Previous value: -"Behaviour settings by key, from describe_configuration."New value: +"Behaviour settings to change. Only send the keys you want to change. Heights are two keys: mapHeight for the map and listMaxHeight for the result list."
addedInput schema / properties / settings / properties
Added value: +{
+ "addressAutocomplete": {
+ "description": "Address autocomplete. Suggests real addresses as the visitor types. Requires a geocoding provider to be connected first. Only applies when searchBehaviour is nearLocation. off = Off; full = Full address autocomplete; cityRegion = City and region only.",
+ "enum": [
+ "off",
+ "full",
+ "cityRegion"
+ ],
+ "type": "string"
+ },
+ "addressSearchCountries": {
+ "description": "Address countries. Restricts place and address searches to selected countries, using ISO codes such as US, CA, or GB. Only applies when searchBehaviour is nearLocation.",
+ "type": "string"
+ },
+ "autoLocateVisitors": {
+ "description": "Visitor location. Ask the browser for the visitor's location as soon as the widget loads, so they see nearby results without typing. Only applies when searchBehaviour is nearLocation.",
+ "type": "boolean"
+ },
+ "autoSelectFirst": {
+ "description": "After a search. What happens to the closest result once a visitor has searched. none = Leave everything unselected; highlight = Highlight the first result; detail = Open the first result's details; popup = Open its map popup.",
+ "enum": [
+ "none",
+ "highlight",
+ "detail",
+ "popup"
+ ],
+ "type": "string"
+ },
+ "cardClickBehaviour": {
+ "description": "Result click. Highlight keeps the list in place and moves the map. highlight = Highlight it on the map; detail = Open full details.",
+ "enum": [
+ "highlight",
+ "detail"
+ ],
+ "type": "string"
+ },
+ "clusterShape": {
+ "description": "Cluster shape. The shape of the numbered bubble that stands in for overlapping pins. Only applies when markerClustering is true. circle = Circle; rounded = Rounded square; square = Square.",
+ "enum": [
+ "circle",
+ "rounded",
+ "square"
+ ],
+ "type": "string"
+ },
+ "deduplicateOnImport": {
+ "description": "Duplicate rows. Flags an imported row when a location with the same name and address already exists, and leaves it unticked so it is not imported twice.",
+ "type": "boolean"
+ },
+ "defaultMapCenter": {
+ "description": "Opening centre. Search for the town or region where the locator should open. Only applies when defaultMapView is place.",
+ "type": "string"
+ },
+ "defaultMapView": {
+ "description": "When the locator opens. Choose what visitors see before they search. locations = Show all locations; approximate = Start approximately near the visitor; place = Start at a place I choose; empty = Wait until the visitor searches.",
+ "enum": [
+ "locations",
+ "approximate",
+ "place",
+ "empty"
+ ],
+ "type": "string"
+ },
+ "defaultMapZoom": {
+ "description": "Opening zoom. How close the map starts when it opens on a fixed place. Only applies when defaultMapView is place. 4 = Country; 6 = Region; 8 = State; 11 = City; 13 = District; 15 = Neighbourhood.",
+ "enum": [
+ "4",
+ "6",
+ "8",
+ "11",
+ "13",
+ "15"
+ ],
+ "type": "string"
+ },
+ "defaultOpenClosedView": {
+ "description": "Default hours view. What the Open now toggle is set to when the widget first loads. Only applies when openClosedFilter is true. all = Show all locations; openOnly = Show open locations only.",
+ "enum": [
+ "all",
+ "openOnly"
+ ],
+ "type": "string"
+ },
+ "defaultSearchRadius": {
+ "description": "Default search radius. The distance searched when a visitor has not picked one. Only applies when showRadiusSelector is true. unlimited = Any distance; 10 = 10; 25 = 25; 50 = 50; 100 = 100.",
+ "enum": [
+ "unlimited",
+ "10",
+ "25",
+ "50",
+ "100"
+ ],
+ "type": "string"
+ },
+ "directionsProvider": {
+ "description": "Directions provider. Match the device sends iPhone and iPad visitors to Apple Maps and everyone else to Google Maps. google = Always Google Maps; apple = Always Apple Maps; device = Match the visitor's device.",
+ "enum": [
+ "google",
+ "apple",
+ "device"
+ ],
+ "type": "string"
+ },
+ "distanceNumericFormat": {
+ "description": "Distance format. Choose how many decimal places appear beside locations. default = Smart rounding; whole = Whole numbers; oneDecimal = One decimal.",
+ "enum": [
+ "default",
+ "whole",
+ "oneDecimal"
+ ],
+ "type": "string"
+ },
+ "distancePlacement": {
+ "description": "Distance position. Where the distance sits inside a result card. Only applies when locatorLayout is not mapOnly. details = With the details; afterActions = Below the buttons.",
+ "enum": [
+ "details",
+ "afterActions"
+ ],
+ "type": "string"
+ },
+ "distanceUnits": {
+ "description": "Distance units. Autodetect uses miles for visitors in the US, UK, and a few others, and kilometres everywhere else. auto = Autodetect from visitor; mi = Miles; km = Kilometres.",
+ "enum": [
+ "auto",
+ "mi",
+ "km"
+ ],
+ "type": "string"
+ },
+ "enquiryForm": {
+ "description": "Enquiry form. Let a visitor send an enquiry from the locator, routed to the dealer whose territory covers the address they searched. off = Off; afterSearch = Show after a search.",
+ "enum": [
+ "off",
+ "afterSearch"
+ ],
+ "type": "string"
+ },
+ "exportFormat": {
+ "description": "Export format. The file type used when you download your locations. csv = CSV; json = JSON.",
+ "enum": [
+ "csv",
+ "json"
+ ],
+ "type": "string"
+ },
+ "filterBehaviour": {
+ "description": "Filter matching. Match any is the forgiving default and rarely returns nothing. any = Match any selected filter; all = Match all selected filters.",
+ "enum": [
+ "any",
+ "all"
+ ],
+ "type": "string"
+ },
+ "filterPlacement": {
+ "description": "Filter placement. Choose where visitors see category and open-now filters. top = Top row; results = Above results; hidden = Hidden.",
+ "enum": [
+ "top",
+ "results",
+ "hidden"
+ ],
+ "type": "string"
+ },
+ "filterStyle": {
+ "description": "Filter style. Dropdowns keep the toolbar compact when you have many filters. dropdown = Dropdown per group; inline = Inline checkboxes.",
+ "enum": [
+ "dropdown",
+ "inline"
+ ],
+ "type": "string"
+ },
+ "fullScreenControl": {
+ "description": "Fullscreen control. Adds a control that expands the map to fill the browser window. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ },
+ "geolocationErrorAlerts": {
+ "description": "Location errors. Tells the visitor when an automatic browser location request was refused or failed. Only applies when autoLocateVisitors is true.",
+ "type": "boolean"
+ },
+ "googleMapId": {
+ "description": "Google map ID. A cloud-styled map ID from the Google Cloud console, used instead of the built-in themes. Only applies when mapProvider is google.",
+ "type": "string"
+ },
+ "gridColumns": {
+ "description": "Grid columns. Sets how many result cards appear across when a grid layout is selected. Only applies when locatorLayout is gridBelow or gridOnly. In columns.",
+ "maximum": 6,
+ "minimum": 1,
+ "type": "number"
+ },
+ "groupedCardTags": {
+ "description": "Group tags. Puts each tag group's name above its own row of chips.",
+ "type": "boolean"
+ },
+ "hideBodyBeforeSearch": {
+ "description": "Hide locator body. Hide the map and results until a visitor searches.",
+ "type": "boolean"
+ },
+ "hideMarkersOutsideRadius": {
+ "description": "Radius marker visibility. Keeps the map showing only what is in the list. Off leaves distant pins visible for context. Only applies when showRadiusSelector is true.",
+ "type": "boolean"
+ },
+ "limitResults": {
+ "description": "Result limit. Caps how many locations appear in the list at once. Lower numbers keep long lists manageable on mobile. In locations.",
+ "maximum": 500,
+ "minimum": 1,
+ "type": "number"
+ },
+ "linkIconStyle": {
+ "description": "Link style. Icons alone are compact but less obvious. Icons with text is the safest for a general audience. textOnly = Text only; iconsAndText = Icons and text; iconsOnly = Icons only.",
+ "enum": [
+ "textOnly",
+ "iconsAndText",
+ "iconsOnly"
+ ],
+ "type": "string"
+ },
+ "listMaxHeight": {
+ "description": "List height. How tall the scrolling result list is, in pixels. Only applies when locatorLayout is not mapOnly. In px.",
+ "maximum": 1200,
+ "minimum": 150,
+ "type": "number"
+ },
+ "listScrollbar": {
+ "description": "Result list scrollbar. Whether the scrolling result list uses the browser's own scrollbar or a themed one. Only applies when locatorLayout is not mapOnly. auto = Browser default; themed = Match the text colour.",
+ "enum": [
+ "auto",
+ "themed"
+ ],
+ "type": "string"
+ },
+ "listTextAlign": {
+ "description": "Result text alignment. Aligns the name, address and details inside each result card. Only applies when locatorLayout is not mapOnly. left = Left; center = Centre.",
+ "enum": [
+ "left",
+ "center"
+ ],
+ "type": "string"
+ },
+ "locateMeButton": {
+ "description": "Use my location. Lets visitors use browser location without receiving a permission prompt on page load. Only applies when searchBehaviour is nearLocation. iconText = Icon and text; iconOnly = Icon only; hidden = Hidden.",
+ "enum": [
+ "iconText",
+ "iconOnly",
+ "hidden"
+ ],
+ "type": "string"
+ },
+ "locatorFrame": {
+ "description": "Outer frame. Draws a border around the whole locator and its map. none = No frame; border = Bordered.",
+ "enum": [
+ "none",
+ "border"
+ ],
+ "type": "string"
+ },
+ "locatorLayout": {
+ "description": "Locator layout. Where the list sits relative to the map. listLeft = List left of the map; listRight = List right of the map; listBelow = List below the map; gridBelow = Grid below the map; listOnly = List only, no map; gridOnly = Grid only, no map; mapOnly = Map only, no list.",
+ "enum": [
+ "listLeft",
+ "listRight",
+ "listBelow",
+ "gridBelow",
+ "listOnly",
+ "gridOnly",
+ "mapOnly"
+ ],
+ "type": "string"
+ },
+ "mapHeight": {
+ "description": "Map height. How tall the map area is on wider screens, in pixels. Narrow screens cap it at half the screen height so the results stay reachable. Only applies when locatorLayout is not listOnly or gridOnly. In px.",
+ "maximum": 900,
+ "minimum": 150,
+ "type": "number"
+ },
+ "mapProvider": {
+ "description": "Map provider. Which map renders your locator. Both render on your own account, so you add a key and the map loads bill to you. Only applies when locatorLayout is not listOnly or gridOnly. mapbox = Mapbox (your key); google = Google Maps (your key).",
+ "enum": [
+ "mapbox",
+ "google"
+ ],
+ "type": "string"
+ },
+ "mapTheme": {
+ "description": "Map style. Streets is the standard road map; Light, Dark, and Satellite are the alternate tile styles. Only applies when locatorLayout is not listOnly or gridOnly. streets = Streets; light = Light; dark = Dark; satellite = Satellite.",
+ "enum": [
+ "streets",
+ "light",
+ "dark",
+ "satellite"
+ ],
+ "type": "string"
+ },
+ "mapboxStyleUrl": {
+ "description": "Mapbox style. A style of your own from Mapbox Studio, used instead of the four built-in themes. Only applies when mapProvider is mapbox.",
+ "type": "string"
+ },
+ "markerClustering": {
+ "description": "Marker clusters. Replaces overlapping pins with a single numbered cluster that splits apart as the visitor zooms in. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ },
+ "markerColorSource": {
+ "description": "Marker colour. Tag colour keeps the meaning your tags carry; Brand accent makes the pins match the rest of your locator. Only applies when locatorLayout is not listOnly or gridOnly. category = Tag colour; accent = Brand accent.",
+ "enum": [
+ "category",
+ "accent"
+ ],
+ "type": "string"
+ },
+ "markerImageAnchor": {
+ "description": "Artwork anchor. Which point of the artwork sits on the location's coordinate. Only applies when markerStyle is custom. bottom = Bottom edge (like a pin); center = Centre (like a dot).",
+ "enum": [
+ "bottom",
+ "center"
+ ],
+ "type": "string"
+ },
+ "markerImageWidth": {
+ "description": "Artwork size. How wide the uploaded marker artwork is drawn, in pixels. Only applies when markerStyle is custom. In px.",
+ "maximum": 96,
+ "minimum": 16,
+ "type": "number"
+ },
+ "markerNumbering": {
+ "description": "Marker numbers. Matches each pin to its position in the list, so a visitor can connect what they see on the map to what they are reading. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ },
+ "markerRepositionOnClick": {
+ "description": "Marker position. Moving the clicked pin toward the bottom leaves room for its popup above it, instead of the popup running off the top of the map. Only applies when locatorLayout is not listOnly or gridOnly. center = Centre of the map; bottom = Bottom of the map; none = Do not move the map.",
+ "enum": [
+ "center",
+ "bottom",
+ "none"
+ ],
+ "type": "string"
+ },
+ "markerStyle": {
+ "description": "Marker style. Choose a classic pin, a compact dot or an uploaded custom marker image. Only applies when locatorLayout is not listOnly or gridOnly. pin = Classic pin; dot = Dot; logo = Logo inside a pin; custom = Custom image.",
+ "enum": [
+ "pin",
+ "dot",
+ "logo",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "maxZoomLevel": {
+ "description": "Maximum zoom. How far in a visitor can zoom. 22 is fully zoomed in. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "maximum": 22,
+ "minimum": 0,
+ "type": "number"
+ },
+ "minZoomLevel": {
+ "description": "Minimum zoom. How far out a visitor can zoom. 0 is the whole world. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "maximum": 22,
+ "minimum": 0,
+ "type": "number"
+ },
+ "mobileTouchPanning": {
+ "description": "Mobile panning. Two fingers lets a visitor scroll the page past the map with one finger. Only applies when locatorLayout is not listOnly or gridOnly. twoFingers = Two fingers; oneFinger = One finger.",
+ "enum": [
+ "twoFingers",
+ "oneFinger"
+ ],
+ "type": "string"
+ },
+ "mouseScrollZoom": {
+ "description": "Wheel zoom. Off stops the map from swallowing the page scroll when a visitor scrolls past the widget. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ },
+ "nearestLocationSummary": {
+ "description": "Nearest-location summary. Show a compact summary of the nearest matching location after a visitor searches near a place. hidden = Hidden; afterSearch = Show after search.",
+ "enum": [
+ "hidden",
+ "afterSearch"
+ ],
+ "type": "string"
+ },
+ "noResultsBehaviour": {
+ "description": "No results. Showing everything avoids a dead end for the visitor. showAll = Show all locations with a note; empty = Show an empty state.",
+ "enum": [
+ "showAll",
+ "empty"
+ ],
+ "type": "string"
+ },
+ "openClosedFilter": {
+ "description": "Open-only filter. Adds an Open now toggle to the toolbar.",
+ "type": "boolean"
+ },
+ "phoneNumberFormatting": {
+ "description": "Phone format. Reformats imported US and Canadian numbers to (555) 555-0100. Off keeps exactly what was in your file.",
+ "type": "boolean"
+ },
+ "popupColumns": {
+ "description": "Popup columns. How a location's details are arranged in the popup that opens from a map pin. Two columns also widens the popup, since two narrow columns read worse than one. singleColumn = Single column; twoColumn = Two columns.",
+ "enum": [
+ "singleColumn",
+ "twoColumn"
+ ],
+ "type": "string"
+ },
+ "printDirectionsButton": {
+ "description": "Print directions. Adds a print control to the directions panel.",
+ "type": "boolean"
+ },
+ "priorityMaxRadius": {
+ "description": "Priority radius. Stops a featured location from being pinned to the top when it is unhelpfully far from the visitor. off = No limit; 25 = Within 25; 50 = Within 50; 100 = Within 100.",
+ "enum": [
+ "off",
+ "25",
+ "50",
+ "100"
+ ],
+ "type": "string"
+ },
+ "radiusChoices": {
+ "description": "Radius options. The distances a visitor can choose from, comma separated, in the units they see. Leave empty for the built-in list. Only applies when showRadiusSelector is true.",
+ "type": "string"
+ },
+ "resetButton": {
+ "description": "Reset control. Gives visitors one control that clears the search and every filter at once.",
+ "type": "boolean"
+ },
+ "resultColumnWidth": {
+ "description": "Result column width. How much of the width the result list takes when it sits beside the map. Only applies when locatorLayout is listLeft or listRight. In %.",
+ "maximum": 75,
+ "minimum": 25,
+ "type": "number"
+ },
+ "resultLoading": {
+ "description": "Loading. Immediate renders everything at once. immediate = Immediate; paged = Load more on scroll.",
+ "enum": [
+ "immediate",
+ "paged"
+ ],
+ "type": "string"
+ },
+ "scrollToStoreOnMarkerClick": {
+ "description": "Scroll to result. Clicking a pin scrolls the matching entry into view and highlights it, instead of only opening a popup. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ },
+ "searchBehaviour": {
+ "description": "Search mode. Decides whether typing filters your existing list, or moves the map to a place the visitor names. filterText = Filter by text; nearLocation = Search near a place.",
+ "enum": [
+ "filterText",
+ "nearLocation"
+ ],
+ "type": "string"
+ },
+ "searchFields": {
+ "description": "Search fields. Address-only is the familiar store-locator behaviour. Only applies when searchBehaviour is filterText. address = Address only; details = Address plus location details.",
+ "enum": [
+ "address",
+ "details"
+ ],
+ "type": "string"
+ },
+ "searchIcon": {
+ "description": "Search icon. Puts a magnifying glass inside the search box. none = No icon; leading = Magnifying glass.",
+ "enum": [
+ "none",
+ "leading"
+ ],
+ "type": "string"
+ },
+ "searchPlacement": {
+ "description": "Search placement. Choose where visitors see the main search field in the locator. top = Top row; results = Above results; hidden = Hidden.",
+ "enum": [
+ "top",
+ "results",
+ "hidden"
+ ],
+ "type": "string"
+ },
+ "searchZoomBehaviour": {
+ "description": "Search zoom. Fitting all results keeps every match on screen. Only applies when locatorLayout is not listOnly or gridOnly. fitAll = Fit all results on screen; fixed = Use a fixed zoom level.",
+ "enum": [
+ "fitAll",
+ "fixed"
+ ],
+ "type": "string"
+ },
+ "selectedResultEmphasis": {
+ "description": "Selected result. How the result a visitor has chosen is marked out from the rest. Only applies when locatorLayout is not mapOnly. border = Accent border; stripe = Accent stripe; tint = Tinted background.",
+ "enum": [
+ "border",
+ "stripe",
+ "tint"
+ ],
+ "type": "string"
+ },
+ "showFilterCounts": {
+ "description": "Filter counts. Puts the number of matching locations next to each filter.",
+ "type": "boolean"
+ },
+ "showFilterGroupHeadings": {
+ "description": "Filter headings. Labels each filter group by name. Turn off when you only have one group and the heading is redundant.",
+ "type": "boolean"
+ },
+ "showMapByDefault": {
+ "description": "Initial map. Off starts with just the list and a Show map button, which loads faster and suits pages where the list matters more. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ },
+ "showRadiusSelector": {
+ "description": "Radius filter. Adds a distance dropdown next to the search box. Only applies when searchBehaviour is nearLocation.",
+ "type": "boolean"
+ },
+ "showSearchLocationMarker": {
+ "description": "Search marker. Drops a distinct pin where the visitor searched, so they can see what the distances are measured from. Only applies when searchBehaviour is nearLocation.",
+ "type": "boolean"
+ },
+ "showUnassignedFilters": {
+ "description": "Ungrouped filters. Filters you have not put in a group still appear, under a general heading.",
+ "type": "boolean"
+ },
+ "sortDirection": {
+ "description": "Sort direction. Ascending puts the nearest, or the earliest alphabetically, first. asc = Ascending; desc = Descending.",
+ "enum": [
+ "asc",
+ "desc"
+ ],
+ "type": "string"
+ },
+ "sortField": {
+ "description": "Sort by. Distance needs a search or a visitor location to mean anything. distance = Distance; name = Name; priority = Priority, then name.",
+ "enum": [
+ "distance",
+ "name",
+ "priority"
+ ],
+ "type": "string"
+ },
+ "storeNameLinkBehaviour": {
+ "description": "Location name click. Showing it on the map keeps the visitor inside the widget. showOnMap = Show the location on the map; website = Open the location's website; none = Do nothing.",
+ "enum": [
+ "showOnMap",
+ "website",
+ "none"
+ ],
+ "type": "string"
+ },
+ "storeZoomLevel": {
+ "description": "Location zoom. How far in the map goes when a visitor clicks a single location. Higher is closer. 17 is roughly street level. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "maximum": 22,
+ "minimum": 1,
+ "type": "number"
+ },
+ "updateListOnMapDrag": {
+ "description": "Map move updates. Re-sorts the list to match wherever the visitor has panned the map. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ },
+ "urlState": {
+ "description": "URL state. Lets a visitor bookmark or share a filtered view, and lets you link straight to one from an ad or email.",
+ "type": "boolean"
+ },
+ "urlStateSearchText": {
+ "description": "Put the visitor's search in the URL. Also writes what a visitor typed into the address bar, so their exact search can be bookmarked or shared. Only applies when urlState is true.",
+ "type": "boolean"
+ },
+ "websiteLinkTarget": {
+ "description": "Website links. A new tab keeps the visitor on your page. Same tab sends them away from the locator entirely. newTab = In a new tab; sameTab = In the same tab.",
+ "enum": [
+ "newTab",
+ "sameTab"
+ ],
+ "type": "string"
+ },
+ "weekBeginsOn": {
+ "description": "Week begins on. Affects the order days are listed in the hours editor and in the widget's opening-hours table. Display only. Hours stay stored the same way, so switching it never changes a location. monday = Monday; sunday = Sunday.",
+ "enum": [
+ "monday",
+ "sunday"
+ ],
+ "type": "string"
+ },
+ "widgetWidth": {
+ "description": "Widget width. Use a percentage to fill the container it is embedded in, or a fixed value like 560px to cap it.",
+ "type": "string"
+ },
+ "wordCapitalization": {
+ "description": "Capitalization. Converts ALL CAPS or all lowercase names, addresses and cities to title case on import.",
+ "type": "boolean"
+ },
+ "zipCodePrefix": {
+ "description": "Postcode prefixes. Automatic restores the leading zeros spreadsheets strip from US ZIP codes, so 01234 does not import as 1234. auto = Automatic; none = Leave as imported.",
+ "enum": [
+ "auto",
+ "none"
+ ],
+ "type": "string"
+ },
+ "zoomMapOnFilterChange": {
+ "description": "Refit map. Zooms the map to the remaining results after a filter is applied, instead of leaving the visitor looking at empty space. Only applies when locatorLayout is not listOnly or gridOnly.",
+ "type": "boolean"
+ }
+}