Vapora/crates/vapora-leptos-ui/limitations.md
Jesús Pérez b6a4d77421
Some checks are pending
Documentation Lint & Validation / Markdown Linting (push) Waiting to run
Documentation Lint & Validation / Validate mdBook Configuration (push) Waiting to run
Documentation Lint & Validation / Content & Structure Validation (push) Waiting to run
Documentation Lint & Validation / Lint & Validation Summary (push) Blocked by required conditions
mdBook Build & Deploy / Build mdBook (push) Waiting to run
mdBook Build & Deploy / Documentation Quality Check (push) Blocked by required conditions
mdBook Build & Deploy / Deploy to GitHub Pages (push) Blocked by required conditions
mdBook Build & Deploy / Notification (push) Blocked by required conditions
Rust CI / Security Audit (push) Waiting to run
Rust CI / Check + Test + Lint (nightly) (push) Waiting to run
Rust CI / Check + Test + Lint (stable) (push) Waiting to run
feat: add Leptos UI library and modularize MCP server
2026-02-14 20:10:55 +00:00

7.1 KiB

Known Limitations

This document lists known limitations, missing features, and design decisions in vapora-leptos-ui v1.2.0.

Missing Components

Form Controls

  • Select - Dropdown select component not implemented
  • Textarea - Multi-line text input not implemented
  • Checkbox - Checkbox input not implemented
  • Radio - Radio button group not implemented
  • Toggle/Switch - Toggle switch not implemented

Layout Components

  • Dialog - Generic dialog component (Modal exists but Dialog is more flexible)
  • ConfirmDialog - Confirmation dialog with Yes/No buttons
  • Drawer - Side panel/drawer component
  • Tabs - Tabbed interface component
  • Accordion - Collapsible sections component

Data Display

  • DataGrid - Advanced table with virtual scrolling, server-side sorting
  • Tree - Tree view component
  • Timeline - Timeline display component

Feedback

  • Alert - Alert/banner component
  • Progress - Progress bar component
  • Skeleton - Loading skeleton component

Component Limitations

Input

  • Uncontrolled: No value prop, only on_input callback
  • No validation: Parent must handle validation
  • Type limitation: Only input_type prop (string), no type safety for HTML5 input types
  • No icon support: No built-in prefix/suffix icon slots

Table

  • Client-side sorting only: No server-side sorting support
  • No column resizing: Columns have fixed widths
  • No row selection: No checkboxes or multi-select
  • No filtering: No built-in column filters
  • No virtual scrolling: Poor performance with 1000+ rows
  • No sticky headers: Headers scroll with content

Pagination

  • Fixed styling: Limited customization of appearance
  • No page size selector: Items per page is fixed by parent
  • No "show all" option: Always paginates if total_pages > 1

Modal

  • Single modal limitation: Nested modals not tested, may have z-index issues
  • No animation customization: Fade-in animation is fixed
  • No position control: Always centered
  • No size variants: Width/height controlled by content only

FormField

  • Parent-controlled validation: No internal validation logic
  • Static error messages: Errors don't animate in/out independently
  • No async validation: Parent must handle async validation

Toast

  • Fixed duration: Auto-dismiss at 3 seconds (not configurable)
  • Fixed position: Always top-right corner
  • No stacking limit: Unlimited toasts can stack (could overflow)
  • No action buttons: Only dismiss on timeout or click

Badge

  • No variant system: Uses custom classes only (no Variant enum)
  • No size variants: Fixed size
  • No icon support: Text only

Spinner

  • CSS animation only: Uses keyframes, not requestAnimationFrame
  • No progress indication: Indeterminate spinner only
  • Fixed colors: Cyan/purple gradient (no variant customization)

Card

  • No collapsible: Always expanded
  • No header/footer slots: Free-form content only
  • Limited glow colors: Only 5 glow options (None, Cyan, Purple, Pink, Blue)

Button

  • No icon support: No built-in icon slots (left/right)
  • Loading state visual only: Shows loading prop but parent handles disabled state
  • No tooltip: No built-in tooltip on hover
  • Basic external detection: Only checks http/https/mailto prefixes
  • No active state: No automatic "active" class for current route
  • No prefetch: No link prefetching on hover

Design Limitations

Accessibility

  • Incomplete ARIA: Only Modal has full ARIA attributes (role, aria-label, aria-modal)
  • No screen reader announcements: Toast notifications not announced
  • Keyboard navigation: Only Modal has Tab trap, other components lack full keyboard support
  • No reduced motion: Animations don't respect prefers-reduced-motion

Internationalization

  • No i18n support: All strings are hardcoded
  • No RTL support: Layout assumes LTR (left-to-right)
  • No locale-aware formatting: Numbers, dates not formatted per locale

Theming

  • Hardcoded colors: Glassmorphism colors not customizable via CSS variables
  • No dark/light mode: Theme assumes dark background
  • UnoCSS dependency: Components rely on UnoCSS classes (not portable to pure CSS)

Performance

  • Table re-renders: Entire table re-renders on sort (no virtual DOM optimization)
  • Pagination slicing: Creates new array on every page change
  • Portal leaks: Portal cleanup uses UUID lookup (potential memory if many modals)

Browser Support

  • Modern browsers only: Uses ES2020+ features via wasm-bindgen
  • No IE11 support: Relies on CSS Grid, Flexbox, backdrop-filter
  • Safari blur limitation: backdrop-blur may have performance issues on older Safari

Testing Gaps

  • No unit tests: Components lack unit tests
  • No integration tests: No tests for component interactions
  • No visual regression tests: No screenshot comparison tests
  • Manual testing only: All testing is manual in VAPORA frontend

Documentation Gaps

  • No Storybook/demo site: No interactive component showcase
  • Limited cookbook: cookbook.md exists but examples are minimal
  • No API docs: No generated rustdoc published online
  • No migration guide: No guide for upgrading between versions

Future Improvements

High Priority

  1. Select component - Most requested missing component
  2. Textarea component - Common form control
  3. Table virtual scrolling - Performance for large datasets
  4. Toast configurability - Allow custom duration, position
  5. Accessibility audit - Complete ARIA, keyboard navigation

Medium Priority

  1. Checkbox/Radio components - Complete form controls
  2. Dialog/ConfirmDialog - More flexible than Modal
  3. Input controlled mode - Add value prop for controlled components
  4. Table server-side sorting - Support for large datasets
  5. Theme customization - CSS variables for colors

Low Priority

  1. Tabs component - Nice-to-have layout component
  2. Drawer component - Alternative to Modal
  3. Progress component - Visual feedback for long operations
  4. i18n support - Internationalization framework

Known Bugs

Confirmed Issues

  • Modal focus trap edge case: If modal content has no focusable elements, Tab does nothing (should focus close button)
  • Pagination boundary: If total_pages changes while on last page that no longer exists, UI shows invalid page number
  • Toast overlap: With many rapid toasts, they can overlap vertically (no spacing)
  • Table sort stability: Sorting equal values doesn't preserve original order

Unconfirmed Issues

  • Safari backdrop-blur: Reported performance issues on Safari 14, not verified
  • Portal cleanup timing: UUID-based cleanup may not run if component unmounts during animation

Contributing

If you encounter a limitation not listed here, please:

  1. Check if it's a bug or a missing feature
  2. Open an issue on GitHub (if repository exists)
  3. Consider contributing a fix/implementation

See README.md for contribution guidelines.


Last Updated: 2026-02-08 (v1.2.0)