open-index/open-npm huggingface dataset:
npm package: @kaishens.cn/actixjs-android-arm-eabi
Description: This is the **armv7-linux-androideabi** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-android-arm-eabi`

This is the **armv7-linux-androideabi** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-android-arm64
Description: This is the **aarch64-linux-android** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-android-arm64`

This is the **aarch64-linux-android** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-darwin-arm64
Description: This is the **aarch64-apple-darwin** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-darwin-arm64`

This is the **aarch64-apple-darwin** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-darwin-x64
Description: This is the **x86_64-apple-darwin** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-darwin-x64`

This is the **x86_64-apple-darwin** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-freebsd-x64
Description: This is the **x86_64-unknown-freebsd** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-freebsd-x64`

This is the **x86_64-unknown-freebsd** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-linux-arm-gnueabihf
Description: This is the **armv7-unknown-linux-gnueabihf** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-linux-arm-gnueabihf`

This is the **armv7-unknown-linux-gnueabihf** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-linux-arm64-gnu
Description: This is the **aarch64-unknown-linux-gnu** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-linux-arm64-gnu`

This is the **aarch64-unknown-linux-gnu** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-linux-arm64-musl
Description: This is the **aarch64-unknown-linux-musl** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-linux-arm64-musl`

This is the **aarch64-unknown-linux-musl** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-linux-x64-gnu
Description: This is the **x86_64-unknown-linux-gnu** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-linux-x64-gnu`

This is the **x86_64-unknown-linux-gnu** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-linux-x64-musl
Description: This is the **x86_64-unknown-linux-musl** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-linux-x64-musl`

This is the **x86_64-unknown-linux-musl** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-win32-arm64-msvc
Description: This is the **aarch64-pc-windows-msvc** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-win32-arm64-msvc`

This is the **aarch64-pc-windows-msvc** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-win32-ia32-msvc
Description: This is the **i686-pc-windows-msvc** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-win32-ia32-msvc`

This is the **i686-pc-windows-msvc** binary for `@kaishens.cn/actixjs`
npm package: @kaishens.cn/actixjs-win32-x64-msvc
Description: This is the **x86_64-pc-windows-msvc** binary for `@kaishens.cn/actixjs`
Latest version: 0.0.4

# `@kaishens.cn/actixjs-win32-x64-msvc`

This is the **x86_64-pc-windows-msvc** binary for `@kaishens.cn/actixjs`
npm package: @kaishi/beidge
Description: 通用工具函数集合，提供常用的辅助函数。
Latest version: 1.0.0

# @kaishi/utils

通用工具函数集合，提供常用的辅助函数。

## 安装

```bash
pnpm add @kaishi/utils
```

## 使用

```typescript
import { sleep, formatDate, deepClone } from '@kaishi/utils';

// 使用延迟函数
async function example() {
  console.log('开始');
  await sleep(1000); // 延迟1秒
  console.log('1秒后');
}

// 格式化日期
const now = new Date();
const formattedDate = formatDate(now, 'YYYY-MM-DD HH:mm:ss');
console.log(formattedDate); // 例如: 2023-05-20 14:30:45

// 深拷贝对象
const obj = { a: 1, b: { c: 2 } };
const clonedObj = deepClone(obj);
clonedObj.b.c = 3;
console.log(obj.b.c); // 仍然是 2
```

## API

### `sleep(ms: number): Promise<void>`

创建一个延迟指定毫秒数的Promise。

### `formatDate(date: Date, format?: string): string`

将Date对象格式化为指定格式的字符串。默认格式为'YYYY-MM-DD'。

### `deepClone<T>(obj: T): T`

深拷贝一个对象，支持嵌套对象、数组和日期。

### `debounce<T>(fn: T, delay: number): (...args: Parameters<T>) => void`

创建一个防抖函数，延迟调用直到停止触发指定时间后。

### `throttle<T>(fn: T, limit: number): (...args: Parameters<T>) => void`

创建一个节流函数，限制函数在指定时间内只能调用一次。

### `randomInt(min: number, max: number): number`

生成指定范围内的随机整数。

### `isEmptyObject(obj: Record<string, any>): boolean`

检查对象是否为空。

### `objectToQueryString(params: Record<string, any>): string`

将对象转换为URL查询字符串。

### `parseQueryString(queryString: string): Record<string, string>`

将URL查询字符串解析为对象。

## 许可证

MIT
npm package: @kaishi/logger
Description: ## 核心概念
Latest version: 0.1.2

# 埋点跟踪规范

## 核心概念

### 事件类型
- **点击事件**：用户主动交互行为
- **曝光事件**：内容可视状态
- **页面事件**：生命周期相关

### 属性规范
| 属性名称 | 类型 | 必填 | 示例值 |
|----------|------|------|--------|
| ks-dot-event | string | 是 | home_banner_click |
| ks-dot-pv | string | 是 | product_list_pv |
| ks-dot-key | string/动态值 | 否 | 'sort_type' |

## 模板使用规范
```html
<!-- ks-dot-click 元素点击事件埋点 -->
<div ks-dot-click="事件名称" ks-dot-key="上报属性" ks-dot-username="用户名" :ks-dot-extra="'动态属性'">

<!-- ks-dot-pv 元素曝光埋点 -->
<div 
  ks-dot-pv="曝光标识"
  ks-dot-username="用户名"
  :ks-dot-key="动态参数">


<!-- 元素曝光埋点-单次曝光 -->
<div 
  ks-dot-pv="曝光标识"
  ks-dot-pv-single
  ks-dot-username="用户名"
  :ks-dot-key="动态参数">
ks-dot-pv-single 属性指定元素单次曝光、后续不进行曝光
```

## 脚本方法指南

### 基础用法
```typescript
import { logDot } from '@/dotLog'
// 带动态参数的点击事件
const handleSearch = (keyword: string) => {
  logDot.track('search_btn_click', {
    search_key: keyword,
    result_count: 18
  });
}
// 自定义事件跟踪
logDot.track('事件标识', {
  参数1: '值',
  参数2: 123
});

// 注册页面离开的上报属性（）
  logDot.pageleaveProperties({
    properties: {},
    eventName: 'exit_column_detail',
  });
```

## 高级实践

### 动态参数处理
```vue
<script setup>
const pagination = ref({
  page: 1,
  page_size: 20
});
</script>

<template>
  <div 
    ks-dot-pv="product_list_pv"
    :ks-dot-key="`page_${pagination.page}`">
</template>
```

### 代码审查要点
1. 检查事件命名是否符合 `模块_位置_动作` 格式
2. 验证动态参数类型安全
3. 曝光事件需确认单次曝光标识
4. 检查重复埋点逻辑
1. 事件标识使用`模块_位置_动作`格式
2. 动态参数通过ref绑定
3. 复杂事件处理建议封装为独立方法
4. 避免在模板中写复杂逻辑
npm package: @kaishi/shared
Description: 通用工具函数集合，提供常用的辅助函数。
Latest version: 0.1.2

# @kaishi/utils

通用工具函数集合，提供常用的辅助函数。

## 安装

```bash
pnpm add @kaishi/utils
```

## 使用

```typescript
import { sleep, formatDate, deepClone } from '@kaishi/utils';

// 使用延迟函数
async function example() {
  console.log('开始');
  await sleep(1000); // 延迟1秒
  console.log('1秒后');
}

// 格式化日期
const now = new Date();
const formattedDate = formatDate(now, 'YYYY-MM-DD HH:mm:ss');
console.log(formattedDate); // 例如: 2023-05-20 14:30:45

// 深拷贝对象
const obj = { a: 1, b: { c: 2 } };
const clonedObj = deepClone(obj);
clonedObj.b.c = 3;
console.log(obj.b.c); // 仍然是 2
```

## API

### `sleep(ms: number): Promise<void>`

创建一个延迟指定毫秒数的Promise。

### `formatDate(date: Date, format?: string): string`

将Date对象格式化为指定格式的字符串。默认格式为'YYYY-MM-DD'。

### `deepClone<T>(obj: T): T`

深拷贝一个对象，支持嵌套对象、数组和日期。

### `debounce<T>(fn: T, delay: number): (...args: Parameters<T>) => void`

创建一个防抖函数，延迟调用直到停止触发指定时间后。

### `throttle<T>(fn: T, limit: number): (...args: Parameters<T>) => void`

创建一个节流函数，限制函数在指定时间内只能调用一次。

### `randomInt(min: number, max: number): number`

生成指定范围内的随机整数。

### `isEmptyObject(obj: Record<string, any>): boolean`

检查对象是否为空。

### `objectToQueryString(params: Record<string, any>): string`

将对象转换为URL查询字符串。

### `parseQueryString(queryString: string): Record<string, string>`

将URL查询字符串解析为对象。

## 许可证

MIT
npm package: @kaishuu0123/markdown-it-fence
Description: fence customize plugin for markdown-it
Author: Koki Oyatsu
Latest version: 1.0.1

# markdown-it-fence

[![NPM version](https://img.shields.io/npm/v/markdown-it-fence.svg?style=flat)](https://npmjs.com/package/markdown-it-fence) [![NPM downloads](https://img.shields.io/npm/dm/markdown-it-fence.svg?style=flat)](https://npmjs.com/package/markdown-it-fence) [![Build Status](https://img.shields.io/circleci/project/geekplux/markdown-it-fence/master.svg?style=flat)](https://circleci.com/gh/geekplux/markdown-it-fence) [![codecov](https://codecov.io/gh/geekplux/markdown-it-fence/branch/master/graph/badge.svg)](https://codecov.io/gh/geekplux/markdown-it-fence)
 [![donate](https://img.shields.io/badge/$-donate-ff69b4.svg?maxAge=2592000&style=flat)](http://donate.geekplux.com)

> fence customize plugin for markdown-it

## Install

```bash
yarn add markdown-it-fence --save
npm install markdown-it-fence --save
```

## Usage

```js
const markdownitfence = require('markdown-it-fence')

function yourPlugin (md, options) {
  return markdownitfence(md, 'yourPluginName', {
    marker: yourMarker,   // default is '`'
    render: yourRender,
    validate: yourValidate
  })
}

const md = require('markdown-it')();
md.use(yourPlugin).render(`content you want to parse`)

```

### Option params

##### marker

Type: `string`<br>
Default: `

Marker of fence block.

##### render

Type: `function`<br>
Default: [defaultRender](./src/index.js)

Render function.

##### validate

Type: `function`<br>
Default: [defaultValidate](./src/index.js)

Validate function.

## Contributing

1. Fork it!
2. Create your feature branch: `git checkout -b my-new-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. Submit a pull request :D


## Author

**markdown-it-fence** © [geekplux](https://github.com/geekplux), Released under the [MIT](./LICENSE) License.<br>
Authored and maintained by geekplux with help from contributors ([list](https://github.com/geekplux/markdown-it-fence/contributors)).

> [github.com/geekplux](https://github.com/geekplux) · GitHub [@geekplux](https://github.com/geekplux) · Twitter [@geekplux](https://twitter.com/geekplux)
npm package: @kaisukez/use-key-down-once
Description: ``` npm install @kaisukez/use-key-down-once ```
Author: Nattapon Chantasiriworawat
Latest version: 2.0.2

# Install
```
npm install @kaisukez/use-key-down-once
```

# How to use

```js
import React, { useState } from 'react'
import useKeyDownOnce from '@kaisukez/use-key-down-once'

function MyComponent() {
    const [username, setUsername] = useState('')
    const [password, setPassword] = useState('')
    
    const submit = () => {
        console.log('This will be trigged once when pressing enter, no matter how long you press.')
        // api.login(username, password)
    }
    
    const { onKeyDown, onKeyUp } = useKeyDownOnce(submit, 'Enter')
    
    return (
        <div>
            <input
                value={username}
                onChange={event => setUsername(event.target.value)}
            />
            <input
                type='password'
                value={password}
                onChange={event => setPassword(event.target.value)}
                onKeyDown={onKeyDown}
                onKeyUp={onKeyUp}
            />
            <button onClick={submit}>
                Submit
            </button>
        </div>
    )
}

export default MyComponent
```

With this way you don't have to use mouse to click submit button, instead you just press Enter to trigger submit function when you finished typing password.

But normally if you press it too long, it will trigger submit function multiple times. So this is when __useKeyDownOnce__ comes into play.

# Why this library
I just start web developer career and I find myself wrote this function a lot. So I decided to make it as a library. Maybe there's a library that already solve this problem but I still prefer my minimalistic version of my code. On top of that I just want to try to publish a library to npm registry to get some new feelings about coding.

In the future, I may use other library (if i find it interesting enough) instead of maintaining my own version of library.
npm package: @kait/use-media
Description: Media queries. Powered by React hooks.
Author: Resi Respati
Latest version: 0.2.0

# `@kait/use-media`

> Media queries. Powered by React hooks.

## Install

```bash
# yarn
$ yarn add @kait/use-media
# npm
$ npm i @kait/use-media
```

## Usage

```tsx
import useMedia from '@kait/use-media'

function Drawer() {
  const mobile = useMedia('(max-width: 640px)')

  return <>{mobile ? <MobileDrawer /> : <DesktopDrawer />}</>
}
```
npm package: @kait/use-theme
Description: Theme. Powered by React hooks.
Author: Resi Respati
Latest version: 0.2.0

# `@kait/use-theme`

> Theme. Powered by React hooks.

## Install

```bash
# yarn
$ yarn add @kait/use-theme
# npm
$ npm i @kait/use-theme
```

## Usage

```tsx
import React, { useState } from 'react'
import { ThemeProvider } from 'styled-components'
import useTheme, { ThemeAttributes } from '@kait/use-theme'

const ThemeExample: React.SFC<RouteComponentProps> = () => {
  const [isDarkTheme, setIsDarkTheme] = useState(false)
  const theme = useTheme(isDarkTheme ? darkTheme : lightTheme)

  return (
    <ThemeProvider theme={theme}>
      <Page>
        <PageTitle>Media Queries</PageTitle>
        <ThemeDemo>{isDarkTheme ? 'dark theme' : 'light theme'}</ThemeDemo>
        <button onClick={() => setIsDarkTheme(!isDarkTheme)}>
          toggle theme
        </button>
      </Page>
    </ThemeProvider>
  )
}
```
npm package: @kait/use-vertical-scroll
Description: Scroll position. Powered by React hooks.
Author: Resi Respati
Latest version: 0.2.0

# `@kait/use-vertical-scroll`

> Vertical scroll state. Powered by React hooks.

## Install

```bash
# yarn
$ yarn add @kait/use-vertical-scroll
# npm
$ npm i @kait/use-vertical-scroll
```

## Usage

```tsx
import classnames from 'classnames'
import useMedia from '@kait/use-vertical-scroll'

function Navigation() {
  // with topThreshold and bottomThreshold
  const shallowThreshold = useVerticalScroll(0, 299)
  // without bottomThreshold. state will remain true after passing topThreshold.
  const deepThreshold = useVerticalScroll(300)

  return (
    <nav
      className={classnames(
        'navigation',
        shallowThreshold && 'is-shallow',
        deepThreshold && 'is-deep'
      )}
    >
      Navigation
    </nav>
  )
}
```
npm package: @kaitaku/kaitaku-js
Description: Kaitaku JavaScript API client library.
Author: Takuto Suzuki
Latest version: 0.1.4

# Kaitaku JS

Kaitaku JavaScript API client library. 

[![CircleCI](https://circleci.com/gh/kaitakuhq/kaitaku-js/tree/main.svg?style=svg&circle-token=7e43344374c29df6ffacbd8debc1dd3f49c10c90)](https://circleci.com/gh/kaitakuhq/kaitaku-js/tree/main)

[![codecov](https://codecov.io/gh/kaitakuhq/kaitaku-js/branch/main/graph/badge.svg?token=3KHP004XAS)](https://codecov.io/gh/kaitakuhq/kaitaku-js)

# Install

```
npm install @kaitaku/kaitaku-js

# or

yarn add @kaitaku/kaitaku-js
```
npm package: @kaitify/core
Description: 基于原生JS的富文本编辑器核心库
Author: so-better
Latest version: 0.0.3-beta.2

##### 基于原生 JS 的富文本编辑器核心库

> [@kaitify/core 官方文档](https://www.so-better.cn/docs/kaitify-core/)