open-index/open-npm huggingface dataset:
npm package: @slingshot/shell
Description: Miscelaneous styling utilities
Author: Mauro Pinto
Latest version: 0.0.12

# Slingshot Shell

Miscelaneous styling utilities

This project makes use of [Inuit's style namespaces](https://csswizardry.com/2015/03/more-transparent-ui-code-with-namespaces/)
and [BEM](http://getbem.com/naming/).

## Installing

`npm i -D @slingshot/shell`

## Dependencies

[sass-mq](http://sass-mq.github.io/sass-mq/) for media query helpers and class generators
npm package: @slipher/generic-adapter
Description: ```ts import { GenericAdapter } from "@slipher/generic-adapter"; import { HttpClient } from "seyfert";
Latest version: 0.0.7

```ts
import { GenericAdapter } from "@slipher/generic-adapter";
import { HttpClient } from "seyfert";

const client = new HttpClient(); // HttpClient, Client, or WorkerClient
const adapter = new GenericAdapter(client);

await adapter.start();
await client.start();

export default {
	fetch(req: Request) {
		return adapter.fetch(req);
	},
};
```
npm package: @slipher/proxy
Description: ```ts const { app } = await createProxy({ 	port: 4444, 	token: "MzUxNDMzMTk0MDAxNjYxOTUy........", 	baseUrl?... 	app?... 	rest?... }); ```
Latest version: 0.0.5

# Rest proxy using [uWebSockets.js](https://github.com/uNetworking/uWebSockets.js)

```ts
const { app } = await createProxy({
	port: 4444,
	token: "MzUxNDMzMTk0MDAxNjYxOTUy........",
	baseUrl?...
	app?...
	rest?...
});
```
npm package: @slipher/redis-adapter
Description: More information in the [docs](https://docs.seyfert.dev/getting-started/declare-module#internal-options)
Latest version: 0.0.6

More information in the [docs](https://docs.seyfert.dev/getting-started/declare-module#internal-options)

```ts
import { Client } from 'seyfert';
import { RedisAdapter } from '@slipher/redis-adapter';

const client = new Client();

client.setServices({
    cache: {
        adapter: new RedisAdapter()
    }
});

await client.start();
```
npm package: @slipher/uws-adapter
Description: ```ts import { UwsAdapter } from "@slipher/uws-adapter"; import { HttpClient } from "seyfert";
Latest version: 0.0.6

```ts
import { UwsAdapter } from "@slipher/uws-adapter";
import { HttpClient } from "seyfert";

const client = new HttpClient(); // HttpClient, Client, or WorkerClient
const adapter = new UwsAdapter(client);

await adapter.start();
await client.start();
```
npm package: @slipher/webhooks
Description: Completely agnostic and minimalistic way with 1 dependencies to listen to Discord webhook events.
Latest version: 0.0.3

# Webhook Events

Completely agnostic and minimalistic way with 1 dependencies to listen to Discord webhook events.

```ts
import { init } from '@slipher/webhooks'

const server = init({
	port: 3000,
	path: '/api/webhooks',
	callback: (event) => console.log(event),
	listen: () => console.log('Listen webhooks'),
});
```
### To complete the typing you must use the augmentation module provided by typescript

**Seyfert**
```ts
import type { APIUser, APIGuild, APIEntitlement } from "seyfert/lib/types";

declare module '@slipher/webhooks' {
	export interface EntitlementCreateEventType extends APIEntitlement {}
	export interface UserType extends APIUser {}
	export interface GuildType extends APIGuild {}
}
```
npm package: @sliphua/expect
Description: Browser-compatible version of Jest's `expect`
Latest version: 27.5.1

# @sliphua/expect

[![npm version](https://img.shields.io/npm/v/@sliphua/expect?label=%40sliphua%2Fexpect "@sliphua/expect")](https://npmjs.com/package/@sliphua/expect)

Browser polyfill of Jest's [`expect`](https://jestjs.io/docs/expect).

## Installation

```sh
yarn add -D expect @sliphua/expect
```

or

```sh
npm i --save-dev expect @sliphua/expect
```

## Usage

In `package.json`:

```json
{
  "browser": {
    "expect": "@sliphua/expect"
  }
}
```

## Documentation

👉 https://jestjs.io/docs/expect
npm package: @sliphua/lilconfig-ts-loader
Description: A TypeScript loader for lilconfig
Author: Endemol Shine Group Technology
Latest version: 3.2.2

A TypeScript loader for lilconfig. Migrated from [@endemolshinegroup/cosmiconfig-typescript-loader](https://www.npmjs.com/package/@endemolshinegroup/cosmiconfig-typescript-loader). Bug reports and feature requests go check [there](https://github.com/EndemolShineGroup/cosmiconfig-typescript-loader) first.

## Installation

```bash
yarn add @sliphua/lilconfig-ts-loader
```

## Usage

```typescript
import { lilconfig } from 'lilconfig';
import { TypeScriptLoader } from '@sliphua/lilconfig-ts-loader';

const moduleName = 'myModuleName';
const explorer = lilconfig(moduleName, {
  searchPlaces: [
    'package.json',
    `.${moduleName}rc`,
    `.${moduleName}rc.json`,
    `.${moduleName}rc.yaml`,
    `.${moduleName}rc.yml`,
    `.${moduleName}rc.ts`,
    `.${moduleName}rc.js`,
    `${moduleName}.config.ts`,
    `${moduleName}.config.js`,
  ],
  loaders: {
    '.ts': TypeScriptLoader,
  },
});
```
npm package: @slipknot/emojidb
Description: Unofficial Emojipedia.org emoji data
Author: Seiya Dev.
Latest version: 1.0.0

# Emoji DB

[![npm](https://img.shields.io/npm/v/emoji-db?style=flat-square)](https://npmjs.com/emoji-db)
[![npm downloads](https://img.shields.io/npm/dm/emoji-db?style=flat-square)](https://npmjs.com/emoji-db)

Unofficial Emojipedia.org emoji data
npm package: @slipmatio/logger
Description: Better console logging with TypScript support
Author: Ville Säävuori
Latest version: 0.4.0

# Better Logger

Easy and lightweight console logging for your JavaScript and TypeScript projects. Control log levels in development vs production, integrate with third-party log tools and debug Vue applications.

## Features

- Log levels that follow and extend browser console log levels
- `success`, `critical` and `run` methods for more secure and informative logging
- Nice looking and fully configurable output
- Custom formatter for Vue
- Full TypeScript support
- Good test coverage

## Installation

```sh
pnpm add @slipmatio/logger
```

## Basic Usage

The easiest way to use this logger is to use the `useLogger` or `useVueLogger` helpers. The helpers are configured to print only errors in production and print all but debug messages in development mode unless called with `debug=true`. You can also set the logger `name` attribute. Both arguments are optional:

```js
import { useLogger } from '@slipmatio/logger'

const logger = useLogger()
```

Then just use `logger` wherever you want:

```js
logger.log('Hello World!')
// > Hello world!

logger.run()
// > 🚀 [main.ts]
```

### Vue Logger

Vue logger uses a special logger function that pretty prints ref, reactive, and computed objects for you so instead of unreadable garble you can read the logs easily.

```js
import { ref, computed } from 'vue'
import { useVueLogger } from '@slipmatio/logger'

const logger = useVueLogger('vuelogger')

const num = ref(1)
const timesTwo = computed(() => num.value * 2)

console.log('proxy objects', num, timesTwo)
// > proxy objects  Object { __v_isShallow: false, dep: undefined, __v_isRef: true, _rawValue: 1, _value: 1 } Object { _setter: setter(), dep: undefined, __v_isRef: true, __v_isReadonly: true, _dirty: true, effect: {…}, _cacheable: true }
logger.log('proxy objects', num, timesTwo)
// > [vuelogger] proxy objects (ref): 1 (computed): 2
```

### Automatic Imports

Tip: use something like [unplugin-auto-import](https://github.com/antfu/unplugin-auto-import) with your bundler to automagically import your logger instance wherever you need it.

## Setting Up Manually

You can also instantiate and import the logger manually. It works as you'd expect:

```js
import { Logger, LogLevel } from '@slipmatio/logger'

const logger = new Logger({
  // Log levels: DEBUG, INFO, WARN, ERROR, CRITICAL, OFF
  logLevel: process.env.NODE_ENV !== 'production' ? LogLevel.INFO : LogLevel.ERROR,
  name: 'mylogger',
  logFn: myLogFn, // see source for implementation
})
```

## Status

This project was originally born around 2016 and has been copy-pasted in various formats from project to project. As it has been helpful in so many projects, I finally decided to clean it up, convert to TypeScript and release as open source. Some parts of the code are a bit ugly, but it works well enough for most production needs. Contributions welcome!

## Elsewhere

Follow [@uninen on Twitter](https://twitter.com/uninen)
npm package: @slipmatio/tailwind-config
Description: Common TailwindCSS configuration for Slipmat projects
Author: Ville Säävuori
Latest version: 3.0.0

Common TailwindCSS configuration for Slipmat.io projects. The project versioning follows Tailwind major versions (ie. v3.x of this package use Tailwind 3.x).

This configuration adds:

- Slipmat colors:
  - `slipmat` for Slipmat red (`slipmat-500` is the logo color)
- Play font to default sans fonts

# Usage

First install the package:

```
pnpm add -D @slipmatio/tailwind-config
```

then add `require('@slipmatio/tailwind-config')` to `presets` array in `tailwind.config.js`.

You can then extend the config if you want. Extended properties override the defaults:

```js
// tailwind.config.js

module.exports = {
  presets: [require('@slipmatio/tailwind-config')],
  theme: {
    extend: {
      fontFamily: {
        source: ['Source Sans Pro', 'sans-serif'],
      },
    },
  },
}
```

Install the Play font by adding following tags to the `<head>` of the main template:

```html
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link
  href="https://fonts.googleapis.com/css2?family=Play:wght@400;700&display=swap"
  rel="stylesheet"
/>
```

More from [Tailwind documentation](https://tailwindcss.com/docs/).

[Follow @Uninen](https://twitter.com/uninen) on Twitter.
npm package: @slipmatio/toolbelt
Description: TypeScript utility library for Web development. These small utilities
Author: Ville Säävuori
Latest version: 2026.2.0

# Slipmat Toolbelt

TypeScript utility library for Web development. These small utilities

## Installation

```bash
pnpm add @slipmatio/toolbelt
```

## Usage

### Browser Utilities

```typescript
import { browserIsSupported, getCookie } from '@slipmatio/toolbelt'
```

- `browserIsIE()` - Check if browser is Internet Explorer
- `browserIsSupported()` - Check if browser has modern features (timezone support, localStorage, and is not IE)
- `copyToClipboard(content: string)` - Copy text to clipboard
- `deleteCookie(name, path?, domain?, secure?, sameSite?)` - Delete a cookie
- `getCookie(name: string)` - Get cookie value by name
- `hasTimeZoneSupport()` - Check if browser supports [computed timezone](https://caniuse.com/mdn-javascript_builtins_intl_datetimeformat_resolvedoptions_computed_timezone)
- `isBot(ssrReturn?: boolean)` - Detect if user agent is a bot
- `storageAvailable(type: 'localStorage' | 'sessionStorage')` - Check if storage is available

### General Utilities

```typescript
import { CappedCollection } from '@slipmatio/toolbelt'
```

- `CappedCollection<T>` - Fixed-capacity collection that maintains only the most recent items
- `isAllowedDomain(url: string, allowedDomains: string[])` - Check if URL domain is in allowed list
- `isValidSecureUrl(url: string)` - Validate HTTPS URL (allows localhost)
- `prefetchImages(urls: string | string[])` - Preload images

#### CappedCollection

```typescript
import { CappedCollection } from '@slipmatio/toolbelt'

// Create a collection that holds max 1000 items
const collection = new CappedCollection<string>(1000)

// Add items
collection.add('item1')
collection.addMany(['item2', 'item3'])

// Get all items
const items = collection.get() // ['item1', 'item2', 'item3']

// Check status
console.log(collection.size) // 3
console.log(collection.isFull) // false

// Clear all items
collection.clear()
```

### Vue Utilities

```typescript
import { getNext, getNextPath } from '@slipmatio/toolbelt/vue'
```

- `getNext(allowedDomains: string[], router?: Router)` - Get validated 'next' query param (allows URLs to specified domains)
- `getNextPath(router?: Router)` - Get validated 'next' query param (local paths only)

## Development

```bash
pnpm dev      # Development server
pnpm build    # Build library
pnpm test     # Run tests
```

### Publishing

Bump version number in `package.json`, merge to main.

## Contributing

Contributions are welcome! Please follow the [code of conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/) when interacting with others.

## Elsewhere

- Follow [@uninen on X](https://x.com/uninen) or [uninen.net on Bluesky](https://bsky.app/profile/uninen.net)
- Read my learnings around Vue / TypeScript and other Web dev topics from my [Today I Learned blog](https://til.unessa.net/)
- If you speak Finnish, check out [Koneoppiblogi](https://koneoppiblogi.uninen.net)
npm package: @slipmatio/ui
Description: Common UI components for Slipmat.io projects
Author: Ville Säävuori
Latest version: 0.3.0

# Slipmat.io UI Components

Warning: this project is under active development and not intended for public use yet. **Do not use in production.**

## Usage

1. Install `@slipmatio/ui`
2. Import a component
3. Import styles: `import '@slipmatio/ui/style.css'`
4. Profit!11

## Developing

### Basic Commands

#### Project setup

```
pnpm i
```

#### Start development server

```
pnpm dev
```

#### Build for production

```
pnpm build
```

#### Run end-to-end tests

```
pnpm test:e2e
```

### Publishing

Bump version number in `package.json`, merge to main.
npm package: @slippilab/create-animations
Description: Create .svg paths for ssbm character animations
Author: Frank Borden
Latest version: 0.0.3

# Adding a character:

## One time setup

1. Get student license with .edu email and download Maya 2018 (not newer)
2. Download "New and Improved Animation Pack" and "Animation_Pack"
  - https://www.mediafire.com/file/cmasv6kab9271p0/New_and_Improved_Animation_Pack.zip/file
  - http://www.mediafire.com/file/b9yyt3dd2ll1dzv/SSBMelee_Animation_Model_Pack.zip/file

## Step 0: Render animations with Maya

1. Open character scene in Maya (from New and Improved Animation Pack)
2. Set side camera environemnt background color to white
3. Set framerate to 60
4. Delete all the textures:
  - Window -> Rendering Editors -> Hypershade, Edit -> Delete All By Type -> Textures
5. Set render settings to match vectorize command and render to check
6. Adjust the step0renderAnimations.mel script to your character and input/output directories
7. Run script
8. Delete any animations you don't care about:
  - Heavy*, Item*, and PlyTaro thrown animations should not be needed

## Step 1: Trace .bmp's into .svgs (adjust step1 input directory in package.json first)
yarn packages/create-animations step1

## Step 2: Optimize svgs with SVGO
yarn packages/create-animations step2

## Step 3: Collect path strings from SVGs into a single .json for each animation
yarn packages/create-animations step3

## Step 4: Compress all the .json files into a single .zip
yarn packages/create-animations step4

## Step 5: Move the .zip file to the zips directory
cp packages/create-animations/.out/step4/animations.zip packages/viewer/src/animations/zips/$CHARACTER.zip

## Step 6: Add the character's stats and action state <-> animation mapping
Copy an existing character for the new character

cp packages/viewer/src/characters/mario.ts packages/viewer/src/characters/$CHARACTER.ts

Adjust the mappings for:
- Taunts (Appeal vs AppealL vs AppealR)
- Wait animation (Wait vs Wait1)
- Forward tilt / Forward smash (some characters can be angled, some cannot)
- Specials
- Anything else unique (example: air tethers)

Specials/other unique animations:
https://docs.google.com/spreadsheets/d/1Nu3hSc1U6apOhU4JIJaWRC4Lj0S1inN8BFsq3Y8cFjI/preview#gid=517965147

Model scaling and shield size:
https://docs.google.com/spreadsheets/d/1JX2w-r2fuvWuNgGb6D3Cs4wHQKLFegZe2jhbBuIhCG8/preview#gid=21

If an animation cannot be found it will use Appeal, so play some replays to identify incorrect or missing
mappings.

## Step 7: Add the character to be usable:
packages/viewer/src/characters/index.ts supportedCharactersById function
packages/viewer/src/animations/index.ts importAnimation function

External character ID list:
https://docs.google.com/spreadsheets/d/1JX2w-r2fuvWuNgGb6D3Cs4wHQKLFegZe2jhbBuIhCG8/preview#gid=20
npm package: @slippilab/viewer
Description: Replay .slp files in the browser
Author: Frank Borden
Latest version: 0.0.4

# Viewer

Replay .slp files in the browser.

## Usage

The viewer is written as a [lit](https://lit.dev/) component. You can use it as any other webcomponent:

```
import '@slippilab/viewer';

const viewer = document.createElement('replay-viewer');

viewer.replay = myReplay; // Replay object from @slippilab/common
someElementOnYourPage.appendChild(viewer);
```

or however your framework lets you make a html template:

```
<replay-viewer replay=myReplayObject></replay-viewer>
```

## Controls

## Animations

Animations are a .zip for each character containing .json file per animation. Each .json is an array with one .svg path per frame. Each .zip will be dynamically loaded when needed, or you can prefetch them manually by external character ID (Slippilab itself does this prefetch popular characters):

```
import { fetchAnimation } from '@slippilab/viewer';

fetchAnimation(0); // returns a promise. 0=falcon
```