open-index/open-npm huggingface dataset:
npm package: @rssa-project/study-template
Description: [![npm version](https://img.shields.io/npm/v/@rssa-project/study-template.svg)](https://www.npmjs.com/package/@rssa-project/study-template) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
Latest version: 2.1.2

# RSSA Study Template (@rssa-project/study-template)

[![npm version](https://img.shields.io/npm/v/@rssa-project/study-template.svg)](https://www.npmjs.com/package/@rssa-project/study-template)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

A React component library providing standard layouts, pages, and hooks for building research studies on the RSSA Platform. It creates a consistent UI and logic flow (consent -> survey -> stimuli -> feedback) across different RSSA studies.

## Installation

```bash
npm install @rssa-project/study-template
```

## Quick Start

Wrap your main router with the `RouteWrapper`, ensuring you pass a component map mapping step types to your page components.

```tsx
import { RouteWrapper, WelcomePage, SurveyPage, FinalPage } from '@rssa-project/study-template';
import UserCustomPage from './UserCustomPage';

// Map 'step_type' from your study config to React components
const componentMap = {
	welcome: WelcomePage,
	survey: SurveyPage,
	custom_task: UserCustomPage,
	completion: FinalPage,
};

function App() {
	return (
		<Router>
			{/* RouteWrapper handles navigation logic based on study state */}
			<RouteWrapper componentMap={componentMap} WelcomePage={WelcomePage} />
		</Router>
	);
}
```

## Core Features

- **Standard Pages**: `ConsentPage`, `SurveyPage`, `MovieRatingPage`, `DemographicsPage`.
- **Hooks**: `useNextButtonControl`, `useStepCompletion`.
- **Contexts**: Handles participant state and navigation flow automatically.

## Requirements

- React 18+
- `@rssa-project/api` (Peer Dependency)
npm package: @rstack-dev/doc-ui
Description: Shared UI components for the Rstack websites.
Latest version: 1.12.5

# Rstack Doc UI

Shared UI components for the Rstack websites.

- <http://rspack.rs>
- <http://rsbuild.rs>
- <http://rspress.rs>
- <http://rsdoctor.rs>
- <http://rslib.rs>
- <http://rstest.rs>
- <http://rslint.rs>

> This package should only be used in Rstack projects.

## Example

`NavIcon` component:

![image](https://github.com/user-attachments/assets/4132a171-8fc4-40cd-978b-95c37bea31df)

## Setup

Install the dependencies:

```bash
pnpm i
```

## Get Started

Run and debug the module:

```bash
pnpm run build -w
pnpm run storybook
```

Build the module for production:

```bash
pnpm run build
```
npm package: @rstacruz/bump-cli
Description: Increments version numbers in files
Author: Rico Sta. Cruz
Latest version: 2.0.1

# @rstacruz/bump-cli

Bumps semantic versions according to [semver] guidelines.

![Screenshot]( http://cdn.rawgit.com/rstacruz/bump-cli/a251c63/bump.png )

[![Status](https://travis-ci.org/rstacruz/bump-cli.svg?branch=master)](https://travis-ci.org/rstacruz/bump-cli)

## Install

```sh
npx @rstacruz/bump-cli --help
```

See [command line options][options].

[![npm version](https://badge.fury.io/js/bump-cli.svg)](https://npmjs.org/package/bump-cli "View this project on npm")

## Note on upgrading

Version `1.x` and below was published under `bump-cli`, but the newer versions are published under `@rstacruz/bump-cli`.

## Thanks

Inspired by [@marksteve]'s [bump][bump-py]. `bump-cli` is backwards-compatible 
(mostly) with the old 2013 version bump.

[@marksteve]: https://github.com/marksteve
[bump-py]: https://github.com/marksteve/bump

:copyright:

**@rstacruz/bump-cli** © 2014-2021, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors. [(list)][contributors]

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/bump-cli/contributors
[semver]: https://www.npmjs.org/package/semver
[options]: Help.txt
npm package: @rstacruz/deku
Description: Render interfaces using pure functions and virtual DOM
Latest version: 2.0.0-rc6-13-g5adfbd4

# Deku

[![version](https://img.shields.io/travis/dekujs/deku.svg?style=flat-square)](https://travis-ci.org/dekujs/deku)
[![version](https://img.shields.io/npm/v/deku.svg?style=flat-square)](https://www.npmjs.com/package/deku)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)
[![npm downloads](https://img.shields.io/npm/dm/deku.svg?style=flat-square)](https://www.npmjs.com/package/deku)
[![discord](https://img.shields.io/badge/Discord-Join%20Chat%20→-738BD7.svg?style=flat-square)](https://discord.gg/0gNkyCAVkDYsBaFe)

Deku is a library for rendering interfaces using pure functions and virtual DOM.

Instead of using classes and local state, Deku just uses functions and pushes the responsibility of all state management and side-effects onto tools like [Redux](http://redux.js.org/). It also aims to support only modern browsers to keep things simple.

It can be used in place of libraries like React and works well with Redux and other libraries in the React ecosystem.

Deku consists of 4 modules packaged together for convenience:

* `element`: Creating virtual elements
* `diff`: Computing the difference between two virtual elements
* `dom`: DOM renderer
* `string`: HTML string renderer

### Installation

```
npm install --save deku
```

We support the latest two versions of each browser. This means we only support IE10+.

[![Sauce Test Status](https://saucelabs.com/browser-matrix/deku.svg)](https://saucelabs.com/u/deku)

### Example

```js
import {dom, element} from 'deku'
import {createStore} from 'redux'
import reducer from './reducer'
let {createRenderer} = dom

// Dispatch an action when the button is clicked
let log = dispatch => event => {
  dispatch({
    type: 'CLICKED'
  })
}

// Define a state-less component
let MyButton = {
  render: ({ props, children, dispatch }) => {
    return <button onClick={log(dispatch)}>{children}</button>
  }
}

// Create a Redux store to handle all UI actions and side-effects
let store = createStore(reducer)

// Create a renderer that can turn vnodes into real DOM elements
let render = createRenderer(document.body, store.dispatch)

// Update the page and add redux state to the context
render(
  <MyButton>Hello World!</MyButton>,
  store.getState()
)
```

### Documentation

You can [read the documentation online](https://dekujs.github.io/deku).

### License

The MIT License (MIT) Copyright (c) 2015 Anthony Short
npm package: @rstacruz/jsdoc-render-md
Description: Renders jsdoc-parse output to Markdown
Author: Rico Sta. Cruz
Latest version: 2.0.0

# jsdoc-render-md

> Renders jsdoc-parse output to Markdown

This is Rico's opinionated Markdown renderer for jsdoc comments.

```sh
npm install @rstacruz/jsdoc-render-md

./node_modules/.bin/jsdoc-render-md src/*.js > API.md
```
npm package: @rstacruz/mdx
Description: Generic documentation extractor. Extensible enough to work with any language that supports comments.
Author: Rico Sta. Cruz
Latest version: 0.3.2

# @rstacruz/mdx

Generic documentation extractor.

- Should extensible to work with any language that supports comments
- Outputs documentation in JSON format
- Prefers Markdown

[![Status](https://travis-ci.org/rstacruz/mdx.svg?branch=master)](https://travis-ci.org/rstacruz/mdx 'See test builds')

Currently only supports JavaScript, more languages to come later.

Available in npm as [@rstacruz/mdx](https://npmjs.com/@rstacruz/mdx) (as of Oct 2018). Previously it was under [mdx](https://npmjs.com/mdx), but this package name was donated to the [mdx-js](https://github.com/mdx-js) organization.

## Thanks

**@rstacruz/mdx** © 2015-2018, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[![](https://img.shields.io/github/followers/rstacruz.svg?style=social&label=@rstacruz)](https://github.com/rstacruz) &nbsp;
[![](https://img.shields.io/twitter/follow/rstacruz.svg?style=social&label=@rstacruz)](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/mdx/contributors
npm package: @rstacruz/nested-hamt
Description: Nested HAMT implementation
Author: Rico Sta. Cruz
Latest version: 1.1.2

# nested-hamt

> Nested JSON structures in a HAMT tree

Based off of [mini-hamt], but this handles nested JSON structures. I'll explain later.

[![Status](https://travis-ci.org/rstacruz/nested-hamt.svg?branch=master)](https://travis-ci.org/rstacruz/nested-hamt "See test builds")

[mini-hamt]: https://www.npmjs.com/package/mini-hamt

## Install

```
npm install --save @rstacruz/nested-hamt
```

## API

### set

> `set(tree, keypath, value)`

Sets data into a HAMT store.

```js
import { set, get, empty } from 'nested-hamt'

var data = set(empty, 'user', { name: 'John' })
get(data, 'user.name') // => 'John'
```

The `keypath`s can be given as an array or a dot-separated string. This applies to [get()](#get) and [del()](#del) as well.

```js
// Both are equivalent
var data = set(empty, 'user.name', 'John')
var data = set(empty, ['user', 'name'], 'John')
```

### get

> `get(tree, keypath)`

Returns data from a HAMT store. If `keypath` is not given, it returns the entire store as a JSON object.

### del

> `del(tree, keypath)`

Deletes data from a keypath.

### keys

> `keys(tree)`

Returns the available keys for `tree`.

### fromJS

> `fromJS(object)`

Converts JSON `object` into a HAMT tree. Inverse of [toJS()](#tojs).

### toJS

> `toJS(tree)`

Converts HAMT `tree` into a JSON object. Inverse of [fromJS()](#fromjs).

### empty

> `empty`

Empty data.

```js
import { set, get, empty } from 'nested-hamt'

var tree = set(empty, 'hello', 'world')
get(tree, 'hello') // => 'world'
```

### extend

> `extend(tree, ...objects)`

Extends HAMT `tree` with data from `objects`. Compare with Object.assign().

### getType

> `getType(tree, keypath)`

Checks for the type of data. Can return `object`, `array`, or anything *typeof* can return (`string`, `number`, `boolean`, and so on).

## Thanks

**nested-hamt** © 2016+, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/nested-hamt/contributors
npm package: @rstacruz/opencode-autoask
Description: OpenCode plugin that automatically prompts the LLM to offer follow-up questions after every response
Author: rstacruz
Latest version: 1.0.0

# opencode-autoask

An [OpenCode](https://opencode.ai) plugin that automatically prompts the LLM to offer follow-up options after every response.

After each assistant message, the LLM is instructed to call the `question` tool with a brief summary and 3–4 next-step suggestions.

## Why

For providers that charge per request (GitHub Copilot) this prevents subsequent messages from consuming credits.

## Install

Add to your `opencode.jsonc`:

```jsonc
{
    "plugin": ["@rstacruz/opencode-autoask@latest"],
}
```

No other configuration needed.

## License

MIT
npm package: @rstacruz/passtime
Description: Keep track of the passing of time in your terminal
Author: Rico Sta. Cruz
Latest version: 0.0.4

<p align='center'>
<br><img src='https://user-images.githubusercontent.com/74385/47490847-239f8000-d87c-11e8-9eef-1fce67f05bac.png' width='160'><br>
</p>

<h1 align='center'>passtime</h1>

<p align='center'>
<em>Keep track of the passing of time in your terminal</em>
</p>

<br>

<img src='https://user-images.githubusercontent.com/74385/47462328-9e818000-d815-11e8-934b-cbdaacff9e50.png'>

Passtime will subtly let you know every 30 minutes that passes (or a custom interval). Great for people who often get [hyperfocused] in their work.

[hyperfocused]: https://en.m.wikipedia.org/wiki/Hyperfocus

## Usage

Passtime is in development, but you can try it out now using `npx @rstacruz/passtime`.

```sh
alias passtime="npx @rstacruz/passtime"

# Alert every 15 minutes
passtime 15m

# Or show usage info
passtime --help
```

Thanks Phonlaphat Thongsriphong for the [icon](https://thenounproject.com/search/?q=time&i=1888254)!
npm package: @rstacruz/pnpm
Description: A fast implementation of npm install
Author: Rico Sta. Cruz
Latest version: 0.29.0-5-g701c4d9b

# pnpm

<!-- {.massive-header.-with-tagline} -->

> Performant npm installations

pnpm is a fast implementation of `npm install`. It is loosely based off [ied].

![](docs/images/screencast.gif)

[![npm version](https://badge.fury.io/js/pnpm.svg)](https://badge.fury.io/js/pnpm)
[![Status](https://travis-ci.org/rstacruz/pnpm.svg?branch=master)](https://travis-ci.org/rstacruz/pnpm "See test builds")
[![Windows build status](https://ci.appveyor.com/api/projects/status/i30tealekiaesltb/branch/master?svg=true)](https://ci.appveyor.com/project/zkochan/pnpm/branch/master)

## Install

Install it via npm.

```
npm install -g pnpm
```

Use `pnpm` in place of `npm`. It overrides `pnpm i` and `pnpm install`—all other commands will passthru to `npm`.

```
pnpm install lodash
```

## Custom registries

pnpm uses whatever npm's configured to use as its registry. See: [custom registries](docs/custom-registries.md).

## Preview release

`pnpm` will stay in `<1.0.0` until it's achieved feature parity with `npm install`. See [roadmap](docs/roadmap.md) for details.

## Benchmark

```
time npm i babel-preset-es2015 browserify chalk debug minimist mkdirp
    66.15 real        15.60 user         3.54 sys
```

```
time pnpm i babel-preset-es2015 browserify chalk debug minimist mkdirp
    11.04 real         6.85 user         2.85 sys
```

## Design

`pnpm` maintains a flat storage of all your dependencies in `node_modules/.store`. They are then symlinked wherever they're needed.
See [store layout](docs/store-layout.md) for an explanation.

```
.
└─ node_modules/
   ├─ .store/
   │  ├─ chalk@1.1.1/_/
   │  │  └─ node_modules/
   │  │     ├─ ansi-styles      -> ../../../ansi-styles@2.1.0/_
   │  │     └─ has-ansi         -> ../../../has-ansi@2.0.0/_
   │  ├─ ansi-styles@2.1.0/_/
   │  └─ has-ansi@2.0.0/_/
   └─ chalk                     -> .store/chalk@1.1.1/_
```

## Prior art

* [Compared to ied](docs/vs-ied.md)
* [Compared to npm](docs/vs-npm.md)

## Thanks

**pnpm** © 2016+, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/pnpm/contributors
[ied]: https://github.com/alexanderGugel/ied
npm package: @rstacruz/prettier-plugin-markdown-code-fences
Description: Converts indented code blocks into fenced code blocks
Author: Rico Sta. Cruz
Latest version: 1.0.0

<p align='center'><br><a href='https://thenounproject.com/term/components/1286164'><img src='https://user-images.githubusercontent.com/74385/75975632-f9100d80-5f2c-11ea-8c20-72a98b8de15e.png' width='96'></a><br></p>

<h1 align='center'>
Prettier plugin: Markdown code fences
</h1>

<p align='center'>
Plugin for <a href='https://prettier.io'>Prettier</a> to format Markdown files with code fences
</p>

<p align='center'>
<!-- badges here -->
</p>
<br>

> NB: This micro-package is offered as-is and is only supported on a best effort basis.

## Description

Converts indented code blocks into fenced code blocks.

<table>
<tr>
<th>Before</th>
<th>After</th>
</tr>
<tr>
<td>

```md
## This is a Markdown file

Here are some terminal commands.

    cd /
    find . -name systemd
    uname -a
```

</td><td>

````md
## This is a Markdown file

Here are some terminal commands.

```
cd /
find . -name systemd
uname -a
```
````

</td>
</tr>
</table>

## Usage

Install the plugin into an npm project and it will work automatically.

```sh
yarn add --dev @rstacruz/prettier-plugin-markdown-code-fences prettier
yarn run prettier --write file.md
```

## Thanks

**prettier-plugin-markdown-code-fences** © 2020, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[![](https://img.shields.io/github/followers/rstacruz.svg?style=social&label=@rstacruz)](https://github.com/rstacruz) &nbsp;
[![](https://img.shields.io/twitter/follow/rstacruz.svg?style=social&label=@rstacruz)](https://twitter.com/rstacruz)

[mit]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/prettier-plugin-marprettier-plugin-markdown-code-fencesdown-code-fences/contributors
npm package: @rstacruz/random-article
Description: Fetches a random article for use as filler text
Author: Rico Sta. Cruz
Latest version: 1.0.0

# random-article

> Fetches a random article for use as filler text

random-article fetches a random PLR (private label rights) article in Markdown format. Great for mockups.

![](docs/images/screenshot.png)

## Usage

Requires Node.js v4 and above.

```sh
npm install -g @rstacruz/random-article
random-article
```

## Thanks

**random-article** © 2016+, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/random-article/contributors
npm package: @rstacruz/startup-name-generator
Description: Let's name your silly startup
Author: Rico Sta. Cruz
Latest version: 0.3.0

# startup-name-generator

> Let's name your silly startup

Generates cliché (but nice-sounding) names for your startup. [Try it on Codepen](http://codepen.io/rstacruz/full/wJyaJb/).

```js
const name = require('@rstacruz/startup-name-generator')

name('cloud')
//=> ['Cloudary', 'Purecloud', 'Cloudlayer', 'Echocloud', 'Cloudspan',
//   'Cloudloop', 'Activecloud', 'Cloudspark', 'Cloudable', 'Clouder', ...]
```

[![Status](https://travis-ci.org/rstacruz/startup-name-generator.svg?branch=master)](https://travis-ci.org/rstacruz/startup-name-generator "See test builds")

## Install

```sh
yarn add --exact @rstacruz/startup-name-generator
# or
npm install --save-exact @rstacruz/startup-name-generator
```

Also available at: https://unpkg.com/@rstacruz/startup-name-generator@latest/dist/startup-name-generator.js (name `StartupNameGenerator`)

## Command line

Also available as a command-line app.

```sh
yarn global add @rstacruz/startup-name-generator
# or
npm install -g @rstacruz/startup-name-generator

startup-name-generator health fit run
startup-name-generator --help
```

## Thanks

**startup-name-generator** © 2017, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/startup-name-generator/contributors
npm package: @rstacruz/stylelint-config-strict
Description: Supplementary rules for stylelint-config-standard
Author: Rico Sta. Cruz
Latest version: 13.0.2

# stylelint-config-strict

> Extra rules for styelint-config-standard

```
npm install --save @rstacruz/stylelint-config-strict
```

```js
// .stylelintrc
{
  "extends": [
    "@rstacruz/stylelint-config-strict"
  ]
}
```

## Thanks

**stylelint-config-strict** © 2016+, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/stylelint-config-strict/contributors
npm package: @rstacruz/tailwind-variable-theming
Description: Small utility to define multiple themes using CSS variables
Latest version: 0.2.0

# @rstacruz/tailwind-variable-theming

Small utility to define multiple themes using CSS variables

> NB: This is a 0.x micro-utility.

## Usage

```js
// tailwind.config.js
const { createTheme } = require('@rstacruz/tailwind-variable-theming')
const { colors } = require('tailwindcss/defaultTheme')

// Define a theme
const theme = createTheme({
  name: 'default',
  colors: {
    base: {
      bodyBg: colors.white,
      bodyText: colors.gray['900'],
    },
    input: {
      baseBg: colors.gray['100'],
      baseText: colors.gray['900'],
    },
  },
})

// Include the variables and the plugin to your Tailwind config
module.exports = {
  theme: {
    extend: {
      colors: {
        ...theme.config.colors,
      },
    },
  },
  variants: {},
  plugins: [theme.plugin],
}
```

```css
:root {
  @apply theme-default;
}
```

## Result

The config object (`theme.config.colors`) will define colors as CSS variables. This follows what Tailwind would recommend for switching themes ([docs](https://tailwindcss.com/docs/customizing-colors/#naming-your-colors)).

```css
.box {
  background: theme('colors.base.bodyBg');
  /* → background: var(--base-body-bg); */
}

.paragraph {
  @apply text-base-bodyBg;
  /* → color: var(--base-body-bg); */
}
```

The plugin (`theme.plugin`) will create a utility to define those variables, which can be used in `:root` via _@apply_.

```css
.theme-default {
  --base-body-bg: #fff;
  --base-body-text: #1a202c;
  --input-body-bg: #f7fafc;
  --input-body-text: #1a202c;
}
```

## Examples

### Dark theme

Two themes can be defined for `default` and `dark` themes.

```js
// Define themes
const defaultTheme = createTheme({
  name: 'default',
  colors: {
    /*...*/
  },
})

const darkTheme = createTheme({
  name: 'dark',
  colors: {
    /*...*/
  },
})

// Include the variables and the plugin to your Tailwind config
module.exports = {
  theme: {
    extend: {
      colors: {
        // Only one will be needed here
        ...defaultTheme.config.colors,
      },
    },
  },
  variants: {},
  plugins: [defaultTheme.plugin, darkTheme.plugin],
}
```

CSS media queries can be used to define an alternate theme.

```css
:root {
  @apply theme-default;

  @media (prefers-color-scheme: dark) {
    @apply theme-dark;
  }
}
```

## Thanks

MIT
npm package: @rstacruz/tap-spec
Description: Formatted TAP output like Mocha's spec reporter
Author: Scott Corgan
Latest version: 4.1.1

# tap-spec [![NPM version](https://img.shields.io/npm/v/tap-spec.svg?style=flat-square)](https://www.npmjs.com/package/tap-spec) [![NPM download count](https://img.shields.io/npm/dm/tap-spec.svg?style=flat-square)](https://www.npmjs.com/package/tap-spec)

Formatted TAP output like Mocha's spec reporter

![iterm - 2 bash - may 29 2015 at 10 17 am screen shot](https://cloud.githubusercontent.com/assets/974723/7888261/03366236-05ec-11e5-9f94-d9c2707526b7.png)

## Install

```
npm install tap-spec --save-dev
```

## Usage

### Streaming

```js
var test = require('tape');
var tapSpec = require('tap-spec');

test.createStream()
  .pipe(tapSpec())
  .pipe(process.stdout);
```

### CLI

**package.json**

```json
{
  "name": "module-name",
  "scripts": {
    "test": "node ./test/tap-test.js | tap-spec"
  }
}
```

Then run with `npm test`

**Terminal**

```
tape test/index.js | node_modules/.bin/tap-spec
```

**Testling**

```
npm install testling -g
testling test/index.js | node_modules/.bin/tap-spec
```
npm package: @rstest/adapter-rsbuild
Description: Rstest adapter for rsbuild configuration
Latest version: 0.2.6

# @rstest/adapter-rsbuild

Rstest adapter for [Rsbuild](https://rsbuild.rs) configuration. This package allows you to extend your Rstest configuration from Rsbuild config files.

## Installation

```bash
npm install @rstest/adapter-rsbuild -D
```

## Usage

### `withRsbuildConfig`

```ts
import { defineConfig } from '@rstest/core';
import { withRsbuildConfig } from '@rstest/adapter-rsbuild';

export default defineConfig({
  extends: withRsbuildConfig(),
  // other Rstest config options
});
```

Automatically loads Rsbuild config from the current working directory and converts it to Rstest config.

More advanced usage examples can be found in the [Rsbuild integration guide](https://rstest.rs/guide/integration/rsbuild).

### `toRstestConfig`

You can also use `toRstestConfig` directly when you already have an Rsbuild config object.

```ts
import { loadConfig } from '@rsbuild/core';
import { toRstestConfig } from '@rstest/adapter-rsbuild';

const { content: rsbuildConfig } = await loadConfig({
  cwd: process.cwd(),
});

const rstestConfig = toRstestConfig({
  rsbuildConfig,
  environmentName: 'node',
  modifyRsbuildConfig: (config) => ({
    ...config,
    output: {
      ...config.output,
      target: 'node',
    },
  }),
});
```

### Options

- `rsbuildConfig`: Required. The Rsbuild config object to convert.
- `environmentName`: Optional. Name of the config in `environments` to merge with the base config.
- `modifyRsbuildConfig`: Optional. Hook to modify merged Rsbuild config before conversion.
npm package: @rstest/adapter-rslib
Description: Rstest adapter for rslib configuration
Latest version: 0.2.2

# @rstest/adapter-rslib

Rstest adapter for [Rslib](https://rslib.rs) configuration. This package allows you to extend your Rstest configuration from Rslib config files.

## Installation

```bash
npm install @rstest/adapter-rslib -D
```

## Usage

```ts
import { defineConfig } from '@rstest/core';
import { withRslibConfig } from '@rstest/adapter-rslib';

export default defineConfig({
  extends: withRslibConfig(),
  // other rstest config options
});
```

More advanced usage examples can be found in the [Rslib integration guide](https://rstest.rs/guide/integration/rslib).
npm package: @rstest/adapter-rspack
Description: Rstest adapter for rspack configuration
Latest version: 0.2.0

# @rstest/adapter-rspack

Rstest adapter for [Rspack](https://rspack.rs) configuration. This package allows you to extend your Rstest configuration from Rspack config files.

## Installation

```bash
npm install @rstest/adapter-rspack -D
```

## Usage

### `withRspackConfig`

```ts
import { defineConfig } from '@rstest/core';
import { withRspackConfig } from '@rstest/adapter-rspack';

export default defineConfig({
  extends: withRspackConfig(),
  // other rstest config options
});
```

Automatically loads Rspack config from the current working directory and converts it to Rstest config.