Skip to content

Commit 99ff0e9

Browse files
committed
docs: update
1 parent 750fdbf commit 99ff0e9

File tree

14 files changed

+726
-6
lines changed

14 files changed

+726
-6
lines changed

website/docs/community/merge/cva-and-variants.mdx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ description: '使用 weapp-tailwindcss runtime 系列(@weapp-tailwindcss/cva
66

77
`@weapp-tailwindcss/cva``@weapp-tailwindcss/variants``class-variance-authority`(简称 `cva`)和 `tailwind-variants` 进行了运行时封装,帮你在定义组件变体时自动处理类名冲突和小程序转义。
88

9+
:::tip 已迁移到 packages-runtime 体系
10+
详细用法与多端 Demo 请参考:
11+
- [@weapp-tailwindcss/cva](/docs/community/packages-runtime/cva)
12+
- [@weapp-tailwindcss/variants](/docs/community/packages-runtime/variants)
13+
- [@weapp-tailwindcss/variants-v3](/docs/community/packages-runtime/variants-v3)
14+
:::
15+
916
## 安装
1017

1118
```bash npm2yarn

website/docs/community/merge/integration.mdx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ title: 集成与排障指南
44
description: '在真实项目中集成 @weapp-tailwindcss/merge 的注意事项,以及针对不同打包器的调试技巧。'
55
---
66

7+
:::tip 运行时包详解
8+
运行时包的完整 API 与多端 Demo 已整理在 [packages-runtime](/docs/community/packages-runtime) 章节。
9+
:::
10+
711
## 与构建工具协作
812

913
### 保留关键函数名

website/docs/community/merge/overview.mdx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ slug: /community/merge
55
description: '@weapp-tailwindcss/merge 的定位、安装方式、快速上手示例以及多端项目的常见用法。'
66
---
77

8-
import Link from '@docusaurus/Link'
9-
108
`@weapp-tailwindcss/merge` 是面向小程序生态的 [`tailwind-merge`](https://github.com/dcastil/tailwind-merge) 运行时封装。它在保留原库全部 API 的基础上,对类名做了小程序合法化转义,并与 `weapp-tailwindcss` 编译期插件联动,提供稳定的跨端开发体验。
119

10+
:::tip 运行时文档已升级
11+
更完整的 packages-runtime 使用方式与多端 Demo 已整理在新章节:
12+
- [packages-runtime 总览](/docs/community/packages-runtime)
13+
- [多端 Demo(小程序 + Web)](/docs/community/packages-runtime/multi-platform-demos)
14+
:::
15+
1216
## 为什么要使用 merge 运行时
1317

1418
- **动态类名更安全**:在组件里根据状态拼接类名时,`twMerge` 会自动剔除冲突项,确保最终样式一致。
@@ -34,6 +38,8 @@ import Link from '@docusaurus/Link'
3438
| `@weapp-tailwindcss/merge-v3` | `tailwindcss@3` | 基于 `tailwind-merge@2`,专为老项目保留 |
3539
| `@weapp-tailwindcss/cva` | `class-variance-authority` | 自动 escape 的 `cva()` 运行时 |
3640
| `@weapp-tailwindcss/variants` | `tailwind-variants` | 提供 `tv`/`cn` 等扩展能力 |
41+
| `@weapp-tailwindcss/variants-v3` | `tailwind-variant-v3` | Tailwind v3 小程序变体运行时 |
42+
| `tailwind-variant-v3` | `tailwindcss@3` | 上游 v3 运行时,可接入自定义合并器 |
3743

3844
## 安装
3945

@@ -100,7 +106,9 @@ badge({ tone: 'success' })
100106
// => 'inline-flex ... bg-_b_hDCFCE7_B text-_b_h166534_B'
101107
```
102108

103-
更多组合用法、`cn` 聚合器以及逃逸策略见后文的 <Link to="/docs/community/merge/cva-and-variants"><code>cva 与 tailwind-variants 支持</code></Link> 章节。
109+
更多组合用法、`cn` 聚合器以及逃逸策略见新的运行时文档:
110+
- [@weapp-tailwindcss/variants](/docs/community/packages-runtime/variants)
111+
- [@weapp-tailwindcss/cva](/docs/community/packages-runtime/cva)
104112

105113
### 多端项目:按需控制转义
106114

@@ -123,6 +131,8 @@ mergeForWeb('text-[#ececec]', 'text-[#ECECEC]') // → 'text-[#ECECEC]'
123131
- `unescape: false` 可跳过运行前的「反转义」,用于确保输入不会被改写。
124132
- 如果只想自定义映射表,传入 `escape: { map: { '#': '__hash__' } }` 即可;运行时会把自定义映射与默认映射合并,保证编译期和运行时的行为一致。
125133

134+
多端示例详见 [多端 Demo(小程序 + Web)](/docs/community/packages-runtime/multi-platform-demos)
135+
126136
### 在线体验
127137

128138
```jsx live

website/docs/community/merge/runtime-api.mdx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ description: 'shared runtime —— @weapp-tailwindcss/runtime 以及 merge 系
66

77
`@weapp-tailwindcss/runtime` 是所有运行时包的公共底座,统一提供 escape/unescape、`clsx` 封装、`weappTwIgnore` 以及 `createRuntimeFactory``@weapp-tailwindcss/merge``merge-v3``cva``variants` 都是基于它实现的。
88

9+
:::tip 运行时包详解
10+
更完整的使用方式与多端示例已收录在 packages-runtime 章节:
11+
- [packages-runtime 总览](/docs/community/packages-runtime)
12+
- [@weapp-tailwindcss/merge](/docs/community/packages-runtime/merge)
13+
- [@weapp-tailwindcss/variants](/docs/community/packages-runtime/variants)
14+
:::
15+
916
## 安装
1017

1118
```ts
@@ -183,8 +190,10 @@ custom.twMerge('text-_b__hash__ececec_B') // => 'text-_b__hash__ececec_B'
183190

184191
## 基于 runtime 的其他包
185192

186-
- `@weapp-tailwindcss/cva`:封装 `class-variance-authority`,详见 [cva 支持](/docs/community/merge/cva-and-variants#cva)
187-
- `@weapp-tailwindcss/variants`:封装 `tailwind-variants`,详见 [variants 支持](/docs/community/merge/cva-and-variants#tailwind-variants)
188-
- `@weapp-tailwindcss/merge-v3`:面向 `tailwindcss@3` 的长期支持分支
193+
- `@weapp-tailwindcss/cva`:封装 `class-variance-authority`,详见 [@weapp-tailwindcss/cva](/docs/community/packages-runtime/cva)
194+
- `@weapp-tailwindcss/variants`:封装 `tailwind-variants`,详见 [@weapp-tailwindcss/variants](/docs/community/packages-runtime/variants)
195+
- `@weapp-tailwindcss/merge-v3`:面向 `tailwindcss@3` 的长期支持分支
196+
- `@weapp-tailwindcss/variants-v3`:基于 `tailwind-variant-v3` 的小程序运行时
197+
- `tailwind-variant-v3`:上游 v3 runtime(Web 优先)
189198

190199
它们全部依赖 `@weapp-tailwindcss/runtime`,因此可以共享 escape 配置、`weappTwIgnore` 以及 `clsx`
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"label": "packages-runtime",
3+
"collapsed": false
4+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
id: cva
3+
title: '@weapp-tailwindcss/cva'
4+
description: 'class-variance-authority 的小程序运行时封装,自动处理 escape 并保持类型推导。'
5+
---
6+
7+
`@weapp-tailwindcss/cva``class-variance-authority` 的运行时封装,输出的类名会自动完成小程序转义。API 与类型推导保持一致,可直接替换原版 `cva`
8+
9+
## 安装
10+
11+
```bash npm2yarn
12+
pnpm add @weapp-tailwindcss/cva
13+
```
14+
15+
## 基础用法
16+
17+
```ts
18+
import { cva, type VariantProps } from '@weapp-tailwindcss/cva'
19+
20+
const button = cva(
21+
'inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors',
22+
{
23+
variants: {
24+
tone: {
25+
primary: 'bg-[#2563EB] text-white hover:bg-[#1D4ED8]',
26+
outline: 'border border-border/60 bg-transparent',
27+
},
28+
size: {
29+
sm: 'h-8 px-3',
30+
md: 'h-9 px-4',
31+
lg: 'h-10 px-6',
32+
},
33+
},
34+
defaultVariants: {
35+
tone: 'primary',
36+
size: 'md',
37+
},
38+
},
39+
)
40+
41+
type ButtonVariants = VariantProps<typeof button>
42+
43+
const className = button({ tone: 'outline', size: 'sm' })
44+
// => 已转义的类名
45+
```
46+
47+
## 小程序 + Web
48+
49+
使用 `create` 为 Web 关闭转义,保证原始类名:
50+
51+
```ts
52+
import { create } from '@weapp-tailwindcss/cva'
53+
54+
const { cva: cvaWeb } = create({
55+
escape: false,
56+
unescape: false,
57+
})
58+
59+
const badge = cvaWeb('text-[#0F172A] bg-[#E2E8F0]')
60+
```
61+
62+
## Demo:跨端变体工厂
63+
64+
```ts
65+
import { cva, create } from '@weapp-tailwindcss/cva'
66+
67+
const config = {
68+
variants: {
69+
status: {
70+
ok: 'text-[#16A34A] bg-[#DCFCE7]',
71+
warn: 'text-[#B45309] bg-[#FEF3C7]',
72+
},
73+
},
74+
defaultVariants: {
75+
status: 'ok',
76+
},
77+
}
78+
79+
const pill = cva('inline-flex items-center rounded-full px-2 text-xs font-medium', config)
80+
const { cva: cvaWeb } = create({ escape: false, unescape: false })
81+
const pillWeb = cvaWeb('inline-flex items-center rounded-full px-2 text-xs font-medium', config)
82+
```
83+
84+
## 常见注意事项
85+
86+
- **函数名别名**:若封装 `cva``createVariants` 等,请更新 `ignoreCallExpressionIdentifiers`
87+
- **与 Tailwind 版本关系**`cva` 不绑定 Tailwind 版本,但 escape 规则需与 `weapp-tailwindcss` 版本一致。
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
id: index
3+
title: packages-runtime 总览
4+
slug: /community/packages-runtime
5+
description: 'runtime 系列包的版本选择、能力矩阵与多端使用心智模型。'
6+
---
7+
8+
`packages-runtime``weapp-tailwindcss` 的运行时能力集合,用来把编译期的类名规则延伸到小程序端,解决「动态类名冲突」「非法字符转义」「多端一致性」等问题。它们基于 `@weapp-tailwindcss/runtime` 提供 escape/unescape 与工厂能力,配合不同的 Tailwind 版本进行组合。
9+
10+
## 运行时矩阵
11+
12+
| 包名 | Tailwind 版本 | 适用场景 | 说明 |
13+
| --- | --- | --- | --- |
14+
| `@weapp-tailwindcss/merge` | v4 | 小程序 / 多端项目 | `tailwind-merge@3` 兼容实现,默认入口 |
15+
| `@weapp-tailwindcss/merge-v3` | v3 | 旧项目 / 长期维护 | `tailwind-merge@2` 兼容实现 |
16+
| `@weapp-tailwindcss/cva` | v3/v4 | 组件变体工厂 | `class-variance-authority` 运行时封装 |
17+
| `@weapp-tailwindcss/variants` | v4 | 组件变体 + slots | `tailwind-variants` 运行时封装 |
18+
| `tailwind-variant-v3` | v3 | Web / 通用 runtime | 上游 v3 runtime,可接入 `twMergeAdapter` |
19+
| `@weapp-tailwindcss/variants-v3` | v3 | 小程序 / 多端 | 基于 `tailwind-variant-v3` + `merge-v3` 的封装 |
20+
21+
> `@weapp-tailwindcss/runtime` 是底座包,通常作为间接依赖自动安装,无需单独引入。
22+
23+
## 版本选择
24+
25+
- **Tailwind v4**:优先 `@weapp-tailwindcss/merge` + `@weapp-tailwindcss/variants`;需要变体工厂时加 `@weapp-tailwindcss/cva`
26+
- **Tailwind v3**:优先 `@weapp-tailwindcss/merge-v3` + `@weapp-tailwindcss/variants-v3`;仅 Web 或需要定制合并器时可用 `tailwind-variant-v3`
27+
28+
## 多端心智模型(小程序 + Web)
29+
30+
小程序端需要 escape/unescape 来保持类名合法;Web 端则希望保留原始类名。各包的 `create(...)` 工厂允许你为不同端生成隔离实例:
31+
32+
```ts
33+
import { create } from '@weapp-tailwindcss/merge'
34+
35+
const { twMerge: mergeForMiniProgram } = create()
36+
const { twMerge: mergeForWeb } = create({
37+
escape: false,
38+
unescape: false,
39+
})
40+
```
41+
42+
这套模式同样适用于 `cva``tv``cn` 等变体工具,详见各包的「多端用法」与「多端 Demo」章节。
43+
44+
## 章节速览
45+
46+
- [@weapp-tailwindcss/merge(Tailwind v4)](/docs/community/packages-runtime/merge)
47+
- [@weapp-tailwindcss/merge-v3(Tailwind v3)](/docs/community/packages-runtime/merge-v3)
48+
- [@weapp-tailwindcss/cva](/docs/community/packages-runtime/cva)
49+
- [@weapp-tailwindcss/variants](/docs/community/packages-runtime/variants)
50+
- [tailwind-variant-v3](/docs/community/packages-runtime/tailwind-variant-v3)
51+
- [@weapp-tailwindcss/variants-v3](/docs/community/packages-runtime/variants-v3)
52+
- [多端 Demo:uni-app + Web、Taro + Web](/docs/community/packages-runtime/multi-platform-demos)
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
id: merge-v3
3+
title: '@weapp-tailwindcss/merge-v3(Tailwind v3)'
4+
description: '适配 Tailwind v3 的 tailwind-merge 运行时封装,面向旧项目与长期维护。'
5+
---
6+
7+
`@weapp-tailwindcss/merge-v3``tailwind-merge@2` 的小程序友好封装,专为 `tailwindcss@3` 设计。API 与 `@weapp-tailwindcss/merge` 完全一致,只是内部合并规则基于 v3 体系。
8+
9+
## 安装
10+
11+
```bash npm2yarn
12+
pnpm add @weapp-tailwindcss/merge-v3
13+
```
14+
15+
## 基础用法
16+
17+
```ts
18+
import { twMerge } from '@weapp-tailwindcss/merge-v3'
19+
20+
const className = twMerge('p-2 p-4', 'bg-[#0F172A]')
21+
// => 已转义的类名,可直接用于小程序模板
22+
```
23+
24+
## 自定义运行时
25+
26+
```ts
27+
import { create } from '@weapp-tailwindcss/merge-v3'
28+
29+
const { twMerge: twMergeWeb } = create({
30+
escape: false,
31+
unescape: false,
32+
})
33+
34+
twMergeWeb('text-[#2563EB]', 'text-[#1D4ED8]')
35+
// => 'text-[#1D4ED8]'
36+
```
37+
38+
## 与 Tailwind v4 的区别
39+
40+
- `tailwindMergeVersion` 在 v3 入口下为 `2`
41+
- 仅用于 `tailwindcss@3` 项目;若已升级到 v4,请切换到 [`@weapp-tailwindcss/merge`](./merge)
42+
43+
## Demo:自定义合并规则
44+
45+
```ts
46+
import { extendTailwindMerge } from '@weapp-tailwindcss/merge-v3'
47+
48+
const mergeSpacing = extendTailwindMerge({
49+
classGroups: {
50+
spacing: ['gap-safe', 'gap-huge'],
51+
},
52+
})
53+
54+
mergeSpacing('gap-huge gap-safe') // => 'gap-safe'
55+
```
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
---
2+
id: merge
3+
title: '@weapp-tailwindcss/merge(Tailwind v4)'
4+
description: '适配 Tailwind v4 的 tailwind-merge 运行时封装,提供小程序 escape/unescape 与多端工厂能力。'
5+
---
6+
7+
`@weapp-tailwindcss/merge``tailwind-merge@3` 的小程序友好封装,适配 `tailwindcss@4`。它在合并前后自动处理 escape/unescape,使运行时输出与编译期一致。
8+
9+
## 安装
10+
11+
```bash npm2yarn
12+
pnpm add @weapp-tailwindcss/merge
13+
```
14+
15+
## 核心 API
16+
17+
- `twMerge(...classValues)`:合并 Tailwind 类名并去冲突。
18+
- `twJoin(...classValues)`:拼接类名(不做冲突判断)。
19+
- `extendTailwindMerge(config)` / `createTailwindMerge(config)`:扩展合并规则。
20+
- `create(options?)`:创建隔离实例,控制 escape/unescape。
21+
- `weappTwIgnore`:标记「不要转义」的模板字符串。
22+
23+
### 基础示例
24+
25+
```ts
26+
import { twMerge } from '@weapp-tailwindcss/merge'
27+
28+
const className = twMerge(
29+
'px-2 py-1 bg-red hover:bg-dark-red',
30+
'p-3 bg-[#B91C1C]'
31+
)
32+
33+
// => 已转义的类名,可直接写入小程序 class
34+
```
35+
36+
### 扩展合并规则
37+
38+
```ts
39+
import { extendTailwindMerge } from '@weapp-tailwindcss/merge'
40+
41+
const mergeCard = extendTailwindMerge({
42+
classGroups: {
43+
card: ['card-default', 'card-primary'],
44+
},
45+
})
46+
47+
mergeCard('card-default card-primary') // => 'card-primary'
48+
```
49+
50+
## 小程序用法
51+
52+
小程序端建议直接使用默认导出,运行时会自动输出转义后的类名:
53+
54+
```ts
55+
import { twMerge } from '@weapp-tailwindcss/merge'
56+
57+
const buttonClass = twMerge(
58+
'inline-flex items-center rounded-md px-3 py-2 text-sm',
59+
isPrimary && 'bg-[#2563EB] text-white'
60+
)
61+
```
62+
63+
## Web 用法(关闭转义)
64+
65+
在 Web/SSR 环境中,使用 `create` 关闭 escape/unescape:
66+
67+
```ts
68+
import { create } from '@weapp-tailwindcss/merge'
69+
70+
const { twMerge: twMergeWeb } = create({
71+
escape: false,
72+
unescape: false,
73+
})
74+
75+
const className = twMergeWeb('text-[#2563EB]', 'text-[#1D4ED8]')
76+
// => 'text-[#1D4ED8]'
77+
```
78+
79+
## Demo:按钮类名合并
80+
81+
```ts
82+
import { twMerge } from '@weapp-tailwindcss/merge'
83+
84+
const base = 'inline-flex items-center rounded-md px-4 py-2 text-sm font-medium'
85+
const state = 'bg-[#2563EB] text-white hover:bg-[#1D4ED8]'
86+
const override = 'px-6'
87+
88+
const className = twMerge(base, state, override)
89+
```
90+
91+
## 常见注意事项
92+
93+
- **函数名保留**:如果你把 `twMerge` 别名成 `cn`,需要在 `ignoreCallExpressionIdentifiers` 中补充该名称。
94+
- **跳过编译期转义**:当类名需要原样传递给第三方时,用 `weappTwIgnore` 标记模板字符串。
95+
96+
更多细节与调试指南见 [集成与排障指南](/docs/community/merge/integration)

0 commit comments

Comments
 (0)