npm package: @shiftboolean/ai-lead-scoring
Description: An UI library to show ai lead score with factors and history details
Author: ShiftBoolean
Latest version: 1.0.11

# Ai Lead Scoring ![Coverage](https://img.shields.io/badge/Coverage-98.87%25-brightgreen) ![Branches](https://img.shields.io/badge/Branches-95.37%25-green) ![Functions](https://img.shields.io/badge/Functions-100%25-brightgreen) ![Lines](https://img.shields.io/badge/Lines-100%25-brightgreen)

A lightweight React component library to **display AI-based Lead Scores and their details** in a flexible and customizable way.

This package helps you easily show lead scores, lead score facts, visualize score history, and even inject lead scores into existing HTML tables without rewriting your UI.

---

## 📦 Package Overview

`@shiftboolean/ai-lead-scoring` is a React-based npm package designed to show **lead score data and details insights** for leads.

It works out-of-the-box with minimal setup and also gives you full freedom to **customize UI components** according to your design system (MUI, custom CSS, etc.).

---

## 🚀 What Can This Package Do?

- Show **single lead score**
- Inject **lead score column** into any existing table
- Display **lead score details insights in dialog/sidebar**
- Support **fully custom UI components/styles**

---

## 📥 Installation

```bash
npm install @shiftboolean/ai-lead-scoring

yarn add @shiftboolean/ai-lead-scoring

pnpm add @shiftboolean/ai-lead-scoring
```

---

## 🧩 Components & Usage Details

Below are all available components with clear explanations and prop details.

---

### AiLeadScoreProvider

`AiLeadScoreProvider` is a React context provider that handles API key validation, authentication state, and global configuration for the AI Lead Scoring system. It validates the provided API key on mount, manages loading and error states, and exposes authentication status, theme, messages, and configuration values to all child components via context.

Wrap your application (or required part of it) with this provider to securely access AI Lead Score features throughout your app.

### Props Reference

| Prop Name      | Type                | Required | Description                                                                |
| -------------- | ------------------- | -------- | -------------------------------------------------------------------------- |
| apiKey         | `string`            | ✅       | API key used to authenticate and validate access to the AI Lead Score API. |
| children       | `React.ReactNode`   | ✅       | React components that will consume the provider's context.                 |
| theme          | `"light" \| "dark"` | ❌       | UI theme for the provider. Defaults to `"light"` if not provided.          |
| `primaryColor` | `string`            | ❌       | Primary theme color of the theme                                           |

### Example

```tsx
 <StrictMode>
      <AiLeadScoreProvider
        apiKey="123"
        >
        <App />
      </AiLeadScoreProvider>
    </ThemeProvider>
  </StrictMode>

```

### ShowSingleLeadScore

Displays the lead score for a **single student**.

### Props Reference

| Prop Name         | Type                                                   | Required | Description                            |
| ----------------- | ------------------------------------------------------ | -------- | -------------------------------------- |
| `studentId`       | `string`                                               | ✅       | Unique student ID                      |
| `CustomComponent` | `ComponentType<{ isLoading: boolean; score: number }>` | ❌       | Custom UI for rendering score          |
| `width`           | `string \| number`                                     | ❌       | Width of the component                 |
| `height`          | `string \| number`                                     | ❌       | Height of the component                |
| `styles`          | `CSSProperties`                                        | ❌       | Custom inline styles for the component |

### Example

```tsx
import { ShowSingleLeadScore } from "@shiftboolean/ai-lead-scoring";

export default function SingleScoreExample() {
  return <ShowSingleLeadScore studentId="STUDENT_123" />;
}
```

### InjectLeadScoreTableColumn

Injects a Lead Score column into any existing HTML table using its ID.

### Props Reference

| Prop Name              | Type                                                   | Required | Description                            |
| ---------------------- | ------------------------------------------------------ | -------- | -------------------------------------- |
| `tableId`              | `string`                                               | ✅       | Target table ID                        |
| `studentIds`           | `string[]`                                             | ✅       | Student IDs (row-wise)                 |
| `headerName`           | `string`                                               | ✅       | Column header text                     |
| `columnInjectionIndex` | `number`                                               | ❌       | Injection Column position (>0)         |
| `CustomComponent`      | `ComponentType<{ isLoading: boolean; score: number }>` | ❌       | Custom cell UI                         |
| `width`                | `string \| number`                                     | ❌       | Width of the component                 |
| `height`               | `string \| number`                                     | ❌       | Height of the component                |
| `styles`               | `CSSProperties`                                        | ❌       | Custom inline styles for the component |

### Example

```tsx
import { InjectLeadScoreTableColumn } from "@shiftboolean/ai-lead-scoring";

export default function InjectColumnExample() {
  return (
    <table id="student-table">
      <thead>
        <tr>
          <th>Name</th>
          <th>Email</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>John</td>
          <td>john@email.com</td>
        </tr>
        <tr>
          <td>Jane</td>
          <td>jane@email.com</td>
        </tr>
      </tbody>

      <InjectLeadScoreTableColumn
        tableId="student-table"
        headerName="Lead Score"
        studentIds={["STUDENT_1", "STUDENT_2"]}
      />
    </table>
  );
}
```

### LeadScoreDetailsDialog

Shows the lead score insights with history, recommendation, factors, risks, and overview in a dialog

### Props Reference

| Prop Name         | Type                                     | Required | Description                                           |
| ----------------- | ---------------------------------------- | -------- | ----------------------------------------------------- |
| `DialogInitiator` | `ComponentType<{ onClick: () => void }>` | ✅       | Component that triggers opening the dialog.           |
| `studentId`       | `string`                                 | ✅       | Unique student/lead ID.                               |
| `open`            | `boolean`                                | ✅       | Dialog opening state                                  |
| `onClose`         | `()=> void`                              | ✅       | Dialog closing function                               |
| `dialogTitle`     | `string`                                 | ❌       | Optional title displayed on the dialog.               |
| `leadStage`       | `string`                                 | ❌       | Lead stage of the student                             |
| `studentName`     | `string`                                 | ❌       | Name of the student                                   |
| `dialogWidth`     | `'sm' \| 'md' \| 'lg' \| 'full'`         | ❌       | Width of the dialog.                                  |
| `styles`          | `React.CSSProperties`                    | ❌       | Custom inline styles applied to the dialog container. |

### Example

```tsx
<LeadScoreDetailsDialog
  DialogInitiator={({ onClick }) => (
    <Button onClick={onClick}>Score Details</Button>
  )}
  studentId="2333443"
/>
```

### LeadScoreDetailsSidebar

Shows the lead score insights with history, recommendation, factors, risks, and overview in a sidebar

### Props

| Prop Name         | Type                                     | Required | Description                                            |
| ----------------- | ---------------------------------------- | -------- | ------------------------------------------------------ |
| `DialogInitiator` | `ComponentType<{ onClick: () => void }>` | ✅       | Component that triggers opening the sidebar.           |
| `studentId`       | `string`                                 | ✅       | Unique student/lead ID.                                |
| `open`            | `boolean`                                | ✅       | Sidebar opening state                                  |
| `onClose`         | `()=> void`                              | ✅       | Sidebar closing function                               |
| `sidebarTitle`    | `string`                                 | ❌       | Optional title displayed on the sidebar.               |
| `sidebarWidth`    | `'sm' \| 'md' \| 'lg' \| 'full'`         | ❌       | Width of the sidebar.                                  |
| `sidebarPosition` | `'left' \| 'right'`                      | ❌       | Position of the sidebar on the screen.                 |
| `styles`          | `React.CSSProperties`                    | ❌       | Custom inline styles applied to the sidebar container. |
| `leadStage`       | `string`                                 | ❌       | Lead stage of the student                              |
| `studentName`     | `string`                                 | ❌       | Name of the student                                    |

### Example

```tsx
<LeadScoreDetailsSidebar
  DialogInitiator={({ onClick }) => (
    <Button onClick={onClick}>Score Details</Button>
  )}
  studentId="2333443"
/>
```

## 🧠 Summary

- `@shiftboolean/ai-lead-scoring` helps you display lead scores and insights quickly
- Works well with existing UI and tables
- Fully customizable components and UI
- Easy to integrate into any React app
- Currently uses a static API key, which will be improved later