Nuxt Swiftsearch
Examples

Parity Widget Showcase

End-to-end example using the widgets added for vue-instantsearch parity.

Use this pattern when you want a single page that exercises the newly added parity widgets.

pages/showcase.vue
<template>
  <AisInstantSearch :configuration="configuration" instance-key="showcase">
    <AisConfigure
      :search-parameters="{
        hitsPerPage: 6,
        query: 'apple',
        attributesToSnippet: ['description:16'],
      }"
    />

    <AisConfigureRelatedItems :hit="relatedHit" :matching-patterns="matchingPatterns" />
    <AisExperimentalConfigureRelatedItems :hit="relatedHit" :matching-patterns="matchingPatterns" />

    <AisQueryRuleContext :tracked-filters="trackedFilters" />

    <AisSearchBox />
    <AisBreadcrumb :attributes="hierarchicalAttributes" />
    <AisHitsPerPage :items="hitsPerPageItems" />
    <AisVoiceSearch />
    <AisPoweredBy />

    <AisDynamicWidgets :transform-items="fallbackDynamicAttributes">
      <AisRefinementList attribute="brand" />
      <AisMenu attribute="categories" />
    </AisDynamicWidgets>

    <AisExperimentalDynamicWidgets :transform-items="fallbackDynamicAttributes">
      <AisRefinementList attribute="brand" />
    </AisExperimentalDynamicWidgets>

    <AisRelevantSort />

    <AisHits>
      <template #item="{ item }">
        <AisSnippet :hit="item" attribute="description" />
      </template>
    </AisHits>

    <AisQueryRuleCustomData />
  </AisInstantSearch>
</template>

<script setup lang="ts">
import { algoliasearch } from "algoliasearch";

const configuration = {
  indexName: "instant_search",
  searchClient: algoliasearch("latency", "6be0576ff61c053d5f9a3225e2a90f76"),
};

const hierarchicalAttributes = [
  "hierarchicalCategories.lvl0",
  "hierarchicalCategories.lvl1",
  "hierarchicalCategories.lvl2",
];

const hitsPerPageItems = [
  { label: "6 hits", value: 6, default: true },
  { label: "12 hits", value: 12 },
  { label: "24 hits", value: 24 },
];

const fallbackDynamicAttributes = (items: string[]) => {
  return items.length ? items : ["brand", "categories"];
};

const relatedHit = {
  objectID: "showcase-related-hit",
  brand: "Apple",
  categories: ["Electronics", "Audio"],
};

const matchingPatterns = {
  brand: { score: 3 },
  categories: { score: 2 },
};

const trackedFilters = {
  brand: (values: Array<string | number | boolean>) => values,
};
</script>
Copyright © 2026