open-index/open-npm huggingface dataset:
npm package: @krysent/kite-core
Description: 框架内核 - 状态管理、请求封装、权限逻辑、工具函数
Latest version: 1.0.1

# @krysent/kite-core

框架内核包，提供核心功能：状态管理、请求封装、权限逻辑。

## 请求封装 (@krysent/kite-core/request)

### 功能特性

- ✅ **请求去重**：自动处理重复请求，避免重复调用
- ✅ **Loading 计数**：智能管理全局 Loading 状态
- ✅ **统一错误处理**：标准化的错误处理机制

### 安装

```bash
pnpm add @krysent/kite-core
```

### 基础使用

```typescript
import { request } from '@krysent/kite-core'

// GET 请求
const users = await request.get('/api/users')

// POST 请求
const result = await request.post('/api/users', {
  name: 'John',
  email: 'john@example.com',
})

// 带配置的请求
const data = await request.get('/api/data', {
  params: { page: 1, size: 10 },
  skipDedupe: true, // 跳过去重
  skipLoading: true, // 跳过 Loading
  skipErrorHandler: true, // 跳过错误处理
})
```

### Loading 管理

```typescript
import { loadingManager } from '@krysent/kite-core'

// 监听全局 Loading 状态
const unsubscribe = loadingManager.onChange(isLoading => {
  console.log('Loading:', isLoading)
  // 更新 UI 状态
})

// 取消监听
unsubscribe()

// 获取当前 Loading 状态
const isLoading = loadingManager.isLoading()
```

### 错误处理

```typescript
import { request, BusinessError, ErrorCode } from '@krysent/kite-core'

try {
  const data = await request.get('/api/data')
} catch (error) {
  if (error instanceof BusinessError) {
    console.error('业务错误:', error.message)
    console.error('错误码:', error.code)
    console.error('错误类型:', error.errorCode)
  }
}

// 自定义错误处理
await request.post('/api/data', payload, {
  customErrorHandler: error => {
    // 自定义错误处理逻辑
    console.error('Custom error:', error)
  },
})
```

### 请求去重

默认情况下，相同的请求（method + url + params + data）会被自动去重：

```typescript
// 第一个请求正常发送
const promise1 = request.get('/api/users')

// 第二个相同请求会被取消
const promise2 = request.get('/api/users') // 会被取消

// 跳过去重
const promise3 = request.get('/api/users', {
  skipDedupe: true, // 不会被去重
})
```

### 配置选项

| 选项                 | 类型       | 默认值  | 说明                  |
| -------------------- | ---------- | ------- | --------------------- |
| `skipDedupe`         | `boolean`  | `false` | 是否跳过请求去重      |
| `skipLoading`        | `boolean`  | `false` | 是否跳过 Loading 计数 |
| `skipErrorHandler`   | `boolean`  | `false` | 是否跳过错误处理      |
| `customErrorHandler` | `function` | -       | 自定义错误处理函数    |

### 响应数据格式

请求封装期望后端返回以下格式：

```typescript
interface ResponseData<T> {
  code: number // 状态码，0 或 200 表示成功
  message: string // 错误消息
  data: T // 数据
  success?: boolean // 是否成功（可选）
}
```

### 创建自定义请求实例

```typescript
import { createRequest } from '@krysent/kite-core'

const customRequest = createRequest({
  baseURL: 'https://api.example.com',
  timeout: 5000,
  headers: {
    'X-Custom-Header': 'value',
  },
})

// 使用自定义实例
const data = await customRequest.get('/api/data')
```
npm package: @krysent/kite-ui
Description: 基于 Antd 的二次封装组件库
Latest version: 1.0.1

# @krysent/kite-ui - 三层物料体系组件库

基于 Ant Design 的二次封装组件库，采用三层物料体系架构设计。

## 快速开始

```bash
# 安装依赖
pnpm install

# 构建
pnpm build

# 类型检查
pnpm type-check

# 测试
pnpm test
```

## 目录结构

```
packages/ui/
├── src/
│   ├── atoms/          # 原子层 - Base UI 包装器
│   ├── patterns/       # 模式层 - 业务组件
│   ├── templates/      # 模板层 - 复杂模块
│   ├── hooks/          # Headless Hooks
│   ├── types/          # 类型定义
│   └── test/           # 测试配置
├── ARCHITECTURE.md      # 架构文档
└── README.md           # 本文件
```

## 使用示例

### 原子层组件

```tsx
import { ZButton, Input, CurrencyInput, ZStatusTag } from '@krysent/kite-ui';

<ZButton type="primary">提交</ZButton>
<Input placeholder="请输入" />
<CurrencyInput value={1000} currency="¥" />
<ZStatusTag status="success" />
```

### 模式层组件

```tsx
import { ZAddressSelector, ZUserSelect, ZSkuUploader } from '@krysent/kite-ui';

<ZAddressSelector onChange={(value) => console.log(value)} />
<ZUserSelect apiUrl="/api/users/search" />
<ZSkuUploader uploadUrl="/api/upload/sku" />
```

### 模板层组件

```tsx
import { Table, SchemaForm } from '@krysent/kite-ui';

// Table - 高级表格
<Table
  columns={[
    { title: 'ID', dataIndex: 'id' },
    { title: '名称', dataIndex: 'name' },
  ]}
  requestOptions={{
    request: async (params) => {
      const res = await fetchUsers(params);
      return { data: res.list, total: res.total };
    },
  }}
/>

// SchemaForm - Schema 驱动表单
<SchemaForm
  schema={{
    fields: [
      { name: 'username', label: '用户名', type: 'input', required: true },
      {
        name: 'email',
        label: '邮箱',
        type: 'input',
        disabled: (values) => values.role === 'guest',
        dependencies: ['role'],
      },
    ],
  }}
  onFinish={(values) => console.log(values)}
/>
```

### Headless Hooks

```tsx
import { useTableRequest, useFormReactivity } from '@krysent/kite-ui'

// 自定义表格逻辑
const { dataSource, loading, pagination, refresh } = useTableRequest({
  request: fetchData,
})

// 表单字段联动
const { processedFields, handleValuesChange } = useFormReactivity({
  fields: schema.fields,
  form,
})
```

## 详细文档

- [架构文档](./ARCHITECTURE.md) - 三层物料体系详细说明
- [组件 API](./docs/components.md) - 组件 API 文档（待完善）

## 测试

```bash
# 运行测试
pnpm test

# 测试覆盖率
pnpm test:coverage

# UI 模式
pnpm test:ui
```

## License

MIT
npm package: @krystal-hosting/shard-tailwind
Description: This package provides Tailwind to use with Shard UI applications.
Author: Krystal
Latest version: 0.1.6

# Tailwind for Shard UI Apps

This package provides Tailwind to use with Shard UI applications.

* Adds Krystal colour pallette.
* Automatically includes classes from the `shard` gem included in the application's Gemfile.