open-index/open-npm huggingface dataset:
npm package: @griches/apple-calendar-mcp
Description: MCP server for interacting with Apple Calendar on macOS
Latest version: 1.0.0

# @griches/apple-calendar-mcp

An [MCP](https://modelcontextprotocol.io) server that gives AI assistants access to Apple Calendar on macOS via AppleScript.

## Quick Start

```bash
npx @griches/apple-calendar-mcp
```

## Tools

| Tool | Description |
|------|-------------|
| `list_calendars` | List all calendars |
| `list_all_events` | List events across all calendars within a date range |
| `list_events` | List events in a specific calendar within a date range |
| `get_event` | Get full details of an event by summary/title |
| `create_event` | Create a new event with date, time, location, and description |
| `update_event` | Update an existing event's details |
| `delete_event` | Delete an event by summary/title |
| `search_events` | Search events by summary/title across calendars |

## Configuration

### Claude Code

```bash
claude mcp add apple-calendar -- npx @griches/apple-calendar-mcp
```

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "apple-calendar": {
      "command": "npx",
      "args": ["@griches/apple-calendar-mcp"]
    }
  }
}
```

## Requirements

- **macOS** (uses AppleScript)
- **Node.js** 18+

## License

MIT — see the [main repository](https://github.com/griches/apple-mcp) for full details.
npm package: @griches/apple-contacts-mcp
Description: MCP server for interacting with Apple Contacts on macOS
Latest version: 1.0.0

# @griches/apple-contacts-mcp

An [MCP](https://modelcontextprotocol.io) server that gives AI assistants access to Apple Contacts on macOS via AppleScript.

## Quick Start

```bash
npx @griches/apple-contacts-mcp
```

## Tools

| Tool | Description |
|------|-------------|
| `list_groups` | List all groups in Apple Contacts |
| `list_contacts` | List all contacts, optionally filtered by group |
| `get_contact` | Get full details of a contact (emails, phones, addresses, etc.) |
| `search_contacts` | Search contacts by name |
| `create_contact` | Create a new contact with optional email, phone, organization |
| `update_contact` | Update an existing contact's details |
| `delete_contact` | Delete a contact by name |
| `create_group` | Create a new group |
| `delete_group` | Delete a contact group |
| `add_contact_to_group` | Add a contact to a group |
| `remove_contact_from_group` | Remove a contact from a group |

## Configuration

### Claude Code

```bash
claude mcp add apple-contacts -- npx @griches/apple-contacts-mcp
```

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "apple-contacts": {
      "command": "npx",
      "args": ["@griches/apple-contacts-mcp"]
    }
  }
}
```

## Requirements

- **macOS** (uses AppleScript)
- **Node.js** 18+

## License

MIT — see the [main repository](https://github.com/griches/apple-mcp) for full details.
npm package: @grid-form/designer
Description: 基于 naive-ui 组件库的表单设计器
Author: 0604hx
Latest version: 0.2.1

# GRID-FORM-DESIGNER / 表单设计器
> 基于[Naive UI](https://www.naiveui.com)实现的[栅栏表单](https://github.com/0604hx/grid-form)可视化设计器

文档请查阅：[grid-form in Github](https://github.com/0604hx/grid-form)
npm package: @grid-form/render-naive
Description: 基于 naive-ui 的渲染器
Author: 0604hx
Latest version: 0.2.1

# GRID-FORM-RENDER-NAIVE
> 基于[Naive UI](https://www.naiveui.com)实现的[栅栏表单](https://github.com/0604hx/grid-form)渲染器

文档请查阅：[grid-form in Github](https://github.com/0604hx/grid-form)
npm package: @grid-form/render-vant
Description: 基于 vant4 的渲染器
Author: 0604hx
Latest version: 0.2.1

# GRID-FORM-RENDER-VANT
> 基于[Vant4](https://vant-ui.github.io)实现的[栅栏表单](https://github.com/0604hx/grid-form)渲染器

文档请查阅：[grid-form in Github](https://github.com/0604hx/grid-form)


## 更新日志

### v0.0.7

- [x] 支持下拉框多选 [多选截图](docs/多选.png)
- [x] `vant` 升级到 4.6.1
npm package: @grid-table/core
Description: grid-table core
Author: allroad88888888@vip.qq.com
Latest version: 0.6.67

# @grid-table/core

Virtual scrolling engine powered by CSS Grid.

## Install

```bash
npm install @grid-table/core
```

## Components

### VGridTable

2D virtual scrolling grid with row and column virtualization.

```tsx
import { VGridTable } from '@grid-table/core'

<VGridTable
  rowCount={1000}
  columnCount={50}
  rowCalcSize={(index) => 36}
  columnCalcSize={(index) => 120}
  theadRowCount={1}
  renderTheadCell={(rowIndex, colIndex) => <div>Header {colIndex}</div>}
  renderTbodyCell={(rowIndex, colIndex) => <div>Cell {rowIndex}-{colIndex}</div>}
  overRowCount={10}
  overColumnCount={5}
/>
```

#### Props

| Prop | Type | Description |
|------|------|-------------|
| rowCount | `number` | Total row count |
| columnCount | `number` | Total column count |
| rowCalcSize | `(index: number) => number` | Row height calculator |
| columnCalcSize | `(index: number) => number` | Column width calculator |
| theadRowCount | `number` | Number of header rows |
| renderTheadCell | `(rowIndex, colIndex) => ReactNode` | Header cell renderer |
| renderTbodyCell | `(rowIndex, colIndex) => ReactNode` | Body cell renderer |
| overRowCount | `number` | Row overscan count (default: 10) |
| overColumnCount | `number` | Column overscan count (default: 5) |

### VGridList

1D virtual scrolling list.

```tsx
import { VGridList } from '@grid-table/core'

<VGridList
  baseSize={36}
  itemCount={10000}
  calcItemSize={(index) => 36}
  overscanCount={10}
>
  {ItemComponent}
</VGridList>
```

#### Props

| Prop | Type | Description |
|------|------|-------------|
| baseSize | `number` | Base item height |
| itemCount | `number` | Total item count |
| calcItemSize | `(index: number) => number` | Item size calculator |
| overscanCount | `number` | Overscan count |
| stayIndexList | `number[]` | Always-visible item indices |

### useAutoSizer

Hook to detect container size changes.

```tsx
import { useAutoSizer } from '@grid-table/core'

const ref = useRef<HTMLDivElement>(null)
const { width, height } = useAutoSizer(ref)
```

## License

MIT
npm package: @grid-table/paste
Description: Clipboard paste data processing utilities
Author: allroad88888888@vip.qq.com
Latest version: 0.1.4

# @grid-table/paste

剪贴板粘贴数据处理工具库，支持从 Excel 等应用复制数据的解析。

## 安装

```bash
pnpm add @grid-table/paste
```

## 目录结构

```
src/
├── demo/          # Demo 展示相关
│   └── usePasteHandler.ts   # 通用粘贴处理，展示所有数据类型
├── table/         # 表格数据处理
│   ├── formatOutput.ts      # TSV 格式转换
│   └── useTablePaste.ts     # 表格粘贴 hook
└── utils/         # 基础工具函数
    ├── extractTextData.ts   # 文本提取
    ├── extractImages.ts     # 图片提取
    ├── extractClipboardData.ts  # 剪贴板数据提取
    ├── detectFormat.ts      # 格式检测
    ├── extractFiles.ts      # 文件提取
    └── processHtml.ts       # HTML 处理
```

## 使用方法

### 1. 表格数据处理（推荐）

适用于需要从 Excel 复制数据并转为标准格式的场景。

```tsx
import { useTablePaste, useTablePasteTsv } from '@grid-table/paste'

function MyComponent() {
  // 方式1：获取完整结果
  const handlePaste = useTablePaste((result) => {
    console.log(result.tsv)   // "line_0014\t桌面收纳盒\t1\nline_0019\t护手霜\t1"
    console.log(result.data)  // [["line_0014", "桌面收纳盒", "1"], ...]
  })

  // 方式2：只获取 TSV 字符串
  const handlePasteTsv = useTablePasteTsv((tsv) => {
    console.log(tsv)  // "line_0014\t桌面收纳盒\t1\n..."
  })

  return <div onPaste={handlePaste}>粘贴区域</div>
}
```

### 2. Demo 展示（开发调试）

展示所有粘贴数据类型的详细信息，适用于开发调试。

```tsx
import { usePasteHandler, type PasteResult } from '@grid-table/paste'
import { useState } from 'react'

function PasteDemo() {
  const [result, setResult] = useState<PasteResult>({ items: [], images: [] })
  const [types, setTypes] = useState<string[]>([])

  const handlePaste = usePasteHandler(setResult, setTypes)

  return (
    <div onPaste={handlePaste}>
      粘贴内容到这里查看解析结果
    </div>
  )
}
```

### 3. 工具函数（直接使用）

```tsx
import {
  formatToTsv,
  htmlTableToTsv,
  extractAndConvertToTsv,
} from '@grid-table/paste'

// 将二维数组转为 TSV
const tsv = formatToTsv([
  ['line_0014', '桌面收纳盒', '1'],
  ['line_0019', '护手霜', '1'],
])
// 输出: "line_0014\t桌面收纳盒\t1\nline_0019\t护手霜\t1"

// 从 HTML 表格转为 TSV
const tsv2 = htmlTableToTsv('<table><tr><td>A</td><td>B</td></tr></table>')
// 输出: "A\tB"

// 直接从剪贴板事件提取
element.addEventListener('paste', (e) => {
  const tsv = extractAndConvertToTsv(e.clipboardData)
})
```

## API

### Table 模块

| 函数 | 说明 |
|------|------|
| `useTablePaste(onPaste)` | 表格粘贴 hook，返回完整结果 |
| `useTablePasteTsv(onPaste)` | 简化版，直接返回 TSV 字符串 |
| `useTablePasteData(onPaste)` | 简化版，直接返回二维数组 |
| `formatToTsv(data)` | 二维数组转 TSV |
| `htmlTableToTsv(html)` | HTML 表格转 TSV |
| `csvToTsv(csv)` | CSV 转 TSV |
| `convertToTsv(content)` | 智能转换（自动检测格式） |
| `extractAndConvertToTsv(clipboardData)` | 从剪贴板提取并转 TSV |

### Demo 模块

| 函数 | 说明 |
|------|------|
| `usePasteHandler(setResult, setTypes)` | 通用粘贴处理，解析所有数据类型 |

### 支持的数据类型

| 类型 | 说明 |
|------|------|
| `text` | 纯文本 |
| `html` | HTML（支持表格解析、图片替换） |
| `image` | 图片（自动转 base64） |
| `rtf` | RTF 富文本格式 |
| `csv` | CSV 数据 |
| `json` | JSON 数据 |
| `url` | URL 链接 |
| `file` | 其他文件 |
npm package: @grid-table/pivot
Description: grid-table pivot
Author: allroad88888888@vip.qq.com
Latest version: 0.5.68

# @grid-table/pivot

Pivot table component with data aggregation and cross-tabulation, built on `@grid-table/view`.

## Install

```bash
npm install @grid-table/pivot @grid-table/view @einfach/react @einfach/utils
```

## Usage

```tsx
import { Pivot } from '@grid-table/pivot'

const dataConfig = {
  fields: {
    rows: ['region'],
    columns: ['category'],
    values: ['sales'],
  },
  data: [
    { region: 'East', category: 'A', sales: 100 },
    { region: 'East', category: 'B', sales: 200 },
    { region: 'West', category: 'A', sales: 150 },
    { region: 'West', category: 'B', sales: 300 },
  ],
}

function App() {
  return <Pivot dataConfig={dataConfig} style={{ width: '100%', height: 500 }} />
}
```

## Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| dataConfig | `DataConfig` | — | Pivot configuration (required) |
| rowHeight | `number` | `32` | Row height |
| overRowCount | `number` | `22` | Overscan row count |
| style | `CSSProperties` | — | Container styles |
| className | `string` | — | CSS class |
| theme | `object` | — | Theme configuration |

## DataConfig

```tsx
{
  fields: {
    rows: string[]          // Row dimension fields
    columns: string[]       // Column dimension fields
    values: string[]        // Aggregate value fields
    valueInCols?: boolean   // Place values in columns (default: true)
  },
  data: Record<string, any>[]  // Source data
  meta?: Meta[]                // Field metadata (formatters, renderers)
  sortParams?: SortParams
  filterParams?: FilterParam[]
  treeRow?: TreePropsItem      // Row tree expansion config
  treeColumn?: TreePropsItem   // Column tree expansion config
}
```

## License

MIT
npm package: @grid-tree/core
Description: grid-tree tree
Author: allroad88888888@vip.qq.com
Latest version: 0.6.8

# @grid-tree/core

High-performance virtual scrolling tree component.

## Install

```bash
npm install @grid-tree/core @einfach/react @einfach/utils
```

## Usage

```tsx
import GridTree from '@grid-tree/core'

const relation = {
  ROOT: ['node-1', 'node-2'],
  'node-1': ['node-1-1', 'node-1-2'],
  'node-2': ['node-2-1'],
}

function App() {
  return (
    <GridTree
      relation={relation}
      root="ROOT"
      expendLevel={2}
      size={36}
      ContentComponent={({ id }) => <span>{id}</span>}
      style={{ height: 400 }}
    />
  )
}
```

## Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| relation | `Record<string, string[]>` | — | Tree structure (parent → children) |
| root | `string` | `'ROOT'` | Root node ID |
| expendLevel | `number` | `2` | Default expand depth |
| minLengthExpandAll | `number` | `100` | Auto expand all if tree size < this |
| showRoot | `boolean` | `false` | Show root node |
| size | `number` | `36` | Item height (px) |
| levelSize | `number` | `24` | Indentation per level (px) |
| ContentComponent | `ComponentType` | — | Custom item renderer |
| stayIds | `string[]` | — | Always-visible node IDs |
| overscanCount | `number` | — | Overscan count |
| style | `CSSProperties` | — | Container styles |
| className | `string` | — | CSS class |
| tag | `'div' \| 'ul'` | — | Container element |
| itemTag | `'div' \| 'li'` | `'li'` | Item element |
| isTiling | `boolean` | `false` | Force flat layout |
| disabledIds | `string[]` | — | Disabled node IDs |

## Ref Methods

```tsx
const treeRef = useRef<GridTreeRef>(null)

treeRef.current.scrollTo('node-1')    // Scroll to node by ID
treeRef.current.scroll(0, 200)        // Scroll by pixels
```

## Hooks

| Hook | Description |
|------|-------------|
| `useIdByIndex(index)` | Get node ID by visible index |
| `useLevel(id)` | Get node depth level |
| `useIsCollapse(id)` | Check if node is collapsed |
| `useItem(id)` | Get node data |
| `useCollapseAll()` | Collapse all nodes |
| `useExpandAll()` | Expand all nodes |

## License

MIT