npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

sandia-chatbot-widget

v3.0.1

Published

Production-ready Sandia AI Chatbot Widget v3.0 with advanced themes, animations, notifications, and enterprise features

Readme

Sandia AI Chatbot Widget v3.0 - Production Ready 🚀

The most advanced, feature-rich chatbot widget for seamless AI assistant integration into any website or application.

NPM Version Downloads License

🌟 What's New in v3.0

4 Beautiful Themes - Modern, Classic, Minimal, Gradient
🎨 Advanced Animations - Smooth, Bouncy, Slide, Fade effects
🔔 Smart Notifications - Browser notifications & sound alerts
📱 Mobile Excellence - Full-screen mode & touch optimization
🎯 Accessibility First - WCAG compliant with screen reader support
💬 Rich Conversations - Message timestamps, copy functionality, reactions
📎 File Uploads - Drag & drop with progress indicators
🎤 Voice Input - Speech-to-text capabilities (coming soon)
Performance - Lazy loading, virtual scrolling, optimized rendering
🔧 Developer Tools - Enhanced APIs, debugging, and customization


🚀 Quick Start

NPM Installation

npm install [email protected]

React Integration - Production Ready

import { SandiaWidget } from 'sandia-chatbot-widget';

function App() {
  return (
    <SandiaWidget
      chatbotId="your-chatbot-id"
      styles={{
        theme: 'modern',
        primaryColor: '#006FEE',
        shadowStyle: 'soft',
        animation: 'smooth',
        darkMode: false,
        showTimestamps: true,
        allowFileUpload: true,
        soundEnabled: true,
        notificationsEnabled: true
      }}
      chatConfig={{
        quickReplies: ['Hello', 'Help me', 'Learn more'],
        maxFileSize: 10,
        voiceEnabled: true
      }}
      onMessage={(msg) => console.log('New message:', msg)}
      onFileUpload={(file) => console.log('File uploaded:', file.name)}
    />
  );
}

Vanilla JavaScript - Enhanced

<!DOCTYPE html>
<html>
<head>
  <script>
    window.SandiaChatbot = {
      chatbotId: 'your-chatbot-id',
      version: '3.0',
      styles: {
        theme: 'gradient',
        primaryColor: '#006FEE',
        shadowStyle: 'glow',
        animation: 'bouncy',
        showAvatar: true,
        showTimestamps: true,
        soundEnabled: true,
        notificationsEnabled: true,
        darkMode: false,
        autoMinimize: 5
      },
      chatConfig: {
        quickReplies: ['Hi there!', 'How can you help?', 'Tell me more'],
        allowedFileTypes: ['image/*', '.pdf', '.txt'],
        maxFileSize: 10
      }
    };
  </script>
  <script src="https://unpkg.com/[email protected]/dist/vanilla.js"></script>
</head>
<body>
  <!-- Your content -->
</body>
</html>

🎨 Theme Showcase

Modern Theme (Default)

<SandiaWidget
  chatbotId="your-id"
  styles={{
    theme: 'modern',
    primaryColor: '#006FEE',
    shadowStyle: 'soft',
    animation: 'smooth'
  }}
/>

Gradient Theme

<SandiaWidget
  chatbotId="your-id"
  styles={{
    theme: 'gradient',
    primaryColor: '#006FEE',
    shadowStyle: 'glow',
    animation: 'bouncy'
  }}
/>

Classic Corporate

<SandiaWidget
  chatbotId="your-id"
  styles={{
    theme: 'classic',
    primaryColor: '#1e40af',
    shadowStyle: 'hard',
    size: 'lg',
    customIcon: '🏢',
    greeting: 'Welcome to our support center'
  }}
/>

Minimal Design

<SandiaWidget
  chatbotId="your-id"
  styles={{
    theme: 'minimal',
    primaryColor: '#059669',
    shadowStyle: 'none',
    animation: 'fade',
    borderRadius: 12
  }}
/>

🔧 Production Configuration

Complete Styling Options

interface WidgetStyles {
  // Theme System
  theme?: 'modern' | 'classic' | 'minimal' | 'gradient';
  shadowStyle?: 'soft' | 'hard' | 'glow' | 'none';
  animation?: 'smooth' | 'bouncy' | 'slide' | 'fade' | 'none';
  
  // Basic Appearance
  position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
  primaryColor?: string;
  backgroundColor?: string;
  textColor?: string;
  borderRadius?: number;
  size?: 'sm' | 'md' | 'lg';
  
  // Advanced Features
  darkMode?: boolean;
  showAvatar?: boolean;
  showTimestamps?: boolean;
  soundEnabled?: boolean;
  notificationsEnabled?: boolean;
  allowFileUpload?: boolean;
  showTypingIndicator?: boolean;
  
  // Conversation Management
  messagePersistence?: boolean;
  maxMessages?: number;
  autoMinimize?: number; // minutes
  
  // Customization
  customAvatar?: string;
  customIcon?: string;
  greeting?: string;
  customCSS?: string;
  brandingEnabled?: boolean;
  
  // Accessibility
  highContrast?: boolean;
  reducedMotion?: boolean;
  
  // Mobile
  mobileFullScreen?: boolean;
  swipeToClose?: boolean;
}

Chat Configuration

interface ChatConfiguration {
  // Quick Actions
  quickReplies?: string[];
  
  // File Upload
  allowedFileTypes?: string[];
  maxFileSize?: number; // MB
  
  // Voice Features
  voiceEnabled?: boolean;
  voiceLanguage?: string;
  
  // Performance
  messagesPerMinute?: number;
  
  // Analytics
  trackingEnabled?: boolean;
  customEvents?: string[];
}

🎯 Enterprise Features

Advanced Event Handling

<SandiaWidget
  chatbotId="your-id"
  // Core Events
  onReady={() => console.log('Widget ready')}
  onOpen={() => analytics.track('chat_opened')}
  onClose={() => analytics.track('chat_closed')}
  onMinimize={() => analytics.track('chat_minimized')}
  onRestore={() => analytics.track('chat_restored')}
  
  // Message Events
  onMessage={(msg) => {
    console.log('Message:', msg);
    // Save to your analytics
    analytics.track('message_sent', {
      role: msg.role,
      timestamp: msg.timestamp,
      length: msg.content.length
    });
  }}
  onTyping={(isTyping) => console.log('User typing:', isTyping)}
  
  // Advanced Events
  onFileUpload={(file) => {
    console.log('File upload:', file.name, file.size);
    // Handle file processing
  }}
  onVoiceStart={() => console.log('Voice recording started')}
  onVoiceEnd={(transcript) => console.log('Voice:', transcript)}
  
  // Error Handling
  onError={(error) => {
    console.error('Chat error:', error);
    // Report to error tracking
  }}
  onSubscriptionError={(error) => {
    console.warn('Subscription issue:', error);
    // Handle billing issues
  }}
/>

API Access & Control

// Global API for advanced control
window.SandiaChatbotAPI.open();
window.SandiaChatbotAPI.close();
window.SandiaChatbotAPI.minimize();
window.SandiaChatbotAPI.restore();

// Send programmatic messages
window.SandiaChatbotAPI.sendMessage('Hello from the website!');

// Update configuration dynamically
window.SandiaChatbotAPI.updateConfig({
  primaryColor: '#ff6b35',
  theme: 'gradient'
});

// Manage notifications
window.SandiaChatbotAPI.updateBadge(5);
window.SandiaChatbotAPI.resetUnreadCount();

// Get widget state
const isOpen = window.SandiaChatbotAPI.isOpen();
const messages = window.SandiaChatbotAPI.getMessages();
const config = window.SandiaChatbotAPI.getConfig();

📱 Mobile Excellence

Responsive Design

  • Auto-detection of mobile devices
  • Full-screen mode on mobile for better UX
  • Touch-optimized buttons and interactions
  • Swipe gestures for navigation
  • iOS zoom prevention with proper input handling

Mobile-Specific Configuration

<SandiaWidget
  chatbotId="your-id"
  styles={{
    mobileFullScreen: true,
    swipeToClose: true,
    position: 'bottom-right', // Auto-adjusts on mobile
    size: 'lg' // Better visibility on mobile
  }}
/>

Accessibility & Compliance

WCAG 2.1 AA Compliant

  • Screen reader support with proper ARIA labels
  • Keyboard navigation for all interactions
  • High contrast mode support
  • Reduced motion preferences
  • Focus management and visual indicators
  • Color contrast meeting accessibility standards

Accessibility Configuration

<SandiaWidget
  chatbotId="your-id"
  styles={{
    highContrast: true,
    reducedMotion: true,
    // Widget automatically adapts to user preferences
  }}
/>

🔔 Notifications & Alerts

Smart Notification System

  • Browser notifications for new messages when chat is closed
  • Sound effects for message alerts and interactions
  • Visual badges with unread message counts
  • Auto-minimize after inactivity periods

Notification Setup

<SandiaWidget
  chatbotId="your-id"
  styles={{
    soundEnabled: true,
    notificationsEnabled: true,
    autoMinimize: 5 // Auto-minimize after 5 minutes
  }}
  onMessage={(msg) => {
    // Custom notification handling
    if (!document.hasFocus() && msg.role === 'assistant') {
      new Notification('New message from support', {
        body: msg.content.substring(0, 100),
        icon: '/your-icon.png'
      });
    }
  }}
/>

📊 Analytics Integration

Google Analytics 4

<SandiaWidget
  chatbotId="your-id"
  onMessage={(message) => {
    gtag('event', 'chat_message', {
      event_category: 'chat',
      event_label: message.role,
      custom_parameter_1: message.content.length
    });
  }}
  onOpen={() => {
    gtag('event', 'chat_opened', {
      event_category: 'engagement'
    });
  }}
/>

Custom Analytics

<SandiaWidget
  chatbotId="your-id"
  metadata={{
    userId: user.id,
    sessionId: sessionStorage.getItem('session'),
    page: window.location.pathname,
    source: 'homepage'
  }}
  onMessage={(msg) => {
    analytics.track('Chat Message', {
      direction: msg.role,
      timestamp: msg.timestamp,
      messageLength: msg.content.length,
      conversationLength: messages.length
    });
  }}
/>

🌐 Multi-Language Support

Internationalization Ready

<SandiaWidget
  chatbotId="your-id"
  styles={{
    greeting: t('chat.welcome_message'),
    customIcon: '🌍'
  }}
  chatConfig={{
    quickReplies: [
      t('chat.quick.hello'),
      t('chat.quick.help'),
      t('chat.quick.contact')
    ],
    voiceLanguage: locale // 'en-US', 'es-ES', 'fr-FR', etc.
  }}
/>

🎛️ Framework Integration

Next.js (Recommended)

import dynamic from 'next/dynamic';

const SandiaWidget = dynamic(
  () => import('sandia-chatbot-widget').then(mod => mod.SandiaWidget),
  { 
    ssr: false,
    loading: () => <div>Loading chat...</div>
  }
);

export default function Layout({ children }) {
  return (
    <>
      {children}
      <SandiaWidget
        chatbotId={process.env.NEXT_PUBLIC_CHATBOT_ID}
        styles={{
          theme: 'modern',
          primaryColor: '#006FEE'
        }}
      />
    </>
  );
}

Vue.js 3

<template>
  <div id="app">
    <!-- Your content -->
  </div>
</template>

<script setup>
import { onMounted } from 'vue';
import { initSandiaChatbot } from 'sandia-chatbot-widget';

onMounted(() => {
  initSandiaChatbot({
    chatbotId: 'your-chatbot-id',
    styles: {
      theme: 'gradient',
      primaryColor: '#006FEE'
    }
  });
});
</script>

Angular

import { Component, OnInit } from '@angular/core';
import { initSandiaChatbot } from 'sandia-chatbot-widget';

@Component({
  selector: 'app-root',
  template: '<div>Your content</div>'
})
export class AppComponent implements OnInit {
  ngOnInit() {
    initSandiaChatbot({
      chatbotId: 'your-chatbot-id',
      styles: {
        theme: 'modern',
        primaryColor: '#006FEE',
        darkMode: true
      }
    });
  }
}

🔒 Security & Performance

Enterprise Security

  • 🔐 Token-based authentication for private chatbots
  • 🌐 Domain validation and CORS protection
  • 🛡️ Rate limiting protection
  • 🔒 HTTPS encryption for all communications
  • 📊 Audit logging for compliance

Performance Optimizations

  • Lazy loading of components
  • 🗃️ Virtual scrolling for long conversations
  • 💾 Smart caching of messages and assets
  • 📦 Code splitting for optimal bundle size
  • 🔄 Efficient re-rendering with React optimization

🧪 Testing & Debugging

Debug Mode

<SandiaWidget
  chatbotId="your-id"
  debug={true} // Enables detailed console logging
  version="3.0" // Specify API version
/>

Testing Environment

# Test with different configurations
npm run test:widget

# Visual regression testing
npm run test:visual

# Performance testing
npm run test:performance

📚 Migration Guide v2 → v3

Breaking Changes

  • Minimum React version: 16.8+ (for hooks)
  • New required peer dependencies for enhanced features
  • Updated event handler signatures include timestamps

Migration Steps

  1. Update package: npm install [email protected]
  2. Update styles: Add new v3.0 style properties
  3. Update events: Use new enhanced event signatures
  4. Test thoroughly: Verify all functionality works as expected

Backward Compatibility

Most v2 configurations continue to work with v3, but you'll miss out on the new features.


🆘 Support & Resources

Documentation

Community & Support

Professional Services

  • 🏢 Enterprise Support available
  • 🎨 Custom Theming services
  • 🔧 Integration Consulting
  • 📊 Analytics Setup assistance

📄 License

MIT License - free for commercial use.


🚀 Get Started Today

Ready to integrate the most advanced chatbot widget available?

  1. Sign up for Sandia AI
  2. Create your first chatbot
  3. Get your chatbot ID
  4. Install and integrate in minutes!

Transform your website's user engagement with Sandia AI Chatbot Widget v3.0