open-index/open-npm huggingface dataset:
npm package: @rfcaio/randint
Description: A simple integer generator.
Author: Caio Rodrigues Fernandes
Latest version: 1.0.0

# randint [![Build Status](https://travis-ci.org/rfcaio/randint.svg?branch=master)](https://travis-ci.org/rfcaio/randint) [![Coverage Status](https://coveralls.io/repos/github/rfcaio/randint/badge.svg?branch=master)](https://coveralls.io/github/rfcaio/randint?branch=master)

> A simple integer generator.

## Install

```
$ npm install --save @rfcaio/randint
```

## Usage

```js
const randint = require('@rfcaio/randint')

randint() // A number between 0 and 9
```
npm package: @rfcaio/webpack-config
Description: A webpack configuration generator for my projects.
Author: Caio Rodrigues Fernandes
Latest version: 0.6.0

# webpack-config [![Build Status](https://travis-ci.org/rfcaio/webpack-config.svg?branch=master)](https://travis-ci.org/rfcaio/webpack-config) [![Coverage Status](https://coveralls.io/repos/github/rfcaio/webpack-config/badge.svg?branch=master)](https://coveralls.io/github/rfcaio/webpack-config?branch=master)

> A webpack configuration generator for my projects.

## Install

```
$ npm install --save-dev @rfcaio/webpack-config
```

## Usage

Install `webpack` and the rest of dependencies.

```
$ npm install --save-dev webpack webpack-cli webpack-dev-server
```

Install `webpack-merge` to manage configuration parts.

```
$ npm install --save-dev webpack-merge
```

Create a `webpack` configuration file.

```js
// webpack.prod.js
const merge = require('webpack-merge')
const config = require('@rfcaio/webpack-config')

module.exports = merge([
  config.extractCSS(),
  config.useHtmlPlugin(),
  {
    mode: 'production'
  }
])
```

Use configuration via `webpack`.

```
$ npx webpack --config webpack.prod.js
```

## API

**devServer**

Generates a configuration for `webpack-dev-server`.

```js
config.devServer()
/*
{
  stats: 'errors-only'
}
*/

config.devServer({ port: 1337, stats: 'verbose' })
/*
{
  port: 1337,
  stats: 'verbose'
}
*/
```

**extractCSS**

Generates a configuration to extract CSS files. Useful for production builds.

```js
config.extractCSS()
/*
{
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader']
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: '[name].css'
    })
  ]
}
*/
```

**loadCSS**

Generates a configuration to load CSS files.

```js
config.loadCSS()
/*
{
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  }
}
```

**loadJavaScript**

Generates a configuration to load JavaScript files.

```js
config.loadJavaScript()
/*
{
  module: {
    rules: [
      {
        exclude: /node_modules/,
        test: /.js$/,
        use: ['babel-loader']
      }
    ]
  }
}
```

For now, you have to setup `babel` too.

```
$ npm install --save-dev @babel/core @babel/preset-env babel-loader
```

Then, create `.babelrc` file.

```
{
  "presets": ["@babel/preset-env"]
}
```

**useErrorOverlayPlugin**

Generates a configuration for `error-overlay-webpack-plugin`.

```js
config.useErrorOverlayPlugin()
/*
{
  plugins: [new ErrorOverlayWebpackPlugin()]
}
*/
```

**useHtmlPlugin**

Generates a configuration for `html-webpack-plugin`.

```js
config.useHtmlPlugin()
/*
{
  template: 'src/index.html'
}
*/

config.useHtmlPlugin({ minify: true, template: 'src/main.html' })
/*
{
  minify: true,
  template: 'src/main.html'
}
*/
```
npm package: @rfdez/n8n-nodes-splitwise
Description: n8n community node to consume the Splitwise API
Author: Raúl Fernández
Latest version: 0.6.3

# n8n-nodes-splitwise

This is an n8n community node. It lets you use Splitwise in your n8n workflows.

Splitwise is a service that lets you split expenses with others. Keep track of your shared expenses and balances with housemates, trips, groups, friends, and family. 

[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.

[Installation](#installation)  
[Operations](#operations)  
[Credentials](#credentials)  <!-- delete if no auth needed -->  
[Compatibility](#compatibility)  
[Usage](#usage)  <!-- delete if not using this section -->  
[Resources](#resources)  
[Version history](#version-history)  <!-- delete if not using this section -->  

## Installation

Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.

## Operations

- Groups
  - Delete a group
  - Get information about a group
  - List the current user's groups
  - Restore a group

- Expenses
  - Create an expense (in equally split mode)
  - Delete an expense
  - Get expense information
  - List the current user's expenses
  - Restore an expense

## Credentials

To use this node you need to create an application in your Splitwise account. You can create one [here](https://secure.splitwise.com/apps).

Once you have created the app, you can use one of the following authentication methods with it in n8n:

- API Key
- OAuth 2.0

If you are using the API Key authentication method, you need to provide the API Key in the `API Key` field, you can generate one [here](https://secure.splitwise.com/apps).

If you are using the OAuth 2.0 authentication method, you need to copy the callback URL provided in the credentials window and paste it in the Callback URL field of your app in Splitwise. You can then enter the credentials in the `OAuth2` field in the credentials window in n8n. For Splitwise, the `OAuth2` field requires the following credentials:

- **Client ID** also known as the Consumer Key in Splitwise
- **Client Secret** also known as the Consumer Secret in Splitwise

## Compatibility

This node was tested against Splitwise API 3.0.0 and n8n 1.7.1.

## Usage

If you are new to n8n, it is recommended to read the [Getting Started](https://docs.n8n.io/try-it-out/) guide for a high-level overview of n8n.

## Resources

* [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
* [Splitwise documentation](https://dev.splitwise.com/)
npm package: @rfed/nuxt-purgecss
Description: Drop superfluous CSS! A neat PurgeCSS wrapper for Nuxt
Latest version: 4.0.0

# Nuxt PurgeCSS - Drop superfluous CSS!

## Features

* Remove unneeded CSS with ease
* Sane default settings
* Built on top of [purgecss](https://github.com/FullHuman/purgecss)
* Nuxt 3 support

## Setup

1. Add `nuxt3-purgecss` dependency to your project

```bash
yarn add --dev nuxt3-purgecss # or npm install --save-dev nuxt3-purgecss
```

2. Add `nuxt3-purgecss` to the `modules` section of `nuxt.config.{js,ts}`

```js
export default {
  modules: [
    // Simple usage
    'nuxt3-purgecss',

    // With options
    ['nuxt3-purgecss', { /* module options */ }],
  ]
}
```

## Options

### Defaults

Before diving into the individual attributes, please have a look [at the default settings](https://github.com/luoxiangfan/nuxt-purgecss/blob/main/src/config.ts) of the module.

The defaults will scan all your `.vue`, `.js` and `.ts` files in the common Nuxt folders, as well as checking your `nuxt.config.js` (or `.ts`) for used classes.
Furthermore, typical classes (like these needed for transitions, the nuxt link ones or those set when using scoped styles) are whitelisted already.

These settings should be a good foundation for a variety of projects.

### Properties in-depth

#### enabled

* Type: `Boolean`
* Default: `!nuxt.options.dev` (Disabled during `nuxt dev`, enabled otherwise)

Enables the module when set to `true`.

#### PurgeCSS options

Please read [the PurgeCSS docs](https://www.purgecss.com/configuration) for information about
PurgeCSS-related information.

## Examples

### Default setup

```js
// nuxt.config.js
export default {
  modules: [
    'nuxt3-purgecss',
  ]
}
```

### Customize options

```js
//nuxt.config.js
export default {
  modules: [
    'nuxt3-purgecss',
  ],

  purgecss: {
    enabled: true, // Always enable purgecss
    safelist: ['my-class'], // Add my-class token to the safelist (e.g. .my-class)
  }
}
```

## Caveats

* Don't forget to add paths to pages and components that are not part the common folders (e.g. third party packages)
* The default generated 500 and 404 pages will be purged by default. Please ensure you have an appropriate error layout
* Do not use the old `>>>` or `::v-deep` syntax. Instead, go for `:deep`

## License

[MIT License](./LICENSE)

Copyright (c) Alexander Lichter
npm package: @rferraioli/medusa-plugin-invoice
Description: A plugin for create invoice
Author: Ai-Ecom
Latest version: 0.1.2

# medusa-service-invoice

Invoice for your medusa

## medusa-config.js
```
{
    resolve: `@ai-ecom/medusa-plugin-invoice`,
    options: {
        settings: { // default settings for invoice if there no setting in the database
            invoice_number_format:  "{{}}",
            overdue_days: 7,
            number_counter: 1,
            invoice_title: "INVOICE",
            invoice_logo_url: "<LOGO_URL>",
            invoice_company_name: "Ai-Ecom",
            invoice_address_line_1: "Line 1",
            invoice_address_line_2: "Line 2",
            invoice_address_line_3: "Line 3",
            footer_html: "<FOOTER_HTML>"
        },
        create_when: "order.payment_captured",
        payments: {
            manual: "Manual Payment"
        },
        email: {
            template: {
                invoice_cancellation: "<SENDGRID_TEMPLATE_ID>",
                invoice: "<SENDGRID_TEMPLATE_ID>"
            }
        }
    }
}
```
npm package: @rffgrayson/simple-dropdown-menu
Description: A lightweight dropdown menu component
Author: rffgrayson
Latest version: 1.0.2

# Dropdown Menu

A lightweight, accessible dropdown menu component with zero dependencies.

## Installation

```bash
npm install @rffgrayson/simple-dropdown-menu
```

## Usage

```html
<link rel="stylesheet" href="path/to/dropdown.css">

<div class="dropdown" data-dropdown>
  <button class="dropdown-button">Menu</button>
  <div class="dropdown-menu">
    <a href="#home">Home</a>
    <a href="#about">About</a>
  </div>
</div>

<script type="module">
  import Dropdown from '@rffgrayson/simple-dropdown-menu';
  Dropdown.init();
</script>
```

## Features

- ✅ Zero dependencies
- ✅ Accessible (ARIA attributes, keyboard support)
- ✅ Multiple dropdowns support
- ✅ Auto-close on outside click
- ✅ Lightweight (~2KB)

## License

MIT © [rffgrayson](https://github.com/rffgrayson)
npm package: @rfgamaral/parcel-plugin-typings-for-css-modules
Description: A plugin for the Parcel bundler to generate .d.ts files for your CSS Modules.
Author: Ricardo Amaral
Latest version: 1.0.4

# @rfgamaral/parcel-plugin-typings-for-css-modules

[![npm](https://img.shields.io/npm/v/@rfgamaral/parcel-plugin-typings-for-css-modules.svg)](https://www.npmjs.com/package/@rfgamaral/parcel-plugin-typings-for-css-modules)
[![minified size](https://img.shields.io/bundlephobia/min/@rfgamaral/parcel-plugin-typings-for-css-modules.svg)](https://bundlephobia.com/result?p=@rfgamaral/parcel-plugin-typings-for-css-modules)
[![downloads](https://img.shields.io/npm/dt/@rfgamaral/parcel-plugin-typings-for-css-modules.svg)](https://www.npmtrends.com/@rfgamaral/parcel-plugin-typings-for-css-modules)
[![commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
[![license](https://img.shields.io/npm/l/@rfgamaral/parcel-plugin-typings-for-css-modules.svg)](LICENSE)

A plugin for the [Parcel](https://parceljs.org/) bundler to generate `.d.ts` (TypeScript type definitions) files for your [CSS Modules](https://github.com/css-modules/css-modules), powered by [`typed-css-modules`](https://github.com/Quramy/typed-css-modules).

## Installation

Just use your favorite 📦 package manager to install the plugin in your project's `devDependencies`:

**npm:**

```sh
npm install --save-dev @rfgamaral/parcel-plugin-typings-for-css-modules
```

**Yarn:**

```sh
yarn add --dev @rfgamaral/parcel-plugin-typings-for-css-modules
```

## Usage

Parcel will handle everything for you automagically, just make sure it's [configured to use PostCSS with CSS Modules](https://en.parceljs.org/css.html#postcss) by adding a `.postcssrc` file to your project root with:

```json
{
    "modules": true
}
```

This plugin also includes support for [naming local class names in camelCase](https://github.com/css-modules/postcss-modules#camel-cased-classes), just pass the `{ camelCase: true }` option to the `.postcssrc` file, like so:

```json
{
    "modules": true,
    "plugins": {
        "postcss-modules": {
            "camelCase": true
        }
    }
}
```

**Note:** With `camelCase` option set to `true`, only kebab-case class names will be converted to camelCase, PascalCase class names will remain as is.

## Credits

This plugin borrows heavily from the follwing similar Parcel plugins:

-   [`parcel-plugin-css-modules-type-generator`](https://github.com/garthenweb/parcel-plugin-css-modules-type-generator)
-   [`parcel-plugin-typed-css-modules`](https://github.com/Place1/parcel-plugin-typed-css-modules)

Thank you [@garthenweb](https://github.com/garthenweb) and [@Place1](https://github.com/Place1) 🙏

## License

The use of this source code is governed by an MIT-style license that can be found in the [LICENSE](LICENSE) file.
npm package: @rfiatt/react-native-user-agent
Description: Library that helps you to get mobile application user agent and web view user agent strings.
Author: Bebnev Anton
Latest version: 1.0.4


# react-native-user-agent

## Getting started

Install with [npm](https://www.npmjs.com/) or [Yarn](https://yarnpkg.com/):

npm:
```sh
npm install react-native-user-agent --save
```

Yarn:
```sh
yarn add react-native-user-agent
```

### Mostly automatic installation

`$ react-native link react-native-user-agent`

### Manual installation


#### iOS

1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]`
2. Go to `node_modules` ➜ `react-native-user-agent` and add `RNUserAgent.xcodeproj`
3. In XCode, in the project navigator, select your project. Add `libRNUserAgent.a` to your project's `Build Phases` ➜ `Link Binary With Libraries`
4. Run your project (`Cmd+R`)<

#### Android

1. Open up `android/app/src/main/java/[...]/MainApplication.java`
  - Add `import com.bebnev.RNUserAgentPackage;` to the imports at the top of the file
  - Add `new RNUserAgentPackage()` to the list returned by the `getPackages()` method
2. Append the following lines to `android/settings.gradle`:
  	```
  	include ':react-native-user-agent'
  	project(':react-native-user-agent').projectDir = new File(rootProject.projectDir, 	'../node_modules/react-native-user-agent/android')
  	```
3. Insert the following lines inside the dependencies block in `android/app/build.gradle`:
  	```
      compile project(':react-native-user-agent')
  	```

## Usage

```javascript
import UserAgent from 'react-native-user-agent';

UserAgent.getUserAgent();
UserAgent.getWebViewUserAgent();
```

### Examples:

| System | User-Agent | WebView User-Agent |
| ------ | ---------- | ------------------ |
| iOS    | application-name/1.6.4.176 CFNetwork/897.15 Darwin/17.5.0 (iPhone/6s iOS/11.3) | Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E217 |
| Android | application-name/1.6.7.42 Dalvik/2.1.0 (Linux; U; Android 5.1.1; Android SDK built for x86 Build/LMY48X) | Mozilla/5.0 (Linux; Android 5.1.1; Android SDK built for x86 Build/LMY48X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 |

### Additionally:

Every version returns some constants that are used in user agent string building.

iOS version returns:
- systemName
- systemVersion
- applicationName
- applicationVersion
- applicationBuildNumber
- darwinVersion
- cfnetworkVersion
- deviceName

Android version returns:
- systemName
- systemVersion
- applicatioName
- applicationVersion
- applicationBuildNumber


## License

[MIT](LICENSE). Copyright (c) 2018 Anton Bebnev.
npm package: @rfkhusnutdinov/overflow-observer
Description: JavaScript plugin that monitors changes to the <html> or <body> overflow property.
Author: Rinat Khusnutdinov
Latest version: 2.0.0

# OverflowObserver

A lightweight JavaScript plugin to monitor changes to the `overflow` property on the `<body>` and `<html>` (`document.documentElement`) elements.
Useful for detecting scroll lock changes.

## Features

- Observes changes to `body` overflow, including fallback to `document.documentElement`
- Dispatches a custom `overflowchange` event when overflow changes
- Singleton pattern ensures only one observer instance

## Installation

### Install from npm

```bash
npm install @rfkhusnutdinov/overflow-observer
```

```javascript
import OverflowObserver from "@rfkhusnutdinov/overflow-observer";
```

### Use OverflowObserver from CDN

```html
<script src="https://cdn.jsdelivr.net/npm/@rfkhusnutdinov/overflow-observer@latest"></script>
```

## Usage

```javascript
const observer = OverflowObserver.getInstance();

// Get overflow value
const overflowValue = observer.overflow; // Can be "hidden" or "visible"

// Listen for overflow changes
document.body.addEventListener("overflowchange", (event) => {
  console.log("Overflow changed to:", event.detail.overflow);
});

// Disconnect observer when no longer needed
observer.disconnect();
```

### Notes

- The plugin uses a MutationObserver to track changes in body style and class attributes.
- It returns body overflow, but if body is not hidden, it falls back to document.documentElement overflow.
- Singleton pattern ensures only one instance is active at a time.

## API

| Method                         | Description                                                                                                            |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| OverflowObserver.getInstance() | Returns the singleton instance of the observer. Initializes if it doesn’t exist yet.                                   |
| disconnect()                   | Stops observing and cleans up the instance. the singleton so a new instance can be created on next getInstance() call. |
npm package: @rfkhusnutdinov/scrollbar-width-observer
Description: JavaScript plugin to monitor scrollbar width and update a CSS variable.
Author: Rinat Khusnutdinov
Latest version: 2.0.0

# ScrollbarWidthObserver

A lightweight JavaScript plugin to monitor changes in the scrollbar width.
Automatically updates a CSS variable and dispatches a `scrollbarwidthchange` event on changes.

## Features

- Observes scrollbar width changes on window resize
- Updates a CSS variable (default `--scrollbar-width`) with the current width
- Dispatches a custom `scrollbarwidthchange` event
- Singleton pattern ensures only one observer instance
- Debounced resize handling to optimize performance

## Installation

### Install from npm

```bash
npm install @rfkhusnutdinov/scrollbar-width-observer
```

```javascript
import ScrollbarWidthObserver from "@rfkhusnutdinov/scrollbar-width-observer";
```

### Use ScrollbarWidthObserver from CDN

```html
<script src="https://cdn.jsdelivr.net/npm/@rfkhusnutdinov/scrollbar-width-observer@latest"></script>
```

## Usage

```javascript
const observer = ScrollbarWidthObserver.getInstance({
  cssVariableName: "--scrollbar-width", // optional, default is --scrollbar-width
});

// Get scrollbar width value
const scrollbarWidthValue = observer.scrollbarWidth;

// Listen for scrollbar width changes
window.addEventListener("scrollbarwidthchange", (event) => {
  console.log("Scrollbar width changed to:", event.detail.scrollbarWidth);
});

// Disconnect observer when no longer needed
observer.disconnect();
```

### Notes

- The plugin calculates the scrollbar width using a temporary DOM element.
- CSS variable is applied to body for easy usage in styles.
- Singleton pattern ensures only one instance is active at a time.

## API

| Method                                          | Description                                                       |
| ----------------------------------------------- | ----------------------------------------------------------------- |
| new ScrollbarWidthObserver({ cssVariableName }) | Initializes the observer or returns the existing instance         |
| disconnect()                                    | Stops observing, removes CSS variable, and cleans up the instance |
npm package: @rfkit/renderer
Description: A high-performance canvas rendering engine for charts and visualizations, supporting Canvas 2D and WebGL rendering
Author: Hxgh
Latest version: 0.1.9

# rfkit-renderer
Canvas/WebGL 渲染器集合，适用于射频和通用数据可视化。内置线谱、热力/荧光图、IQ/眼图、仪表盘、环形/雷达等组件，并提供 WebGL 版热力渲染以处理大矩阵数据。

## 主要能力
- Canvas 2D：`Series`(Line/Bar/Area/Stepline)、`Heatmap`、`Fluorescence`、`Gauge`、`Dial`、`Radar`、`IQ`、`IQEye`
- WebGL：`HeatmapWebGL`（大规模强度矩阵，颜色查表渲染）
- 工具与类型：`ColorInterpolator`、`GraphicType`、`OrientationType`、`AxisYRange`、`SeriesConfig` 等

## 安装与构建
仓库开发：

```bash
pnpm install
pnpm dev        # 实时构建
pnpm build      # 生成 dist
pnpm check      # biome 格式与检查
```

作为依赖使用（发布包名为 `@rfkit/renderer`）：

```bash
pnpm add @rfkit/renderer
```

## 快速上手
HTML 容器：

```html
<div id="heatmap" style="width:640px;height:240px;"></div>
<div id="series" style="width:640px;height:200px;"></div>
<div id="heatmap-webgl" style="width:640px;height:240px;"></div>
```

创建渲染器并推送数据：

```ts
import {
  Heatmap,
  Series,
  HeatmapWebGL,
  GraphicType
} from '@rfkit/renderer';

const heatmap = new Heatmap({
  id: 'heatmap',
  range: [-120, 0],
  colors: ['#001B44', '#0041FF', '#00D1FF', '#00FFA3', '#FEE440', '#FF006E']
});

heatmap.render(
  Array.from({ length: 120 }, () =>
    Array.from({ length: 256 }, (_, i) => -110 + Math.sin(i / 16) * 30)
  )
);

const sweep = new Series({
  id: 'series',
  range: [-120, 10]
});

sweep.render({
  name: 'spectrum',
  type: GraphicType.Line,
  color: '#00FFA3',
  data: Float32Array.from({ length: 512 }, (_, i) => -90 + Math.cos(i / 18) * 15)
});
```

使用 WebGL 热力渲染（需要 WebGL2 支持）：

```ts
const heatmapGL = new HeatmapWebGL({
  id: 'heatmap-webgl',
  range: [-120, 0],
  colors: ['#0B1021', '#3465A4', '#5BC0EB', '#9BF6FF', '#FDE74C', '#FF206E']
});

heatmapGL.render(largeMatrix); // largeMatrix: number[][]
```

## 数据格式速览
- `Series.render` 接收 `SeriesConfig`（必填 `name`，`data` 为 `Float32Array`，`type` 由 `GraphicType` 指定）。
- `Heatmap` / `HeatmapWebGL` 接收 `number[][]`，内层数组表示一行数据。
- `Fluorescence` 接收 `{ fluorescenceData: Map<number, number>[], fluorescenceMaxCount: number }`。
- `IQ`/`IQEye` 接收 `{ IData: number[], QData: number[] }`。
  `IQEye` 额外支持 `iqEyeMode`（`'classic' | 'legacy' | 'modern'`），默认 `classic`：每帧重算、绿红显影；传 `modern` 可启用跨帧 decay 模式。
- `Dial`/`Radar` 使用 `CircularData`；`Gauge` 使用 `{ value: number; limit?: number }`。

常用操作：`setRange(range)` 调整量程并重绘；`resize()` 在容器尺寸变化后调用；`clear()` 清空画布及内部数据。
npm package: @rfkit/spectrum-analyzer
Description: A high-performance spectrum analyzer library for RF signal processing, supporting real-time spectrum analysis, waterfall display, and multi-segment frequency scanning
Author: Hxgh
Latest version: 0.1.49

# @rfkit/spectrum-analyzer

高性能 RF 频谱分析库，支持实时频谱分析、瀑布图显示和多段频率扫描。

提供 **JS 版本** 和 **WASM 高性能版本** 两种选择。

## 安装

```bash
pnpm add @rfkit/spectrum-analyzer
```

## 使用

### JS 版本（默认）

```typescript
import {
  SpectrumAnalyzer,
  LevelStreamAnalyzer,
  type SpectrumConfig,
  type SpectrumOutputData,
} from '@rfkit/spectrum-analyzer';

const analyzer = new SpectrumAnalyzer({
  maxPoints: 2048,
  outputPoints: 1024,
  enableStatistics: true,
  onSpectrumUpdate: (data) => {
    console.log(data.realData);
  },
});

// 处理频谱数据
analyzer.process({ data: Float32Array, timestamp: Date.now() });
```

### WASM 高性能版本

WASM 版本 API 与 JS 版本完全一致，仅需在应用启动时初始化一次。

```typescript
import {
  initWasm,
  SpectrumAnalyzer,
  LevelStreamAnalyzer,
} from '@rfkit/spectrum-analyzer/wasm';

// 应用启动时初始化（仅需一次）
await initWasm();

// 之后使用方式与 JS 版本完全一致
const analyzer = new SpectrumAnalyzer({
  maxPoints: 2048,
  outputPoints: 1024,
  enableStatistics: true,
  onSpectrumUpdate: (data) => {
    console.log(data.realData);
  },
});

analyzer.process({ data: Float32Array, timestamp: Date.now() });
```

## 性能对比

| 场景 | JS 版本 | WASM 版本 | 提升 |
|------|---------|-----------|------|
| 8192 点数据 | 0.032 ms | 0.020 ms | **35%** |
| 2000 点 / 300Hz | 0.023 ms | 0.020 ms | **13%** |

两个版本在 300Hz 更新频率下都能轻松满足，CPU 占用 < 1%。

## 核心组件

### SpectrumAnalyzer

频谱分析器，支持：
- 实时数据处理与重采样
- 最大值/最小值/平均值统计
- 瀑布图数据管理
- 天线因子补偿
- 模板超限检测
- 多段频率扫描

### LevelStreamAnalyzer

电平流分析器，支持：
- 电平概率分布统计
- 时间/点数缓存模式

## 构建命令

```bash
pnpm build          # 构建 JS 版本
pnpm build:wasm     # 构建 WASM 版本
pnpm build:all      # 构建全部
```

## License

MIT
npm package: @rfkit/theme
Description: A flexible light/dark theme switching library supporting custom theme configuration, dynamic switching, and responsive design
Author: Hxgh
Latest version: 0.1.16

# 独立的主题生成库

## 使用
```javascript
import initTheme from '@dc/auto-theme';

initTheme();
```

## 查看配置
```javascript
import { themeConfig } from '@dc/auto-theme';
console.log(themeConfig);
```
npm package: @rflafla/f1-udp-parser
Description: The F1 series of games support the outputting of key game data via a UDP data stream. This data can be interpreted by external apps or connected peripherals for a range of different uses, including providing additional telemetry information, customised HU
Latest version: 2.0.0

# F1 UDP Parser

The F1 series of games support the outputting of key game data via a UDP data stream. This data can be interpreted by external apps or connected peripherals for a range of different uses, including providing additional telemetry information, customised HUD displays, motion platform hardware support or providing force feedback data for custom steering wheels.

This is a TypeScript UDP client and telemetry parser for EA - Codemaster's F1 2022, F1 23, and F1 24.

## Installing

```
$ npm install @deltazeroproduction/f1-udp-parser
```

or

```
$ yarn add @deltazeroproduction/f1-udp-parser
```

## Running the parser

```
$ npm run start
```

or

```
$ yarn start
```

## Usage

```
import { F1TelemetryClient, constants } from "f1-telemetry-client";
// or: const { F1TelemetryClient, constants } = require('f1-telemetry-client');
const { PACKETS } = constants;

/*
*   'port' is optional, defaults to 20777
*   'forwardAddresses' is optional, it's an array of Address objects to forward unparsed telemetry to. each address object is comprised of a port and an optional ip address
*                   defaults to undefined
*   'skipParsing' is optional, setting it to true will make the client not parse and emit content. You can consume telemetry data using forwardAddresses instead.
*                   defaults to false
*/
const client = new F1TelemetryClient({ port: 20777 });
client.on(PACKETS.event, console.log);
client.on(PACKETS.motion, console.log);
client.on(PACKETS.carSetups, console.log);
client.on(PACKETS.lapData, console.log);
client.on(PACKETS.session, console.log);
client.on(PACKETS.participants, console.log);
client.on(PACKETS.carTelemetry, console.log);
client.on(PACKETS.carStatus, console.log);
client.on(PACKETS.finalClassification, console.log);
client.on(PACKETS.lobbyInfo, console.log);
client.on(PACKETS.carDamage, console.log);
client.on(PACKETS.sessionHistory, console.log);
client.on(PACKETS.tyreSets, console.log); // F1 23 and 24 only
client.on(PACKETS.motionEx, console.log); // F1 23 and 24 only
client.on(PACKETS.timeTrial, console.log); // F1 24 only

// to start listening:
client.start();

// and when you want to stop:
client.stop();
```

## Documentation

The following links contain information that summarises the UDP data structures so that developers of supporting hardware or software are able to configure these to work correctly with the F1 game.

[F1 2022 UDP Spec](https://answers.ea.com/t5/General-Discussion/F1-22-UDP-Specification/td-p/11551274)

[F1 23 UDP Spec](https://answers.ea.com/t5/General-Discussion/F1-23-UDP-Specification/m-p/12633159)

[F1 24 UDP Spec](https://answers.ea.com/t5/General-Discussion/F1-24-UDP-Specification/m-p/13745220)

## License

Licensed under the MIT License.
npm package: @rflukerii/docbot
Description: Bidirectional CSV <> JSON <> Markdown transformer
Latest version: 1.0.2

# @rflukerii/docbot

A lightweight, bidirectional data format transformer. Convert between CSV, JSON, and Markdown with a simple, chainable API.

## Installation

```bash
npm install @rflukerii/docbot
```

## Usage

```js
const { csvToJson, jsonToCsv, jsonToMarkdown, csvToMarkdown } = require('@rflukerii/docbot');
```

### CSV → JSON

```js
const json = csvToJson("name,age\nAlice,30\nBob,25");
// [{ name: 'Alice', age: '30' }, { name: 'Bob', age: '25' }]
```

### JSON → CSV

```js
const csv = jsonToCsv([{ name: 'Alice', age: '30' }, { name: 'Bob', age: '25' }]);
// "name,age\r\nAlice,30\r\nBob,25"
```

### JSON → Markdown

```js
const md = jsonToMarkdown([{ name: 'Alice', age: '30' }, { name: 'Bob', age: '25' }]);
// | name | age |
// | --- | --- |
// | Alice | 30 |
// | Bob | 25 |
```

### CSV → Markdown

```js
const md = csvToMarkdown("name,age\nAlice,30\nBob,25");
// | name | age |
// | --- | --- |
// | Alice | 30 |
// | Bob | 25 |
```

## API

| Function | Input | Output |
| --- | --- | --- |
| `csvToJson(csvString)` | CSV string | JSON array |
| `jsonToCsv(jsonArray)` | JSON array | CSV string |
| `jsonToMarkdown(jsonArray)` | JSON array | Markdown table |
| `csvToMarkdown(csvString)` | CSV string | Markdown table |

## License

MIT