streamlit-kanban-board-goviceversa


Namestreamlit-kanban-board-goviceversa JSON
Version 1.1.1 PyPI version JSON
download
home_pageNone
SummaryA powerful, interactive Kanban board component for Streamlit applications with drag-and-drop functionality, role-based permissions, and customizable workflows.
upload_time2025-07-14 12:01:21
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords streamlit kanban board drag-drop workflow pipeline project-management
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Streamlit Kanban Board Component

A powerful, interactive Kanban board component for Streamlit applications, designed for deal pipeline management, project tracking, and workflow visualization. Features drag-and-drop functionality, role-based permissions, detailed dialogs, and source-based styling.

![Kanban Board Preview](https://via.placeholder.com/800x400?text=Kanban+Board+Component)

## โœจ Features

### Core Functionality
- **Drag & Drop Interface**: Native HTML5 drag-and-drop with smooth animations
- **Interactive Deal Cards**: Click cards to open detailed dialogs with full Streamlit widget support
- **Customizable Stages**: Define pipeline stages with custom names and colors
- **Source-Based Styling**: Automatic card styling based on data source (VV=blue, OF=orange)
- **Role-Based Permissions**: Control drag/drop access and stage visibility by user role

### Advanced Capabilities
- **Permission System**: Granular control over user actions (drag, approve, reject, edit)
- **Visual Feedback**: Dynamic column highlighting and lock icons during drag operations
- **Responsive Design**: Mobile-friendly layout with touch support
- **Custom HTML**: Embed custom HTML content in deal cards
- **Session State Integration**: Seamless integration with Streamlit's session state

### User Experience
- **Smooth Animations**: CSS transitions for professional feel
- **Loading States**: Visual feedback during operations
- **Error Prevention**: Permission validation before allowing actions
- **Accessibility**: Keyboard navigation and screen reader support

## ๐Ÿš€ Installation

### From PyPI
```bash
pip install streamlit-kanban-board-goviceversa
```

### From Test PyPI (for testing)
```bash
pip install -i https://test.pypi.org/simple/ streamlit-kanban-board-goviceversa
```

### From Source
```bash
git clone https://github.com/goviceversa-com/streamlit_kanban_board.git
cd streamlit_kanban_board
pip install -e .
```

## ๐ŸŽฏ Quick Start

### Basic Usage

```python
import streamlit as st
from streamlit_kanban_board import kanban_board

# Define your pipeline stages
stages = [
    {"id": "todo", "name": "To Do", "color": "#3498db"},
    {"id": "in_progress", "name": "In Progress", "color": "#f39c12"},
    {"id": "done", "name": "Done", "color": "#27ae60"}
]

# Define your deals/items
deals = [
    {
        "id": "deal_001",
        "stage": "todo",
        "deal_id": "D-2024-001",
        "company_name": "Acme Corp",
        "product_type": "Term Loan",
        "date": "2024-01-15",
        "underwriter": "John Smith",
        "source": "VV"
    }
]

# Display the kanban board
result = kanban_board(
    board=stages,
    data=deals,
    key="my_kanban_board"
)

# Handle interactions
if result:
    if result.get("type") == "card_move":
        st.success(f"Deal moved to: {result['stage']}")
    elif result.get("type") == "card_click":
        st.info(f"Deal clicked: {result['data']['company_name']}")
```

## ๐Ÿ“‹ API Reference

### `kanban_board()`

Creates a Kanban board component with drag-and-drop functionality.

#### Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `board` | `list[dict]` | Required | Stage definitions with id, name, and color |
| `data` | `list[dict]` | Required | Deal/item data with required fields |
| `key` | `str` | `None` | Unique component key for Streamlit |
| `draggable_stages` | `list[str]` | `None` | Stages user can drag to (None = all) |

#### Stage Format

Stages are defined as dictionaries with id, name, and optional color:

```python
stages = [
    {"id": "todo", "name": "To Do", "color": "#3498db"},
    {"id": "in_progress", "name": "In Progress", "color": "#f39c12"},
    {"id": "done", "name": "Done", "color": "#27ae60"}
]
```

#### Data Format

Each item must include these required fields:

```python
item = {
    "id": "unique_item_id",           # Required: Unique identifier
    "stage": "current_stage_id",      # Required: Current stage
    "deal_id": "D-2024-001",         # Required: Display ID
    "company_name": "Company Name",   # Required: Company name
    
    # Optional fields
    "product_type": "Term Loan",      # Product type (shown as badge)
    "date": "2024-01-15",            # Relevant date
    "underwriter": "John Smith",      # Underwriter name
    "amount": 1000000,               # Deal amount
    "risk_rating": "A",              # Risk rating
    "source": "VV",                  # Source (VV=blue, OF=orange)
    "custom_html": "<div>...</div>"   # Custom HTML content
}
```

#### Return Value

Returns a dictionary with interaction data:

```python
{
    "type": "card_move" | "card_click",  # Type of interaction
    "data": {...},                       # Item data
    "stage": "stage_id"                  # Target stage (for moves)
}
```

## ๐Ÿ” Role-Based Permissions

### Permission System

Define user roles with granular permissions:

```python
USER_ROLES = {
    "admin": {
        "name": "Administrator",
        "can_drag_to": ["stage1", "stage2", "stage3"],
        "can_view_stages": ["stage1", "stage2", "stage3"],
        "can_approve": True,
        "can_reject": True,
        "can_hold": True,
        "can_edit_deal": True
    },
    "viewer": {
        "name": "Viewer",
        "can_drag_to": [],              # No drag permissions
        "can_view_stages": ["stage1"],  # Limited visibility
        "can_approve": False,
        "can_reject": False,
        "can_hold": False,
        "can_edit_deal": False
    }
}
```

### Implementation Example

```python
# Get current user permissions
def get_user_permissions():
    return USER_ROLES[st.session_state.current_user_role]

def get_draggable_stages_for_user():
    permissions = get_user_permissions()
    return permissions["can_drag_to"]

# Apply permissions to component
result = kanban_board(
    board=visible_stages,
    data=filtered_deals,
    draggable_stages=get_draggable_stages_for_user(),
    key=f"kanban_{st.session_state.current_user_role}"
)
```

## ๐ŸŽจ Styling and Customization

### Source-Based Card Colors

Cards automatically style based on the `source` field:

- **VV Source**: Light blue background
- **OF Source**: Light orange background
- **Default**: Standard white background

### Custom HTML Content

Add rich content to deal cards:

```python
deal = {
    "id": "deal_001",
    "stage": "review",
    "deal_id": "D-2024-001",
    "company_name": "Acme Corp",
    "custom_html": '''
        <div class="priority-high">High Priority</div>
        <div class="status-urgent">Urgent Review</div>
        <div>Additional custom content</div>
    '''
}
```

### CSS Classes

The component includes these CSS classes for styling:

- `.kanban-board` - Main container
- `.kanban-column` - Stage columns
- `.kanban-card` - Individual deal cards
- `.kanban-card[data-source="VV"]` - VV source cards
- `.kanban-card[data-source="OF"]` - OF source cards
- `.drop-disabled` - Disabled drop zones
- `.not-draggable` - Non-draggable cards

## ๐Ÿ”„ Advanced Usage

### Dialog Integration

Handle card clicks to show detailed dialogs:

```python
# Handle card clicks
if result and result.get("type") == "card_click":
    st.session_state.selected_deal = result["data"]
    st.session_state.show_deal_dialog = True

# Show dialog
if st.session_state.get("show_deal_dialog") and st.session_state.get("selected_deal"):
    @st.dialog(f"Deal Details: {st.session_state.selected_deal['deal_id']}")
    def show_deal_details():
        deal = st.session_state.selected_deal
        
        # Display deal information
        st.write(f"**Company:** {deal['company_name']}")
        st.write(f"**Product:** {deal['product_type']}")
        st.write(f"**Amount:** ${deal.get('amount', 0):,.2f}")
        
        # Add interactive elements
        if st.button("Approve Deal"):
            # Handle approval logic
            pass
            
        if st.button("Close"):
            st.session_state.show_deal_dialog = False
            st.rerun()
    
    show_deal_details()
```

### Real-time Updates

Integrate with session state for real-time updates:

```python
# Initialize deals in session state
if "deals" not in st.session_state:
    st.session_state.deals = load_deals_from_database()

# Handle deal movements
if result and result.get("type") == "card_move":
    moved_data = result["data"]
    new_stage = result["stage"]
    
    # Update database
    update_deal_stage(moved_data["id"], new_stage)
    
    # Update session state
    for deal in st.session_state.deals:
        if deal["id"] == moved_data["id"]:
            deal["stage"] = new_stage
            break
```

### Filtering and Search

Combine with Streamlit widgets for filtering:

```python
# Filter controls
col1, col2, col3 = st.columns(3)

with col1:
    selected_stages = st.multiselect("Stages", stage_options)

with col2:
    search_term = st.text_input("Search companies")

with col3:
    selected_sources = st.multiselect("Sources", ["VV", "OF"])

# Apply filters
filtered_deals = [
    deal for deal in st.session_state.deals
    if (not selected_stages or deal["stage"] in selected_stages)
    and (not search_term or search_term.lower() in deal["company_name"].lower())
    and (not selected_sources or deal.get("source") in selected_sources)
]

# Display filtered board
result = kanban_board(
    board=stages,
    data=filtered_deals,
    key="filtered_kanban"
)
```

## ๐Ÿ“Š Example Use Cases

### Deal Pipeline Management
- Track loan applications through approval stages
- Role-based access for underwriters, risk managers, and administrators
- Source-specific workflows (VV vs OF deals)

### Project Management
- Kanban-style project tracking
- Team member assignments and permissions
- Custom project metadata

### Sales Pipeline
- Lead qualification and progression
- Sales team collaboration
- Customer interaction tracking

### Content Workflow
- Editorial content approval process
- Multi-stage review workflows
- Publication pipeline management

## ๐Ÿงช Testing

### Quick Test
Run the simple demo to test basic functionality:

```bash
streamlit run simple_demo.py
```

### Full Demo
Run the comprehensive sample application:

```bash
streamlit run sample.py
```

## ๐Ÿ”ง Development

### Building from Source

```bash
# Clone repository
git clone https://github.com/goviceversa-com/streamlit_kanban_board.git
cd streamlit_kanban_board

# Install development dependencies
cd streamlit_kanban_board/frontend
npm install

# Build component
npm run build

# Install Python package
cd ..
pip install -e .
```

### Project Structure

```
streamlit_kanban_board/
โ”œโ”€โ”€ streamlit_kanban_board/
โ”‚   โ”œโ”€โ”€ __init__.py              # Python component wrapper
โ”‚   โ””โ”€โ”€ frontend/
โ”‚       โ”œโ”€โ”€ src/
โ”‚       โ”‚   โ”œโ”€โ”€ StreamlitKanbanBoard.tsx  # Main React component
โ”‚       โ”‚   โ”œโ”€โ”€ DealCard.tsx              # Individual card component
โ”‚       โ”‚   โ”œโ”€โ”€ KanbanComponent.css       # Styling
โ”‚       โ”‚   โ”œโ”€โ”€ types.ts                  # TypeScript types
โ”‚       โ”‚   โ””โ”€โ”€ index.tsx                 # Entry point
โ”‚       โ”œโ”€โ”€ public/
โ”‚       โ”œโ”€โ”€ package.json
โ”‚       โ””โ”€โ”€ build/               # Built component files
โ”œโ”€โ”€ sample.py                    # Full demo application
โ”œโ”€โ”€ simple_demo.py               # Simple demo
โ”œโ”€โ”€ pyproject.toml              # Python package configuration
โ”œโ”€โ”€ setup.py                    # Package setup
โ””โ”€โ”€ README.md
```

## ๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

### Development Guidelines
1. Follow TypeScript best practices for React components
2. Maintain backwards compatibility for Python API
3. Add tests for new features
4. Update documentation for API changes

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ†˜ Support

- ๐Ÿ“– Check the API documentation above
- ๐Ÿงช Run the sample applications for examples
- ๐Ÿ› Report issues on GitHub
- ๐Ÿ’ฌ Ask questions in discussions

## ๐Ÿ™ Acknowledgments

- Built with [Streamlit Components](https://docs.streamlit.io/library/components)
- Drag and drop functionality using native HTML5 APIs
- Styled with modern CSS animations and transitions

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "streamlit-kanban-board-goviceversa",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "streamlit, kanban, board, drag-drop, workflow, pipeline, project-management",
    "author": null,
    "author_email": "Pierluigi Segatto <pier@goviceversa.com>",
    "download_url": "https://files.pythonhosted.org/packages/2a/2a/ca6e8d772b763de65622fa5f9e363f80e3d9e4bbd5bb425c3ff7a53b6fe1/streamlit-kanban-board-goviceversa-1.1.1.tar.gz",
    "platform": null,
    "description": "# Streamlit Kanban Board Component\n\nA powerful, interactive Kanban board component for Streamlit applications, designed for deal pipeline management, project tracking, and workflow visualization. Features drag-and-drop functionality, role-based permissions, detailed dialogs, and source-based styling.\n\n![Kanban Board Preview](https://via.placeholder.com/800x400?text=Kanban+Board+Component)\n\n## \u2728 Features\n\n### Core Functionality\n- **Drag & Drop Interface**: Native HTML5 drag-and-drop with smooth animations\n- **Interactive Deal Cards**: Click cards to open detailed dialogs with full Streamlit widget support\n- **Customizable Stages**: Define pipeline stages with custom names and colors\n- **Source-Based Styling**: Automatic card styling based on data source (VV=blue, OF=orange)\n- **Role-Based Permissions**: Control drag/drop access and stage visibility by user role\n\n### Advanced Capabilities\n- **Permission System**: Granular control over user actions (drag, approve, reject, edit)\n- **Visual Feedback**: Dynamic column highlighting and lock icons during drag operations\n- **Responsive Design**: Mobile-friendly layout with touch support\n- **Custom HTML**: Embed custom HTML content in deal cards\n- **Session State Integration**: Seamless integration with Streamlit's session state\n\n### User Experience\n- **Smooth Animations**: CSS transitions for professional feel\n- **Loading States**: Visual feedback during operations\n- **Error Prevention**: Permission validation before allowing actions\n- **Accessibility**: Keyboard navigation and screen reader support\n\n## \ud83d\ude80 Installation\n\n### From PyPI\n```bash\npip install streamlit-kanban-board-goviceversa\n```\n\n### From Test PyPI (for testing)\n```bash\npip install -i https://test.pypi.org/simple/ streamlit-kanban-board-goviceversa\n```\n\n### From Source\n```bash\ngit clone https://github.com/goviceversa-com/streamlit_kanban_board.git\ncd streamlit_kanban_board\npip install -e .\n```\n\n## \ud83c\udfaf Quick Start\n\n### Basic Usage\n\n```python\nimport streamlit as st\nfrom streamlit_kanban_board import kanban_board\n\n# Define your pipeline stages\nstages = [\n    {\"id\": \"todo\", \"name\": \"To Do\", \"color\": \"#3498db\"},\n    {\"id\": \"in_progress\", \"name\": \"In Progress\", \"color\": \"#f39c12\"},\n    {\"id\": \"done\", \"name\": \"Done\", \"color\": \"#27ae60\"}\n]\n\n# Define your deals/items\ndeals = [\n    {\n        \"id\": \"deal_001\",\n        \"stage\": \"todo\",\n        \"deal_id\": \"D-2024-001\",\n        \"company_name\": \"Acme Corp\",\n        \"product_type\": \"Term Loan\",\n        \"date\": \"2024-01-15\",\n        \"underwriter\": \"John Smith\",\n        \"source\": \"VV\"\n    }\n]\n\n# Display the kanban board\nresult = kanban_board(\n    board=stages,\n    data=deals,\n    key=\"my_kanban_board\"\n)\n\n# Handle interactions\nif result:\n    if result.get(\"type\") == \"card_move\":\n        st.success(f\"Deal moved to: {result['stage']}\")\n    elif result.get(\"type\") == \"card_click\":\n        st.info(f\"Deal clicked: {result['data']['company_name']}\")\n```\n\n## \ud83d\udccb API Reference\n\n### `kanban_board()`\n\nCreates a Kanban board component with drag-and-drop functionality.\n\n#### Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `board` | `list[dict]` | Required | Stage definitions with id, name, and color |\n| `data` | `list[dict]` | Required | Deal/item data with required fields |\n| `key` | `str` | `None` | Unique component key for Streamlit |\n| `draggable_stages` | `list[str]` | `None` | Stages user can drag to (None = all) |\n\n#### Stage Format\n\nStages are defined as dictionaries with id, name, and optional color:\n\n```python\nstages = [\n    {\"id\": \"todo\", \"name\": \"To Do\", \"color\": \"#3498db\"},\n    {\"id\": \"in_progress\", \"name\": \"In Progress\", \"color\": \"#f39c12\"},\n    {\"id\": \"done\", \"name\": \"Done\", \"color\": \"#27ae60\"}\n]\n```\n\n#### Data Format\n\nEach item must include these required fields:\n\n```python\nitem = {\n    \"id\": \"unique_item_id\",           # Required: Unique identifier\n    \"stage\": \"current_stage_id\",      # Required: Current stage\n    \"deal_id\": \"D-2024-001\",         # Required: Display ID\n    \"company_name\": \"Company Name\",   # Required: Company name\n    \n    # Optional fields\n    \"product_type\": \"Term Loan\",      # Product type (shown as badge)\n    \"date\": \"2024-01-15\",            # Relevant date\n    \"underwriter\": \"John Smith\",      # Underwriter name\n    \"amount\": 1000000,               # Deal amount\n    \"risk_rating\": \"A\",              # Risk rating\n    \"source\": \"VV\",                  # Source (VV=blue, OF=orange)\n    \"custom_html\": \"<div>...</div>\"   # Custom HTML content\n}\n```\n\n#### Return Value\n\nReturns a dictionary with interaction data:\n\n```python\n{\n    \"type\": \"card_move\" | \"card_click\",  # Type of interaction\n    \"data\": {...},                       # Item data\n    \"stage\": \"stage_id\"                  # Target stage (for moves)\n}\n```\n\n## \ud83d\udd10 Role-Based Permissions\n\n### Permission System\n\nDefine user roles with granular permissions:\n\n```python\nUSER_ROLES = {\n    \"admin\": {\n        \"name\": \"Administrator\",\n        \"can_drag_to\": [\"stage1\", \"stage2\", \"stage3\"],\n        \"can_view_stages\": [\"stage1\", \"stage2\", \"stage3\"],\n        \"can_approve\": True,\n        \"can_reject\": True,\n        \"can_hold\": True,\n        \"can_edit_deal\": True\n    },\n    \"viewer\": {\n        \"name\": \"Viewer\",\n        \"can_drag_to\": [],              # No drag permissions\n        \"can_view_stages\": [\"stage1\"],  # Limited visibility\n        \"can_approve\": False,\n        \"can_reject\": False,\n        \"can_hold\": False,\n        \"can_edit_deal\": False\n    }\n}\n```\n\n### Implementation Example\n\n```python\n# Get current user permissions\ndef get_user_permissions():\n    return USER_ROLES[st.session_state.current_user_role]\n\ndef get_draggable_stages_for_user():\n    permissions = get_user_permissions()\n    return permissions[\"can_drag_to\"]\n\n# Apply permissions to component\nresult = kanban_board(\n    board=visible_stages,\n    data=filtered_deals,\n    draggable_stages=get_draggable_stages_for_user(),\n    key=f\"kanban_{st.session_state.current_user_role}\"\n)\n```\n\n## \ud83c\udfa8 Styling and Customization\n\n### Source-Based Card Colors\n\nCards automatically style based on the `source` field:\n\n- **VV Source**: Light blue background\n- **OF Source**: Light orange background\n- **Default**: Standard white background\n\n### Custom HTML Content\n\nAdd rich content to deal cards:\n\n```python\ndeal = {\n    \"id\": \"deal_001\",\n    \"stage\": \"review\",\n    \"deal_id\": \"D-2024-001\",\n    \"company_name\": \"Acme Corp\",\n    \"custom_html\": '''\n        <div class=\"priority-high\">High Priority</div>\n        <div class=\"status-urgent\">Urgent Review</div>\n        <div>Additional custom content</div>\n    '''\n}\n```\n\n### CSS Classes\n\nThe component includes these CSS classes for styling:\n\n- `.kanban-board` - Main container\n- `.kanban-column` - Stage columns\n- `.kanban-card` - Individual deal cards\n- `.kanban-card[data-source=\"VV\"]` - VV source cards\n- `.kanban-card[data-source=\"OF\"]` - OF source cards\n- `.drop-disabled` - Disabled drop zones\n- `.not-draggable` - Non-draggable cards\n\n## \ud83d\udd04 Advanced Usage\n\n### Dialog Integration\n\nHandle card clicks to show detailed dialogs:\n\n```python\n# Handle card clicks\nif result and result.get(\"type\") == \"card_click\":\n    st.session_state.selected_deal = result[\"data\"]\n    st.session_state.show_deal_dialog = True\n\n# Show dialog\nif st.session_state.get(\"show_deal_dialog\") and st.session_state.get(\"selected_deal\"):\n    @st.dialog(f\"Deal Details: {st.session_state.selected_deal['deal_id']}\")\n    def show_deal_details():\n        deal = st.session_state.selected_deal\n        \n        # Display deal information\n        st.write(f\"**Company:** {deal['company_name']}\")\n        st.write(f\"**Product:** {deal['product_type']}\")\n        st.write(f\"**Amount:** ${deal.get('amount', 0):,.2f}\")\n        \n        # Add interactive elements\n        if st.button(\"Approve Deal\"):\n            # Handle approval logic\n            pass\n            \n        if st.button(\"Close\"):\n            st.session_state.show_deal_dialog = False\n            st.rerun()\n    \n    show_deal_details()\n```\n\n### Real-time Updates\n\nIntegrate with session state for real-time updates:\n\n```python\n# Initialize deals in session state\nif \"deals\" not in st.session_state:\n    st.session_state.deals = load_deals_from_database()\n\n# Handle deal movements\nif result and result.get(\"type\") == \"card_move\":\n    moved_data = result[\"data\"]\n    new_stage = result[\"stage\"]\n    \n    # Update database\n    update_deal_stage(moved_data[\"id\"], new_stage)\n    \n    # Update session state\n    for deal in st.session_state.deals:\n        if deal[\"id\"] == moved_data[\"id\"]:\n            deal[\"stage\"] = new_stage\n            break\n```\n\n### Filtering and Search\n\nCombine with Streamlit widgets for filtering:\n\n```python\n# Filter controls\ncol1, col2, col3 = st.columns(3)\n\nwith col1:\n    selected_stages = st.multiselect(\"Stages\", stage_options)\n\nwith col2:\n    search_term = st.text_input(\"Search companies\")\n\nwith col3:\n    selected_sources = st.multiselect(\"Sources\", [\"VV\", \"OF\"])\n\n# Apply filters\nfiltered_deals = [\n    deal for deal in st.session_state.deals\n    if (not selected_stages or deal[\"stage\"] in selected_stages)\n    and (not search_term or search_term.lower() in deal[\"company_name\"].lower())\n    and (not selected_sources or deal.get(\"source\") in selected_sources)\n]\n\n# Display filtered board\nresult = kanban_board(\n    board=stages,\n    data=filtered_deals,\n    key=\"filtered_kanban\"\n)\n```\n\n## \ud83d\udcca Example Use Cases\n\n### Deal Pipeline Management\n- Track loan applications through approval stages\n- Role-based access for underwriters, risk managers, and administrators\n- Source-specific workflows (VV vs OF deals)\n\n### Project Management\n- Kanban-style project tracking\n- Team member assignments and permissions\n- Custom project metadata\n\n### Sales Pipeline\n- Lead qualification and progression\n- Sales team collaboration\n- Customer interaction tracking\n\n### Content Workflow\n- Editorial content approval process\n- Multi-stage review workflows\n- Publication pipeline management\n\n## \ud83e\uddea Testing\n\n### Quick Test\nRun the simple demo to test basic functionality:\n\n```bash\nstreamlit run simple_demo.py\n```\n\n### Full Demo\nRun the comprehensive sample application:\n\n```bash\nstreamlit run sample.py\n```\n\n## \ud83d\udd27 Development\n\n### Building from Source\n\n```bash\n# Clone repository\ngit clone https://github.com/goviceversa-com/streamlit_kanban_board.git\ncd streamlit_kanban_board\n\n# Install development dependencies\ncd streamlit_kanban_board/frontend\nnpm install\n\n# Build component\nnpm run build\n\n# Install Python package\ncd ..\npip install -e .\n```\n\n### Project Structure\n\n```\nstreamlit_kanban_board/\n\u251c\u2500\u2500 streamlit_kanban_board/\n\u2502   \u251c\u2500\u2500 __init__.py              # Python component wrapper\n\u2502   \u2514\u2500\u2500 frontend/\n\u2502       \u251c\u2500\u2500 src/\n\u2502       \u2502   \u251c\u2500\u2500 StreamlitKanbanBoard.tsx  # Main React component\n\u2502       \u2502   \u251c\u2500\u2500 DealCard.tsx              # Individual card component\n\u2502       \u2502   \u251c\u2500\u2500 KanbanComponent.css       # Styling\n\u2502       \u2502   \u251c\u2500\u2500 types.ts                  # TypeScript types\n\u2502       \u2502   \u2514\u2500\u2500 index.tsx                 # Entry point\n\u2502       \u251c\u2500\u2500 public/\n\u2502       \u251c\u2500\u2500 package.json\n\u2502       \u2514\u2500\u2500 build/               # Built component files\n\u251c\u2500\u2500 sample.py                    # Full demo application\n\u251c\u2500\u2500 simple_demo.py               # Simple demo\n\u251c\u2500\u2500 pyproject.toml              # Python package configuration\n\u251c\u2500\u2500 setup.py                    # Package setup\n\u2514\u2500\u2500 README.md\n```\n\n## \ud83e\udd1d Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Development Guidelines\n1. Follow TypeScript best practices for React components\n2. Maintain backwards compatibility for Python API\n3. Add tests for new features\n4. Update documentation for API changes\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83c\udd98 Support\n\n- \ud83d\udcd6 Check the API documentation above\n- \ud83e\uddea Run the sample applications for examples\n- \ud83d\udc1b Report issues on GitHub\n- \ud83d\udcac Ask questions in discussions\n\n## \ud83d\ude4f Acknowledgments\n\n- Built with [Streamlit Components](https://docs.streamlit.io/library/components)\n- Drag and drop functionality using native HTML5 APIs\n- Styled with modern CSS animations and transitions\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A powerful, interactive Kanban board component for Streamlit applications with drag-and-drop functionality, role-based permissions, and customizable workflows.",
    "version": "1.1.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/goviceversa-com/streamlit_kanban_board/issues",
        "Documentation": "https://github.com/goviceversa-com/streamlit_kanban_board#readme",
        "Funding": "https://github.com/sponsors/pierluigisegatto",
        "Homepage": "https://github.com/goviceversa-com/streamlit_kanban_board",
        "Repository": "https://github.com/goviceversa-com/streamlit_kanban_board"
    },
    "split_keywords": [
        "streamlit",
        " kanban",
        " board",
        " drag-drop",
        " workflow",
        " pipeline",
        " project-management"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7ff939ca49234aa9f2a90ada38fef01fd583b3c1996a29df3ad9baf0879c8e72",
                "md5": "e4b62fcde8a311095ec2d2bcba3f686e",
                "sha256": "bcc08b4fd54bfb27e5e53471418a88b16fbdba92bf1fb023ab018add47995478"
            },
            "downloads": -1,
            "filename": "streamlit_kanban_board_goviceversa-1.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e4b62fcde8a311095ec2d2bcba3f686e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 397823,
            "upload_time": "2025-07-14T12:01:20",
            "upload_time_iso_8601": "2025-07-14T12:01:20.345158Z",
            "url": "https://files.pythonhosted.org/packages/7f/f9/39ca49234aa9f2a90ada38fef01fd583b3c1996a29df3ad9baf0879c8e72/streamlit_kanban_board_goviceversa-1.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2a2aca6e8d772b763de65622fa5f9e363f80e3d9e4bbd5bb425c3ff7a53b6fe1",
                "md5": "981188fd63607bd782bf54de5b969268",
                "sha256": "f7ebe930e60f258ce5b7593d8f1aa668112e3c06c231645c391afe78e0b31fe1"
            },
            "downloads": -1,
            "filename": "streamlit-kanban-board-goviceversa-1.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "981188fd63607bd782bf54de5b969268",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 398022,
            "upload_time": "2025-07-14T12:01:21",
            "upload_time_iso_8601": "2025-07-14T12:01:21.563550Z",
            "url": "https://files.pythonhosted.org/packages/2a/2a/ca6e8d772b763de65622fa5f9e363f80e3d9e4bbd5bb425c3ff7a53b6fe1/streamlit-kanban-board-goviceversa-1.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-14 12:01:21",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "goviceversa-com",
    "github_project": "streamlit_kanban_board",
    "github_not_found": true,
    "lcname": "streamlit-kanban-board-goviceversa"
}
        
Elapsed time: 1.16113s