JSPM

  • Created
  • Published
  • Downloads 656
  • Score
    100M100P100Q53566F
  • License MIT

A modern, lightweight chat UI library for web applications

Package Exports

  • @alchemyui/chat
  • @alchemyui/chat/dist/alchemy.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@alchemyui/chat) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

AlchemyJS

A modern, lightweight chat UI library for web applications.

Quickstart

Using CDN

<div id="chat-container"></div>
<script src="https://unpkg.com/alchemyjs/dist/alchemy.js"></script>
<script>
    const chat = new AlchemyChat('#chat-container');
    chat.addMessage({
        text: 'Hello from AlchemyJS!',
        type: 'incoming'
    });
</script>

Using NPM

# Install the package
npm install alchemyjs

# Import in your code
import { AlchemyChat } from 'alchemyjs';

# Initialize chat
const chat = new AlchemyChat('#chat-container');

Framework Examples

# Flask Example
cd examples/frameworks/flask
pip install -r requirements.txt
python app.py
# Visit http://localhost:5000

# Node.js Example
cd examples/frameworks/nodejs
npm install
npm start
# Visit http://localhost:3000

Configuration Guide

There are two ways to configure AlchemyJS:

This sets the default configuration for all chat instances. Edit alchemy.json:

{
    "theme": {
        "mode": "light",
        "light": {
            "colors": {
                "primary": "#0084ff",
                "background": "#ffffff",
                "incomingMessage": "#f0f2f5",
                "outgoingMessage": "#0084ff",
                "textPrimary": "#050505",
                "textSecondary": "#65676b",
                "borderColor": "#e4e6eb"
            }
        },
        "dark": {
            "colors": {
                "primary": "#0084ff",
                "background": "#242526",
                "incomingMessage": "#3a3b3c",
                "outgoingMessage": "#0084ff",
                "textPrimary": "#e4e6eb",
                "textSecondary": "#b0b3b8",
                "borderColor": "#3a3b3c"
            }
        },
        "sizing": {
            "maxHeight": "600px",
            "minHeight": "400px",
            "borderRadius": "12px",
            "messageBorderRadius": "18px",
            "fontSize": "14px"
        },
        "spacing": {
            "padding": "16px",
            "messageSpacing": "8px"
        }
    },
    "interface": {
        "showTimestamp": true,
        "messageAlignment": "sides",
        "showThemeToggle": true,
        "themeTogglePosition": {
            "top": "20px",
            "right": "20px"
        },
        "appBar": {
            "title": "AlchemyJS Chat",
            "showActions": true
        },
        "inputPlaceholder": "Type a message...",
        "sendButtonText": "Send",
        "preferSystemTheme": true
    },
    "storage": {
        "enable": true,
        "type": "local",
        "key": "alchemyjs_messages"
    },
    "behavior": {
        "maxMessageLength": 1000,
        "autoScroll": true,
        "throttleMS": 100,
        "autocorrect": {
            "enable": true,
            "firstWordCapitalization": true,
            "commonWords": {
                "ur": "your",
                "u": "you",
                "dont": "don't"
            }
        }
    }
}

After modifying alchemy.json, cast your spells to rebuild the library:

npm run cast-spells
# The enchanted library will appear in dist/alchemy.js

Common enchantments:

# Brew a development potion with magic traces (source maps)
npm run brew

# Cast a production spell with full power
npm run cast

# Transmute the code and watch for changes
npm run transmute

# Run experimental brews in the lab
npm run experiment

2. Runtime Configuration

You can override build-time defaults for individual instances:

const chat = new AlchemyChat('#chat-container', {
    // Override specific settings
    theme: {
        mode: 'dark'  // Override just the theme mode
    },
    storage: {
        key: 'custom_storage_key'  // Custom storage key
    }
});

Theme Customization

const chat = new AlchemyChat('#chat-container', {
    theme: {
        // Light and dark mode colors
        light: {
            colors: {
                primary: '#0084ff',           // Primary color for buttons, links
                background: '#ffffff',         // Chat background
                incomingMessage: '#f0f2f5',   // Incoming message bubbles
                outgoingMessage: '#0084ff',   // Outgoing message bubbles
                textPrimary: '#050505',       // Main text color
                textSecondary: '#65676b',     // Secondary text (timestamps)
                borderColor: '#e4e6eb'        // Borders and dividers
            }
        },
        dark: {
            colors: {
                primary: '#0084ff',
                background: '#242526',
                incomingMessage: '#3a3b3c',
                outgoingMessage: '#0084ff',
                textPrimary: '#e4e6eb',
                textSecondary: '#b0b3b8',
                borderColor: '#3a3b3c'
            }
        },
        // Customize sizes
        sizing: {
            maxHeight: '600px',
            minHeight: '400px',
            borderRadius: '12px',
            messageBorderRadius: '18px',
            fontSize: '14px'
        },
        // Adjust spacing
        spacing: {
            padding: '16px',
            messageSpacing: '8px'
        }
    }
});

Message Storage

// Local Storage (persists across browser sessions)
const chat = new AlchemyChat('#chat-container', {
    storage: {
        enable: true,
        type: 'local',
        key: 'my_chat_messages'    // Custom storage key
    }
});

// Session Storage (cleared when browser closes)
const chat = new AlchemyChat('#chat-container', {
    storage: {
        enable: true,
        type: 'session',
        key: 'temp_chat_messages'
    }
});

// Disable Storage (memory only)
const chat = new AlchemyChat('#chat-container', {
    storage: {
        enable: false
    }
});

Interface Options

const chat = new AlchemyChat('#chat-container', {
    interface: {
        // App Bar Configuration
        appBar: {
            title: 'My Chat App',
            showActions: true          // Show additional actions menu
        },
        // Theme Toggle
        showThemeToggle: true,
        themeTogglePosition: {
            top: '20px',
            right: '20px'
        },
        // Message Display
        showTimestamp: true,          // Show message timestamps
        messageAlignment: 'sides',     // 'sides' or 'right'
        preferSystemTheme: true,      // Use system theme preference
        // Input Area
        inputPlaceholder: 'Type a message...',
        sendButtonText: 'Send'
    }
});

Behavior Settings

const chat = new AlchemyChat('#chat-container', {
    behavior: {
        // Message Handling
        maxMessageLength: 1000,    // Maximum message length
        autoScroll: true,         // Auto-scroll to new messages
        throttleMS: 100,          // Input throttling

        // Autocorrect Features
        autocorrect: {
            enable: true,
            firstWordCapitalization: true,
            commonWords: {
                'ur': 'your',
                'u': 'you',
                'dont': "don't",
                // Add your own corrections
                'customword': 'replacement'
            }
        }
    }
});

Event Callbacks

const chat = new AlchemyChat('#chat-container', {
    callbacks: {
        // Message Events
        onSend: (message) => {
            console.log('Message sent:', message);
        },
        onReceive: (message) => {
            console.log('Message received:', message);
        },
        // Input Events
        onType: (text) => {
            console.log('User is typing:', text);
        },
        // Lifecycle Events
        onReady: () => {
            console.log('Chat is ready');
        },
        // Error Handling
        onError: (error) => {
            console.error('Chat error:', error);
        }
    }
});

Features

  • 🎨 Beautiful, modern UI with light/dark themes
  • 📱 Fully responsive design
  • 💾 Message persistence with local storage
  • 🔌 WebSocket support for real-time chat
  • 🎯 Framework agnostic - works with any web framework
  • 🛠️ Highly customizable themes and behavior
  • 🔄 System theme integration
  • 📝 Message formatting and autocorrect
  • 🎉 Zero dependencies

Documentation

Basic Usage

const chat = new AlchemyChat('#chat-container', {
    interface: {
        appBar: {
            title: 'My Chat App'
        },
        showThemeToggle: true,
        preferSystemTheme: true
    },
    storage: {
        enable: true,
        type: 'local'
    }
});

// Send a message
chat.addMessage({
    text: 'Hello!',
    type: 'outgoing'
});

// Receive a message
chat.addMessage({
    text: 'Hi there!',
    type: 'incoming'
});

Configuration Options

{
    theme: {
        mode: 'light',          // 'light' or 'dark'
        colors: { ... },        // Custom color scheme
        sizing: { ... },        // Size customization
        spacing: { ... }        // Spacing customization
    },
    interface: {
        showTimestamp: true,    // Show message timestamps
        showThemeToggle: true,  // Show theme toggle button
        appBar: { ... }         // App bar configuration
    },
    storage: {
        enable: true,           // Enable message persistence
        type: 'local',         // 'local' or 'session'
        key: 'chat_messages'   // Storage key
    },
    callbacks: {
        onSend: (message) => {},     // Message sent
        onReceive: (message) => {},   // Message received
        onError: (error) => {}       // Error handling
    }
}

Build Configuration

The build process can be customized through webpack.config.js:

// webpack.config.js
module.exports = {
    entry: './src/alchemy.js',
    output: {
        filename: 'alchemy.js',
        library: 'AlchemyChat',
        libraryTarget: 'umd'
    },
    // ... other webpack configuration
};

Common build commands:

# Development build with source maps
npm run dev

# Production build with minification
npm run build

# Build and watch for changes
npm run watch

# Build and serve demo
npm run demo

🔮 The Alchemist's Spellbook

Welcome to the mystical art of chat enchantment! Here are some powerful spells and arcane secrets to enhance your AlchemyJS mastery.

🧙‍♂️ Magical Scripts

# For the mystically inclined:
npm run cast-spells      # Build for production
npm run brew             # Start dev server
npm run transmute        # Watch for changes
npm run summon-familiar  # Watch tests
npm run banish           # Clean project
npm run enchant          # Generate docs
npm run scry             # Lint code
npm run shield           # Security audit

# For the pragmatic developers:
npm run build           # Build for production
npm run start           # Start dev server
npm run watch           # Watch for changes
npm run test:watch      # Watch tests
npm run clean           # Clean project
npm run docs            # Generate docs
npm run lint            # Lint code
npm run security        # Security audit

🌟 Enchantment Tips

  1. Theme Synchronization Ritual

    // Bind your chat to the system's natural cycles
    const chat = new AlchemyChat('#portal', {
      interface: { preferSystemTheme: true }
    });
  2. Message Persistence Charm

    // Store messages in the eternal void
    const chat = new AlchemyChat('#portal', {
      storage: {
        type: 'local',
        key: 'eternal_messages'
      }
    });
  3. Scroll Enchantment

    // Smooth scrolling like a floating feather
    const chat = new AlchemyChat('#portal', {
      behavior: {
        scrollBehavior: 'smooth',
        autoScroll: true
      }
    });

🎨 Style Transmutation

  1. Dark Arts Toggle

    /* Add mystical transitions */
    .alchemy-chat {
      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    }
  2. Message Bubble Enchantment

    // Create ethereal message bubbles
    const chat = new AlchemyChat('#portal', {
      theme: {
        sizing: {
          messageBorderRadius: '20px 20px 3px 20px'
        }
      }
    });

📜 Ancient Scrolls (Pro Tips)

  1. The Rule of Conservation

    • Always cast your spells (npm run cast-spells) before deploying
    • Keep your enchantments modular and reusable
    • Document your magical discoveries
  2. The Principle of Harmony

    • Let your chat flow naturally with system themes
    • Maintain consistent spacing in your layouts
    • Use smooth transitions for magical effects
  3. The Law of Debugging

    • Check the browser's crystal ball (console)
    • Use scrying spells (npm run scry) regularly
    • Test your enchantments across different realms (browsers)

🌈 Elemental Customization

// Summon custom colors
const chat = new AlchemyChat('#portal', {
  theme: {
    light: {
      colors: {
        primary: '#7e57c2',      // Amethyst
        background: '#f5f0ff',   // Moonlight
        incomingMessage: '#e8eaf6', // Starlight
        outgoingMessage: '#7e57c2'  // Mystic Purple
      }
    }
  }
});

🔥 Power Words (Events)

// Listen for magical events
const chat = new AlchemyChat('#portal', {
  callbacks: {
    onSend: (spell) => console.log('Spell cast:', spell),
    onReceive: (scroll) => console.log('Scroll received:', scroll),
    onThemeChange: (realm) => console.log('Realm shifted to:', realm)
  }
});

Examples

Check out our example implementations:

Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.