# @agilek/cli-loaders 中文文档

规范地址：https://npmcn.com/package/%40agilek/cli-loaders/

版本：1\.1\.0
npm 元数据更新时间：2026-03-21T16:54:20.325Z
中文译文更新时间：2026-11-05T19:09:09.429Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40agilek/cli-loaders
原文对照：https://npmcn.com/package/%40agilek/cli-loaders/?lang=original
项目主页：https://github.com/agilek/cli-loaders#readme
源码仓库：https://github.com/agilek/cli-loaders

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：52 kB，6 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：react \>=18\.0\.0
- 首次发布：2026-03-21T12:40:15.873Z
- 最新版本发布：2026-03-21T16:54:20.214Z
- 近 30 天下载量：43061（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 4 个）

## 中文简介

盲文单码自旋器作为回放装饰组件

## 安装

```sh
npm install @agilek/cli-loaders
```

也可以使用：`pnpm add @agilek/cli-loaders`、`yarn add @agilek/cli-loaders`、`bun add @agilek/cli-loaders`

## README

# 用于反应的 cli- 装载器

> 动画盲文-glyph装入回放自旋器. 19个独特的动画,零依赖性,完全可以访问. **[现场演示](https://cli-loaders-two.vercel.app/)** • 妇女 **[GitHub – (英语)](https://github.com/agilek/cli-loaders)**

![braille](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/braille.svg) ![orbit](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/orbit.svg) ![breathe](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/breathe.svg) ![braillewave](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/braillewave.svg) ![dna](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/dna.svg) ![waverows](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/waverows.svg) ![helix](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/helix.svg) ![fillsweep](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/fillsweep.svg) ![diagswipe](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/diagswipe.svg) ![scanline](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/scanline.svg) ![line](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/line.svg) ![cascade](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/cascade.svg) ![scan](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/scan.svg) ![rain](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/rain.svg) ![pulse](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/pulse.svg) ![snake](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/snake.svg) ![sparkle](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/sparkle.svg) ![columns](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/columns.svg) ![checkerboard](https://npmcn.com/package/%40agilek/cli-loaders/assets/spinners/checkerboard.svg)

`cli-loaders` 给您19个动画盲文-glyph自旋器作为一组可堆肥,可访问的回放组件. 超过React本身的零运行时间依赖性.

## 特征

-   **19个旋转动画** 具有独有的盲文 Unicode 模式
-   **零运行时间依赖关系** ——纯回放,无外部库
-   **完全无障碍** - WCAG 2.1 AA, `prefers-reduced-motion` 支持, 语义 HTML
-   **先输入脚本** 完整的类型定义, `DotShape` 导出用于自定义渲染
-   **可编曲** - 用于任何用途的7个部件+2个钩子
-   **小捆绑** — ~ 15KB gzipped (lib) + 可选 SVG 渲染
-   **形状定制** 以圆形、正方形或方形( SVG 模式) 渲染

## 为什么要装货?

**vs. 反应-平分器 :** 更小的捆绑,类似终端美学的盲文Unicode艺术,全球默认的上下文API,形状定制(circles/squares/diamonds)

**vs. 反应加载 :** 零依赖性,全面无障碍测试,19+独有动画,SVG渲染模式

**对自定义 CSS :** 没有要维护的@ keyframes, 出框的减动支持, 语义 HTML, 默认可访问

## 安装

```sh
npm install @agilek/cli-loaders
# or
pnpm add @agilek/cli-loaders
# or
yarn add @agilek/cli-loaders
```

**需要18号反应.**

## 快开始

```tsx
import { Spinner } from '@agilek/cli-loaders';

// Minimal — defaults to the "braille" spinner
<Spinner />

// Named + coloured
<Spinner name="helix" color="#7c3aed" size="1.5rem" />

// With custom dot shape (renders as SVG instead of braille text)
<Spinner name="scan" color="#00ff99" shape="square" size="2rem" />
```

## 构成部分

### `<Spinner>`

基础动画"格来克". 显示为内线 `<span>` 所以它自然会掉入任何一行文字中.

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `name` | `SpinnerName` | `"braille"` | 要使用的旋转动画 |
| `color` | `string` | `currentColor` | CSS 颜色值 |
| `size` | `string | number` | `undefined` | Glyph 字体大小, 例如 . `"1.5rem"` 或者说 `24` |
| `speed` | `number` | `1` | 回放乘数—— `2` =两倍的速度 |
| `paused` | `boolean` | `false` | 停止动画 |
| `ignoreReducedMotion` | `boolean` | `false` | 覆盖 `prefers-reduced-motion` 总是动静 |
| `shape` | `"circle" | "square" | "diamond"` | `undefined` | 作为 SVG 形状而非盲文的发光点 |
| `label` | `string` | `"Loading"` | 屏幕阅读器宣布的可访问标签 |
| `className` | `string` | —— 说 | 适用于外部 `<span>` |
| `style` | `CSSProperties` | —— 说 | 外部内置样式 `<span>` |
| `ref` | `Ref<HTMLSpanElement>` | —— 说 | 传至外道 `<span>` |

任何额外的HTML跨度属性都会被转发.

* * *

### `<SpinnerInline>`

Spinner + 灵活行中的孩子——方便内置状态信息.

```tsx
<SpinnerInline name="braille" color="#00ff99">
  Fetching data…
</SpinnerInline>
```

接受全部 `Spinner` 道具外加:

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `gap` | `string | number` | `"0.4em"` | 旋转者与儿童之间的差距 |
| `children` | `ReactNode` | —— 说 | 旋转后的内容 |

* * *

### `<SpinnerText>`

装饰有自旋器的文本字符串——支持书端模式,每端镜像一个.

```tsx
<SpinnerText text="Deploying" color="#f59e0b" bookend />
// ⠿ Deploying ⠿
```

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `text` | `string` | 所需经费 | 装饰文字 |
| `bookend` | `boolean` | `false` | 在两边放置旋转器 |
| `gap` | `string | number` | `"0.4em"` | 旋转器和文本之间的间隔 |

加起来 `Spinner` 道具来.

* * *

### `<SpinnerBadge>`

带有自旋器的有色药丸徽章——适合活状态指标.

```tsx
<SpinnerBadge label="Live"     color="#ef4444" />
<SpinnerBadge label="Syncing"  color="#38bdf8" />
<SpinnerBadge label="Building" color="#f59e0b" />
```

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `label` | `string` | 所需经费 | 徽章文本( 也用作 a11y 标签) |
| `paddingY` | `string` | `"0.4em"` | 垂直粘贴 |
| `paddingX` | `string` | `"0.8em"` | 水平基底粘贴 |
| `balanceRatio` | `number` | `0.3` | 光学平衡额外的右加分 |
| `borderRadius` | `string | number` | `"999px"` | 边界半径 |
| `gap` | `string | number` | `"0.35em"` | 格言和标签之间的间隔 |

加起来 `Spinner` 道具来.

* * *

### `<SpinnerTrail>`

使最近帧的滑动窗口减少不透明度——产生幽灵/运动-blur跟踪效应.

```tsx
<SpinnerTrail name="helix" color="#7c3aed" size="2rem" trailLength={6} />
```

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `trailLength` | `number` | `4` | 鬼框数(包括当前) |
| `minOpacity` | `number` | `0.1` | 最古老的鬼框不透明 |
| `reverse` | `boolean` | `false` | 翻转不透明梯度( 右下右下右下右下右下) |

加起来 `Spinner` 道具来.

* * *

### `<SpinnerButton>`

A 类 `<button>` 装入状态 禁用自身并显示旋转器 `loading` 这是真的。 完全转发参考.

```tsx
<SpinnerButton
  loading={isSaving}
  onClick={handleSave}
  spinnerProps={{ name: 'braille', color: '#00ff99' }}
>
  Save changes
</SpinnerButton>
```

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `loading` | `boolean` | `false` | 显示旋转并禁用按钮 |
| `spinnerPosition` | `"left" | "right"` | `"left"` | 旋转器出现在哪一边 |
| `spinnerGap` | `string | number` | `"0.45em"` | 旋转器和按钮标签之间的间隔 |
| `spinnerProps` | `Omit<BaseSpinnerProps, "size">` | —— 说 | 转发给内部的道具 `<Spinner>` |

所有标准 `<button>` 属性被转发.

* * *

### `<SpinnerOverlay>`

环绕任何内容并让一个居中旋转器在 `active`使用本地 `inert` 属性以阻断键盘/指针对下面内容的访问.

```tsx
<SpinnerOverlay
  active={isLoading}
  name="orbit"
  color="#7c3aed"
  size="2.5rem"
  backdrop="rgba(0,0,0,0.4)"
>
  <YourContent />
</SpinnerOverlay>
```

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `active` | `boolean` | `true` | 显示封面 |
| `backdrop` | `string` | `"rgba(0,0,0,0.35)"` | 背景介绍 |
| `size` | `string | number` | `"2rem"` | 旋转格子大小 |
| `containerStyle` | `CSSProperties` | —— 说 | 适用于外包装的样式 `<div>` |
| `containerClassName` | `string` | —— 说 | 适用于外包装的类别 `<div>` |
| `children` | `ReactNode` | —— 说 | 覆盖的内容 |

加起来 `Spinner` 道具来.

* * *

### `<SpinnerProvider>`

为每集设定全局默认值 `Spinner`\- 树下的家庭成分 单个道具覆盖上下文值.

```tsx
<SpinnerProvider
  defaultName="orbit"
  defaultColor="#7c3aed"
  defaultSpeed={1.2}
  respectReducedMotion={true}
>
  <App />
</SpinnerProvider>

// Inside: no props needed — picks up context defaults
<Spinner />
<SpinnerBadge label="Live" />
```

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `defaultName` | `SpinnerName` | `"braille"` | 默认自旋器名称 |
| `defaultColor` | `string` | `undefined` | 默认颜色 |
| `defaultSize` | `string | number` | `undefined` | 默认格子大小 |
| `defaultSpeed` | `number` | `1` | 默认速度乘数 |
| `defaultShape` | `"circle" | "square" | "diamond"` | `undefined` | 默认点形状 |
| `respectReducedMotion` | `boolean` | `true` | 当操作系统出现时暂停动画 `prefers-reduced-motion: reduce` |

* * *

## `useSpinner` 钩子

为完全自定义渲染而驱动任何带有生框字符串的元素 .

```tsx
import { useSpinner } from 'cli-loaders';

function MyComponent() {
  const frame = useSpinner('helix', 1.5);

  return (
    <h1 style={{ fontFamily: 'monospace', color: '#00ff99' }}>
      {frame}
    </h1>
  );
}
```

```ts
useSpinner(
  name: SpinnerName,
  speed?: number,           // default 1
  paused?: boolean,         // default false
  ignoreReducedMotion?: boolean  // default false
): string
```

### `useSpinnerFrames`

返回最后一个滑动窗口 `length` 框架——后面的原始 `SpinnerTrail`。 。 。 .

```ts
useSpinnerFrames(
  name: SpinnerName,
  length?: number,          // default 3
  speed?: number,
  paused?: boolean,
  ignoreReducedMotion?: boolean
): string[]
```

* * *

## 可用的旋转器

所有19个名字都作为 `SpinnerName` 工会类型.

```ts
import { spinnerNames } from 'cli-loaders';
// ['braille', 'braillewave', 'dna', ...]
```

* * *

## 无障碍

-   动画格言被包裹在 `aria-hidden="true"` ——屏幕阅读器是看不见的.
-   一个隐藏的视觉 `<span role="status" aria-live="polite">` 公布 `label` 道具( 默认 ): `"Loading"`) (中文(简体) ).
-   `SpinnerButton` 套装 `aria-busy` 财务报告和审定财务报表 `aria-disabled` 自动打开按钮元素.
-   `SpinnerOverlay` 套装 `aria-busy` 在容器上使用原生的 `inert` 属性来防止键盘/AT访问模糊内容.
-   默认情况下,所有动画都尊重 `prefers-reduced-motion: reduce`覆盖每个组件 `ignoreReducedMotion` 或全球通过 `<SpinnerProvider respectReducedMotion={false}>`。 。 。 .

* * *

* * *

## 财务问题

**我可以用这个和Next.js一起吗?** 对 在 App 路由器中同时作为客户端和服务器组件工作.

**我如何定制旋转动画?** 使用 `useSpinner` 钩来驱动任何自定义渲染 。 见 [使用 Spinner 钩头](https://npmcn.com/package/%40agilek/cli-loaders/#readme-usespinner-hook) 用于实例.

**这对 TypeScript 有用吗 ?** 完全类型支持. 所有组件道具和 `DotShape` 类型为类型安全导出.

**我如何改变形状(圆圈、方块、钻石)?** 使用 `shape` 道具 : `<Spinner shape="square" />`。见 [旋转道具](https://npmcn.com/package/%40agilek/cli-loaders/#readme-spinner) 详细情况.

**这种支持是否减少了运动偏好?** 是的,默认的。 动画暂停当 `prefers-reduced-motion: reduce` 已经设定。 覆盖 `ignoreReducedMotion={true}`。 。 。 .

**捆绑大小是多少?** ~ 15KB 为核心库提供gzipped. SVG渲染模式增加了~1KB.

* * *

## 常见模式

### 提交装入状态的表格

```tsx
const [loading, setLoading] = useState(false);

async function handleSubmit() {
  setLoading(true);
  try {
    await api.post('/submit', data);
  } finally {
    setLoading(false);
  }
}

return (
  <SpinnerButton
    loading={loading}
    onClick={handleSubmit}
    spinnerProps={{ name: 'helix', color: '#00ff99' }}
  >
    {loading ? 'Submitting...' : 'Submit'}
  </SpinnerButton>
);
```

### 全屏加载覆盖

```tsx
const [fetching, setFetching] = useState(false);

return (
  <SpinnerOverlay
    active={fetching}
    name="orbit"
    size="2rem"
    backdrop="rgba(0,0,0,0.5)"
  >
    <Dashboard data={data} />
  </SpinnerOverlay>
);
```

### 带有形状定制的内嵌状态消息

```tsx
return (
  <SpinnerInline
    name="scan"
    shape="diamond"
    color="#7c3aed"
  >
    Syncing your data...
  </SpinnerInline>
);
```

* * *

## 捐款

欢迎虫子报告和拉出请求 请在提交大修改前打开一个问题 .

```sh
# Install dependencies
npm install

# Start the interactive demo
npm run dev

# Build the library
npm run build
```

* * *

## 许可证

[麻省理工学院](https://npmcn.com/package/%40agilek/cli-loaders/LICENSE)

## 常见问题

### @agilek/cli-loaders 是什么？

盲文单码自旋器作为回放装饰组件

### 如何安装 @agilek/cli-loaders？

在项目目录运行 npm install @agilek/cli-loaders，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：react（\>=18\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @agilek/cli-loaders 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @agilek/cli-loaders 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @agilek/cli-loaders 可以商用吗？

@agilek/cli-loaders 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @agilek/cli-loaders 的下载量有多少？

根据 npm 官方下载统计，@agilek/cli-loaders 在 2026/10/05 – 2026/11/03 这 30 天内被下载 43,061 次，日均约 1,435 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @agilek/cli-loaders 还在维护吗？

最新版本 1\.1\.0 发布于 2026/03/22（7 个月前）；至今共发布 4 个版本，其中过去 12 个月发布了 4 个；首次发布于 2026/03/21。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

