`, ``, ` `) to apply clean, professional table styling with rounded corners and consistent spacing.
```vue
Name
Email
Role
Alice Johnson
alice@example.com
Developer
Bob Smith
bob@example.com
Designer
```
Choose from semantic kinds (`neutral`, `primary`, `accent`, etc.) that adapt to your theme, or color palette kinds (`neon-blue`, `neon-pink`, etc.) for vibrant, eye-catching designs.
```vue
...
...
...
...
...
...
...
...
```
Add the `striped` prop to alternate row background colors for better readability of large tables.
```vue
#
Username
Email
Status
1
alice_j
alice@example.com
Active
```
The `hoverable` prop is enabled by default. Rows highlight on hover for better interactivity.
```vue
Project
Progress
Status
Website Redesign
75%
In Progress
```
Control table borders with the `bordered` and `innerBorders` props. Inner borders are disabled by default for a cleaner look.
```vue
...
...
...
```
Control cell padding with the `variant` prop: `compact`, `default`, or `comfortable`.
```vue
...
...
...
```
Use the `subtle` prop for more transparent borders, headers, and footers. Subtle tables use reduced opacity for borders, creating a lighter, more refined aesthetic.
```vue
Product
Price
Stock
Keyboard
$89.99
45
```
SkTable renders as a standard `` element. Use semantic ``, ` `, ``, and ` ` elements. Add `scope="col"` or `scope="row"` to header cells for screen reader clarity.
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| kind | "neutral" \| "primary" \| "accent" \| "danger" \| "info" \| "success" \| "warning" \| "boulder" \| "neon-blue" \| "light-blue" \| "neon-orange" \| "neon-purple" \| "neon-green" \| "neon-mint" \| "neon-pink" \| "yellow" \| "red" | 'neutral' | false | Semantic color kind that controls header backgrounds and accent colors. The kind
affects the table header row styling and can subtly influence row hover colors.
Use semantic kinds to match your application's color language. |
| variant | "default" \| "compact" \| "comfortable" | 'default' | false | Controls the table's density and spacing. 'default' provides comfortable spacing
for most use cases, 'compact' reduces padding for dense data displays, and
'comfortable' increases spacing for enhanced readability. |
| striped | boolean | false | false | When true, alternates row background colors (zebra striping) to improve
readability of wide tables. The striping color adapts to the table's kind
and background context. |
| hoverable | boolean | true | false | When true, rows highlight on mouse hover to help users track which row
they're viewing. Particularly useful for tables with many columns where
the eye can lose track across the row. |
| bordered | boolean | true | false | When true, displays a beveled border around the entire table. Disable for
a more minimal appearance or when embedding the table in a card that already
provides visual containment. |
| innerBorders | boolean | false | false | When true, shows borders between individual cells and rows. Enable for
grid-like data where cell boundaries need clear visual separation. Disable
for a cleaner, more modern appearance. |
| darkBackground | boolean | false | false | When true, adjusts the table colors for display on dark backgrounds. This
ensures proper contrast and visibility when the table is placed on dark
surfaces outside of the normal theme context. |
| subtle | boolean | false | false | When true, uses lighter, more subdued colors for the table styling. Useful
when the table should not dominate the visual hierarchy or when displaying
secondary data alongside more prominent content. |
### Slots
| Slot | Description |
|------|-------------|
| default | |
---
# SkTabs
A tabbed interface for organizing content into switchable panels. Composed of SkTabs, SkTabList, SkTab, SkTabPanels, and SkTabPanel. Built on RekaUI's Tabs primitive.
Use `v-model` to control the active tab. Each tab trigger and content panel needs a matching `name` prop.
```vue
Profile
Settings
Notifications
Profile Settings
Manage your personal information.
General Settings
Configure application settings.
Notification Preferences
Choose how you want to be notified.
```
Apply semantic colors to tabs using the `kind` prop.
```vue
Tab One
Tab Two
Primary kind tabs
Content for tab two
Tab One
Tab Two
Success kind tabs
Content for tab two
```
Set `orientation="vertical"` to display tabs in a column layout.
```vue
Account
Appearance
Notifications
Account Settings
Manage your account details.
```
Enhance tab triggers with FontAwesome icons for visual identification.
```vue
Home
Profile
Settings
```
Use `base-color` to customize tab colors with any CSS color value. Provide `text-color` for tab text colors.
```vue
Overview
Details
Analytics
Overview
Custom purple tabs with white text using OKLCH color values.
```
Built on RekaUI Tabs which provides `role="tablist"`, `role="tab"`, and `role="tabpanel"` with proper `aria-selected`, `aria-controls`, and `aria-labelledby` associations. Arrow keys navigate between tabs, Home/End jump to first/last tab.
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| modelValue | string \| string[] | — | true | The currently active tab identifier, matching the `name` prop of the corresponding `SkTab`
and `SkTabPanel`. Use with `v-model` for two-way binding to control which tab is displayed. |
| orientation | "horizontal" \| "vertical" | 'horizontal' | false | Layout orientation for the tab list. In 'horizontal' mode, tabs are arranged in a row and
arrow keys navigate left/right. In 'vertical' mode, tabs stack vertically and arrow keys
navigate up/down. |
| placement | "start" \| "end" | 'start' | false | Alignment of the tab list within its container. 'start' aligns tabs to the left (horizontal)
or top (vertical), 'end' aligns to the opposite side. Useful for positioning tabs in
different layout contexts. |
| kind | "neutral" \| "primary" \| "accent" \| "danger" \| "info" \| "success" \| "warning" \| "boulder" \| "neon-blue" \| "light-blue" \| "neon-orange" \| "neon-purple" \| "neon-green" \| "neon-mint" \| "neon-pink" \| "yellow" \| "red" | undefined | false | Semantic color kind applied to all tabs in this group. Individual `SkTab` components can
override this with their own `kind` prop for mixed-color tab bars. |
| flush | boolean | false | false | When true, applies negative margins to align the tab list flush with the parent container's
edges. Useful when the parent has padding but you want tabs to extend edge-to-edge. |
### Slots
| Slot | Description |
|------|-------------|
| default | |
### Events
| Event | Description |
|-------|-------------|
| update:modelValue | |
---
# SkTag
A compact label component for metadata, categories, status indicators, or keywords. Supports removable tags with a close button.
Tags are inline elements that label and categorize content. Use them for categories, tags, status indicators, or to display lists of items.
```vue
Default Tag
Primary
Active
Pending
```
Four visual variants: `solid` for high contrast, `outline` for bordered style, `subtle` for reduced opacity, and `ghost` for minimal emphasis.
```vue
Solid
Outline
Subtle
Ghost
```
Choose from semantic kinds to indicate status, category, or priority.
```vue
Neutral
Primary
Accent
Info
Success
Warning
Danger
```
Four sizes available: `sm`, `md` (default), `lg` and `xl`.
```vue
Small
Medium
Large
Extra Large
```
Enable `removable` to add a remove button. Handle the `@remove` event to respond when users click the remove button.
```vue
{{ tag }}
```
Use `base-color` with any CSS color value. Provide `text-color` for optimal contrast, or it defaults to the theme's neutral text.
```vue
Custom Green
Custom Purple
Hex Color
```
The remove button is keyboard-accessible. Developers should provide context (such as an `aria-label`) if the tag content alone does not convey its purpose to screen readers.
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| kind | "neutral" \| "primary" \| "accent" \| "danger" \| "info" \| "success" \| "warning" \| "boulder" \| "neon-blue" \| "light-blue" \| "neon-orange" \| "neon-purple" \| "neon-green" \| "neon-mint" \| "neon-pink" \| "yellow" \| "red" | 'neutral' | false | Semantic color kind that controls the tag's color scheme. The kind determines both
background and text colors across all variants. Use semantic kinds (primary, success,
danger, etc.) to convey meaning, or use accent for decorative highlighting. |
| variant | "solid" \| "outline" \| "subtle" \| "ghost" | 'solid' | false | Visual variant that controls how the tag is rendered. Choose based on visual hierarchy:
'solid' for maximum emphasis with filled background, 'outline' for medium emphasis with
a border, 'subtle' for low emphasis with a tinted background, 'ghost' for minimal
presence with just text color. |
| size | "sm" \| "md" \| "lg" \| "xl" | 'md' | false | Controls the tag dimensions including padding, font size, and remove button size.
Available sizes: 'sm' (compact), 'md' (default), 'lg' (prominent), 'xl' (maximum). |
| removable | boolean | false | false | When true, displays a small X button on the right side of the tag that emits a
'remove' event when clicked. Useful for filter chips, multi-select displays, or
any tags that can be dismissed by the user. |
### Slots
| Slot | Description |
|------|-------------|
| default | |
### Events
| Event | Description |
|-------|-------------|
| remove | |
---
# SkTagsInput
A multi-value tag input component for entering a list of string values. Type text and press Enter to add tags; use Backspace or the delete button to remove them. Built on RekaUI's TagsInput primitive.
Type a value and press Enter to add a tag. Backspace to remove last tag.
```vue
```
Customize tag appearance with `tagKind` and `tagVariant` props. By default, tags inherit the input's kind.
```vue
```
TagsInput comes in four sizes matching other form inputs.
```vue
```
Input disables when max is reached, but you can still remove tags.
```vue
```
TagsInput supports all semantic kinds. These are theme-aware.
```vue
```
TagsInput supports vibrant color palette kinds for a more colorful appearance.
```vue
```
Disabled state prevents all interaction (adding and removing tags).
```vue
```
Override colors with custom OKLCH, hex, or CSS variable values.
```vue
```
Use SkTagsInput with SkField for labels, descriptions, and validation messages.
```vue
```
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| kind | "neutral" \| "primary" \| "accent" \| "danger" \| "info" \| "success" \| "warning" \| "boulder" \| "neon-blue" \| "light-blue" \| "neon-orange" \| "neon-purple" \| "neon-green" \| "neon-mint" \| "neon-pink" \| "yellow" \| "red" | undefined | false | Semantic color kind that controls the input border and focus ring appearance.
Also sets the default color for tags unless overridden by `tagKind`. When used
inside SkField, inherits the field's kind if not explicitly set. |
| size | "xs" \| "sm" \| "md" \| "lg" \| "xl" | 'md' | false | Size of the input field and tags. Controls the input height, tag size, and
text sizing throughout the component. Available sizes: 'sm' (small),
'md' (medium), 'lg' (large). |
| placeholder | string | 'Add tag...' | false | Placeholder text displayed in the input field when no text is being typed.
Visible even when tags are present. Use to guide users on what type of
values to enter. |
| disabled | boolean | false | false | When true, the input is disabled and no tags can be added or removed.
Existing tags remain visible but the delete buttons are non-functional.
The entire component appears with reduced opacity. |
| max | number | undefined | false | Maximum number of tags allowed. When the limit is reached, the input field
is disabled (preventing new tags) but existing tags can still be removed.
Useful for limiting selections in constrained contexts like form fields. |
| addOnPaste | boolean | true | false | When true, pasting text containing separators (commas, semicolons, newlines)
automatically creates multiple tags. When false, pasted text is inserted as
a single value in the input field. |
| tagKind | string | undefined | false | Semantic color kind specifically for the tag badges. When not set, inherits
from the `kind` prop. Use to differentiate tag appearance from the input
styling, such as colorful tags in a neutral-bordered input. |
| tagVariant | string \| string[] | 'solid' | false | Visual variant for the tag badges. 'solid' renders filled tags with colored
background, 'outline' shows bordered tags with transparent background, and
'ghost' provides subtle tags with minimal styling. |
---
# SkTextarea
A multiline text input component with validation states and semantic color support. Automatically inherits kind from a parent SkField.
Simple textarea with placeholder. Use v-model for two-way binding. Vertically resizable.
```vue
```
Control the initial height with the `rows` prop.
```vue
```
Use semantic kinds for validation states and different contexts. These are theme-aware.
```vue
```
Textareas also support direct color palette kinds for vibrant cyberpunk colors.
```vue
```
Textareas come in four sizes with different padding and font sizes.
```vue
```
Textareas support disabled and readonly states. Resizing is disabled for both.
```vue
```
Override textarea colors with custom OKLCH, hex, or CSS variable values.
```vue
```
Real-world form using textarea for longer text input with character count.
```vue
Description
Comments
{{ comments.length }} characters
```
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| kind | "neutral" \| "primary" \| "accent" \| "danger" \| "info" \| "success" \| "warning" \| "boulder" \| "neon-blue" \| "light-blue" \| "neon-orange" \| "neon-purple" \| "neon-green" \| "neon-mint" \| "neon-pink" \| "yellow" \| "red" | undefined | false | Semantic color kind for the textarea border and focus ring. Use semantic kinds like
'success' or 'danger' to indicate validation states. When used inside an SkField with
a `state` prop, the field's kind automatically overrides this value. |
| size | "xs" \| "sm" \| "md" \| "lg" \| "xl" | 'md' | false | Textarea size controlling padding and font size. The height is primarily controlled
by the `rows` prop. Available sizes: 'sm' (small), 'md' (medium, default), 'lg' (large),
'xl' (extra large). |
| placeholder | string | undefined | false | Placeholder text displayed when the textarea is empty. Use to provide hints about
expected content or formatting. The placeholder disappears when the user begins typing. |
| disabled | boolean | false | false | When true, disables the textarea preventing all user interaction. The textarea appears
with reduced opacity and the cursor changes to not-allowed. Disabled textareas are
excluded from form submission. |
| readonly | boolean | false | false | When true, makes the textarea read-only. The user can select and copy text but cannot
modify it. Unlike disabled, read-only textareas are still included in form submission
and maintain normal visual appearance. |
| required | boolean | false | false | When true, marks the textarea as required for form validation. The browser will prevent
form submission if the textarea is empty. For visual required indicators, wrap the
textarea in an SkField component with `required` prop. |
| name | string | undefined | false | The form field name used when submitting the textarea value. Required for native form
submission and useful for form libraries that track fields by name. |
| rows | number | 4 | false | The number of visible text lines (rows) for the textarea. This sets the initial height
of the textarea. Users can still resize it vertically if the CSS allows. Use more rows
for content that typically requires more space (e.g., descriptions, messages). |
| autocomplete | string | undefined | false | Autocomplete hint for the browser's autofill feature. For textareas, common values
include 'off' to disable autofill, or 'street-address' for address fields. Most
other autocomplete values are more relevant for single-line inputs. |
---
# SkTheme
A theme provider component that controls the color scheme for all child components. Sets a `data-scheme` attribute that CSS rules use to apply different semantic token values.
Wrap components in SkTheme to apply a color scheme. All child components will inherit the theme.
```vue
Themed Button
```
Two built-in themes are available: `greyscale` (default) for a monochromatic palette, and `colorful` for vibrant cyberpunk colors. Custom theme names can be used if matching CSS custom property overrides are defined under the corresponding `[data-scheme="..."]` selector.
```vue
Greyscale Theme
Colorful Theme
```
Themes can be nested. The inner SkTheme overrides the outer one for its subtree.
```vue
Greyscale
Colorful
```
The `useTheme` composable enables runtime theme changes from any component.
```vue
Go Colorful
Go Greyscale
```
SkTheme provides the current theme value via Vue's provide/inject system. Portal components (SkModal, SkDropdown, SkListbox, SkTooltip, SkPopover, SkToast) automatically consume this value and apply `data-scheme` on their portaled content so they inherit the correct theme.
```vue
```
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| theme | "greyscale" \| "colorful" | 'greyscale' | false | The active theme name that controls the color scheme for all child components.
Changing this prop reactively updates the theme across the entire subtree.
Portal components (dropdowns, modals, tooltips) automatically inherit this
theme even though they render outside the DOM hierarchy. |
### Slots
| Slot | Description |
|------|-------------|
| default | |
---
# SkToast
A notification toast system for showing brief messages that appear and auto-dismiss. Composed of SkToastProvider (wraps your app) and the `useToast` composable (shows toasts from anywhere). Built on RekaUI's Toast primitive.
Use the `useToast()` composable to show toast notifications. Click the buttons below to see different toast types.
```vue
import { useToast } from '@skewedaspect/sleekspace-ui';
const toast = useToast();
// Show a simple toast
toast.add({
kind: 'success',
message: 'Operation completed!'
});
```
Four semantic kinds: `info`, `success`, `warning`, and `danger`.
```vue
toast.add({ kind: 'info', message: 'Informational message' });
toast.add({ kind: 'success', message: 'Success message' });
toast.add({ kind: 'warning', message: 'Warning message' });
toast.add({ kind: 'danger', message: 'Error message' });
```
Add a `title` for a more prominent notification.
```vue
toast.add({
kind: 'success',
title: 'Changes Saved',
message: 'Your profile has been updated successfully.'
});
```
Override the auto-dismiss duration. Use `duration: 0` for toasts that don't auto-dismiss.
```vue
// Quick toast (2 seconds)
toast.add({
kind: 'info',
message: 'Quick notification',
duration: 2000
});
// Persistent toast (no auto-dismiss)
toast.add({
kind: 'danger',
title: 'Attention Required',
message: 'Click X to dismiss',
duration: 0
});
```
Use `toast.dismissAll()` to clear all active toasts, or `toast.dismiss(id)` to dismiss a specific toast.
```vue
// Dismiss all active toasts
toast.dismissAll();
// Dismiss a specific toast by ID
const id = toast.add({ message: 'Hello' });
toast.dismiss(id);
```
Common toast patterns for form submissions, errors, and status updates.
```vue
// Form save success
toast.add({
kind: 'success',
title: 'Saved!',
message: 'Your changes have been saved.'
});
// API error
toast.add({
kind: 'danger',
title: 'Connection Error',
message: 'Failed to connect. Please retry.',
duration: 0 // Don't auto-dismiss errors
});
```
Add `SkToastProvider` to your App.vue to enable toasts throughout your application. The provider should be placed inside your theme wrapper but outside router content.
```vue
```
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| id | string | — | true | Unique identifier for this toast instance. Used internally for tracking and dismissing
specific toasts. Generated automatically by SkToastProvider when using useToast(). |
| kind | "danger" \| "info" \| "success" \| "warning" | — | true | Semantic color kind that determines the toast's visual appearance and icon. Each kind
displays a contextually appropriate icon: info (circle-i), success (checkmark),
warning (triangle), danger (x-circle). The kind also sets the background and text colors. |
| title | string | — | false | Optional bold title text displayed above the message. Use for brief headings like
"Success!", "Error", or "Warning". When omitted, only the message is displayed. |
| message | string | — | true | The main toast message content. This is the primary text users will read, describing
what happened or what action was taken. Keep messages concise and actionable. |
| duration | number | — | false | Time in milliseconds before the toast automatically dismisses. Set to 0 or undefined
to disable auto-dismiss and require manual closure. When set, a progress indicator
may show remaining time. Overrides the provider's default duration. |
| closable | boolean | — | true | When true, displays an X button allowing users to manually dismiss the toast before
the duration expires. Essential for toasts with important information users may need
more time to read, or when auto-dismiss is disabled. |
### Events
| Event | Description |
|-------|-------------|
| dismiss | |
---
# SkTooltip
A hover-triggered tooltip for displaying brief supplementary information next to a trigger element. Supports standalone and provider modes for coordinated tooltip behavior. Built on RekaUI's Tooltip primitive and uses a portal.
Wrap any element with a tooltip to provide additional information on hover.
```vue
Hover over me for a helpful hint
Hover Me
```
Seven semantic kinds for different contexts and purposes.
```vue
Neutral information
Neutral
Primary action hint
Primary
Informational message
Info
```
Control the tooltip position with the `side` prop. Tooltips automatically adjust to stay within viewport bounds.
```vue
Appears on top
Top
Outline on top
Top
```
Use the `align` prop to control how the tooltip aligns with the trigger.
```vue
Aligned to start
Start
Outline aligned to start
Start
```
Hide the arrow indicator with `:show-arrow="false"`.
```vue
This tooltip has no arrow
No Arrow
Outline with no arrow
Outline No Arrow
```
Use `baseColor` and `textColor` for full color control.
```vue
Custom purple tooltip
Purple
Custom purple outline
Purple Outline
```
Control how long to wait before showing the tooltip with `delayDuration` (in milliseconds).
```vue
Instant tooltip (0ms)
Instant
Default delay (400ms)
Default
Slow tooltip (1000ms)
Slow
```
Wrap multiple tooltips in SkTooltipProvider for coordinated "skip delay" behavior -- after viewing one tooltip, moving to another shows it instantly.
```vue
...
...
...
Tooltip 1
A
Tooltip 2
B
```
For app-wide tooltip coordination, wrap your entire app in SkTooltipProvider (typically in App.vue).
```vue
```
Common tooltip use cases in applications: icon buttons, help text, and disabled button explanations.
```vue
Save changes
Save
Your username must be 3-20 characters and can only contain letters, numbers, and underscores.
Info
Complete all required fields to enable this button
Submit
```
### Props
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| kind | "neutral" \| "primary" \| "accent" \| "danger" \| "info" \| "success" \| "warning" \| "boulder" \| "neon-blue" \| "light-blue" \| "neon-orange" \| "neon-purple" \| "neon-green" \| "neon-mint" \| "neon-pink" \| "yellow" \| "red" | 'neutral' | false | Semantic color kind that controls the tooltip's background and text colors. Semantic kinds
(neutral, primary, accent, info, success, warning, danger) adapt to your theme. Use 'neutral'
for general hints, or match the kind to contextual meaning (e.g., 'warning' for caution tips). |
| variant | string \| string[] | 'solid' | false | Visual variant that controls the tooltip's appearance. 'solid' shows a filled background
with the kind color, ideal for high-contrast visibility. 'outline' shows a bordered style
with transparent background, useful for subtle hints that don't distract from content. |
| side | "top" \| "right" \| "bottom" \| "left" | 'top' | false | Which side of the trigger element to display the tooltip. The tooltip automatically
flips to the opposite side if there isn't enough space. Common choices: 'top' for
buttons, 'right' for inline help icons, 'bottom' for navigation items. |
| align | string \| string[] | 'center' | false | Alignment of the tooltip along its side. 'center' centers the tooltip on the trigger,
'start' aligns to the left/top edge, 'end' aligns to the right/bottom edge. Use 'start'
or 'end' when the trigger is near a screen edge to prevent clipping. |
| sideOffset | number | 5 | false | Distance in pixels between the tooltip and its trigger element. Increase for more
breathing room, decrease for tighter coupling. The arrow (if shown) extends from
this offset toward the trigger. |
| delayDuration | number | 400 | false | Delay in milliseconds before the tooltip appears after hovering the trigger. Only used
in standalone mode - when inside SkTooltipProvider, the provider's delayDuration takes
precedence. Set to 0 for instant tooltips, or higher values to avoid accidental triggers. |
| showArrow | boolean | true | false | Whether to display a small arrow pointing from the tooltip toward its trigger element.
Arrows help visually connect the tooltip to its trigger, especially useful when multiple
interactive elements are close together. Disable for a cleaner, more minimal appearance. |
### Slots
| Slot | Description |
|------|-------------|
| trigger | |
| default | |
---