208 lines
7.1 KiB
Markdown
208 lines
7.1 KiB
Markdown
|
|
# 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
|
||
|
|
|
||
|
|
### SpaLink
|
||
|
|
|
||
|
|
- **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)
|