Rechat SDK
    Preparing search index...

    Agents

    Embed the brokerage's agent roster ("Meet our agents") with custom elements. Like sdk.Agents, these are portal-only: the brand is resolved from the current domain.

    <rechat-agents> owns the roster state; compose the sub-elements you need inside it:

    <rechat-root>
    <rechat-agents limit="12">
    <rechat-agents-search placeholder="Find an agent…"></rechat-agents-search>
    <rechat-agents-count></rechat-agents-count>
    <rechat-agents-grid></rechat-agents-grid>
    <rechat-agents-pagination></rechat-agents-pagination>
    </rechat-agents>
    </rechat-root>
    Element Description
    <rechat-agents> Roster context. Owns the query state and API calls.
    <rechat-agents-grid> Card grid: photo (or initials), name, designation, contact links, social links
    <rechat-agents-search> Free-text roster filter (name, email, or MLS id)
    <rechat-agents-count> "Showing 1–12 of 45 agents"
    <rechat-agents-pagination> Page navigation

    Put a <template rechat-each="agents"> inside the grid to render your own markup. See Custom Markup (Templates):

    <rechat-agents-grid>
    <template rechat-each="agents">
    <a class="agent" href="/agents/{{ id }}">
    <img src="{{ profile_image_url }}" alt="{{ display_name }}">
    <h3>{{ display_name }}</h3>
    <p data-if="designation">{{ designation }}</p>
    <a href="tel:{{ phone_number }}" data-if="phone_number">{{ formatted.phone.text }}</a>
    </a>
    </template>
    <template rechat-state="empty"><p>No agents found.</p></template>
    </rechat-agents-grid>

    Useful agent fields: id, display_name, first_name, last_name, email, phone_number, profile_image_url, user_type, designation, website, instagram, facebook, twitter, linkedin, youtube, plus the computed formatted.phone.text (pretty-printed phone) and formatted.initials.text (avatar fallback). Each item is also available under agent, e.g. {{ agent.email }}.

    <rechat-agent> renders one roster member by user id, e.g. "your agent" on a landing page:

    <rechat-agent id="3f9c8d2a-…"></rechat-agent>
    

    It accepts an optional <template rechat-bind> child bound against the same agent view-model (the agent is under agent, with its fields also at top level):

    <rechat-agent id="3f9c8d2a-…">
    <template rechat-bind>
    <div class="hero-agent">
    <h2>{{ agent.display_name }}</h2>
    <a href="mailto:{{ agent.email }}">{{ agent.email }}</a>
    </div>
    </template>
    </rechat-agent>
    Element Attribute Default Description
    <rechat-agents> q - Initial roster filter
    limit "20" Page size
    agents - JSON array of pre-hydrated agents
    <rechat-agents-search> placeholder "Search agents…" Input placeholder
    <rechat-agent> id - Roster member user id (required)

    Dispatched on window; access data via event.detail.

    Event Detail When
    rechat-agents:fetched IUser[] Roster page loaded
    rechat-agents-pagination:change { page: number } Roster page changed
    rechat-agent-card:click { agent: IUser } An agent card was clicked
    rechat-error { source: 'agents', error } A fetch failed