# dryui > 133 zero-dependency Svelte 5 components with headless primitives, styled defaults, and AI-ready MCP server. ## Packages - @dryui/primitives: Headless, unstyled components - @dryui/ui: Styled components with CSS variables and theme system - @dryui/mcp: MCP server for AI-agent code generation ## Installation ``` bun add @dryui/ui ``` ## Theme Setup ```html ``` ```html ``` Use `data-theme="light"` or `data-theme="dark"` only for explicit overrides. If you build a theme toggle, persist the explicit override and keep system mode as the fallback. ## Components ### Category: Action ### Button Interactive button or link-styled action for submissions and calls to action. Import: @dryui/ui Subpath import: @dryui/ui/button Props: variant ('solid' | 'outline' | 'ghost' | 'soft' | 'secondary' | 'link'), accepted solid, outline, ghost, soft, secondary, link, default 'solid' | size ('sm' | 'md' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg'), accepted sm, md, lg, icon, icon-sm, icon-lg, default 'md' | color ('primary' | 'danger'), accepted primary, danger, default 'primary' | disabled (boolean) | href (string), When provided, Button renders an anchor instead of a button for link-style actions. | rel (string) | target (string) | download (boolean | string) | type ('button' | 'submit' | 'reset'), accepted button, submit, reset | children (Snippet), required Data attributes: data-disabled Example: ### Toggle Pressable toggle button. Import: @dryui/ui Subpath import: @dryui/ui/toggle Props: pressed (boolean), default false, bindable | variant ('outline' | 'ghost'), accepted outline, ghost, default 'outline' | size ('sm' | 'md' | 'lg'), accepted sm, md, lg, default 'md' | disabled (boolean) | children (Snippet), required Data attributes: data-disabled, data-state Example: Content ### ToggleGroup Group of toggle buttons with single/multiple selection. Import: @dryui/ui Subpath import: @dryui/ui/toggle-group Parts: Root, Item Props: Root: type ('single' | 'multiple'), accepted single, multiple | value (string[]), default [], bindable | disabled (boolean) | orientation ('horizontal' | 'vertical'), accepted horizontal, vertical, default 'horizontal' | size ('sm' | 'md' | 'lg'), accepted sm, md, lg, default 'md' | children (Snippet), required | Item: value (string), required | disabled (boolean) | children (Snippet), required Data attributes: data-disabled, data-state Example: ### Clipboard Copy text to clipboard with native Clipboard API. Import: @dryui/ui Subpath import: @dryui/ui/clipboard Props: value (string), required | timeout (number) | children (Snippet<[{ copied: boolean; copy: () => void }]>), required Example: Content ### ScrollToTop Button that scrolls to top of page or container. Import: @dryui/ui Subpath import: @dryui/ui/scroll-to-top Props: threshold (number), default 300 | target (HTMLElement) | behavior (ScrollBehavior), default 'smooth' | position ('bottom-right' | 'bottom-left' | 'bottom-center'), accepted bottom-right, bottom-left, bottom-center, default 'bottom-right' | class (string) Data attributes: data-theme, data-visible Example: Content ### FloatButton Floating action button with expandable actions. Import: @dryui/ui Subpath import: @dryui/ui/float-button Parts: Root, Trigger, Action Props: Root: open (boolean), default false, bindable | position ('bottom-right' | 'bottom-left'), accepted bottom-right, bottom-left, default 'bottom-right' | children (Snippet), required | Trigger: size ('sm' | 'md' | 'lg'), accepted sm, md, lg, default 'md' | children (Snippet), required | Action: children (Snippet), required Data attributes: data-state, data-theme Example: ### ButtonGroup Groups related buttons with shared styling. Import: @dryui/ui Subpath import: @dryui/ui/button-group Props: orientation ('horizontal' | 'vertical'), accepted horizontal, vertical, default 'horizontal' | size ('sm' | 'md' | 'lg'), accepted sm, md, lg, default 'md' | children (Snippet), required Example: Content ### Chip Interactive pill for filters, selections, and inline state. Import: @dryui/ui Subpath import: @dryui/ui/chip Data attributes: data-disabled, data-selected, data-theme Example: Policy friendly ### ChipGroup Single or multi-select chip cluster. Import: @dryui/ui Subpath import: @dryui/ui/chip-group Parts: Root, Item Props: Root: type ('single' | 'multiple'), accepted single, multiple, default 'single' | value (string[]), default [], bindable | disabled (boolean), default false | orientation ('horizontal' | 'vertical'), accepted horizontal, vertical, default 'horizontal' | size ('sm' | 'md'), accepted sm, md, default 'sm' | children (Snippet), required | Item: value (string), required | disabled (boolean) | children (Snippet), required Data attributes: data-disabled, data-state, data-theme Example: ### Category: Input ### Input Text input with size variants. Import: @dryui/ui Subpath import: @dryui/ui/input Props: value (string), default '', bindable | size ('sm' | 'md' | 'lg'), accepted sm, md, lg, default 'md' | disabled (boolean) Data attributes: data-disabled, data-invalid Example: ### Textarea Multi-line text input. Import: @dryui/ui Subpath import: @dryui/ui/textarea Props: value (string), default '', bindable | size ('sm' | 'md' | 'lg'), accepted sm, md, lg, default 'md' | disabled (boolean) Data attributes: data-disabled, data-invalid Example: