open-index/open-npm huggingface dataset:
npm package: @liball/node-red-contrib-opi-gpio
Description: Orange Pi GPIO. Digital input/output for Orange Pi
Author: liball
Latest version: 0.1.3

# node-red-contrib-opi

# Control I/O for Digital Pins
There are two nodes, one for output and one for input.
These are Node-RED nodes that interface GPIO pins on Orange Pi boards as well as on other Pi's.

# Background
These nodes are using the great [onoff] library, which includes the pins via the sysfs filesytem. Therefore, it should work on all platforms that support sysfs.
Your system should have the path /sys/class/gpio/ and this directory should be populated. Watch for additional entries if node-red start flows using GPIO.

# Additional Setup
Run node-red from console and watch for error messages. 
In order to use GPIO also as a standard user without root rights, some conditions have to be fulfilled.
* The user group `gpio` must exist and the user must belong to this group.
* The kernel must map gpio access to the user space, but this is not necessarily always the default behaviour.

### User setup
To meet these requirements for user `pi`, run this commands as root:
Check if user `pi` belongs to `gpio`:
```sh
$ groups pi
```
Otherwise, run this:
```sh
$ addgroup gpio
$ usermod -a -G gpio pi
```
If `pi` is not allowed to use GPIO now, additional steps are required: 
### Kernel Setup
Create a new file: 
```sh
$ touch /etc/udev/rules.d/99-com.rules
```
copy this text to the file:
```sh
KERNEL=="gpio*", RUN="/bin/sh -c 'chgrp -R gpio /sys/%p /sys/class/gpio && chmod -R g+w /sys/%p /sys/class/gpio'" 
```
and do a reboot.

# Remarks
This is tested on Orange Pi PC, Banana Pi M1, Banana Pi M2+ under Armbian.
Compared to the solution, which is provided for Raspberry Pi, this way is much more efficient. The whole code runs direct in Node.js and uses kernel live support.
But Raspberry Pi I/O nodes create for each pin an own shell and run a not so lightweighted Python process in it... 
If you have a new set of gpio pins tested at another Pi, feel free to send me a file with pin-number, pin and IO-port name which I can include to the setup.

g.prand(at)gmail.com

# Release history
0.0.6
Changed to the latest onoff library. Now works with Node.js 12/14.

0.0.5
Added Orange Pi Zero Plus 2 (h5).
Changed to the latest onoff library.

0.0.4   
Wrong pin numbering corrected. 
Added pins to NanoPi Neo/Air.
Section "other" now defaults to PA0 after initial selection.

0.0.3   
Added some Pi's, changed interrupt initialisation and warning.
If you upgrade your flows from 0.0.2, you should delete GPIO nodes and then add again.

0.0.2
First release

   [onoff]: <https://github.com/fivdi/onoff>
npm package: @libchrono/time
Description: Small library to handle time format conversion.
Author: Damian Wileński
Latest version: 1.2.2

# 🕒 @libchrono/time

[![npm version](https://badge.fury.io/js/@libchrono%2Ftime.svg)](https://badge.fury.io/js/@libchrono%2Ftime)
[![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/Naereen/StrapDown.js/blob/master/LICENSE)
![](coverage/badge.svg)

## ⏳ Simple Time Format Converter

@libchrono/time is a lightweight and zero-dependency JavaScript library that helps you effortlessly:

✅ Convert 24-hour (military) time to 12-hour (meridiem) time

✅ Convert 12-hour (meridiem) time to 24-hour (military) time

✅ Validate if a string is a valid military or civilian time format

✅ Extract each component of time string in both formats

## 📦 Installation

To use @libchrono/time in your project, install it via npm:

```bash
npm install @libchrono/time
```

or yarn:

```bash
yarn add @libchrono/time
```

```typescript
const { convertMeridiemToMilitary } = require('@libchrono/time');
// or using ES Modules
import { convertMeridiemToMilitary } from '@libchrono/time';

console.log(convertMeridiemToMilitary('10:00 AM')); // result: 10:00
```

## 🔧 API Reference

### Convert 24-hour time to 12-hour time

```typescript
console.log(convertMilitaryToMeridiem('23:45')); // Output: "11:45 PM"
console.log(convertMilitaryToMeridiem('09:30')); // Output: "9:30 AM"
```

### Convert 12-hour time to 24-hour time

```typescript
console.log(convertMeridiemToMilitary('11:45 PM')); // Output: "23:45"
console.log(convertMeridiemToMilitary('9:30 AM')); // Output: "09:30"
```

### Validate if a string is in military (24-hour) time format

```typescript
console.log(isMilitaryFormat('23:45')); // Output: true
console.log(isMilitaryFormat('11:45 PM')); // Output: false
console.log(isMilitaryFormat('25:30')); // Output: false (invalid time)
```

### Validate if a string is in civilian (12-hour) time format

```typescript
console.log(isMeridiemFormat('11:45 PM')); // Output: true
console.log(isMeridiemFormat('23:45')); // Output: false
console.log(isMeridiemFormat('13:30 PM')); // Output: false (invalid time)
```

### Extract components of the time string

```typescript
console.log(getMeridiemComponents('11:45 PM')); // Output: { hour: 11, minute: 45, period: 'PM' }
console.log(getMilitaryComponents('23:45')); // Output: { hour: 23, minute: 45 }
```

### Get times labels in military format

```ts
console.log(getMilitaryTimes('00:00', '23:59', 10)) // Output: ['00:00', '00:10', '00:20', ... '23:50']
console.log(getMeridiemTimes('08:30 AM', '12:00 PM', 30)) // Output: ['08:30 AM', '09:00 AM', '09:30 AM', ..., '12:00 PM']
```

### Calculate seconds in time window

```ts
calculateMilitaryTimeWindowInSec('08:00', '12:00'); // 14400
calculateMeridiemTimeWindowInSec('8:00 AM', '12:00 PM'); // 14400
```

[Full documentation](./docs/globals.md)

## 🛠️ Why Use @libchrono/time

✅ Zero dependencies – lightweight and efficient.

✅ Simple API – minimal, intuitive functions.

✅ Accurate conversions & validations – ensures correctness.

✅ Fully tested – reliable with unit tests.
npm package: @libdweb/node-dgram
Description: Node dgram module adapter for libdweb
Latest version: 0.0.0

# node-dgram

[![travis][travis.icon]][travis.url]
[![package][version.icon] ![downloads][downloads.icon]][package.url]
[![styled with prettier][prettier.icon]][prettier.url]

Library allows Firefox extensions to polyfill node [dgram](https://nodejs.org/api/dgram.html)module using [libdweb][].

## Usage

```js
import drgamify from "@libdweb/node-dgram"
const dgram = drgamify(browser)
```

## Install

    npm install @libdweb/node-dgram

## Hack

You can run example from test directory by running `npm run demo` after `npm install`

[travis.icon]: https://travis-ci.org/Gozala/node-dgram.svg?branch=master
[travis.url]: https://travis-ci.org/Gozala/node-dgram
[version.icon]: https://img.shields.io/npm/v/node-dgram.svg
[downloads.icon]: https://img.shields.io/npm/dm/node-dgram.svg
[package.url]: https://npmjs.org/package/node-dgram
[downloads.image]: https://img.shields.io/npm/dm/node-dgram.svg
[downloads.url]: https://npmjs.org/package/node-dgram
[prettier.icon]: https://img.shields.io/badge/styled_with-prettier-ff69b4.svg
[prettier.url]: https://github.com/prettier/prettier
[libdweb]: https://github.com/mozilla/libdweb/
npm package: @libeiha/utils
Description: 一个简单实用的JavaScript工具库，提供数字四舍五入和数组扁平化功能
Author: yuduan
Latest version: 1.0.1

# myUtils

一个简单实用的JavaScript工具库，提供常用的数字和数组处理方法。

## 安装

```bash
npm install @libeiha/utils
```

## 使用方法

```javascript
const { round, flatten } = require('@libeiha/utils');

// 使用四舍五入方法
const result1 = round(3.14159, 2);  // 3.14
const result2 = round(3.5);         // 4
const result3 = round(2.345, 1);    // 2.3

// 使用数组扁平化方法
const arr1 = flatten([1, [2, [3, [4]]]]); // [1, 2, 3, 4]
const arr2 = flatten([1, [2, [3, [4]]]], 2); // [1, 2, 3, [4]]
const arr3 = flatten([1, 2, 3]); // [1, 2, 3]
```

## API 文档

### round(num, decimals)

对数字进行四舍五入。

**参数：**
- `num` (number): 需要四舍五入的数字
- `decimals` (number, 可选): 保留的小数位数，默认为 0

**返回值：**
- (number): 四舍五入后的结果

**示例：**
```javascript
round(3.14159, 2);  // 3.14
round(3.5);         // 4
round(10.567, 1);   // 10.6
```

### flatten(arr, depth)

将多维数组扁平化为一维数组。

**参数：**
- `arr` (Array): 需要扁平化的数组
- `depth` (number, 可选): 扁平化深度，默认为 Infinity（完全扁平化）

**返回值：**
- (Array): 扁平化后的数组

**示例：**
```javascript
flatten([1, [2, [3, [4]]]]); // [1, 2, 3, 4]
flatten([1, [2, [3, [4]]]], 1); // [1, 2, [3, [4]]]
flatten([1, [2, [3, [4]]]], 2); // [1, 2, 3, [4]]
```

## 许可证

MIT

## 链接

- [npm](https://www.npmjs.com/package/@libeiha/utils)
npm package: @libeilong/echo-editor
Description: A modern AI-powered WYSIWYG rich-text editor for Vue, based on Tiptap and shadcn-vue
Author: SEED
Latest version: 0.4.6

# Echo Editor

一款基于 [tiptap](https://tiptap.dev) 和 [shadcn-vue](https://www.shadcn-vue.com/) 的新一代 AI 富文本编辑器。

[![MIT 许可证](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)
[![](https://img.shields.io/npm/v/echo-editor.svg?label=version)](https://www.npmjs.com/package/echo-editor)
[![](https://img.shields.io/npm/dependency-version/echo-editor/peer/vue?color=vue)](https://www.npmjs.com/package/echo-editor)

[English](./README.md) | 中文

![应用截图](./screenshot/screenshot.png)

## 在线演示

[查看演示](https://echo-editor.jzcloud.site/)

## 特性

- 🎨 使用 [shadcn-vue](https://www.shadcn-vue.com/) 精美组件
- ✨ AI 智能写作辅助
- 📝 支持 Markdown 及实时预览
- 🔤 丰富的文本格式化功能（标题、列表、引用等）
- 📊 表格和代码块支持
- 🎯 自定义字体大小和样式
- 📄 支持导入 Word 文档
- 🌍 国际化支持（`en`、`zhHans`）
- 🧩 可扩展架构 - 支持自定义扩展
- 🎭 TypeScript 支持
- 🎨 Tailwind CSS 支持

## 安装

```bash
npm install echo-editor
# 或
pnpm install echo-editor
# 或
yarn add echo-editor
```

## 使用方法

### 方式一：全局注册

```ts
// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import EchoEditor from 'echo-editor'
import 'echo-editor/style.css'

const app = createApp(App)
app.use(EchoEditor)
app.mount('#app')
```

```ts
<script setup>
import { BaseKit } from 'echo-editor'

const content = ref('')
const extensions = [
  BaseKit.configure({
    placeholder: {
      placeholder: '开始写作...',
    },
  }),
]
</script>

<template>
  <echo-editor :extensions="extensions" v-model="content" />
</template>
```

### 方式二：直接使用

```ts
<script setup>
import { EchoEditor, BaseKit } from 'echo-editor'
import 'echo-editor/style.css'

const content = ref('')
const extensions = [
  BaseKit.configure({
    placeholder: {
      placeholder: '开始写作...',
    },
  }),
]
</script>

<template>
  <echo-editor :extensions="extensions" v-model="content" />
</template>
```

## 开发

1. 安装 [pnpm](https://pnpm.io/installation)
2. 克隆仓库
3. 运行 `pnpm install`
4. 使用 `pnpm dev` 启动开发服务器

测试构建版本：

```bash
pnpm examples
```

## 贡献

欢迎提交 Pull Request 来帮助改进项目！

## 相关项目

- [shadcn-vue](https://www.shadcn-vue.com/)
- [tiptap](https://tiptap.dev)
- [iconify](https://icon-sets.iconify.design)

## 许可证

[MIT](https://choosealicense.com/licenses/mit/)
npm package: @libeilong/map-js-sdk
Description: 通用的地图 SDK 封装，统一使用方式
Author: lblblong
Latest version: 0.5.1

## map-js-sdk

通用的地图 SDK 封装，统一使用方式

目前拥有功能：

- 地图 SDK 加载
- 地图创建
- 输入提示（自动补全）
- POI 搜索

```typescript
import { AMapSDK, TMapSDK, MapModule } from '@libeilong/map-js-sdk'

const instance = new AMapSDK({
  key: '',
  modules: [MapModule.autoComplete, MapModule.placeSearch],
})
// const instance = new TMapSDK({
//   key: '',
//   modules: [MapModule.autoComplete, MapModule.placeSearch],
// })

useEffectLayout(()=>{
  await instance.loadSDK()
  instance.initMap('map', { zoom: 18 })
},[])

return <div id='map'></div>
```
npm package: @libeilong/react-hook-form
Description: (# @libeilong/react-admin-form
Author: lblblong
Latest version: 0.1.8

(# @libeilong/react-admin-form

基于 `Formily` 与 `Ant Design` 的表单组件集合，封装了常用表单元素、上传、位置选择等扩展组件与若干便捷 Hook，方便在后台管理系统中快速构建表单界面。

**核心特性**
- 丰富的表单元素封装（Input、Select、DatePicker、Upload 等）
- 基于 `createElement` / `createRender` 的统一渲染工厂，便于扩展自定义控件
- 常用布局组件 `FormGrid`
- 地图/地点/位置相关的 Hook：`useLocationSelect`、`usePoiSelect` 等
- 与 `@libeilong/react-admin`、`@libeilong/map-js-sdk` 协同工作

**包信息**
- **名称**: `@libeilong/react-admin-form`
- **版本**: `0.10.3`
- **License**: MIT

**安装**
在 monorepo 中通常由 root 管理依赖；单独安装：

```
pnpm add @libeilong/react-admin-form
```

注意：本包声明 `antd` 和 `react` 为 `peerDependencies`，请在项目中安装匹配版本。

**快速开始（示例）**
仓库内包含 `example` 演示：

```
cd packages/react-admin-form/example
pnpm install
pnpm start
```

示例默认使用 `parcel`，打开浏览器查看页面。

**导出概览**
- `registerPopupManager`：从 `@libeilong/react-admin` 转发的弹层注册函数
- 表单渲染工具与元素：`createElement`, `createRender`, `renderInput`, `Input`, `Select`, `DatePicker`, `Upload`, `CustomSelect`, `AutoComplete`, `SingleUpload` 等（见 `src/form`）
- 布局组件：`FormGrid`（位于 `src/components/FormGrid.tsx`）
- Hooks：`useAsyncDataSource`, `useFieldValueCache`, `useLocationSelect`, `useMapKeywordAutoComplete`, `usePoiSelect`
- `Form`、`FormItem`：直接导出自 `@formily/antd-v5`

**主要用法示例**

1) 使用 `Formily` 元素（简略示例）：

```
import React from 'react'
import { Form, FormItem } from '@formily/antd-v5'
import { Input, Select } from '@libeilong/react-admin-form'

export default function Demo(){
	return (
		<Form>
			<FormItem name="name" title="姓名">
				<Input name="name" />
			</FormItem>
			<FormItem name="type" title="类型">
				<Select name="type" />
			</FormItem>
		</Form>
	)
}
```

2) 使用 `createRender` / `createElement` 创建自定义渲染器

```
import { createRender, createElement } from '@libeilong/react-admin-form'
import { Input as AntInput } from '@formily/antd-v5'

const MyRender = createRender(AntInput)
const MyElement = createElement(AntInput)
```

3) `FormGrid`：简单的响应式列布局

```
import { FormGrid } from '@libeilong/react-admin-form'

<FormGrid>
	<div>列1</div>
	<div>列2</div>
	<div>列3</div>
</FormGrid>
```

**Hooks 简要说明**
- `useAsyncDataSource(pattern, service)`：把异步数据源绑定到字段（用于 Select 的动态数据）
- `useFieldValueCache(pattern)`：为字段值做本地缓存，以提升体验
- `useLocationSelect(pattern, adapter, opts?)`：为 CustomSelect 注入位置选择行为（弹出地图选择器），`opts.renderValue` 可自定义展示
- `usePoiSelect(pattern, adapter, opts?)`：为 CustomSelect 注入地点选择行为，返回 `Poi` 并可以自定义展示
- `useMapKeywordAutoComplete(pattern, adapter)`：用于地图关键字自动补全（适配器依赖 `@libeilong/map-js-sdk`）

示例：为表单字段绑定位置选择器

```
import { useLocationSelect } from '@libeilong/react-admin-form'
import { BaseMap } from '@libeilong/map-js-sdk'

// 在组件初始化处调用
useLocationSelect('address', new BaseMap(), { text: '选择位置' })
```

**自定义控件与 Upload**
- 本包提供封装好的上传控件 `Upload` 与 `SingleUpload`，并导出类型 `UploadProps` / `UploadValue`，便于在 Formily 中使用。

**构建与发布**
- 使用 `tsdown` 构建：

```
pnpm --filter @libeilong/react-admin-form run build
```

发布前 `prepublishOnly` 会自动执行 `tsdown`。

**示例扩展建议**
- 我可以为 `example` 添加一个完整的表单页面，演示 `useLocationSelect`/`usePoiSelect` 与上传控件的联用，并加入简单的 mock API。

**贡献**
- 欢迎提交 issue 与 PR。请保持代码风格并在 PR 中包含简短说明与可复现示例。

**许可证**
MIT
)
npm package: @libeilong/vue-markdown-x
Description: A Vue 3 component for rendering Markdown
Author: lblblong
Latest version: 0.0.2

Fork 自用版，原项目：https://github.com/litingyes/vue-markdown

# ![Logo](./playground/public/logo.svg) Vue Markdown

The vue component for render Markdown string

## What is this?

This is a Vue.js component focused on Markdown string rendering, which is based on [mdast-util-to-vnode](https://github.com/litingyes/mdast-util-to-vnode) to parse Markdown string and render by Vue.js.

## When should I use this?

- Rendering Markdown strings with Vue.js
- Streaming Markdown strings (usually in AI Chat)

## Install

```base
npm install vue-markdown-x
```

## Use

```vue
<script setup>
import { ref } from 'vue'
import { VueMarkdown } from 'vue-markdown-x'

const mdStr = ref('')
</script>

<template>
  <VueMarkdown :md="mdStr" />
</template>
```

### VueMarkdown Props

#### md

Markdown string to render.

```ts
// default: ''
type md = string
```

#### components

Customize how nodes are rendered.

```ts
type ComponentReturn = Component | [Component, Record<string, any> | undefined]

// default: undefined
type components = Partial<Record<Nodes['type'], ComponentReturn |
  ((node: Node) => ComponentReturn)>>
```

#### shiki

options of shiki for render code block.

```ts
interface shiki {
  // default: { light: catppuccinLatte, dark: catppuccinMocha }
  themes?: Record<string, ThemeRegistration>

  // default: [css,html,javascript,json,markdown,typescript,vue]
  langs?: LanguageRegistration[][]
}
```

### VueMarkdown Css Variables

```css
:root {
  /* basic font-size, and heading's font-size is scaled based on this value. */
  --vue-markdown-font-size: 16px;

  /* font-weight for heading */
  --vue-markdown-heading-font-weight: 600;
}
```