larkcc 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,130 @@
1
+ /**
2
+ * 飞书文档块构建器
3
+ */
4
+ import { CalloutType } from "./constants.js";
5
+ export interface TextElement {
6
+ text_run?: {
7
+ content: string;
8
+ };
9
+ link?: {
10
+ text_run: {
11
+ content: string;
12
+ };
13
+ href: string;
14
+ };
15
+ bold?: boolean;
16
+ italic?: boolean;
17
+ underline?: boolean;
18
+ strikethrough?: boolean;
19
+ inline_code?: {
20
+ content: string;
21
+ };
22
+ text_color?: string;
23
+ background_color?: string;
24
+ }
25
+ export interface Block {
26
+ block_type: number;
27
+ text?: {
28
+ elements: TextElement[];
29
+ };
30
+ heading1?: {
31
+ elements: TextElement[];
32
+ };
33
+ heading2?: {
34
+ elements: TextElement[];
35
+ };
36
+ heading3?: {
37
+ elements: TextElement[];
38
+ };
39
+ heading4?: {
40
+ elements: TextElement[];
41
+ };
42
+ heading5?: {
43
+ elements: TextElement[];
44
+ };
45
+ heading6?: {
46
+ elements: TextElement[];
47
+ };
48
+ heading7?: {
49
+ elements: TextElement[];
50
+ };
51
+ heading8?: {
52
+ elements: TextElement[];
53
+ };
54
+ heading9?: {
55
+ elements: TextElement[];
56
+ };
57
+ bullet?: {
58
+ elements: TextElement[];
59
+ };
60
+ ordered?: {
61
+ elements: TextElement[];
62
+ };
63
+ code?: {
64
+ style: {
65
+ language: number;
66
+ wrap: boolean;
67
+ };
68
+ elements: TextElement[];
69
+ };
70
+ quote?: {
71
+ elements: TextElement[];
72
+ };
73
+ todo?: {
74
+ style: {
75
+ checked: boolean;
76
+ };
77
+ elements: TextElement[];
78
+ };
79
+ equation?: {
80
+ content: string;
81
+ };
82
+ callout?: {
83
+ style: {
84
+ background_color: string;
85
+ };
86
+ elements: TextElement[];
87
+ };
88
+ divider?: {};
89
+ table?: {
90
+ property: {
91
+ row_size: number;
92
+ column_size: number;
93
+ column_width: number[];
94
+ };
95
+ cells: Block[];
96
+ };
97
+ }
98
+ /**
99
+ * 解析内联 Markdown 和 HTML 格式
100
+ * 支持:
101
+ * - **bold**、*italic*、`code`、[link](url)、~~strikethrough~~
102
+ * - <u>underline</u>
103
+ * - <span style="color:red">colored text</span>
104
+ * - <span style="background-color:yellow">highlighted text</span>
105
+ * - \ 转义
106
+ */
107
+ export declare function parseInlineText(text: string): TextElement[];
108
+ export declare function buildTextBlock(content: string): Block;
109
+ export declare function buildHeadingBlock(level: number, content: string): Block;
110
+ export declare function buildCodeBlock(code: string, lang?: string): Block;
111
+ export declare function buildBulletBlock(content: string): Block;
112
+ export declare function buildOrderedBlock(content: string): Block;
113
+ export declare function buildQuoteBlock(content: string): Block;
114
+ export declare function buildTodoBlock(content: string, checked: boolean): Block;
115
+ export declare function buildEquationBlock(latex: string): Block;
116
+ export declare function buildCalloutBlock(type: CalloutType, content: string): Block;
117
+ export declare function buildDividerBlock(): Block;
118
+ export interface CellMerge {
119
+ colspan: number;
120
+ rowspan: number;
121
+ }
122
+ export interface TableCell {
123
+ content: string;
124
+ align?: "left" | "center" | "right";
125
+ merge?: CellMerge;
126
+ }
127
+ export interface TableData {
128
+ rows: TableCell[][];
129
+ }
130
+ export declare function buildTableBlock(data: TableData): Block;
@@ -0,0 +1,347 @@
1
+ /**
2
+ * 飞书文档块构建器
3
+ */
4
+ import { BlockType, CalloutColors, LanguageMap, ColorNameMap, AlignType } from "./constants.js";
5
+ // ── 内联格式解析 ───────────────────────────────────────────────────
6
+ /**
7
+ * 解析颜色值
8
+ * 支持颜色名称(red)和十六进制(#FF0000)
9
+ */
10
+ function parseColorValue(value) {
11
+ const trimmed = value.trim().toLowerCase();
12
+ // 十六进制颜色
13
+ if (trimmed.startsWith("#")) {
14
+ const hex = trimmed.toUpperCase();
15
+ if (/^#[0-9A-F]{6}$/i.test(hex) || /^#[0-9A-F]{3}$/i.test(hex)) {
16
+ return hex;
17
+ }
18
+ // 扩展 3 位十六进制到 6 位
19
+ if (/^#[0-9A-F]{3}$/i.test(hex)) {
20
+ return `#${hex[1]}${hex[1]}${hex[2]}${hex[2]}${hex[3]}${hex[3]}`.toUpperCase();
21
+ }
22
+ return hex;
23
+ }
24
+ // 颜色名称
25
+ return ColorNameMap[trimmed] || null;
26
+ }
27
+ /**
28
+ * 解析 style 属性中的颜色
29
+ * 支持:color:red, background-color:yellow, color:#FF0000
30
+ */
31
+ function parseStyleColors(style) {
32
+ const result = {};
33
+ // 匹配 color 和 background-color
34
+ const colorMatch = style.match(/color\s*:\s*([^;]+)/i);
35
+ const bgColorMatch = style.match(/background-color\s*:\s*([^;]+)/i);
36
+ if (colorMatch) {
37
+ const color = parseColorValue(colorMatch[1]);
38
+ if (color)
39
+ result.textColor = color;
40
+ else
41
+ console.warn(`⚠️ [format] 无效颜色值: "${colorMatch[1]}",已忽略`);
42
+ }
43
+ if (bgColorMatch) {
44
+ const color = parseColorValue(bgColorMatch[1]);
45
+ if (color)
46
+ result.bgColor = color;
47
+ else
48
+ console.warn(`⚠️ [format] 无效背景色值: "${bgColorMatch[1]}",已忽略`);
49
+ }
50
+ return result;
51
+ }
52
+ /**
53
+ * 解析内联 Markdown 和 HTML 格式
54
+ * 支持:
55
+ * - **bold**、*italic*、`code`、[link](url)、~~strikethrough~~
56
+ * - <u>underline</u>
57
+ * - <span style="color:red">colored text</span>
58
+ * - <span style="background-color:yellow">highlighted text</span>
59
+ * - \ 转义
60
+ */
61
+ export function parseInlineText(text) {
62
+ const elements = [];
63
+ let remaining = text;
64
+ // 处理转义后的文本
65
+ const unescape = (s) => s.replace(/\\([<>*_~`\[\]])/g, "$1");
66
+ // 正则匹配各种内联格式
67
+ const patterns = [
68
+ // 转义字符 \* \_ \< 等 - 先匹配,避免被其他规则捕获
69
+ { regex: /\\([<>*_~`\[\]])/, type: "escape" },
70
+ // 下划线 <u>text</u>
71
+ { regex: /<u>([^<]*)<\/u>/i, type: "underline" },
72
+ // 带颜色的 span <span style="color:red">text</span>
73
+ { regex: /<span\s+style\s*=\s*["']([^"']+)["']\s*>([^<]*)<\/span>/i, type: "span" },
74
+ // 粗体 **text**
75
+ { regex: /\*\*([^*]+)\*\*/, type: "bold" },
76
+ // 斜体 *text* 或 _text_
77
+ { regex: /(?:\*([^*]+)\*|_([^_]+)_)/, type: "italic" },
78
+ // 行内代码 `code`
79
+ { regex: /`([^`]+)`/, type: "code" },
80
+ // 删除线 ~~text~~
81
+ { regex: /~~([^~]+)~~/, type: "strikethrough" },
82
+ // 链接 [text](url)
83
+ { regex: /\[([^\]]+)\]\(([^)]+)\)/, type: "link" },
84
+ ];
85
+ while (remaining.length > 0) {
86
+ let earliestMatch = null;
87
+ for (const { regex, type } of patterns) {
88
+ regex.lastIndex = 0;
89
+ const match = regex.exec(remaining);
90
+ if (match && (earliestMatch === null || match.index < earliestMatch.index)) {
91
+ let element;
92
+ switch (type) {
93
+ case "escape":
94
+ element = { text_run: { content: match[1] } };
95
+ break;
96
+ case "underline":
97
+ element = { text_run: { content: unescape(match[1]) }, underline: true };
98
+ break;
99
+ case "span":
100
+ const colors = parseStyleColors(match[1]);
101
+ const content = unescape(match[2]);
102
+ element = { text_run: { content } };
103
+ if (colors.textColor)
104
+ element.text_color = colors.textColor;
105
+ if (colors.bgColor)
106
+ element.background_color = colors.bgColor;
107
+ break;
108
+ case "bold":
109
+ element = { text_run: { content: unescape(match[1]) }, bold: true };
110
+ break;
111
+ case "italic":
112
+ element = { text_run: { content: unescape(match[1] || match[2]) }, italic: true };
113
+ break;
114
+ case "code":
115
+ element = { inline_code: { content: match[1] } };
116
+ break;
117
+ case "strikethrough":
118
+ element = { text_run: { content: unescape(match[1]) }, strikethrough: true };
119
+ break;
120
+ case "link":
121
+ element = { link: { text_run: { content: unescape(match[1]) }, href: match[2] } };
122
+ break;
123
+ default:
124
+ continue;
125
+ }
126
+ earliestMatch = { index: match.index, length: match[0].length, element };
127
+ }
128
+ }
129
+ if (earliestMatch && earliestMatch.index === 0) {
130
+ elements.push(earliestMatch.element);
131
+ remaining = remaining.slice(earliestMatch.length);
132
+ }
133
+ else if (earliestMatch) {
134
+ // 匹配前有普通文本
135
+ const plainText = remaining.slice(0, earliestMatch.index);
136
+ if (plainText) {
137
+ elements.push({ text_run: { content: unescape(plainText) } });
138
+ }
139
+ elements.push(earliestMatch.element);
140
+ remaining = remaining.slice(earliestMatch.index + earliestMatch.length);
141
+ }
142
+ else {
143
+ // 没有匹配,全部作为普通文本
144
+ if (remaining) {
145
+ elements.push({ text_run: { content: unescape(remaining) } });
146
+ }
147
+ break;
148
+ }
149
+ }
150
+ return elements;
151
+ }
152
+ // ── 块构建函数 ───────────────────────────────────────────────────
153
+ export function buildTextBlock(content) {
154
+ return {
155
+ block_type: BlockType.TEXT,
156
+ text: { elements: parseInlineText(content) },
157
+ };
158
+ }
159
+ export function buildHeadingBlock(level, content) {
160
+ const blockTypes = [
161
+ BlockType.HEADING1, BlockType.HEADING2, BlockType.HEADING3,
162
+ BlockType.HEADING4, BlockType.HEADING5, BlockType.HEADING6,
163
+ BlockType.HEADING7, BlockType.HEADING8, BlockType.HEADING9,
164
+ ];
165
+ const properties = ["heading1", "heading2", "heading3", "heading4", "heading5", "heading6", "heading7", "heading8", "heading9"];
166
+ const index = Math.min(level - 1, 8);
167
+ return {
168
+ block_type: blockTypes[index],
169
+ [properties[index]]: { elements: parseInlineText(content) },
170
+ };
171
+ }
172
+ export function buildCodeBlock(code, lang = "") {
173
+ const langId = LanguageMap[lang.toLowerCase()] ?? 1;
174
+ return {
175
+ block_type: BlockType.CODE,
176
+ code: {
177
+ style: { language: langId, wrap: true },
178
+ elements: [{ text_run: { content: code } }],
179
+ },
180
+ };
181
+ }
182
+ export function buildBulletBlock(content) {
183
+ return {
184
+ block_type: BlockType.BULLET,
185
+ bullet: { elements: parseInlineText(content) },
186
+ };
187
+ }
188
+ export function buildOrderedBlock(content) {
189
+ return {
190
+ block_type: BlockType.ORDERED,
191
+ ordered: { elements: parseInlineText(content) },
192
+ };
193
+ }
194
+ export function buildQuoteBlock(content) {
195
+ return {
196
+ block_type: BlockType.QUOTE,
197
+ quote: { elements: parseInlineText(content) },
198
+ };
199
+ }
200
+ export function buildTodoBlock(content, checked) {
201
+ return {
202
+ block_type: BlockType.TODO,
203
+ todo: {
204
+ style: { checked },
205
+ elements: parseInlineText(content),
206
+ },
207
+ };
208
+ }
209
+ export function buildEquationBlock(latex) {
210
+ return {
211
+ block_type: BlockType.EQUATION,
212
+ equation: { content: latex },
213
+ };
214
+ }
215
+ export function buildCalloutBlock(type, content) {
216
+ const color = CalloutColors[type] || CalloutColors.NOTE;
217
+ return {
218
+ block_type: BlockType.CALLOUT,
219
+ callout: {
220
+ style: { background_color: color },
221
+ elements: parseInlineText(content),
222
+ },
223
+ };
224
+ }
225
+ export function buildDividerBlock() {
226
+ return {
227
+ block_type: BlockType.DIVIDER,
228
+ divider: {},
229
+ };
230
+ }
231
+ /**
232
+ * 计算字符串显示宽度(中文算 2,英文算 1)
233
+ */
234
+ function calculateTextWidth(text) {
235
+ let width = 0;
236
+ for (const char of text) {
237
+ // CJK 字符范围
238
+ if (/[\u4e00-\u9fff\u3000-\u303f\uff00-\uffef]/.test(char)) {
239
+ width += 2;
240
+ }
241
+ else {
242
+ width += 1;
243
+ }
244
+ }
245
+ return width;
246
+ }
247
+ /**
248
+ * 构建表格单元格 Block
249
+ */
250
+ function buildTableCell(cell) {
251
+ const alignMap = {
252
+ left: AlignType.LEFT,
253
+ center: AlignType.CENTER,
254
+ right: AlignType.RIGHT,
255
+ };
256
+ const block = {
257
+ block_type: BlockType.TABLE_CELL,
258
+ text: { elements: parseInlineText(cell.content.trim()) },
259
+ };
260
+ // 添加对齐属性
261
+ if (cell.align && cell.align !== "left") {
262
+ block.property = { align: alignMap[cell.align] };
263
+ }
264
+ return block;
265
+ }
266
+ export function buildTableBlock(data) {
267
+ const { rows } = data;
268
+ if (rows.length === 0 || rows[0].length === 0) {
269
+ return {
270
+ block_type: BlockType.TABLE,
271
+ table: {
272
+ property: { row_size: 0, column_size: 0, column_width: [] },
273
+ cells: [],
274
+ },
275
+ };
276
+ }
277
+ const rowSize = rows.length;
278
+ const columnSize = rows[0].length;
279
+ // 构建单元格和合并信息
280
+ const cells = [];
281
+ const mergeInfo = [];
282
+ // 追踪被合并的单元格位置
283
+ const mergedCells = new Set();
284
+ for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
285
+ for (let colIndex = 0; colIndex < rows[rowIndex].length; colIndex++) {
286
+ const cell = rows[rowIndex][colIndex];
287
+ const key = `${rowIndex}-${colIndex}`;
288
+ // 跳过被合并的单元格
289
+ if (mergedCells.has(key))
290
+ continue;
291
+ // 处理合并
292
+ if (cell.merge && (cell.merge.colspan > 1 || cell.merge.rowspan > 1)) {
293
+ const colspan = cell.merge.colspan || 1;
294
+ const rowspan = cell.merge.rowspan || 1;
295
+ mergeInfo.push({
296
+ row_span: rowspan,
297
+ col_span: colspan,
298
+ row_index: rowIndex,
299
+ col_index: colIndex,
300
+ });
301
+ // 标记被合并的单元格
302
+ for (let r = rowIndex; r < rowIndex + rowspan && r < rows.length; r++) {
303
+ for (let c = colIndex; c < colIndex + colspan && c < rows[r].length; c++) {
304
+ if (r !== rowIndex || c !== colIndex) {
305
+ mergedCells.add(`${r}-${c}`);
306
+ }
307
+ }
308
+ }
309
+ }
310
+ cells.push(buildTableCell(cell));
311
+ }
312
+ }
313
+ // 计算每列最大宽度
314
+ const columnWidths = [];
315
+ for (let colIndex = 0; colIndex < columnSize; colIndex++) {
316
+ let maxWidth = 50; // 最小宽度
317
+ for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
318
+ if (colIndex < rows[rowIndex].length) {
319
+ const cell = rows[rowIndex][colIndex];
320
+ const width = calculateTextWidth(cell.content);
321
+ // 考虑合并单元格的宽度
322
+ const colspan = cell.merge?.colspan || 1;
323
+ if (colspan === 1) {
324
+ maxWidth = Math.max(maxWidth, Math.min(width * 10 + 20, 300));
325
+ }
326
+ }
327
+ }
328
+ columnWidths.push(maxWidth);
329
+ }
330
+ const tableBlock = {
331
+ block_type: BlockType.TABLE,
332
+ table: {
333
+ property: {
334
+ row_size: rowSize,
335
+ column_size: columnSize,
336
+ column_width: columnWidths,
337
+ },
338
+ cells,
339
+ },
340
+ };
341
+ // 添加合并信息
342
+ if (mergeInfo.length > 0) {
343
+ tableBlock.table.merge_info = mergeInfo;
344
+ }
345
+ return tableBlock;
346
+ }
347
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/format/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 飞书卡片处理模块
3
+ */
4
+ import type { Client } from "@larksuiteoapi/node-sdk";
5
+ /**
6
+ * 构建 Markdown 卡片
7
+ */
8
+ export declare function buildMarkdownCard(markdown: string, warnings?: string[]): object;
9
+ /**
10
+ * 构建并发送 Markdown 卡片消息
11
+ * 这是一个辅助函数,用于统一处理卡片消息的发送
12
+ */
13
+ export declare function sendMarkdownCardMessage(client: Client, chatId: string, content: string, options?: {
14
+ rootMsgId?: string;
15
+ reply?: boolean;
16
+ }): Promise<void>;
17
+ /**
18
+ * 构建简单的文本卡片
19
+ */
20
+ export declare function buildTextCard(title: string, content: string, color?: string): object;
21
+ /**
22
+ * 构建状态卡片(成功/失败)
23
+ */
24
+ export declare function buildStatusCard(success: boolean, title: string, details: Record<string, string>): object;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * 飞书卡片处理模块
3
+ */
4
+ import { sanitizeContent, formatWarnings } from "./sanitize.js";
5
+ /**
6
+ * 构建 Markdown 卡片
7
+ */
8
+ export function buildMarkdownCard(markdown, warnings = []) {
9
+ let content = markdown;
10
+ if (warnings.length > 0) {
11
+ content += formatWarnings(warnings);
12
+ }
13
+ return {
14
+ schema: "2.0",
15
+ body: {
16
+ elements: [
17
+ {
18
+ tag: "markdown",
19
+ content,
20
+ },
21
+ ],
22
+ },
23
+ };
24
+ }
25
+ /**
26
+ * 构建并发送 Markdown 卡片消息
27
+ * 这是一个辅助函数,用于统一处理卡片消息的发送
28
+ */
29
+ export async function sendMarkdownCardMessage(client, chatId, content, options) {
30
+ // 清理内容
31
+ const { content: sanitizedContent, warnings } = sanitizeContent(content);
32
+ // 构建卡片
33
+ const card = buildMarkdownCard(sanitizedContent, warnings);
34
+ // 发送
35
+ if (options?.reply && options.rootMsgId) {
36
+ await client.im.message.reply({
37
+ path: { message_id: options.rootMsgId },
38
+ data: {
39
+ msg_type: "interactive",
40
+ content: JSON.stringify(card),
41
+ },
42
+ });
43
+ }
44
+ else {
45
+ await client.im.message.create({
46
+ params: { receive_id_type: "chat_id" },
47
+ data: {
48
+ receive_id: chatId,
49
+ msg_type: "interactive",
50
+ content: JSON.stringify(card),
51
+ },
52
+ });
53
+ }
54
+ }
55
+ /**
56
+ * 构建简单的文本卡片
57
+ */
58
+ export function buildTextCard(title, content, color = "blue") {
59
+ return {
60
+ msg_type: "interactive",
61
+ card: {
62
+ header: {
63
+ title: { tag: "plain_text", content: title },
64
+ template: color,
65
+ },
66
+ elements: [
67
+ {
68
+ tag: "markdown",
69
+ content,
70
+ },
71
+ ],
72
+ },
73
+ };
74
+ }
75
+ /**
76
+ * 构建状态卡片(成功/失败)
77
+ */
78
+ export function buildStatusCard(success, title, details) {
79
+ const color = success ? "green" : "red";
80
+ const icon = success ? "✅" : "❌";
81
+ const elements = [
82
+ {
83
+ tag: "div",
84
+ text: { tag: "lark_md", content: `${icon} **${title}**` },
85
+ },
86
+ ];
87
+ for (const [key, value] of Object.entries(details)) {
88
+ elements.push({
89
+ tag: "div",
90
+ text: { tag: "lark_md", content: `**${key}:** ${value}` },
91
+ });
92
+ }
93
+ return {
94
+ msg_type: "interactive",
95
+ card: {
96
+ header: {
97
+ title: { tag: "plain_text", content: `${icon} ${title}` },
98
+ template: color,
99
+ },
100
+ elements,
101
+ },
102
+ };
103
+ }
104
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/format/card.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,WAAqB,EAAE;IACzE,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK;QACb,IAAI,EAAE;YACJ,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,UAAU;oBACf,OAAO;iBACR;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAc,EACd,MAAc,EACd,OAAe,EACf,OAGC;IAED,OAAO;IACP,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAEzE,OAAO;IACP,MAAM,IAAI,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAE3D,KAAK;IACL,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE;YACvC,IAAI,EAAE;gBACJ,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;YAC7B,MAAM,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE;YACtC,IAAI,EAAE;gBACJ,UAAU,EAAE,MAAM;gBAClB,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,OAAe,EAAE,QAAgB,MAAM;IAClF,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC5C,QAAQ,EAAE,KAAK;aAChB;YACD,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,UAAU;oBACf,OAAO;iBACR;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,KAAa,EACb,OAA+B;IAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEjC,MAAM,QAAQ,GAAG;QACf;YACE,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,MAAM,KAAK,IAAI,EAAE;SAC1D;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,KAAK,EAAE,EAAE;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,IAAI,EAAE;YACJ,MAAM,EAAE;gBACN,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE;gBACzD,QAAQ,EAAE,KAAK;aAChB;YACD,QAAQ;SACT;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 飞书文档样式常量
3
+ *
4
+ * API 参考:
5
+ * - 文档块 API: https://feishu.apifox.cn/doc-1950637
6
+ * - 代码语言枚举: https://feishu.apifox.cn/doc-1950637
7
+ */
8
+ export declare const BlockType: {
9
+ readonly PAGE: 1;
10
+ readonly TEXT: 2;
11
+ readonly HEADING1: 3;
12
+ readonly HEADING2: 4;
13
+ readonly HEADING3: 5;
14
+ readonly HEADING4: 6;
15
+ readonly HEADING5: 7;
16
+ readonly HEADING6: 8;
17
+ readonly HEADING7: 9;
18
+ readonly HEADING8: 10;
19
+ readonly HEADING9: 11;
20
+ readonly BULLET: 12;
21
+ readonly ORDERED: 13;
22
+ readonly CODE: 14;
23
+ readonly QUOTE: 15;
24
+ readonly EQUATION: 16;
25
+ readonly TODO: 17;
26
+ readonly BITABLE: 18;
27
+ readonly CALLOUT: 19;
28
+ readonly CHAT_CARD: 20;
29
+ readonly DIAGRAM: 21;
30
+ readonly DIVIDER: 22;
31
+ readonly FILE: 23;
32
+ readonly TABLE: 24;
33
+ readonly TABLE_CELL: 25;
34
+ readonly IFRAME: 27;
35
+ readonly IMAGE: 28;
36
+ readonly VIEW: 29;
37
+ };
38
+ export declare const CalloutColors: {
39
+ readonly NOTE: "blue";
40
+ readonly TIP: "green";
41
+ readonly WARNING: "orange";
42
+ readonly DANGER: "red";
43
+ readonly CAUTION: "red";
44
+ readonly INFO: "blue";
45
+ };
46
+ export type CalloutType = keyof typeof CalloutColors;
47
+ export declare const LanguageMap: Record<string, number>;
48
+ export declare const EXTERNAL_IMAGE_EMOJI = "\uD83D\uDDBC\uFE0F";
49
+ export declare const ColorNameMap: Record<string, string>;
50
+ export declare const AlignType: {
51
+ readonly LEFT: 1;
52
+ readonly CENTER: 2;
53
+ readonly RIGHT: 3;
54
+ };