Saltar al contenido principal

<kaleidr-map>, el elemento

<kaleidr-map> es la forma declarativa de montar un producto Kaleidr. Escribes el elemento con atributos y se monta automáticamente al entrar en el documento y se destruye al salir. Lo define kaleidr.js, por lo que la página debe cargar ese script.

<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>

<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="display:block; height:480px"></kaleidr-map>

El elemento es un envoltorio ligero: convierte los atributos en opciones y llama a Kaleidr.mount sobre sí mismo. Todo lo que hace el elemento puede hacerse mediante Kaleidr.mount, pero no al revés: el elemento no acepta un objeto de mapa activo ni devuelve el controlador.

Usa el elemento cuandoUsa Kaleidr.mount cuando
La incrustación es HTML estático.Necesitas el controlador para setCamera, setStyle, setTheme o destroy.
Un CMS o plantilla genera el HTML.Conectas Chat a tu propio mapa y necesitas la opción map.
Quieres que se limpie automáticamente al eliminarlo del documento.Un framework controla cuándo montar y desmontar los componentes.

Atributos​

Los nombres de atributos usan kebab-case. Las opciones de montaje equivalentes usan camelCase.

AtributoOpción de montajeProductosObligatorioPredeterminadoObservado después del montajeDescripción
productproducttodossíningunonochat, viewer, editor o tile.
publishable-keypublishableKeychat, editor, tilesí, excepto Chat en mapa publicadoningunonoTu clave kld_pk_…. Viewer no la utiliza.
share-idshareIdviewer, chatViewer: síningunonoViewer: ID del mapa publicado. Chat sin clave: el mapa publicado que proporciona Chat.
map-idmapIdviewernoningunonoAlias de share-id.
style-idstyleIdtile, editorrecomendado en Tilemapa base predeterminado de la organización; en Editor, después kaleidr-morningnoID de estilo o URL de estilo.
map-targetmapTargetchatnoningunonoSelector CSS para un elemento Viewer o Tile <kaleidr-map> que controlará el asistente.
containedcontainedchatnodesactivadonoAncla el panel dentro de este elemento, que debe tener posición y dimensiones.
langlangchatnovalor de <html lang> si es una etiqueta válida; de lo contrario, inglésnoIdioma de respuesta del panel, como etiqueta BCP 47 (en, ko, pt-BR). Consulta Idioma de Chat.
chat-titletitlechatnotítulo propio del panelnoTítulo de la cabecera. El atributo es chat-title, no title: el title de HTML muestra información al pasar el ratón.
placeholderplaceholderchatnomarcador de posición propio del panelnoTexto orientativo del campo de entrada.
layoutlayoutviewernomapnobar monta la barra de chat, que también lee chat-title, placeholder, theme y lang, con sus propios valores predeterminados: consulta las opciones del viewer. locator y listings muestran el mapa junto a una lista de una colección de la Biblioteca de lugares: consulta Diseños de lugares. guide abre el chat junto a un mapa de establecimientos: consulta Diseño de guía. live muestra los vehículos y las paradas de hoy: consulta Diseño en vivo.
collectioncollectionlocalizador, anuncios, guía y en vivo de viewernola primera colección del tipo del diseño que dibuja el mapanoEl identificador de la colección que se lista; en live, el de la colección de Vehículos.
stopsstopsviewer en vivonola primera colección de Paradas que dibuja el mapanoEl identificador de la colección de Paradas.
filtersfilterslocalizador y anuncios de viewernotodos los filtros de la colecciónnoLos filtros para visitantes que se muestran, separados por |: search, category, price, beds, baths, open_now.
cardcardviewernoautonoLas fichas de lugar compact muestran solo el título, el subtítulo y las acciones.
promptpromptviewernoningunonoPregunta que se plantea a la Kaleidr AI del mapa al abrirse; en una barra de chat, el texto precargado del campo.
prompt-parampromptParamviewernoningunonoLee prompt de ese parámetro de consulta de la URL de la página, cuando el visitante llegó desde una página del mismo origen.
promptspromptsbarra de chat de viewernoningunonoPreguntas de ejemplo, separadas por |.
accentaccentbarra de chat de viewerno#2da84anoUn color CSS.
results-urlresultsUrlbarra de chat de viewernoningunonoEnvía a los visitantes a esa página con ?q=<question>.
centercenterviewer, tile, editornopredeterminado del productosí"longitude,latitude", por ejemplo "-0.1276,51.5072".
zoomzoomviewer, tile, editornopredeterminado del productosíNúmero. Al montar Viewer y Tile solo se aplica junto con center.
pitchpitchviewer, tile, editornopredeterminado del productosíInclinación en grados.
bearingbearingviewer, tile, editornopredeterminado del productosíRotación en grados.
themethemechat, editornoningunosí (solo afecta a Chat)Cadena JSON. Chat: propiedades CSS personalizadas. Editor: 17 claves de tema.
flagenabledtodosnoningunonoControl del elemento de la puerta de activación.
basebasetodosnohttps://cdn.kaleidr.comnoOrigen de los paquetes. Solo se acepta la CDN de Kaleidr (https://cdn.kaleidr.com), el origen del que se cargó kaleidr.js o el de la página; otros se ignoran con una advertencia. Consulta Sustitución de base.
viewer-baseviewerBaseviewer, tilenohttps://map-embed.kaleidr.comnoOrigen del iframe.
api-baseapiBasechat, editor, tilenohttps://api.kaleidr.com/inference-apinoDestino del intercambio de sesión y solicitudes. Debe incluir /inference-api.
tile-basetileBaseeditornohttps://tile.kaleidr.comnoHost donde se resuelven los IDs de estilo.

api-key es un alias obsoleto de publishable-key. Los cuatro atributos …-base se usan para probar otros despliegues y no son necesarios en producción.

Atributos booleanos​

flag y contained se interpretan como booleanos:

Escrito comoInterpretado como
contained (sin valor), contained=""verdadero
"true", "1", "yes", "on"verdadero
"false", "0", "no", "off"falso
atributo ausentesin establecer
cualquier otro valorignorado, con advertencia en consola

Las palabras no distinguen mayúsculas y minúsculas ni espacios exteriores, por lo que flag="False" también desactiva el elemento. Como un atributo sin valor equivale a verdadero, una plantilla que produzca flag="" lo activa. Escribe false explícitamente.

Atributos numéricos y de cámara​

zoom, pitch y bearing se convierten a números. center son dos números separados por coma, primero la longitud. Un valor que no puede convertirse se ignora sin mensaje y se usa el predeterminado del producto.

Atributos después del montaje​

El elemento lee sus atributos una vez, al entrar en el documento. Después solo observa cinco:

Atributo modificadoviewertileeditorchat
center, zoom, pitch, bearingLa cámara salta a la nueva vista.La cámara salta a la nueva vista.La cámara salta a la nueva vista.Advertencia en consola; sin efecto.
themeAdvertencia.Advertencia.Advertencia. Editor solo lee el tema al montar.El panel cambia de estilo.
Cualquier otro atributoSin efecto.Sin efecto.Sin efecto.Sin efecto.

Un cambio de cámara mediante atributos nunca se anima. Para animar el movimiento, monta mediante Kaleidr.mount y llama a handle.setCamera({ …, duration: 800 }).

Al cambiar un atributo de cámara, el elemento envía todos los atributos de cámara que tiene en ese momento. Si cambias únicamente zoom en un elemento con center, se vuelve a aplicar ese centro.

Para modificar share-id, style-id, publishable-key, product, flag, contained, lang, chat-title o placeholder, sustituye el elemento: elimínalo e inserta otro con los nuevos atributos. En Tile, handle.setStyle permite cambiar el estilo sin volver a montar, pero solo si se montó con Kaleidr.mount.

// Show a different published map in the same place.
const old = document.querySelector('kaleidr-map');
const next = old.cloneNode(false);
next.setAttribute('share-id', 'ANOTHER_MAP_ID');
old.replaceWith(next);

Ciclo de vida​

EventoAcción del elemento
Entra en el documentoLee atributos y se monta. En Chat, Editor y Tile comienza el intercambio de sesión.
Ya está en el documento antes de cargar kaleidr.jsNo hace nada hasta que se carga el script; entonces se monta.
Sale del documentoDestruye el montaje, elimina lo añadido y detiene las renovaciones de sesión.
Vuelve a entrarLee otra vez sus atributos y se monta de nuevo, con otro intercambio de sesión.
Se mueve a otro elemento padreSale y entra: se destruye y se monta de nuevo.
Falta product o no es uno de los cuatroRegistra [kaleidr] <kaleidr-map> requires product="chat|viewer|editor|tile" y no se monta. Establecer después product no hace nada.

Consecuencias:

  • Configura los atributos antes de insertar el elemento. Si lo creas con JavaScript, define todas las propiedades y después añádelo. Si lo añades primero, se monta con los valores disponibles entonces.

    const el = document.createElement('kaleidr-map');
    el.setAttribute('product', 'tile');
    el.setAttribute('publishable-key', 'kld_pk_live_…');
    el.setAttribute('style-id', 'kaleidr-night');
    el.style.cssText = 'display:block; height:480px';
    document.getElementById('slot').appendChild(el); // mounts here
  • Volver a montar tiene un coste. Un elemento Tile que se monta otra vez consume otra carga de mapa. Editor pierde sus ediciones, y Chat inicia otra conversación. Código que recrea o reordena nodos DOM, como los cambios de una lista en un framework, puede provocarlo inadvertidamente. Consulta Integración con frameworks.

  • Un elemento oculto se monta igualmente. display:none no retrasa el montaje: Tile en una pestaña cerrada inicia una sesión.

  • El elemento muestra a sus hijos hasta que un mapa los reemplaza. El contenido interior se ve normalmente. Viewer y Tile sustituyen ese contenido por el iframe cuando cargan, así que puede servir como marcador de carga y permanece como alternativa si falla el montaje o está retenido por la puerta de activación. Chat y Editor nunca eliminan los hijos. Déjalo vacío salvo que quieras ese comportamiento.

Dimensiones​

<kaleidr-map> usa display:block por defecto, por lo que se le puede dar height:

<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="height:480px"></kaleidr-map>

Tres detalles sobre este valor predeterminado:

  • Tu propiedad display siempre prevalece. Un estilo en línea, una regla CSS o el atributo hidden la reemplazan. Si pones display:inline, height deja de funcionar.
  • No requiere ninguna excepción en tu Política de Seguridad de Contenido. No se define mediante etiqueta <style> ni atributo style, así que funciona aunque se prohíba 'unsafe-inline'.
  • Safari anterior a 16.4 no admite ese valor predeterminado. El elemento permanece en línea e ignora width y height. Por eso los ejemplos incluyen display:block en el atributo style: no perjudica en otros navegadores y permite dar dimensiones en los antiguos.

Por eso esta documentación usa:

<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="display:block; height:480px"></kaleidr-map>

o bien, una vez para todo el sitio:

kaleidr-map { display: block; height: 480px; }
ProductoComportamiento de dimensiones
viewer, tileEl iframe ocupa el 100 % del ancho. Su altura es el 100 % del elemento si este tiene altura al montar; en caso contrario son 500 píxeles fijos. Se establecen position:relative (si no existe posición en línea) y overflow:hidden en el elemento.
editorOcupa el 100 % del ancho y la altura del elemento. Sin altura, no se ve nada.
chatSin contained, es una ventana fija arriba a la izquierda de la pantalla, sin importar las dimensiones del elemento. Con contained, queda dentro del elemento, que necesita position:relative (u otro posicionamiento) y dimensiones.

El valor alternativo de 500 píxeles se decide una sola vez, al montar. Si el elemento carecía de altura entonces, el iframe seguirá teniendo 500 píxeles aunque le asignes otra altura más tarde.

Si tu Política de Seguridad de Contenido prohíbe atributos style en línea, dimensiona el elemento mediante una hoja de estilos. La configuración de bloque predeterminada no se ve afectada por esa política.

Matriz del controlador​

El elemento no expone ningún controlador. Para llamar a estos métodos, monta mediante Kaleidr.mount, que devuelve uno.

Métodochatviewereditortile
destroy()sísísísí
setCamera(camera)no admitidosísísí
setTheme(theme)síno admitidono admitidono admitido
setStyle(style)no admitidono admitidono admitidosí
send(text)no admitidosíno admitidono admitido
setFilters(filters)no admitidosíno admitidono admitido
showVehiclesLayer(layer)no admitidosíno admitidono admitido
clearVehiclesLayer()no admitidosíno admitidono admitido

Todos los controladores tienen todos estos métodos. Uno marcado como «no admitido» no hace nada al llamarlo y emite una advertencia de consola, sin lanzar excepción. Este comportamiento forma parte del contrato /embed/v1.

Por producto:

  • chat: setTheme cambia el estilo del panel. setCamera no se admite porque Chat no posee un mapa: el asistente mueve el mapa al que se conecta cuando responde; tu código puede moverlo mediante la API de la biblioteca de mapas.
  • viewer: setCamera mueve el mapa publicado. setFilters establece los filtros para visitantes de un diseño de lugares. showVehiclesLayer dibuja tus propios vehículos en el mapa y clearVehiclesLayer los quita: consulta la capa de vehículos.
  • editor: setCamera mueve el mapa del editor. El tema y el mapa base quedan fijados al montar.
  • tile: setCamera mueve el mapa y setStyle cambia el mapa base sin remontar.

setCamera acepta { center, zoom, pitch, bearing, duration }. Todos los campos son opcionales, center es [longitude, latitude] y duration se expresa en milisegundos. Los detalles están en kaleidr.js.

Chat y map-target​

Chat puede controlar dos tipos de mapa:

  • Tu propio mapa (Mapbox GL JS, MapLibre GL JS, Google Maps o Leaflet). No puedes expresar el objeto de mapa como atributo: usa Kaleidr.mount con la opción map. Consulta la referencia de Chat.

  • Un elemento Viewer o Tile de Kaleidr en la misma página. Apunta map-target a él usando un selector CSS:

    <div style="position:relative">
    <kaleidr-map id="basemap" product="tile" publishable-key="kld_pk_live_…"
    style-id="kaleidr-morning"
    style="display:block; height:480px"></kaleidr-map>

    <kaleidr-map product="chat" publishable-key="kld_pk_live_…" contained
    map-target="#basemap"
    style="display:block; position:absolute; inset:0; z-index:1; pointer-events:none"></kaleidr-map>
    </div>

    No importa el orden de los dos elementos. Chat busca su destino cuando lo necesita.

Sin map ni map-target, Chat es un panel sin mapa.

El contenedor y el estilo del elemento de Chat colocan el panel sobre el mapa. Cada declaración se explica en Temas y disposición. Chat en un mapa publicado se explica en Chat en un mapa publicado.

Mensajes de consola​

MensajeSignificado
[kaleidr] <kaleidr-map> requires product="chat|viewer|editor|tile"Falta product o está mal escrito; el elemento no se monta.
[kaleidr] <attribute>="<value>" is not a recognized boolean — the attribute is IGNORED. Use <attribute>="true" / "false" (or omit it).flag o contained tiene un valor no admitido. La advertencia identifica el atributo: flag="…" o contained="…".
[kaleidr] base "<value>" is IGNORED — bundles load from https://cdn.kaleidr.com. A base must be the Kaleidr CDN, the origin kaleidr.js was loaded from, or this page's own origin.El atributo base señala un origen prohibido. El producto se carga desde la CDN predeterminada.
[kaleidr] embed is disabled — this mount passed `enabled: false` (or `flag="false"`). …La configuración flag retiene el montaje. Sustituye el elemento sin ese valor para montarlo.
[kaleidr] setCamera() is not supported on product "chat" — the call is a no-op. …Se cambió un atributo de cámara en Chat.
[kaleidr] setTheme() is not supported on product "<product>" — the call is a no-op. …Se cambió theme en Viewer, Tile o Editor.

Los fallos al montar se registran como [kaleidr:<product>] …. Están enumerados en kaleidr.js.

No disponible​

  • Eventos. El elemento no emite eventos DOM.
  • Propiedades o métodos. El elemento no tiene setCamera, propiedad handle ni promesa ready.
  • Nueva lectura de atributos. Excepto los cinco observados, los cambios posteriores al montaje se ignoran.

Relacionado​