npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@proyecto-viviana/solidaria

v0.2.5

Published

A 1-1 SolidJS port of React Aria - accessible UI primitives

Readme

@proyecto-viviana/solidaria

A SolidJS port of React Aria - accessible UI primitives and ARIA patterns.

Installation

bun add @proyecto-viviana/solidaria @proyecto-viviana/solid-stately solid-js

Overview

solidaria provides accessibility hooks that implement WAI-ARIA patterns for UI components. Each hook returns props objects that you spread onto your elements to make them accessible.

Available Hooks

Button & Interactions

| Hook | Description | |------|-------------| | createButton | Button with press handling | | createToggleButton | Toggle button with pressed state | | createPress | Low-level press event handling | | createHover | Hover event handling | | createFocusRing | Focus ring visibility | | createFocusable | Focus management utilities |

Form Controls

| Hook | Description | |------|-------------| | createCheckbox | Checkbox with indeterminate support | | createCheckboxGroup | Checkbox group with shared state | | createRadio | Radio button | | createRadioGroup | Radio button group | | createSwitch | Toggle switch | | createTextField | Text input with label association | | createNumberField | Numeric input with increment/decrement | | createSearchField | Search input with clear button | | createSlider | Range slider with thumb and track |

Navigation

| Hook | Description | |------|-------------| | createLink | Accessible link | | createBreadcrumbs | Breadcrumb navigation | | createBreadcrumbItem | Individual breadcrumb | | createTabList | Tab list container | | createTab | Individual tab | | createTabPanel | Tab panel content | | createLandmark | ARIA landmark regions with F6 navigation |

Selection Components

| Hook | Description | |------|-------------| | createListBox | Listbox with keyboard navigation | | createOption | Listbox option | | createMenu | Menu with keyboard navigation | | createMenuItem | Menu item | | createMenuTrigger | Menu trigger button | | createSelect | Select dropdown |

Overlays

| Hook | Description | |------|-------------| | createOverlayTrigger | Trigger for overlays | | createOverlay | Overlay dismiss behavior | | createModal | Modal dialog with focus trapping | | createPreventScroll | Scroll lock for overlays | | createInteractOutside | Click outside detection |

Feedback

| Hook | Description | |------|-------------| | createProgressBar | Progress bar with live region | | createSeparator | Visual separator |

Labels & Fields

| Hook | Description | |------|-------------| | createLabel | Label/input association | | createField | Field with label, description, error |

Accessibility

| Hook/Function | Description | |---------------|-------------| | createVisuallyHidden | Visually hide content for screen readers | | announce | Announce messages to screen readers | | clearAnnouncer | Clear pending announcements | | destroyAnnouncer | Remove live announcer from DOM | | createLandmark | ARIA landmark regions with F6 navigation | | createFormValidation | Form validation with native HTML integration | | createInteractionModality | Track keyboard/pointer/virtual interaction |

Grid & Table

| Hook | Description | |------|-------------| | createGrid | Grid with keyboard navigation | | createTable | Table with sorting, selection | | createGridList | Single-column grid list |

Tree

| Hook | Description | |------|-------------| | createTree | Tree with expand/collapse | | createTreeItem | Tree item with nested children |

Color

| Hook | Description | |------|-------------| | createColorSlider | Color channel slider | | createColorArea | 2D color picker area | | createColorWheel | Circular hue wheel | | createColorField | Color text input | | createColorSwatch | Color preview swatch |

Drag & Drop

| Hook | Description | |------|-------------| | createDrag | Draggable element | | createDrop | Drop target | | createDraggableCollection | Collection-level drag | | createDroppableCollection | Collection-level drop |

i18n / Internationalization

| Hook/Utility | Description | |--------------|-------------| | I18nProvider | Locale context provider | | useLocale | Get current locale and direction | | createDefaultLocale | Browser locale with change detection | | isRTL | RTL language detection | | createNumberFormatter | Localized number formatting | | createDateFormatter | Localized date formatting | | createCollator | Locale-aware string sorting | | createFilter | Locale-aware string filtering |

SSR / Server-Side Rendering

| Hook/Utility | Description | |--------------|-------------| | SSRProvider | SSR context provider with prefix support | | createIsSSR | Check if currently rendering on server | | useIsSSR | Reactive SSR/hydration state hook | | createHydrationState | Track hydration completion | | createBrowserEffect | Effect that only runs on client | | createBrowserValue | Computed value only on client | | getWindow | Safe window access | | getDocument | Safe document access | | getPortalContainer | Get container for portals |

Focus Management

| Hook/Utility | Description | |--------------|-------------| | FocusScope | Focus containment and restoration | | useFocusManager | Programmatic focus navigation | | createFocusRestore | Save and restore focus with retry | | pushFocusStack / popFocusStack | Cross-scope focus tracking | | createVirtualFocus | Virtual focus for large collections | | createAutoFocus | Priority-based auto-focus queue |

Test Utilities

| Utility | Description | |---------|-------------| | setupUser | Configure userEvent for testing | | pointerMap | Pointer map for mouse/touch/pen | | createPointerEvent | Create pointer events for tests | | press / hover / tabTo | High-level interaction helpers | | getAriaRole / isAriaDisabled / etc. | ARIA attribute querying | | getFocusableElements | Query focusable elements | | waitForFocus | Wait for focus changes | | createButtonTester / etc. | Component-specific testers | | setupTestEnvironment | Install jsdom polyfills |

Utilities

| Utility | Description | |---------|-------------| | mergeProps | Merge multiple prop objects | | filterDOMProps | Filter out non-DOM props | | createId | Generate unique IDs (SSR-safe) |

Usage Example

import { createButton } from "@proyecto-viviana/solidaria";

function Button(props) {
  let ref;
  const { buttonProps, isPressed } = createButton(props, () => ref);

  return (
    <button
      {...buttonProps}
      ref={ref}
      class={isPressed() ? "pressed" : ""}
    >
      {props.children}
    </button>
  );
}

// Usage
<Button onPress={() => console.log("Pressed!")}>Click me</Button>

Key Concepts

Props Spreading

All hooks return prop objects that should be spread onto elements:

const { buttonProps } = createButton(props, ref);
return <button {...buttonProps}>Click me</button>;

Ref Pattern

Most hooks require a ref accessor to access the DOM element:

let ref;
const { inputProps } = createTextField(props, () => ref);
return <input {...inputProps} ref={ref} />;

Event Handling

solidaria uses onPress instead of onClick for better cross-platform support:

<Button onPress={() => console.log("Pressed!")}>
  Works with click, touch, and keyboard
</Button>

TypeScript

All hooks are fully typed:

import {
  createButton,
  type AriaButtonProps,
  type ButtonAria,
} from "@proyecto-viviana/solidaria";

License

MIT