> ## Documentation Index
> Fetch the complete documentation index at: https://fuse-docs.swovo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Embedding Fuse

> Install our NPM package on your website.

Embedding Fuse in your website is simple. There are two steps:

1. Add the [fuse-importer NPM package](#adding-the-npm-package) to your application.
2. Add a small [JavaScript snippet](#launching-an-importer) to open your Fuse importer.

## Adding the NPM Package

<Tabs>
  <Tab title="YARN">
    To add Fuse, do:

    ```bash theme={null}
    yarn add fuse-importer
    ```

    To import it for use:

    ```typescript theme={null}
    import FuseImporter from "fuse-importer";
    ```
  </Tab>

  <Tab title="NPM">
    To add Fuse, do:

    ```bash theme={null}
    npm install fuse-importer --save
    ```

    To import it for use:

    ```typescript theme={null}
    import FuseImporter from "fuse-importer";
    ```
  </Tab>

  <Tab title="CDN">
    Fuse is also hosted on the [unpkg.com](https://unpkg.com/) CDN. Make sure to place the script tag before you initialize the importer.

    ```html theme={null}
    <script type="text/javascript" src="https://unpkg.com/fuse-importer@latest"></script>
    ```
  </Tab>
</Tabs>

## Launching an Importer

The `show` function does exactly what it sounds like; it displays the importer. Ensure you have initialized the importer properly beforehand. Use this function like so:

<Tabs>
  <Tab title="JavaScript (Simple)">
    ```javascript theme={null}
    import FuseImporter, { getFuseClientSideToken } from 'fuse-importer';

    // Initialize the importer
    const importer = new FuseImporter();

    // See https://fuse-docs.flatirons.com/getting-started/sessions
    importer.getSessionToken = getFuseClientSideToken({
      importer_slug: 'YOUR_IMPORTER_SLUG',
      api_key: 'YOUR_API_KEY'
    });

    importer.show();
    ```
  </Tab>

  <Tab title="HTML + JS (Full)">
    ```html theme={null}
    <!DOCTYPE html>
    <html>
      <head>
        <script
          type="text/javascript"
          src="https://unpkg.com/fuse-importer@latest"
        ></script>
        <script type="text/javascript">
          const importer = new FuseImporter();

          // See https://fuse-docs.flatirons.com/getting-started/sessions
          importer.getSessionToken = getFuseClientSideToken({
            importer_slug: 'YOUR_IMPORTER_SLUG',
            api_key: 'YOUR_API_KEY'
          });

          // Frontend validations
          importer.onValidateRecord = async (record) => {
            const errors = {};

            // Validate that the email includes "gmail"
            if (!record.email?.includes("gmail")) {
              errors["email"] = "Email must be from Gmail";
            }

            return { errors: errors, warnings: {} };
          };

          // Data transformations
          importer.formatRecord = (record) => {
            const newRecord = { ...record };

            // Capitalize the first letter of the first name
            if (typeof newRecord.first_name === "string") {
              newRecord.first_name =
                newRecord.first_name.charAt(0).toUpperCase() +
                newRecord.first_name.slice(1);
            }

            return newRecord;
          };

          window.showFuseImporter = () => {
            importer.show();
          };
        </script>
      </head>

      <body>
        <button onclick="javascript:showFuseImporter()">Show Importer</button>
      </body>
    </html>
    ```
  </Tab>

  <Tab title="React">
    ```javascript theme={null}
    import React from 'react';
    import FuseImporter, { getFuseClientSideToken } from 'fuse-importer';

    const App = () => {
      const importer = new FuseImporter();

      // See https://fuse-docs.flatirons.com/getting-started/sessions
      importer.getSessionToken = getFuseClientSideToken({
        importer_slug: 'YOUR_IMPORTER_SLUG',
        api_key: 'YOUR_API_KEY'
      });

      const showImporter = () => {
        importer.show();
      };

      return (
        <button onClick={showImporter}>Show Importer</button>
      );
    };

    export default App;
    ```
  </Tab>

  <Tab title="Angular">
    ```typescript theme={null}
    import { Component } from '@angular/core';
    import FuseImporter, { getFuseClientSideToken } from 'fuse-importer';

    @Component({
      selector: 'app-root',
      template: `<button (click)="showImporter()">Show Importer</button>`,
    })
    export class AppComponent {
      showImporter() {
        const importer = new FuseImporter();

        // See https://fuse-docs.flatirons.com/getting-started/sessions
        importer.getSessionToken = getFuseClientSideToken({
          importer_slug: 'YOUR_IMPORTER_SLUG',
          api_key: 'YOUR_API_KEY'
        });

        importer.show();
      }
    }
    ```
  </Tab>

  <Tab title="Vue">
    ```javascript theme={null}
    <template>
      <button @click="showImporter">Show Importer</button>
    </template>

    <script>
    import FuseImporter, { getFuseClientSideToken } from 'fuse-importer';

    export default {
      methods: {
        showImporter() {
          const importer = new FuseImporter();

          // See https://fuse-docs.flatirons.com/getting-started/sessions
          importer.getSessionToken = getFuseClientSideToken({
            importer_slug: 'YOUR_IMPORTER_SLUG',
            api_key: 'YOUR_API_KEY'
          });

          importer.show();
        }
      }
    };
    </script>
    ```
  </Tab>
</Tabs>
