Skip to content

React

Install

bash
npm install alap react react-dom

Setup

tsx
import { AlapProvider, AlapLink, useAlap } from 'alap/react';
import config from './alap-config';

function App() {
  return (
    <AlapProvider config={config}>
      <p>Check out <AlapLink query=".coffee">cafes</AlapLink>.</p>
    </AlapProvider>
  );
}

<AlapProvider>

Context provider. Wrap your app or section.

PropTypeDefaultDescription
configAlapConfigrequiredThe link configuration
menuTimeoutnumberfrom configAuto-dismiss timeout override
defaultMenuStyleCSSPropertiesDefault inline styles for all menus
defaultMenuClassNamestringDefault CSS class for all menus

Renders a trigger that opens a menu on click.

PropTypeDefaultDescription
querystringrequiredExpression to evaluate
childrenReactNoderequiredTrigger content
anchorIdstringAnchor ID for bare @ macro
mode'dom' | 'webcomponent' | 'popover''dom'Rendering mode
classNamestringCSS class on trigger
menuClassNamestringCSS class on menu container
menuStyleCSSPropertiesInline styles on menu
listType'ul' | 'ol'from configList element type
maxVisibleItemsnumberfrom configScroll after N items
onTriggerHover(detail) => voidMouse enters trigger
onTriggerContext(detail) => voidRight-click on trigger
onItemHover(detail) => voidMouse enters menu item
onItemContext(detail) => voidRight-click/ArrowRight on item
onItemContextDismiss(detail) => voidArrowLeft on item

useAlap()

Hook for programmatic access within a provider.

MethodSignatureDescription
query()(expression, anchorId?) => string[]Expression to item IDs
resolve()(expression, anchorId?) => Array<{ id } & AlapLink>Expression to link objects
getLinks()(ids) => Array<{ id } & AlapLink>IDs to link objects

Examples

Hover preview:

tsx
function PreviewLink({ query, children }) {
  const [preview, setPreview] = useState(null);

  return (
    <>
      <AlapLink
        query={query}
        onItemHover={({ link }) => setPreview(link)}
      >
        {children}
      </AlapLink>
      {preview && (
        <div className="preview-card">
          <img src={preview.thumbnail} alt="" />
          <p>{preview.description}</p>
        </div>
      )}
    </>
  );
}

Programmatic query:

tsx
function CoffeeSection() {
  const { resolve } = useAlap();
  const coffeeCount = resolve('.coffee').length;

  return (
    <p>We know {coffeeCount} <AlapLink query=".coffee">coffee spots</AlapLink>.</p>
  );
}

Multi-config:

tsx
function NewsPage() {
  return (
    <AlapProvider config={newsConfig}>
      <AlapLink query=".politics">politics</AlapLink>
    </AlapProvider>
  );
}

function DocsPage() {
  return (
    <AlapProvider config={docsConfig}>
      <AlapLink query=".api">API docs</AlapLink>
    </AlapProvider>
  );
}