@open-feishu-card/schema 0.1.1 → 0.1.2

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.
Files changed (58) hide show
  1. package/dist/index.cjs +3074 -0
  2. package/dist/index.js +2965 -16
  3. package/package.json +7 -4
  4. package/dist/card.js +0 -41
  5. package/dist/card.js.map +0 -1
  6. package/dist/common/behavior.js +0 -39
  7. package/dist/common/behavior.js.map +0 -1
  8. package/dist/common/behaviors-context.js +0 -88
  9. package/dist/common/behaviors-context.js.map +0 -1
  10. package/dist/common/confirm.js +0 -12
  11. package/dist/common/confirm.js.map +0 -1
  12. package/dist/common/enums.js +0 -131
  13. package/dist/common/enums.js.map +0 -1
  14. package/dist/common/fallback.js +0 -22
  15. package/dist/common/fallback.js.map +0 -1
  16. package/dist/common/icon-tokens.js +0 -1163
  17. package/dist/common/icon-tokens.js.map +0 -1
  18. package/dist/common/icon.js +0 -49
  19. package/dist/common/icon.js.map +0 -1
  20. package/dist/common/index.js +0 -9
  21. package/dist/common/index.js.map +0 -1
  22. package/dist/common/text.js +0 -80
  23. package/dist/common/text.js.map +0 -1
  24. package/dist/common/url.js +0 -30
  25. package/dist/common/url.js.map +0 -1
  26. package/dist/config.js +0 -123
  27. package/dist/config.js.map +0 -1
  28. package/dist/containers/index.js +0 -205
  29. package/dist/containers/index.js.map +0 -1
  30. package/dist/content/index.js +0 -426
  31. package/dist/content/index.js.map +0 -1
  32. package/dist/element-ref.js +0 -17
  33. package/dist/element-ref.js.map +0 -1
  34. package/dist/element.js +0 -46
  35. package/dist/element.js.map +0 -1
  36. package/dist/header.js +0 -27
  37. package/dist/header.js.map +0 -1
  38. package/dist/index.js.map +0 -1
  39. package/dist/interactive/index.js +0 -533
  40. package/dist/interactive/index.js.map +0 -1
  41. package/dist/markdown/builders.js +0 -140
  42. package/dist/markdown/builders.js.map +0 -1
  43. package/dist/markdown/code-language.js +0 -79
  44. package/dist/markdown/code-language.js.map +0 -1
  45. package/dist/markdown/component.js +0 -38
  46. package/dist/markdown/component.js.map +0 -1
  47. package/dist/markdown/emoji-tokens.js +0 -193
  48. package/dist/markdown/emoji-tokens.js.map +0 -1
  49. package/dist/markdown/enums.js +0 -49
  50. package/dist/markdown/enums.js.map +0 -1
  51. package/dist/markdown/escape.js +0 -42
  52. package/dist/markdown/escape.js.map +0 -1
  53. package/dist/markdown/index.js +0 -16
  54. package/dist/markdown/index.js.map +0 -1
  55. package/dist/markdown/tags.js +0 -238
  56. package/dist/markdown/tags.js.map +0 -1
  57. package/dist/markdown/text-size.js +0 -58
  58. package/dist/markdown/text-size.js.map +0 -1
@@ -1,140 +0,0 @@
1
- import { FeishuEmojiTokenSchema, } from './emoji-tokens.js';
2
- import { renderAnchorTag, renderAtTag, renderFontTag, renderInlineAudioTag, renderLinkTag, renderLocalDateTimeTag, renderNumberTag, renderPersonTag, renderTextTag, } from './tags.js';
3
- /**
4
- * 飞书卡片富文本内容构建器。
5
- * 拼接标准 Markdown 与飞书扩展 HTML 标签,最终得到 markdown 组件的 content 字符串。
6
- */
7
- export class MarkdownContentBuilder {
8
- chunks = [];
9
- /** 追加原始片段(可为 Markdown 或已渲染标签) */
10
- raw(text) {
11
- this.chunks.push(text);
12
- return this;
13
- }
14
- /** 追加纯文本 */
15
- text(value) {
16
- return this.raw(value);
17
- }
18
- /** 硬换行(`\n`) */
19
- br() {
20
- return this.raw('\n');
21
- }
22
- /** HTML `<br>` / `<br/>` */
23
- htmlBr(selfClosing = true) {
24
- return this.raw(selfClosing ? '<br/>' : '<br>');
25
- }
26
- /** 分割线 */
27
- hr(style = 'html') {
28
- return this.raw(style === 'html' ? '<hr>' : '---');
29
- }
30
- italic(text) {
31
- return this.raw(`*${text}*`);
32
- }
33
- bold(text) {
34
- return this.raw(`**${text}**`);
35
- }
36
- strike(text) {
37
- return this.raw(`~~${text}~~`);
38
- }
39
- inlineCode(text) {
40
- return this.raw(`\`${text}\``);
41
- }
42
- /** `#` ~ `######` 标题 */
43
- heading(level, text) {
44
- return this.raw(`${'#'.repeat(level)} ${text}`);
45
- }
46
- quote(text) {
47
- return this.raw(`> ${text}`);
48
- }
49
- /** Markdown 文字链接 */
50
- mdLink(text, url) {
51
- return this.raw(`[${text}](${url})`);
52
- }
53
- /** 可点击电话(仅移动端) */
54
- tel(text, phone) {
55
- return this.raw(`[${text}](tel://${phone})`);
56
- }
57
- /** 图片:`![hover](img_key)` */
58
- image(imgKey, hoverText = '') {
59
- return this.raw(`![${hoverText}](${imgKey})`);
60
- }
61
- /** 飞书表情:`:DONE:`;key 为官方 emoji_type 枚举 */
62
- emoji(key) {
63
- const token = FeishuEmojiTokenSchema.parse(key.startsWith(':') && key.endsWith(':') ? key.slice(1, -1) : key);
64
- return this.raw(`:${token}:`);
65
- }
66
- /**
67
- * 代码块。language 官方声明大小写不敏感;未指定时为 Plain Text。
68
- */
69
- codeBlock(code, language) {
70
- const lang = language ?? '';
71
- return this.raw(`\`\`\`${lang}\n${code}\n\`\`\``);
72
- }
73
- unorderedList(items, indent = 0) {
74
- const prefix = ' '.repeat(indent * 4);
75
- for (const item of items) {
76
- this.raw(`${prefix}- ${item}\n`);
77
- }
78
- return this;
79
- }
80
- orderedList(items, indent = 0) {
81
- const prefix = ' '.repeat(indent * 4);
82
- items.forEach((item, index) => {
83
- this.raw(`${prefix}${index + 1}. ${item}\n`);
84
- });
85
- return this;
86
- }
87
- /** Markdown 表格(除表头外客户端最多展示 5 行) */
88
- table(headers, rows) {
89
- const escapeCell = (cell) => cell.replace(/\|/g, '\\|');
90
- const headerLine = `| ${headers.map(escapeCell).join(' | ')} |`;
91
- const sepLine = `| ${headers.map(() => '--------').join(' | ')} |`;
92
- this.raw(`${headerLine}\n${sepLine}\n`);
93
- for (const row of rows) {
94
- this.raw(`| ${row.map(escapeCell).join(' | ')} |\n`);
95
- }
96
- return this;
97
- }
98
- at(input) {
99
- return this.raw(renderAtTag(input));
100
- }
101
- atAll() {
102
- return this.at({ id: 'all' });
103
- }
104
- person(input) {
105
- return this.raw(renderPersonTag(input));
106
- }
107
- link(input) {
108
- return this.raw(renderLinkTag(input));
109
- }
110
- textTag(input) {
111
- return this.raw(renderTextTag(input));
112
- }
113
- numberTag(input) {
114
- return this.raw(renderNumberTag(input));
115
- }
116
- localDateTime(input = {}) {
117
- return this.raw(renderLocalDateTimeTag(input));
118
- }
119
- font(input) {
120
- return this.raw(renderFontTag(input));
121
- }
122
- anchor(input) {
123
- return this.raw(renderAnchorTag(input));
124
- }
125
- audio(input) {
126
- return this.raw(renderInlineAudioTag(input));
127
- }
128
- /** 生成最终 content 字符串 */
129
- build() {
130
- return this.chunks.join('');
131
- }
132
- toString() {
133
- return this.build();
134
- }
135
- }
136
- /** 快捷创建构建器 */
137
- export function markdown() {
138
- return new MarkdownContentBuilder();
139
- }
140
- //# sourceMappingURL=builders.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../src/markdown/builders.ts"],"names":[],"mappings":"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"}
@@ -1,79 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * 富文本代码块支持的编程语言(大小写不敏感)。
4
- * @see https://open.feishu.cn/document/feishu-cards/card-json-v2-components/content-components/rich-text
5
- */
6
- export const MarkdownCodeLanguageSchema = z
7
- .enum([
8
- 'plain_text',
9
- 'abap',
10
- 'ada',
11
- 'apache',
12
- 'apex',
13
- 'assembly',
14
- 'bash',
15
- 'c_sharp',
16
- 'cpp',
17
- 'c',
18
- 'cmake',
19
- 'cobol',
20
- 'css',
21
- 'coffee_script',
22
- 'd',
23
- 'dart',
24
- 'delphi',
25
- 'diff',
26
- 'django',
27
- 'docker_file',
28
- 'erlang',
29
- 'fortran',
30
- 'gherkin',
31
- 'go',
32
- 'graphql',
33
- 'groovy',
34
- 'html',
35
- 'htmlbars',
36
- 'http',
37
- 'haskell',
38
- 'json',
39
- 'java',
40
- 'javascript',
41
- 'julia',
42
- 'kotlin',
43
- 'latex',
44
- 'lisp',
45
- 'lua',
46
- 'matlab',
47
- 'makefile',
48
- 'markdown',
49
- 'nginx',
50
- 'objective_c',
51
- 'opengl_shading_language',
52
- 'php',
53
- 'perl',
54
- 'powershell',
55
- 'prolog',
56
- 'properties',
57
- 'protobuf',
58
- 'python',
59
- 'r',
60
- 'ruby',
61
- 'rust',
62
- 'sas',
63
- 'scss',
64
- 'sql',
65
- 'scala',
66
- 'scheme',
67
- 'shell',
68
- 'solidity',
69
- 'swift',
70
- 'toml',
71
- 'thrift',
72
- 'typescript',
73
- 'vbscript',
74
- 'visual_basic',
75
- 'xml',
76
- 'yaml',
77
- ])
78
- .describe('富文本代码块语言标识(大小写不敏感)');
79
- //# sourceMappingURL=code-language.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code-language.js","sourceRoot":"","sources":["../../src/markdown/code-language.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,IAAI,CAAC;IACJ,YAAY;IACZ,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,SAAS;IACT,KAAK;IACL,GAAG;IACH,OAAO;IACP,OAAO;IACP,KAAK;IACL,eAAe;IACf,GAAG;IACH,MAAM;IACN,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,SAAS;IACT,SAAS;IACT,IAAI;IACJ,SAAS;IACT,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,QAAQ;IACR,UAAU;IACV,UAAU;IACV,OAAO;IACP,aAAa;IACb,yBAAyB;IACzB,KAAK;IACL,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,QAAQ;IACR,GAAG;IACH,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,OAAO;IACP,UAAU;IACV,OAAO;IACP,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,UAAU;IACV,cAAc;IACd,KAAK;IACL,MAAM;CACP,CAAC;KACD,QAAQ,CAAC,oBAAoB,CAAC,CAAC"}
@@ -1,38 +0,0 @@
1
- import { z } from 'zod';
2
- import { ElementIdSchema, HorizontalAlignSchema, SpacingValueSchema, } from '../common/enums.js';
3
- import { IconSchema } from '../common/icon.js';
4
- import { MultiUrlSchema } from '../common/url.js';
5
- import { MarkdownTextSizeSchema } from './text-size.js';
6
- /**
7
- * 历史差异化跳转映射(JSON 1.0 / 旧语法)。
8
- * JSON 2.0 已不推荐;请优先使用 `<link>` 标签。
9
- */
10
- export const MarkdownHrefSchema = z
11
- .record(z.string(), MultiUrlSchema)
12
- .describe('差异化跳转映射(旧语法)。content 中使用 [文案]($key) 引用;JSON 2.0 建议改用 <link>');
13
- /**
14
- * 富文本(Markdown)组件。
15
- *
16
- * `content` 支持 CommonMark 标准语法(除 HTMLBlock)以及飞书扩展标签:
17
- * `<at>` / `<person>` / `<link>` / `<text_tag>` / `<number_tag>` /
18
- * `<local_datetime>` / `<font>` / `<a>` / `<audio>` / `<br>` / `<hr>` 等。
19
- *
20
- * 推荐使用 `markdown()` 构建器生成 content。
21
- *
22
- * @see https://open.feishu.cn/document/feishu-cards/card-json-v2-components/content-components/rich-text
23
- */
24
- export const MarkdownSchema = z
25
- .object({
26
- tag: z.literal('markdown').describe('组件标签,固定为 markdown'),
27
- content: z
28
- .string()
29
- .describe("Markdown 文本。分区标题默认写成 **分区名**(勿用 # 标题、勿默认色条丨)。字段标签用 <font color='grey'>;短标识用 <text_tag>。仅展示人员用 <person>,要通知用 <at>;二者勿包进 <font>。支持 at/person/link/text_tag/number_tag/local_datetime/font/audio 等"),
30
- element_id: ElementIdSchema.optional().describe('组件唯一标识'),
31
- margin: SpacingValueSchema.optional().describe('组件外边距,默认 0'),
32
- text_align: HorizontalAlignSchema.optional().describe('文本对齐方式,默认 left'),
33
- text_size: MarkdownTextSizeSchema.optional().describe('文本大小,默认 normal;可为官方枚举或自定义 text_size key。标签/辅助说明可用 notation,数值可用 heading'),
34
- icon: IconSchema.optional().describe('文本前缀图标;与文内 emoji 二选一,不要叠用。图标颜色应与描述的状态文字一致'),
35
- href: MarkdownHrefSchema.optional().describe('旧版差异化跳转映射;JSON 2.0 建议使用 <link> 替代'),
36
- })
37
- .describe('富文本(Markdown)组件。正文默认直接放在 body.elements;分区用 **加粗** 小标题起头');
38
- //# sourceMappingURL=component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/markdown/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC;KAClC,QAAQ,CACP,6DAA6D,CAC9D,CAAC;AAIJ;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACxD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACP,iMAAiM,CAClM;IACH,UAAU,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzD,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC5D,UAAU,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnD,gBAAgB,CACjB;IACD,SAAS,EAAE,sBAAsB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACnD,yEAAyE,CAC1E;IACD,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAClC,2CAA2C,CAC5C;IACD,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC1C,mCAAmC,CACpC;CACF,CAAC;KACD,QAAQ,CACP,yDAAyD,CAC1D,CAAC"}
@@ -1,193 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * 飞书表情(emoji_type)枚举。
4
- * 在富文本中写作 `:KEY:`,例如 `:DONE:`、`:THUMBSUP:`。
5
- * 来源:开放平台「表情文案说明」。
6
- */
7
- export const FeishuEmojiTokenSchema = z
8
- .enum([
9
- 'OK',
10
- 'THUMBSUP',
11
- 'THANKS',
12
- 'MUSCLE',
13
- 'FINGERHEART',
14
- 'APPLAUSE',
15
- 'FISTBUMP',
16
- 'JIAYI',
17
- 'DONE',
18
- 'SMILE',
19
- 'BLUSH',
20
- 'LAUGH',
21
- 'SMIRK',
22
- 'LOL',
23
- 'FACEPALM',
24
- 'LOVE',
25
- 'WINK',
26
- 'PROUD',
27
- 'WITTY',
28
- 'SMART',
29
- 'SCOWL',
30
- 'THINKING',
31
- 'SOB',
32
- 'CRY',
33
- 'ERROR',
34
- 'NOSEPICK',
35
- 'HAUGHTY',
36
- 'SLAP',
37
- 'SPITBLOOD',
38
- 'TOASTED',
39
- 'GLANCE',
40
- 'DULL',
41
- 'INNOCENTSMILE',
42
- 'JOYFUL',
43
- 'WOW',
44
- 'TRICK',
45
- 'YEAH',
46
- 'ENOUGH',
47
- 'TEARS',
48
- 'EMBARRASSED',
49
- 'KISS',
50
- 'SMOOCH',
51
- 'DROOL',
52
- 'OBSESSED',
53
- 'MONEY',
54
- 'TEASE',
55
- 'SHOWOFF',
56
- 'COMFORT',
57
- 'CLAP',
58
- 'PRAISE',
59
- 'STRIVE',
60
- 'XBLUSH',
61
- 'SILENT',
62
- 'WAVE',
63
- 'WHAT',
64
- 'FROWN',
65
- 'SHY',
66
- 'DIZZY',
67
- 'LOOKDOWN',
68
- 'CHUCKLE',
69
- 'WAIL',
70
- 'CRAZY',
71
- 'WHIMPER',
72
- 'HUG',
73
- 'BLUBBER',
74
- 'WRONGED',
75
- 'HUSKY',
76
- 'SHHH',
77
- 'SMUG',
78
- 'ANGRY',
79
- 'HAMMER.png',
80
- 'SHOCKED',
81
- 'TERROR',
82
- 'PETRIFIED',
83
- 'SKULL',
84
- 'SWEAT',
85
- 'SPEECHLESS',
86
- 'SLEEP',
87
- 'DROWSY',
88
- 'YAWN',
89
- 'SICK',
90
- 'PUKE',
91
- 'BETRAYED',
92
- 'HEADSET',
93
- 'EatingFood',
94
- 'MeMeMe',
95
- 'Sigh',
96
- 'Typing',
97
- 'Lemon',
98
- 'Get',
99
- 'LGTM',
100
- 'OnIt.png',
101
- 'OneSecond',
102
- 'VRHeadset',
103
- 'YouAreTheBest',
104
- 'SALUTE',
105
- 'SHAKE',
106
- 'HIGHFIVE',
107
- 'UPPERLEFT',
108
- 'ThumbsDown',
109
- 'SLIGHT',
110
- 'TONGUE',
111
- 'EYESCLOSED',
112
- 'RoarForYou',
113
- 'CALF',
114
- 'BEAR',
115
- 'BULL',
116
- 'RAINBOWPUKE',
117
- 'ROSE',
118
- 'HEART',
119
- 'PARTY',
120
- 'LIPS',
121
- 'BEER',
122
- 'CAKE',
123
- 'GIFT',
124
- 'CUCUMBER',
125
- 'Drumstick',
126
- 'Pepper',
127
- 'CANDIEDHAWS',
128
- 'BubbleTea',
129
- 'Coffee',
130
- 'Yes',
131
- 'No',
132
- 'OKR',
133
- 'CheckMark',
134
- 'CrossMark',
135
- 'MinusOne',
136
- 'Hundred',
137
- 'AWESOMEN',
138
- 'Pin',
139
- 'Alarm',
140
- 'Loudspeaker',
141
- 'Trophy',
142
- 'Fire',
143
- 'BOMB',
144
- 'Music',
145
- 'XmasTree',
146
- 'Snowman',
147
- 'XmasHat',
148
- 'FIREWORKS',
149
- '2022',
150
- 'REDPACKET',
151
- 'FORTUNE',
152
- 'LUCK',
153
- 'FIRECRACKER',
154
- 'StickyRiceBalls',
155
- 'HEARTBROKEN',
156
- 'POOP',
157
- 'StatusFlashOfInspiration',
158
- '18X',
159
- 'CLEAVER.png',
160
- 'Soccer',
161
- 'Basketball',
162
- 'GeneralDoNotDisturb',
163
- 'Status_PrivateMessage',
164
- 'GeneralInMeetingBusy',
165
- 'StatusReading',
166
- 'StatusInFlight',
167
- 'GeneralBusinessTrip',
168
- 'GeneralWorkFromHome',
169
- 'StatusEnjoyLife',
170
- 'GeneralTravellingCar',
171
- 'StatusBus',
172
- 'GeneralSun',
173
- 'GeneralMoonRest',
174
- 'MoonRabbit',
175
- 'Mooncake',
176
- 'JubilantRabbit',
177
- 'TV',
178
- 'Movie',
179
- 'Pumpkin',
180
- 'BeamingFace',
181
- 'Delighted',
182
- 'ColdSweat',
183
- 'FullMoonFace',
184
- 'Partying',
185
- 'GoGoGo',
186
- 'ThanksFace',
187
- 'SaluteFace',
188
- 'Shrug',
189
- 'ClownFace',
190
- 'HappyDragon',
191
- ])
192
- .describe('飞书表情 key(emoji_type),富文本中写作 :KEY:');
193
- //# sourceMappingURL=emoji-tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"emoji-tokens.js","sourceRoot":"","sources":["../../src/markdown/emoji-tokens.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * 富文本 `<text_tag>` 颜色枚举。
4
- */
5
- export const MarkdownTextTagColorSchema = z
6
- .enum([
7
- 'neutral',
8
- 'blue',
9
- 'turquoise',
10
- 'lime',
11
- 'orange',
12
- 'violet',
13
- 'indigo',
14
- 'wathet',
15
- 'green',
16
- 'yellow',
17
- 'red',
18
- 'purple',
19
- 'carmine',
20
- ])
21
- .describe('富文本 text_tag 颜色枚举');
22
- /**
23
- * 富文本 `<local_datetime>` 的 format_type。
24
- */
25
- export const MarkdownDateTimeFormatSchema = z
26
- .enum([
27
- 'date_num',
28
- 'date_short',
29
- 'date',
30
- 'week',
31
- 'week_short',
32
- 'time',
33
- 'time_sec',
34
- 'timezone',
35
- ])
36
- .describe('国际化时间展示格式:date_num / date_short / date / week / week_short / time / time_sec / timezone');
37
- /**
38
- * 富文本内嵌 `<person>` 的展示样式。
39
- */
40
- export const MarkdownPersonStyleSchema = z
41
- .enum(['normal', 'capsule'])
42
- .describe('人员标签样式:normal(普通)/ capsule(胶囊)');
43
- /**
44
- * 富文本内嵌 `<audio>` 的样式。
45
- */
46
- export const MarkdownInlineAudioStyleSchema = z
47
- .enum(['normal', 'speak'])
48
- .describe('内嵌音频样式:normal(三角播放)/ speak(语音气泡)');
49
- //# sourceMappingURL=enums.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/markdown/enums.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,IAAI,CAAC;IACJ,SAAS;IACT,MAAM;IACN,WAAW;IACX,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,SAAS;CACV,CAAC;KACD,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAIjC;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,IAAI,CAAC;IACJ,UAAU;IACV,YAAY;IACZ,MAAM;IACN,MAAM;IACN,YAAY;IACZ,MAAM;IACN,UAAU;IACV,UAAU;CACX,CAAC;KACD,QAAQ,CACP,yFAAyF,CAC1F,CAAC;AAIJ;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;KAC3B,QAAQ,CAAC,gCAAgC,CAAC,CAAC;AAI9C;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC;KAC5C,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACzB,QAAQ,CAAC,kCAAkC,CAAC,CAAC"}
@@ -1,42 +0,0 @@
1
- /**
2
- * 将文本中的 Markdown 特殊字符转义为 HTML 实体,便于按字面量展示。
3
- *
4
- * 注意:`&` 必须最先转义,避免二次污染。
5
- */
6
- const ESCAPE_MAP = [
7
- ['&', '&amp;'],
8
- ['<', '&#60;'],
9
- ['>', '&#62;'],
10
- ['*', '&#42;'],
11
- ['~', '&sim;'],
12
- ['-', '&#45;'],
13
- ['!', '&#33;'],
14
- ['/', '&#47;'],
15
- ['\\', '&#92;'],
16
- ['[', '&#91;'],
17
- [']', '&#93;'],
18
- ['(', '&#40;'],
19
- [')', '&#41;'],
20
- ['#', '&#35;'],
21
- [':', '&#58;'],
22
- ['+', '&#43;'],
23
- ['"', '&#34;'],
24
- ["'", '&#39;'],
25
- ['`', '&#96;'],
26
- ['$', '&#36;'],
27
- ['_', '&#95;'],
28
- ];
29
- export function escapeMarkdown(text) {
30
- let result = text;
31
- for (const [char, entity] of ESCAPE_MAP) {
32
- result = result.split(char).join(entity);
33
- }
34
- return result;
35
- }
36
- /** 不换行空格 */
37
- export const NBSP = '&nbsp;';
38
- /** 半角空格 */
39
- export const ENSP = '&ensp;';
40
- /** 全角空格 */
41
- export const EMSP = '&emsp;';
42
- //# sourceMappingURL=escape.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/markdown/escape.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,GAA6C;IAC3D,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,IAAI,EAAE,OAAO,CAAC;IACf,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,YAAY;AACZ,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,WAAW;AACX,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;AAC7B,WAAW;AACX,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * 飞书卡片富文本(Markdown)模块。
3
- *
4
- * - `MarkdownSchema`:卡片组件 Schema
5
- * - `markdown()` / `MarkdownContentBuilder`:类型安全地拼接 content
6
- * - `tags` / `enums`:扩展标签参数 Schema 与渲染函数
7
- */
8
- export * from './text-size.js';
9
- export * from './code-language.js';
10
- export * from './emoji-tokens.js';
11
- export * from './enums.js';
12
- export * from './escape.js';
13
- export * from './tags.js';
14
- export * from './builders.js';
15
- export * from './component.js';
16
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/markdown/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}