Microlink SDK Documentation

repository·master·Indexed 20 days ago

https://github.com/microlinkhq/sdk

A SDK for React and Vanilla JavaScript that turns links into rich media previews (images, videos, audio, iframes) by fetching metadata from the Microlink API. Includes packages for standard previews (@microlink/react, @microlink/vanilla) and hover-triggered previews (@microlink/hover-react, @microlink/hover-vanilla). Features include customizable card props, CSS variable styling, data overriding via setData, and utility functions for image proxying and API fetching.

Tokens
4.8K
Snippets
16
Records
23
Agent score
70%

What's inside Microlink SDK

  1. Install the Microlink SDK

    master

    Install the appropriate package based on your framework (React or Vanilla) and whether you need hover preview functionality.

    React

    Requires styled-components.

    npm install @microlink/react styled-components --save

    Vanilla JavaScript

    npm install @microlink/vanilla --save

    Hover Packages

    To show previews when users hover over links:

    React:

    npm install @microlink/hover-react styled-components --save

    Vanilla:

    npm install @microlink/hover-vanilla --save
    npm install @microlink/react styled-components --save
  2. Peer dependencies for React packages

    master

    If you are using the @microlink/react package, you must ensure the following peer dependencies are installed in your project:

    - `react` >= 17
    - `react-dom` >= 17
    - `styled-components` >= 5
  3. Quick Start with Microlink

    master

    React

    Import the Microlink component and provide a url prop.

    import Microlink from '@microlink/react'
    
    export default function App() {
      return <Microlink url="https://github.com" />
    }

    Vanilla JavaScript

    Use the microlink() function with a CSS selector to transform anchor tags into preview cards.

    <a href="https://github.com">GitHub</a>
    
    <script>
      microlink('a')
    </script>

    Vanilla via CDN

    <script src="https://cdn.jsdelivr.net/npm/@microlink/vanilla@latest/dist/microlink.min.js"></script>
    import Microlink from '@microlink/react'
    
    export default function App() {
      return <Microlink url="https://github.com" />
    }
  4. Implement Hover Previews

    master

    Hover packages display a preview card when users hover over links.

    React

    Use the MicrolinkHover higher-order component to wrap your link component.

    import MicrolinkHover from '@microlink/hover-react'
    
    const Link = (props) => <a {...props} />
    
    const HoverLink = MicrolinkHover(Link)
    
    export default function App() {
      return (
        <HoverLink href="https://github.com">
          Hover over me!
        </HoverLink>
      )
    }

    Vanilla JavaScript

    Include the hover vanilla script and call microlink() with a selector.

    <a href="https://github.com">GitHub</a>
    
    <script src="https://cdn.jsdelivr.net/npm/@microlink/hover-vanilla@latest/dist/microlink.min.js"></script>
    <script>
      microlink('a')
    </script>
    import MicrolinkHover from '@microlink/hover-react'
    
    const Link = (props) => <a {...props} />
    
    const HoverLink = MicrolinkHover(Link)
    
    export default function App() {
      return (
        <HoverLink href="https://github.com">
          Hover over me!
        </HoverLink>
      )
    }
  5. Customize Card Data with `setData`

    master

    You can override or transform the metadata fetched from the API using the setData prop. This is useful for SSR or custom data injection.

    Using an object to merge data:

    <Microlink
      url="https://example.com"
      setData={{
        title: 'Custom Title',
        description: 'Custom description',
        image: { url: 'https://example.com/image.jpg' }
      }}
    />

    Using a function to transform data:

    <Microlink
      url="https://example.com"
      setData={(data) => ({
        ...data,
        title: data.title.toUpperCase()
      })}
    />

    Static Mode (No API Fetch): To disable API calls entirely and rely solely on provided data, set fetchData={false}.

    <Microlink
      url="https://example.com"
      fetchData={false}
      setData={{ title: 'My Title' }}
    />
    <Microlink
      url="https://example.com"
      setData={(data) => ({
        ...data,
        title: data.title.toUpperCase()
      })}
    />
  6. Use Microlink React Utilities

    master

    The @microlink/react package exports several utilities for advanced use cases:

    • imageProxy(url): Proxies images through Microlink's image service.
    • getApiUrl(options): Generates an API URL and its corresponding props.
    • fetchFromApi(apiUrl, apiUrlProps): Fetches data directly from the Microlink API.
    import Microlink, { imageProxy, getApiUrl, fetchFromApi } from '@microlink/react'
    
    // Proxy images
    const proxiedUrl = imageProxy('https://example.com/image.jpg')
    
    // Generate API URL
    const [apiUrl, apiUrlProps] = getApiUrl({
      url: 'https://github.com',
      media: ['image'],
    })
    
    // Fetch data
    const { data } = await fetchFromApi(apiUrl, apiUrlProps)
    import Microlink, { imageProxy, getApiUrl, fetchFromApi } from '@microlink/react'
    
    // Proxy images through microlink's image service
    const proxiedUrl = imageProxy('https://example.com/image.jpg')
    
    // Generate API URL with options
    const [apiUrl, apiUrlProps] = getApiUrl({
      url: 'https://github.com',
      media: ['image'],
      // ... other options
    })
    
    // Fetch data from API
    const { data } = await fetchFromApi(apiUrl, apiUrlProps)
  7. Configure Microlink Component Props

    master

    The Microlink component accepts several props to customize the preview card. The url prop is required.

    PropTypeDefaultDescription
    urlstringrequiredThe URL to preview
    apiKeystringundefinedAPI key for authenticated requests
    size'normal' | 'small' | 'large''normal'Card size
    mediastring | string[]['iframe', 'video', 'audio', 'image', 'logo']Media type priority
    direction'ltr' | 'rtl''ltr'Text direction
    contrastboolean | stringfalseAuto-adapt colors from image palette
    lazyboolean | objecttrueEnable lazy loading
    loadingbooleanundefinedManually control loading state
    fetchDatabooleantrueEnable/disable API fetching
    setDataobject | functionundefinedOverride or customize data
    prerender'auto' | true | false'auto'Enable prerendering for SPAs
  8. Configure Media Playback Props

    master

    When using video or audio media types, use these props to control playback behavior:

    PropTypeDefaultDescription
    autoPlaybooleantrueAuto-play video/audio
    controlsbooleantrueShow playback controls
    loopbooleantrueLoop video/audio
    mutedbooleantrueMute video/audio
    playsInlinebooleantruePlay video inline on mobile
    mediaRefref | functionundefinedRef to the media element
  9. Configure Vanilla Microlink via Data Attributes

    master

    In Vanilla JS, you can configure individual cards directly in your HTML using data-* attributes. These are automatically parsed and applied by the microlink() function.

    <a href="https://github.com"
       data-media="video"
       data-size="large"
       data-contrast="true"
       data-set-data='{"title": "Custom Title"}'>
      GitHub
    </a>
    <a href="https://github.com"
       data-media="video"
       data-size="large"
       data-contrast="true"
       data-set-data='{"title": "Custom Title"}'>
      GitHub
    </a>
  10. Browser support for Microlink SDK

    master

    The Microlink SDK is compatible with all modern browsers. Note that the lazy loading feature relies on IntersectionObserver support, which is standard in all modern browser versions.

    - Chrome (latest)
    - Firefox (latest)
    - Safari (latest)
    - Edge (latest)
  11. Customize Card Appearance with CSS

    master

    CSS Variables

    Override these variables to change the appearance globally or per-instance:

    .microlink_card {
      --microlink-max-width: 500px;
      --microlink-background-color: #fff;
      --microlink-hover-background-color: #f5f8fa;
      --microlink-border-width: 1px;
      --microlink-border-style: solid;
      --microlink-border-color: #e1e8ed;
      --microlink-hover-border-color: #8899a680;
      --microlink-color: #181919;
    }

    CSS Class Names

    Target these classes for specific styling:

    • .microlink_card: Main card container
    • .microlink_card__content: Content section
    • .microlink_card__content_title: Title element
    • .microlink_card__content_description: Description element
    • .microlink_card__content_url: URL footer
    • .microlink_card__media: Media section
    • .microlink_card__media_image: Image element
    • .microlink_card__media_video: Video element
    • .microlink_card__media_audio: Audio element
    • .microlink_card__media__controls: Media controls wrapper
    • .microlink_card__iframe: Iframe container

    Inline Styles (React)

    <Microlink
      url="https://github.com"
      style={{
        fontFamily: 'Helvetica, sans-serif',
        borderRadius: '8px',
        boxShadow: '0 1px 4px rgba(0, 0, 0, 0.2)'
      }}
    />
  12. Use MicrolinkHover to add hover previews to React links

    master

    The MicrolinkHover Higher-Order Component (HOC) wraps a React component (typically a link) to display a Microlink preview card when the user hovers over it.

    It works by wrapping your LinkComponent in a Wrapper and positioning a PopOver containing a <Microlink /> component above it. The preview becomes visible on hover using CSS transitions.

    To use it, pass your link component as the first argument and any Microlink-specific props (like url) as the second argument.

    import MicrolinkHover from '@microlink/hover-react';
    import { Link } from 'react-router-dom'; // or any other link component
    
    // Create the enhanced component
    const HoverableLink = MicrolinkHover(Link, { url: 'https://google.com' });
    
    // Use it in your application
    function App() {
      return (
        <div>
          <HoverableLink to="https://google.com">Hover over me!</HoverableLink>
        </div>
      );
    }