@lark-apaas/coding-template-nestjs-react-fullstack 0.1.54 → 0.1.55-alpha.20261030081308

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 (30) hide show
  1. package/package.json +1 -1
  2. package/template/client/src/components/business-ui/README.md +10 -0
  3. package/template/client/src/components/business-ui/api/user-profiles/queries.ts +1 -7
  4. package/template/client/src/components/business-ui/comment/README.md +177 -0
  5. package/template/client/src/components/business-ui/comment/ccm-document-source.ts +252 -0
  6. package/template/client/src/components/business-ui/comment/comment-content.tsx +231 -0
  7. package/template/client/src/components/business-ui/comment/comment-input.tsx +536 -0
  8. package/template/client/src/components/business-ui/comment/comment-provider.tsx +213 -0
  9. package/template/client/src/components/business-ui/comment/content.ts +261 -0
  10. package/template/client/src/components/business-ui/comment/dom-editor.ts +582 -0
  11. package/template/client/src/components/business-ui/comment/image-attachments.tsx +375 -0
  12. package/template/client/src/components/business-ui/comment/mention-provider.tsx +168 -0
  13. package/template/client/src/components/business-ui/comment/mention-suggestions.tsx +411 -0
  14. package/template/client/src/components/business-ui/comment/mention-view.tsx +171 -0
  15. package/template/client/src/components/business-ui/comment/types.ts +149 -0
  16. package/template/client/src/components/business-ui/user-display/user-display.tsx +0 -13
  17. package/template/client/src/components/business-ui/user-profile/user-profile.tsx +146 -397
  18. package/template/client/src/components/business-ui/user-select/user-pill.tsx +0 -13
  19. package/template/client/src/hooks/use-example.ts +45 -36
  20. package/template/client/src/pages/ExamplePage/ExamplePage.tsx +7 -8
  21. package/template/client/src/tailwind-theme.css +5 -6
  22. package/template/eslint.config.js +0 -6
  23. package/template/package-lock.json +94 -73
  24. package/template/package.json +5 -4
  25. package/template/server/modules/hello/hello.controller.ts +4 -8
  26. package/template/server/modules/hello/hello.service.ts +3 -5
  27. package/template/shared/api.interface.ts +1 -8
  28. package/template/client/src/components/business-ui/user-profile/lark-card-pool.ts +0 -217
  29. package/template/client/src/lib/api-error.ts +0 -36
  30. package/template/server/modules/hello/hello.dto.ts +0 -21
@@ -0,0 +1,411 @@
1
+ import * as React from 'react';
2
+ import { useLayoutEffect, useEffect, useRef, useState } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { autoUpdate } from '@floating-ui/dom';
5
+ import { LoaderCircle } from 'lucide-react';
6
+ import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
7
+ import { Button } from '@/components/ui/button';
8
+ import { ScrollArea } from '@/components/ui/scroll-area';
9
+ import { cn } from '@/lib/utils';
10
+ import { DocumentIcon, COMMENT_THEME_CLASS } from './mention-view';
11
+ import { mentionKey, safeUrl } from './content';
12
+ import type { MentionOption, CommentDataSource, MentionKind } from './types';
13
+
14
+ function HighlightedLabel({ label, query }: { label: string; query: string }) {
15
+ const index = query ? label.toLowerCase().indexOf(query.toLowerCase()) : -1;
16
+ if (index < 0) return <>{label}</>;
17
+ return (
18
+ <>
19
+ {label.slice(0, index)}
20
+ <span className="text-primary">
21
+ {label.slice(index, index + query.length)}
22
+ </span>
23
+ {label.slice(index + query.length)}
24
+ </>
25
+ );
26
+ }
27
+
28
+ type Props = {
29
+ container?: HTMLElement;
30
+ anchor: () => DOMRect | null;
31
+ editorElement: HTMLElement;
32
+ id: string;
33
+ items: MentionOption[];
34
+ selected: number;
35
+ query?: string;
36
+ onSelect: (item: MentionOption) => void;
37
+ onHover: (index: number) => void;
38
+ loading: boolean;
39
+ error?: string;
40
+ retry: () => void;
41
+ loadMore: () => void;
42
+ hasMore: boolean;
43
+ };
44
+
45
+ /** Source: miaoda UdMentionPlugin + UD MentionPanel/OptionItem/index.less.
46
+ * hiddenTab=true, footer=false, 360px width, 48px rows, 2px row gap,
47
+ * 8px vertical list padding, 8px row margin, 8px avatar gap.
48
+ */
49
+ export function MentionSuggestions({
50
+ container,
51
+ anchor,
52
+ editorElement,
53
+ id,
54
+ items,
55
+ selected,
56
+ query = '',
57
+ onSelect,
58
+ onHover,
59
+ loading,
60
+ error,
61
+ retry,
62
+ loadMore,
63
+ hasMore,
64
+ }: Props) {
65
+ const panel = React.useRef<HTMLDivElement>(null);
66
+ const initialLoading = loading && !items.length;
67
+ const list = React.useRef<HTMLDivElement>(null);
68
+ useLayoutEffect(() => {
69
+ const element = panel.current;
70
+ if (!element) return;
71
+ const reference = {
72
+ contextElement: editorElement,
73
+ getBoundingClientRect: () =>
74
+ anchor() || editorElement.getBoundingClientRect(),
75
+ };
76
+ const update = () => {
77
+ const rect = reference.getBoundingClientRect();
78
+ const viewport = document.documentElement;
79
+ const width = viewport.clientWidth || window.innerWidth;
80
+ const height = viewport.clientHeight || window.innerHeight;
81
+ const below = height - rect.bottom;
82
+ const above = rect.top;
83
+ // Match getMentionPositionInfo's preferred 417px box, including when the list is short.
84
+ const up = below < 431 && (above >= 431 || above > below);
85
+ const maxHeight = Math.max(64, Math.min(417, (up ? above : below) - 14));
86
+ const boxWidth = Math.min(360, Math.max(0, width - 24));
87
+ element.style.width = `${boxWidth}px`;
88
+ const computed = window.getComputedStyle(element);
89
+ const borderHeight =
90
+ (parseFloat(computed.borderTopWidth) || 0) +
91
+ (parseFloat(computed.borderBottomWidth) || 0);
92
+ // The actual list includes padding, row margins and wrapped status text.
93
+ // Its measured size must fit inside the panel's borders, not underneath them.
94
+ const contentHeight = list.current?.getBoundingClientRect().height || 0;
95
+ const naturalHeight = Math.max(
96
+ 64,
97
+ Math.ceil(contentHeight + borderHeight),
98
+ );
99
+ const boxHeight = Math.min(naturalHeight, maxHeight);
100
+ const preferLeft = width - rect.left < 372 && rect.right >= 372;
101
+ const left = Math.max(
102
+ 12,
103
+ Math.min(
104
+ preferLeft ? rect.right - boxWidth : rect.left,
105
+ width - boxWidth - 12,
106
+ ),
107
+ );
108
+ Object.assign(element.style, {
109
+ left: `${left}px`,
110
+ top: `${up ? Math.max(12, rect.top - boxHeight - 2) : rect.bottom + 2}px`,
111
+ width: `${boxWidth}px`,
112
+ height: `${boxHeight}px`,
113
+ visibility: 'visible',
114
+ });
115
+ };
116
+ const stopPositioning = autoUpdate(reference, element, update);
117
+ const observer =
118
+ typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(update);
119
+ if (list.current) observer?.observe(list.current);
120
+ return () => {
121
+ stopPositioning();
122
+ observer?.disconnect();
123
+ };
124
+ }, [
125
+ anchor,
126
+ editorElement,
127
+ container,
128
+ items,
129
+ initialLoading,
130
+ error,
131
+ hasMore,
132
+ query,
133
+ ]);
134
+ useLayoutEffect(() => {
135
+ panel.current
136
+ ?.querySelector('[aria-selected="true"]')
137
+ ?.scrollIntoView({ block: 'nearest' });
138
+ }, [selected, items]);
139
+ return createPortal(
140
+ <div
141
+ ref={panel}
142
+ data-comment-suggestions
143
+ className={cn(
144
+ COMMENT_THEME_CLASS,
145
+ 'fixed z-50 overflow-hidden rounded-[6px] border border-border bg-popover text-popover-foreground shadow-[0_6px_24px_rgba(31,35,41,0.08),0_10px_15px_-3px_rgba(0,0,0,0.1),0_4px_6px_-4px_rgba(0,0,0,0.1)]',
146
+ )}
147
+ style={{
148
+ visibility: 'hidden',
149
+ width: 360,
150
+ minHeight: 64,
151
+ maxHeight: 417,
152
+ }}
153
+ onPointerDown={(event) => event.preventDefault()}
154
+ onWheel={(event) => event.stopPropagation()}
155
+ >
156
+ <span role="status" className="sr-only">
157
+ {loading ? '正在搜索' : `${items.length} 个结果`}
158
+ </span>
159
+ <ScrollArea className="h-full w-full">
160
+ <div
161
+ ref={list}
162
+ id={id}
163
+ role="listbox"
164
+ aria-label="提及搜索结果"
165
+ aria-busy={loading}
166
+ className="py-2"
167
+ >
168
+ {items.map((item, index) => {
169
+ const active = selected === index;
170
+ return (
171
+ <div
172
+ key={mentionKey(item.ref)}
173
+ id={`${id}-${index}`}
174
+ role="option"
175
+ aria-selected={active}
176
+ onPointerMove={() => {
177
+ if (!active) onHover(index);
178
+ }}
179
+ onClick={() => {
180
+ onSelect(item);
181
+ }}
182
+ className={cn(
183
+ 'mx-2 mb-0.5 flex h-12 cursor-pointer items-center gap-2 rounded-[4px] px-2 py-1',
184
+ active && 'bg-[var(--comment-hover)]',
185
+ !active && 'hover:bg-[var(--comment-hover)]',
186
+ )}
187
+ >
188
+ {item.ref.kind === 'user' ? (
189
+ <Avatar className="size-8 shrink-0">
190
+ <AvatarImage src={safeUrl(item.avatarUrl)} alt="" />
191
+ <AvatarFallback className="bg-primary text-sm text-primary-foreground">
192
+ {Array.from(item.label.trim())[0] || '@'}
193
+ </AvatarFallback>
194
+ </Avatar>
195
+ ) : (
196
+ <DocumentIcon
197
+ refValue={item.ref}
198
+ metadata={item.document}
199
+ variant="option"
200
+ />
201
+ )}
202
+ <div className="min-w-0 flex-1">
203
+ <div
204
+ className="truncate text-sm font-normal leading-[22px] text-foreground"
205
+ title={item.label}
206
+ >
207
+ <HighlightedLabel label={item.label} query={query} />
208
+ {item.ref.kind === 'document' && item.isExternal ? (
209
+ <span className="ml-1 rounded-[2px] border border-border px-1 text-xs text-subtle-foreground">
210
+ 外部
211
+ </span>
212
+ ) : null}
213
+ </div>
214
+ {item.description ? (
215
+ <div
216
+ className="truncate text-xs leading-5 text-muted-foreground"
217
+ title={item.description}
218
+ >
219
+ {item.description}
220
+ </div>
221
+ ) : null}
222
+ </div>
223
+ </div>
224
+ );
225
+ })}
226
+ {initialLoading ? (
227
+ <div role="status" aria-label="正在搜索" className="px-4">
228
+ {[0, 1, 2, 3].map((key) => (
229
+ <div
230
+ key={key}
231
+ aria-hidden
232
+ className="flex h-12 animate-pulse items-center gap-2 py-1"
233
+ >
234
+ <span className="size-8 shrink-0 rounded-full bg-muted" />
235
+ <span className="space-y-1.5">
236
+ <span className="block h-3.5 w-[70px] rounded-md bg-muted" />
237
+ <span className="block h-3.5 w-[200px] max-w-full rounded-md bg-muted" />
238
+ </span>
239
+ </div>
240
+ ))}
241
+ </div>
242
+ ) : null}
243
+ {!items.length && !loading && !error ? (
244
+ <div
245
+ role="status"
246
+ className="px-4 py-4 text-sm leading-[22px] text-foreground"
247
+ >
248
+ {query ? '没有匹配结果,换个关键词试试吧' : '列表为空'}
249
+ </div>
250
+ ) : null}
251
+ {error ? (
252
+ <div role="alert" className="px-4 py-4 text-sm leading-[22px]">
253
+ <button
254
+ type="button"
255
+ className="inline text-left"
256
+ disabled={loading}
257
+ onClick={retry}
258
+ title="点击重新加载"
259
+ >
260
+ <span
261
+ aria-hidden
262
+ className="mr-2 inline-block not-italic [line-height:0]"
263
+ style={{ color: 'var(--comment-warning)' }}
264
+ >
265
+ <svg
266
+ aria-hidden
267
+ viewBox="0 0 24 24"
268
+ fill="none"
269
+ style={{
270
+ width: '1em',
271
+ height: '1em',
272
+ display: 'inline-block',
273
+ verticalAlign: '-0.14em',
274
+ }}
275
+ >
276
+ <path
277
+ d="M23 12c0 6.075-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1s11 4.925 11 11ZM12 7a1 1 0 0 0-1 1v5a1 1 0 1 0 2 0V8a1 1 0 0 0-1-1Zm0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"
278
+ fill="currentColor"
279
+ />
280
+ </svg>
281
+ </span>
282
+ 加载失败,请检查网络后重试
283
+ </button>
284
+ </div>
285
+ ) : null}
286
+ {hasMore ? (
287
+ <Button
288
+ type="button"
289
+ variant="ghost"
290
+ size="sm"
291
+ className="mx-3 my-2 text-primary"
292
+ disabled={loading}
293
+ onClick={loadMore}
294
+ >
295
+ 加载更多
296
+ </Button>
297
+ ) : null}
298
+ </div>
299
+ </ScrollArea>
300
+ {loading && items.length ? (
301
+ <div className="absolute inset-0 flex items-center justify-center bg-popover/60">
302
+ <LoaderCircle
303
+ aria-label="正在搜索"
304
+ className="size-5 animate-spin text-primary"
305
+ />
306
+ </div>
307
+ ) : null}
308
+ </div>,
309
+ container || document.body,
310
+ );
311
+ }
312
+
313
+ interface Result {
314
+ key: string;
315
+ items: MentionOption[];
316
+ nextCursor?: string;
317
+ loading: boolean;
318
+ error?: string;
319
+ }
320
+ export function useMentionSearch(
321
+ source: CommentDataSource,
322
+ session: { id: number; query: string } | null,
323
+ kind: MentionKind,
324
+ ) {
325
+ const key = JSON.stringify([
326
+ source.scopeKey,
327
+ session?.id,
328
+ session?.query,
329
+ kind,
330
+ ]);
331
+ const [state, setState] = useState<Result>({
332
+ key: '',
333
+ items: [],
334
+ loading: false,
335
+ });
336
+ const controller = useRef<AbortController | null>(null);
337
+ const currentKey = useRef(key);
338
+ currentKey.current = key;
339
+ const runRef = useRef<(cursor?: string) => void>(() => {});
340
+ useEffect(() => {
341
+ const abort = new AbortController();
342
+ controller.current = abort;
343
+ let pending = false;
344
+ const run = async (cursor?: string) => {
345
+ if (!session || pending) return;
346
+ pending = true;
347
+ setState((previous) => ({
348
+ key,
349
+ items: cursor && previous.key === key ? previous.items : [],
350
+ loading: true,
351
+ }));
352
+ try {
353
+ const args = { kind, cursor, signal: abort.signal };
354
+ const result =
355
+ !session.query && source.recommend
356
+ ? await source.recommend(args)
357
+ : await source.search({ ...args, query: session.query });
358
+ if (abort.signal.aborted || currentKey.current !== key) return;
359
+ setState((previous) => {
360
+ const unique = new Map(
361
+ (cursor ? previous.items : []).map((item) => [
362
+ mentionKey(item.ref),
363
+ item,
364
+ ]),
365
+ );
366
+ for (const item of result.items)
367
+ unique.set(mentionKey(item.ref), item);
368
+ return {
369
+ key,
370
+ items: [...unique.values()],
371
+ nextCursor: result.nextCursor,
372
+ loading: false,
373
+ };
374
+ });
375
+ } catch (error) {
376
+ if (!abort.signal.aborted && currentKey.current === key)
377
+ setState((previous) => ({
378
+ ...previous,
379
+ key,
380
+ loading: false,
381
+ error: error instanceof Error ? error.message : '搜索失败,请重试',
382
+ nextCursor: cursor,
383
+ }));
384
+ } finally {
385
+ pending = false;
386
+ }
387
+ };
388
+ runRef.current = (cursor) => {
389
+ void run(cursor);
390
+ };
391
+ const timer = session
392
+ ? setTimeout(
393
+ () => {
394
+ void run();
395
+ },
396
+ session.query ? 200 : 0,
397
+ )
398
+ : undefined;
399
+ return () => {
400
+ clearTimeout(timer);
401
+ abort.abort();
402
+ };
403
+ }, [source, key]);
404
+ const result =
405
+ state.key === key ? state : { key, items: [], loading: Boolean(session) };
406
+ return {
407
+ ...result,
408
+ loadMore: () => runRef.current(result.nextCursor),
409
+ retry: () => runRef.current(),
410
+ };
411
+ }
@@ -0,0 +1,171 @@
1
+ import * as React from 'react';
2
+ import type { DocumentMentionMetadata, MentionRef } from './types';
3
+
4
+ export function DocumentIcon({
5
+ refValue,
6
+ metadata,
7
+ variant = 'inline',
8
+ }: {
9
+ refValue: MentionRef;
10
+ metadata?: DocumentMentionMetadata;
11
+ variant?: 'inline' | 'option';
12
+ }) {
13
+ const emoji = documentEmoji(metadata?.iconInfo);
14
+ const size = variant === 'option' ? 32 : 14;
15
+ const className =
16
+ variant === 'option'
17
+ ? 'inline-block shrink-0 text-center leading-none'
18
+ : '-mb-0.5 mr-0.5 inline-block text-center leading-none';
19
+ return emoji ? (
20
+ <span
21
+ aria-hidden
22
+ className={className}
23
+ style={{ width: size, height: size, fontSize: size }}
24
+ >
25
+ {emoji}
26
+ </span>
27
+ ) : (
28
+ <span
29
+ aria-hidden
30
+ className={className}
31
+ style={{ width: size, height: size }}
32
+ // Only bundled static UD SVGs enter this HTML sink; never document metadata.
33
+ dangerouslySetInnerHTML={{
34
+ __html: documentIconSvg(refValue, metadata, variant),
35
+ }}
36
+ />
37
+ );
38
+ }
39
+
40
+ const outline: Record<string, keyof typeof DOCUMENT_ICONS> = {
41
+ '1': 'FileDocV2Outlined',
42
+ '2': 'FileDocV2Outlined',
43
+ '22': 'FileDocV2Outlined',
44
+ '16': 'FileDocV2Outlined',
45
+ '44': 'FileDocV2Outlined',
46
+ '3': 'FileSheetV2Outlined',
47
+ '8': 'FileBitableV2Outlined',
48
+ '11': 'FileMindnoteV2Outlined',
49
+ '12': 'FileUnknowV2Outlined',
50
+ '15': 'FileLinkSlideV2Outlined',
51
+ '30': 'FileSlidesV2Outlined',
52
+ '38': 'FileBoardV2Outlined',
53
+ };
54
+ const colorful: Record<string, keyof typeof DOCUMENT_ICONS> = {
55
+ '1': 'FileRoundDocV2Colorful',
56
+ '2': 'FileRoundDocV2Colorful',
57
+ '22': 'FileRoundDocV2Colorful',
58
+ '3': 'FileRoundSheetV2Colorful',
59
+ '8': 'FileRoundBitableV2Colorful',
60
+ '11': 'FileRoundMindnoteV2Colorful',
61
+ '12': 'FileRoundUnknowV2Colorful',
62
+ '15': 'FileRoundPptV2Colorful',
63
+ '30': 'FileRoundSlidesV2Colorful',
64
+ };
65
+
66
+ export function documentIconSvg(
67
+ ref: MentionRef,
68
+ meta?: DocumentMentionMetadata,
69
+ variant: 'inline' | 'option' = 'inline',
70
+ ) {
71
+ const type = ref.kind === 'document' ? ref.resourceType : '';
72
+ // Inline AtSuite uses the mention type; the search panel uses a wiki's real type.
73
+ const iconType =
74
+ variant === 'option' && type === '16' && meta?.subType
75
+ ? String(meta.subType)
76
+ : type;
77
+ return DOCUMENT_ICONS[
78
+ variant === 'option'
79
+ ? colorful[iconType] || 'FileRoundDocV2Colorful'
80
+ : outline[iconType] || 'FileDocV2Outlined'
81
+ ];
82
+ }
83
+
84
+ export function documentEmoji(iconInfo?: string): string {
85
+ if (!iconInfo) return '';
86
+ try {
87
+ const { type, key } = JSON.parse(decodeURIComponent(iconInfo));
88
+ if (
89
+ type !== 1 ||
90
+ typeof key !== 'string' ||
91
+ !/^[0-9a-f]+(?:-[0-9a-f]+)*$/i.test(key)
92
+ )
93
+ return '';
94
+ return String.fromCodePoint(
95
+ ...key.split('-').map((part) => parseInt(part, 16)),
96
+ );
97
+ } catch {
98
+ return '';
99
+ }
100
+ }
101
+
102
+ /** Values from miaoda/design themes.css and comment/utils/comment-at-style.ts. */
103
+ export const COMMENT_THEME_CLASS = [
104
+ 'font-sans text-sm leading-[22px]',
105
+ '[--foreground:#1f2329] [--background:#fff] [--card:#fff] [--card-foreground:#1f2329]',
106
+ '[--popover:#fff] [--popover-foreground:#1f2329] [--border:#dee0e3]',
107
+ '[--primary:#1456f0] [--primary-foreground:#fff] [--button-outline:#dee0e3]',
108
+ '[--primary-border:transparent] [--comment-warning:#ff811a] [--muted:#f2f3f5] [--muted-foreground:#8f959e]',
109
+ '[--accent:rgba(31,35,41,0.05)] [--accent-foreground:#1f2329] [--subtle-foreground:#646a73]',
110
+ '[--info:#1456f0] [--info-foreground:#f5f7ff] [--comment-hover:rgba(31,35,41,0.05)]',
111
+ 'dark:[--foreground:#f0f0f2] dark:[--background:#141414] dark:[--card:#292929]',
112
+ 'dark:[--card-foreground:#f0f0f2] dark:[--popover:#292929] dark:[--popover-foreground:#f0f0f2]',
113
+ 'dark:[--border:rgba(255,255,255,0.15)] dark:[--primary:#4c88ff]',
114
+ 'dark:[--muted:#292929] dark:[--muted-foreground:#a3a3a3] dark:[--subtle-foreground:#a3a3a3]',
115
+ 'dark:[--accent:rgba(255,255,255,0.05)] dark:[--accent-foreground:#f0f0f2]',
116
+ 'dark:[--comment-hover:rgba(255,255,255,0.08)]',
117
+ ].join(' ');
118
+
119
+ export const USER_MENTION_CLASS = 'inline-block max-w-[220px] px-0.5 align-top';
120
+ export const USER_MENTION_LABEL_CLASS =
121
+ 'mt-px block cursor-pointer truncate rounded-[4px] px-0.5 text-primary no-underline leading-5 hover:bg-accent';
122
+ export const USER_MENTION_SELF_CLASS =
123
+ 'mt-px block cursor-pointer truncate rounded px-1 bg-[var(--info)] text-[var(--info-foreground)] no-underline leading-5';
124
+ export const DOCUMENT_MENTION_CLASS =
125
+ 'mx-0.5 inline cursor-pointer break-words rounded-[2px] p-0.5 text-primary no-underline hover:bg-accent';
126
+ export const DOCUMENT_MENTION_UNREADABLE_CLASS =
127
+ 'mx-0.5 inline cursor-pointer break-words rounded-[2px] p-0.5 text-subtle-foreground no-underline hover:bg-muted';
128
+ export function atUserLabel(label: string) {
129
+ return /^\s*@/.test(label) ? label : `@${label}`;
130
+ }
131
+
132
+ /** Editable mentions are blue pills; rounded-full keeps semicircular ends for long names. */
133
+ export const INPUT_USER_MENTION_CLASS =
134
+ 'mx-0.5 inline-flex h-5 max-w-[220px] items-center rounded-full bg-primary px-1.5 align-baseline text-primary-foreground leading-5';
135
+ export const INPUT_USER_MENTION_LABEL_CLASS =
136
+ 'min-w-0 truncate leading-5 text-inherit';
137
+
138
+ // Static SVGs from @universe-design/icons-react 3.350.0, matching miaoda ud-provider-icons V2.
139
+ // Only the document glyphs are included; no icon library runtime dependency.
140
+ const DOCUMENT_ICONS = {
141
+ FileDocV2Outlined:
142
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileDocV2Outlined"><path d="M16.716 14.36a.783.783 0 0 1 0 1.565H7.282a.783.783 0 0 1 0-1.565h9.434Zm-5.001-4.229a.8.8 0 0 1 0 1.6h-4.4a.8.8 0 0 1 0-1.6h4.4Z" fill="currentColor"></path><path d="M15.153 1.5c.75.006 1.472.36 2.02.874l3.875 3.63c.607.569.952 1.366.952 2.198v8.28c0 3.323-2.687 6.017-6 6.017H8c-3.313 0-6-2.694-6-6.016v-8.97C2 4.17 4.72 1.469 8.056 1.5h7.097ZM8.037 3.503A4.006 4.006 0 0 0 4 7.514v8.969a4.006 4.006 0 0 0 4 4.01h8c2.209 0 4-1.796 4-4.01v-8.28c0-.083-.012-.164-.031-.243h-2.42l-.203-.01a2.005 2.005 0 0 1-1.796-1.996V3.666c0-.137-.152-.16-.29-.162H8.038Z" fill="currentColor"></path></svg>',
143
+ FileSheetV2Outlined:
144
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileSheetV2Outlined"><path d="M12 7.96c.774 0 1.5.05 2.133.115a3.068 3.068 0 0 1 2.753 2.76A20.8 20.8 0 0 1 17 12.974c0 .775-.048 1.504-.114 2.139a3.069 3.069 0 0 1-2.753 2.76c-.634.067-1.36.115-2.133.115-.58 0-1.134-.027-1.642-.069l-.49-.046a3.065 3.065 0 0 1-2.714-2.488l-.04-.272A20.772 20.772 0 0 1 7 12.973c0-.58.027-1.136.068-1.645l.046-.493a3.066 3.066 0 0 1 2.482-2.72l.271-.04A20.58 20.58 0 0 1 12 7.96Zm-.386 8.418a17.484 17.484 0 0 0 2.353-.101 1.466 1.466 0 0 0 1.327-1.33c.061-.59.106-1.263.106-1.973 0-.125-.003-.25-.005-.371h-3.78v3.775ZM8.6 12.974c0 .7.043 1.364.103 1.95l.027.18c.13.634.636 1.103 1.303 1.173l.18.016v-3.69H8.605c-.002.122-.004.246-.004.37Zm1.455-3.306-.18.028a1.46 1.46 0 0 0-1.169 1.306l-.02.196h1.528V9.653l-.16.015Zm1.56-.098v1.628h3.697c-.006-.066-.011-.132-.018-.196a1.466 1.466 0 0 0-1.327-1.33 18.991 18.991 0 0 0-2.353-.102Z" fill="currentColor"></path><path d="M15.153 1.5c.75.007 1.472.362 2.02.875l3.875 3.63c.607.569.952 1.365.952 2.198v8.28c0 3.323-2.687 6.017-6 6.017H8c-3.313 0-6-2.694-6-6.016v-8.97C2 4.172 4.72 1.47 8.056 1.5h7.097ZM8.037 3.505A4.005 4.005 0 0 0 4 7.515v8.969a4.006 4.006 0 0 0 4 4.01h8c2.209 0 4-1.796 4-4.01v-8.28c0-.083-.012-.164-.031-.243h-2.42l-.203-.01a2.005 2.005 0 0 1-1.796-1.996V3.667c0-.138-.152-.16-.29-.162H8.038Z" fill="currentColor"></path></svg>',
145
+ FileBitableV2Outlined:
146
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileBitableV2Outlined"><path d="M13.515 8.189a1.001 1.001 0 0 1 1.32.084l1.889 1.89a1 1 0 0 1 .084 1.319l-1.174 1.514 1.174 1.516a1 1 0 0 1-.084 1.32l-1.889 1.888a1.001 1.001 0 0 1-1.32.084L12 16.63l-1.513 1.174a1 1 0 0 1-1.32-.083l-1.89-1.89a1 1 0 0 1-.085-1.32l1.174-1.515-1.174-1.514a1 1 0 0 1 .084-1.32l1.891-1.89a1 1 0 0 1 1.32-.082L12 9.363l1.515-1.174Zm-5.149 4.807L12 16.63l3.634-3.634L12 9.363l-3.634 3.633Z" fill="currentColor"></path><path d="M15.153 1.5c.75.007 1.472.362 2.02.875l3.875 3.63c.607.569.952 1.365.952 2.198v8.28c0 3.323-2.686 6.017-6 6.017H8c-3.314 0-6-2.694-6-6.016v-8.97C2 4.172 4.72 1.47 8.056 1.5h7.097ZM8.037 3.505A4.005 4.005 0 0 0 4 7.515v8.969a4.006 4.006 0 0 0 4 4.01h8c2.209 0 4-1.796 4-4.01v-8.28c0-.083-.012-.164-.031-.243h-2.42l-.203-.01a2.004 2.004 0 0 1-1.796-1.996V3.667c0-.138-.152-.16-.29-.162H8.038Z" fill="currentColor"></path></svg>',
147
+ FileMindnoteV2Outlined:
148
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileMindnoteV2Outlined"><path d="M12 7.96a1.403 1.403 0 0 1 .7 2.616v.666a4.909 4.909 0 0 1 4.2 4.862v.33a1.403 1.403 0 0 1-.8 2.554 1.403 1.403 0 0 1-.601-2.67v-.214a3.507 3.507 0 0 0-2.799-3.438v3.705a1.403 1.403 0 0 1-.7 2.617 1.403 1.403 0 0 1-.7-2.617v-3.705a3.508 3.508 0 0 0-2.8 3.438v.214a1.403 1.403 0 0 1-.6 2.67 1.403 1.403 0 0 1-.8-2.554v-.33a4.909 4.909 0 0 1 4.2-4.861v-.667A1.403 1.403 0 0 1 12 7.96Z" fill="currentColor"></path><path d="M15.153 2c.75.006 1.472.36 2.02.874l3.875 3.63c.607.569.952 1.366.952 2.198v8.28C22 20.306 19.313 23 16 23H8c-3.313 0-6-2.694-6-6.016v-8.97C2 4.67 4.72 1.969 8.056 2h7.097ZM8.037 4.003A4.006 4.006 0 0 0 4 8.014v8.969a4.006 4.006 0 0 0 4 4.01h8c2.209 0 4-1.796 4-4.01v-8.28c0-.083-.012-.164-.031-.243h-2.42l-.203-.01a2.005 2.005 0 0 1-1.796-1.996V4.166c0-.137-.152-.16-.29-.162H8.038Z" fill="currentColor"></path></svg>',
149
+ FileUnknowV2Outlined:
150
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileUnknowV2Outlined"><path d="M12.001 16.484a1.002 1.002 0 0 1 0 2.005 1.001 1.001 0 0 1 0-2.006ZM12 7.694c1.692 0 3.008 1.423 3.009 3.109 0 .93-.397 1.774-1.033 2.347-.342.307-.644.575-.872.863-.222.282-.303.5-.303.683a.801.801 0 1 1-1.6 0c0-.691.314-1.254.65-1.678.33-.418.748-.785 1.055-1.062.304-.273.503-.685.503-1.153 0-.863-.662-1.506-1.409-1.506s-1.408.643-1.408 1.506c0 .148.02.291.056.425a.8.8 0 1 1-1.543.425 3.218 3.218 0 0 1-.113-.85c0-1.686 1.316-3.11 3.008-3.11Z" fill="currentColor"></path><path d="M15.153 1.5c.75.007 1.472.362 2.02.875l3.875 3.63c.607.569.952 1.365.952 2.198v8.28c0 3.323-2.686 6.017-6 6.017H8c-3.314 0-6-2.694-6-6.016v-8.97C2 4.172 4.72 1.47 8.056 1.5h7.097ZM8.037 3.505A4.005 4.005 0 0 0 4 7.515v8.969a4.006 4.006 0 0 0 4 4.01h8c2.209 0 4-1.796 4-4.01v-8.28c0-.083-.012-.164-.031-.243h-2.42l-.203-.01a2.004 2.004 0 0 1-1.796-1.996V3.667c0-.138-.152-.16-.29-.162H8.038Z" fill="currentColor"></path></svg>',
151
+ FileLinkSlideV2Outlined:
152
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileLinkSlideV2Outlined"><path d="M15.204 17.49A2 2 0 0 0 17 15.5v-5a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2v5l.01.204a2 2 0 0 0 1.786 1.785L9 17.5h6l.204-.01ZM9.3 15.5a.8.8 0 0 1-.8-.8v-3.6a.6.6 0 0 1 .6-.6h5.8a.6.6 0 0 1 .6.6v3.8a.6.6 0 0 1-.6.6H9.3Z" fill="currentColor"></path><path d="M16 22.5c3.314 0 6-2.694 6-6.016v-8.28c0-.834-.345-1.63-.952-2.199l-3.874-3.63c-.549-.513-1.27-.868-2.02-.875H8.055C4.72 1.47 2 4.171 2 7.515v8.969C2 19.806 4.686 22.5 8 22.5h8Zm-8-2.006c-2.21 0-4-1.795-4-4.01v-8.97a4.005 4.005 0 0 1 4.037-4.009h7.224c.137.003.289.025.289.162v2.288c0 1.039.787 1.893 1.796 1.995l.204.011h2.419c.02.079.03.16.031.242v8.28a4.004 4.004 0 0 1-4 4.011H8Z" fill="currentColor"></path></svg>',
153
+ FileSlidesV2Outlined:
154
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileSlidesV2Outlined"><path d="M11.933 18.423c3 0 5.433-2.44 5.433-5.448 0-3.009-2.433-5.447-5.433-5.447S6.5 9.966 6.5 12.975c0 3.008 2.432 5.448 5.433 5.448Zm0-1.604A3.839 3.839 0 0 1 8.1 12.975a3.843 3.843 0 0 1 3.053-3.765v3.334c0 .72.582 1.304 1.3 1.304h3.213a3.838 3.838 0 0 1-3.733 2.97Zm.82-7.599a3.844 3.844 0 0 1 2.943 3.023h-2.943V9.22Z" fill="currentColor"></path><path d="M16 22.5c3.314 0 6-2.694 6-6.016v-8.28c0-.834-.345-1.63-.952-2.199l-3.874-3.63c-.549-.513-1.27-.868-2.02-.875H8.055C4.72 1.47 2 4.171 2 7.515v8.969C2 19.806 4.686 22.5 8 22.5h8Zm-8-2.006c-2.21 0-4-1.795-4-4.01v-8.97a4.005 4.005 0 0 1 4.037-4.009h7.224c.137.003.289.025.289.162v2.288c0 1.039.787 1.893 1.796 1.995l.204.011h2.419c.02.079.03.16.031.242v8.28a4.004 4.004 0 0 1-4 4.011H8Z" fill="currentColor"></path></svg>',
155
+ FileBoardV2Outlined:
156
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileBoardV2Outlined"><path d="M13.633 8.19c.397.018.75.182 1.054.478.236.229.365.507.373.826.007.3-.08.63-.24.986-.16.35-.384.743-.67 1.175-.282.425-.61.898-.981 1.417l-.812 1.129c-.222.309-.403.567-.543.772-.14.204-.24.366-.305.485h-.001a.716.716 0 0 0-.084.218c0 .01 0 .016.003.021h.021a.91.91 0 0 0 .276-.124 5.89 5.89 0 0 0 .564-.405c.235-.185.53-.433.883-.745.379-.33.717-.618 1.014-.864v-.001c.304-.249.582-.445.83-.584l.193-.097c.19-.084.378-.129.56-.126.259.004.49.117.688.31l.105.116a.919.919 0 0 1 .185.396h.002c.04.185.025.383-.031.588h-.001a3.346 3.346 0 0 1-.25.633c-.055.112-.116.23-.182.353l-.214.386c-.16.28-.29.517-.393.707l-.001-.002a3.007 3.007 0 0 0-.17.367c.072-.032.172-.088.3-.18l.003-.002c.155-.111.341-.27.557-.48h.001a.544.544 0 0 1 .334-.154.454.454 0 0 1 .364.138.437.437 0 0 1 .127.4.67.67 0 0 1-.197.349l-.002.001c-.458.448-.888.744-1.288.855-.39.108-.743.069-1-.188l-.003-.002a.942.942 0 0 1-.268-.504l-.01-.082c-.015-.2.02-.406.097-.615a3.89 3.89 0 0 1 .288-.614v-.002c.117-.197.231-.393.344-.587l.304-.535a1.71 1.71 0 0 0 .152-.348l.001-.01a.62.62 0 0 0-.109.053h.001c-.16.1-.366.257-.62.476-.254.219-.538.467-.852.746l-.002.002a18.82 18.82 0 0 1-1.516 1.203l-.001-.001c-.445.311-.851.512-1.218.579l-.001-.001a1.08 1.08 0 0 1-1.015-.313 1.14 1.14 0 0 1-.355-.71H9.92c-.026-.26.021-.537.13-.824v-.002c.11-.28.266-.582.466-.903.197-.318.428-.66.691-1.023l.839-1.165v-.002c.198-.271.39-.542.578-.81.093-.135.18-.265.262-.389l.226-.357c.138-.229.227-.413.274-.556v-.002a.534.534 0 0 0 .025-.103.899.899 0 0 0-.223.11l-.002.001c-.22.138-.515.372-.886.708-.368.333-.8.745-1.295 1.235-.493.489-1.039 1.037-1.639 1.645l-.334.337-.002.002c-.096.096-.18.182-.252.256l-.186.186a3.591 3.591 0 0 1-.131.125 1.083 1.083 0 0 1-.996.256.893.893 0 0 1-.4-.226.925.925 0 0 1-.23-.394l-.002-.004a1.02 1.02 0 0 1-.007-.497c.04-.184.135-.354.272-.508H7.1c.031-.036.073-.08.125-.13l.186-.187.264-.253c.1-.096.213-.208.342-.336v-.001a56.897 56.897 0 0 1 2.495-2.337l.5-.42a9.95 9.95 0 0 1 1.28-.905l.184-.1c.423-.219.81-.332 1.156-.316Z" fill="currentColor"></path><path d="M15.153 1.5c.75.007 1.472.362 2.02.875l3.875 3.63c.607.569.952 1.365.952 2.198v8.28c0 3.323-2.686 6.017-6 6.017H8c-3.314 0-6-2.694-6-6.016v-8.97C2 4.172 4.72 1.47 8.056 1.5h7.097ZM8.037 3.505A4.005 4.005 0 0 0 4 7.515v8.969a4.006 4.006 0 0 0 4 4.01h8c2.209 0 4-1.796 4-4.01v-8.28c0-.083-.012-.164-.031-.243h-2.42l-.203-.01a2.004 2.004 0 0 1-1.796-1.996V3.667c0-.138-.152-.16-.29-.162H8.038Z" fill="currentColor"></path></svg>',
157
+ FileRoundDocV2Colorful:
158
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileRoundDocV2Colorful"><circle cx="12" cy="12" r="12" fill="#F0F4FF"></circle><path opacity="0.99" d="M5.333 11.4v1.2c0 2.24 0 3.36.436 4.216a4 4 0 0 0 1.748 1.748C8.373 19 9.493 19 11.733 19h.533c2.24 0 3.36 0 4.216-.436a4 4 0 0 0 1.748-1.748c.436-.856.436-1.976.436-4.216v-.833c0-.652 0-.978-.073-1.285a2.666 2.666 0 0 0-.32-.77c-.165-.27-.395-.5-.856-.962l-2.501-2.5c-.461-.462-.692-.692-.96-.857a2.667 2.667 0 0 0-.772-.32C12.877 5 12.551 5 11.9 5h-.166c-2.24 0-3.36 0-4.216.436A4 4 0 0 0 5.77 7.184c-.436.856-.436 1.976-.436 4.216Z" fill="#fff"></path><path d="M12.232 4.66c.637 0 1.01-.002 1.364.083a3 3 0 0 1 .867.359c.31.19.573.455 1.023.905l2.167 2.167c.45.45.715.713.905 1.023a3 3 0 0 1 .36.867c.084.354.082.727.082 1.364v1.166c0 1.114 0 1.97-.055 2.654-.056.687-.171 1.23-.417 1.713a4.334 4.334 0 0 1-1.894 1.894c-.483.245-1.025.36-1.713.416-.683.056-1.54.056-2.654.056h-.534c-1.114 0-1.97 0-2.654-.056-.688-.056-1.23-.17-1.713-.416a4.334 4.334 0 0 1-1.894-1.894c-.246-.483-.36-1.026-.417-1.713C5 14.564 5 13.708 5 12.594v-1.2c0-1.115 0-1.972.055-2.655.057-.688.171-1.23.417-1.713a4.334 4.334 0 0 1 1.894-1.894c.482-.246 1.025-.36 1.713-.417.683-.056 1.54-.055 2.654-.055h.5Zm-.499.667c-1.125 0-1.95 0-2.6.053-.646.053-1.091.156-1.464.346a3.673 3.673 0 0 0-1.603 1.603c-.19.373-.293.818-.346 1.464-.053.65-.053 1.475-.053 2.6v1.2c0 1.126 0 1.95.053 2.6.053.647.156 1.092.346 1.465.352.69.913 1.25 1.603 1.602.373.19.818.294 1.464.347.65.053 1.475.053 2.6.053h.534c1.125 0 1.95 0 2.6-.053.646-.053 1.091-.157 1.464-.347a3.666 3.666 0 0 0 1.603-1.602c.19-.373.293-.818.346-1.465.053-.65.053-1.474.053-2.6v-1.165c0-.669-.002-.949-.064-1.208a2.31 2.31 0 0 0-.086-.274.835.835 0 0 0-.208-.071 3.176 3.176 0 0 0-.642-.048v-.004c-.1.002-.216.004-.347.004-.457 0-.808 0-1.09-.02a2.238 2.238 0 0 1-.713-.14c-.54-.22-.97-.649-1.19-1.19a2.254 2.254 0 0 1-.14-.713c-.02-.282-.02-.632-.02-1.09 0-.13.001-.246.003-.347h-.003a3.18 3.18 0 0 0-.048-.642.832.832 0 0 0-.072-.209 2.332 2.332 0 0 0-.273-.085c-.26-.062-.54-.064-1.208-.064h-.499Z" fill="#C0D2FC"></path><path d="M15.214 12.993a.534.534 0 0 1 0 1.066H8.949a.534.534 0 1 1 0-1.066h6.265ZM11.88 9.66a.533.533 0 0 1 0 1.066H8.948a.533.533 0 1 1 0-1.066h2.932Z" fill="#336DF4"></path></svg>',
159
+ FileRoundSheetV2Colorful:
160
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileRoundSheetV2Colorful"><circle cx="12" cy="12" r="12" fill="#E4FAE1"></circle><path opacity="0.99" d="M5.333 11.4v1.2c0 2.24 0 3.36.436 4.216a4 4 0 0 0 1.748 1.748C8.373 19 9.493 19 11.733 19h.533c2.24 0 3.36 0 4.216-.436a4 4 0 0 0 1.748-1.748c.436-.856.436-1.976.436-4.216v-.833c0-.652 0-.978-.073-1.285a2.666 2.666 0 0 0-.32-.77c-.165-.27-.395-.5-.856-.962l-2.501-2.5c-.461-.462-.692-.692-.96-.857a2.667 2.667 0 0 0-.772-.32C12.877 5 12.551 5 11.9 5h-.166c-2.24 0-3.36 0-4.216.436A4 4 0 0 0 5.77 7.184c-.436.856-.436 1.976-.436 4.216Z" fill="#fff"></path><path d="M12.232 4.667c.637 0 1.01-.003 1.364.082a3 3 0 0 1 .867.36c.31.19.573.455 1.023.905l2.167 2.167c.45.45.715.712.905 1.023a3 3 0 0 1 .36.867c.084.354.082.727.082 1.363V12.6c0 1.115 0 1.97-.055 2.654-.056.688-.171 1.23-.417 1.713a4.334 4.334 0 0 1-1.894 1.894c-.483.246-1.025.36-1.713.417-.683.056-1.54.055-2.654.055h-.534c-1.114 0-1.97 0-2.654-.055-.688-.056-1.23-.17-1.713-.417a4.334 4.334 0 0 1-1.894-1.894c-.246-.482-.36-1.025-.417-1.713C5 14.571 5 13.714 5 12.6v-1.2c0-1.115 0-1.971.055-2.655.057-.687.171-1.23.417-1.713A4.334 4.334 0 0 1 7.366 5.14c.482-.246 1.025-.361 1.713-.417.683-.056 1.54-.055 2.654-.055h.5Zm-.499.666c-1.125 0-1.95 0-2.6.054-.646.052-1.091.156-1.464.346a3.666 3.666 0 0 0-1.603 1.602c-.19.373-.293.819-.346 1.465-.053.65-.053 1.474-.053 2.6v1.2c0 1.126 0 1.95.053 2.6.053.646.156 1.092.346 1.465.352.69.913 1.25 1.603 1.602.373.19.818.293 1.464.346.65.053 1.475.053 2.6.053h.534c1.125 0 1.95 0 2.6-.053.646-.053 1.091-.156 1.464-.346a3.667 3.667 0 0 0 1.603-1.602c.19-.373.293-.819.346-1.465.053-.65.053-1.474.053-2.6v-1.166c0-.668-.002-.948-.064-1.208a2.314 2.314 0 0 0-.086-.274.835.835 0 0 0-.208-.07 3.176 3.176 0 0 0-.642-.049V9.83c-.1.002-.216.003-.347.003-.457 0-.808 0-1.09-.019-.283-.019-.508-.057-.713-.14-.54-.22-.97-.65-1.19-1.19a2.254 2.254 0 0 1-.14-.713c-.02-.282-.02-.633-.02-1.09 0-.131.001-.247.003-.348h-.003a3.18 3.18 0 0 0-.048-.642.832.832 0 0 0-.072-.208 2.334 2.334 0 0 0-.273-.085c-.26-.063-.54-.065-1.208-.065h-.499Z" fill="#9EE8A2"></path><path d="M10.704 11.857v3.882l-.126-.008a2.04 2.04 0 0 1-1.809-1.654l-.026-.181a13.763 13.763 0 0 1-.062-2.039h2.023ZM12 9.14c.516 0 1 .033 1.422.077.98.102 1.79 1.413 1.835 1.835v.005h-3.753V9.151c.161-.006.327-.01.496-.01Zm-1.296 1.917H8.742v-.005a2.04 2.04 0 0 1 1.655-1.809l.181-.026.126-.013v1.853Z" fill="#32A645"></path><path d="M15.317 11.844c.007.151.012.306.014.465v.341c-.006.457-.035.886-.074 1.265a2.052 2.052 0 0 1-1.835 1.853 13.639 13.639 0 0 1-1.918.066v-3.99h3.813Z" fill="#5CD168"></path></svg>',
161
+ FileRoundBitableV2Colorful:
162
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileRoundBitableV2Colorful"><circle cx="12" cy="12" r="12" fill="#F5F0FE"></circle><path opacity="0.99" d="M5.333 11.4v1.2c0 2.24 0 3.36.436 4.216a4 4 0 0 0 1.748 1.748C8.373 19 9.493 19 11.733 19h.533c2.24 0 3.36 0 4.216-.436a4 4 0 0 0 1.748-1.748c.436-.856.436-1.976.436-4.216v-.833c0-.652 0-.978-.073-1.285a2.666 2.666 0 0 0-.32-.77c-.165-.27-.395-.5-.856-.962l-2.501-2.5c-.461-.462-.692-.692-.96-.857a2.667 2.667 0 0 0-.772-.32C12.877 5 12.551 5 11.9 5h-.166c-2.24 0-3.36 0-4.216.436A4 4 0 0 0 5.77 7.184c-.436.856-.436 1.976-.436 4.216Z" fill="#fff"></path><path d="M12.232 4.667c.637 0 1.01-.003 1.364.082a3 3 0 0 1 .867.36c.31.19.573.455 1.023.905l2.167 2.167c.45.45.715.712.905 1.023a3 3 0 0 1 .36.867c.084.354.082.727.082 1.363V12.6c0 1.115 0 1.97-.055 2.655-.056.687-.171 1.23-.417 1.712a4.334 4.334 0 0 1-1.894 1.894c-.483.246-1.025.36-1.713.417-.683.056-1.54.055-2.654.055h-.534c-1.114 0-1.97 0-2.654-.055-.688-.056-1.23-.17-1.713-.417a4.334 4.334 0 0 1-1.894-1.894c-.246-.482-.36-1.025-.417-1.712C5 14.57 5 13.715 5 12.6v-1.2c0-1.115 0-1.97.055-2.655.057-.687.171-1.23.417-1.712a4.334 4.334 0 0 1 1.894-1.894c.482-.246 1.025-.36 1.713-.417.683-.056 1.54-.055 2.654-.055h.5Zm-.499.666c-1.125 0-1.95 0-2.6.054-.646.053-1.091.156-1.464.346a3.671 3.671 0 0 0-1.603 1.602c-.19.373-.293.819-.346 1.465-.053.65-.053 1.474-.053 2.6v1.2c0 1.126 0 1.95.053 2.6.053.646.156 1.092.346 1.465.352.69.913 1.25 1.603 1.602.373.19.818.294 1.464.346.65.053 1.475.054 2.6.054h.534c1.125 0 1.95 0 2.6-.054.646-.052 1.091-.156 1.464-.346a3.666 3.666 0 0 0 1.603-1.602c.19-.373.293-.819.346-1.465.053-.65.053-1.474.053-2.6v-1.166c0-.668-.002-.948-.064-1.207a2.312 2.312 0 0 0-.086-.275.834.834 0 0 0-.208-.07 3.175 3.175 0 0 0-.642-.049V9.83c-.1.002-.216.003-.347.003-.457 0-.808 0-1.09-.019-.283-.019-.508-.057-.713-.14-.54-.22-.97-.65-1.19-1.19a2.254 2.254 0 0 1-.14-.713c-.02-.282-.02-.633-.02-1.09 0-.131.001-.247.003-.348h-.003a3.18 3.18 0 0 0-.048-.642.832.832 0 0 0-.072-.208 2.334 2.334 0 0 0-.273-.085c-.26-.063-.54-.065-1.208-.065h-.499Z" fill="#D9C5FC"></path><path d="m9.621 12.667-.761.983a.667.667 0 0 0 .056.88l1.222 1.221a.667.667 0 0 0 .88.056l.982-.762.983.762a.667.667 0 0 0 .88-.056l1.222-1.221a.667.667 0 0 0 .055-.88l-.761-.983.761-.984a.667.667 0 0 0-.055-.88l-1.222-1.221a.667.667 0 0 0-.88-.056l-.983.762-.982-.761a.667.667 0 0 0-.88.055l-1.222 1.222a.667.667 0 0 0-.056.88l.761.983ZM12 10.288l2.379 2.379L12 15.045l-2.379-2.378L12 10.288Z" fill="#8D55ED"></path></svg>',
163
+ FileRoundMindnoteV2Colorful:
164
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileRoundMindnoteV2Colorful"><circle cx="12" cy="12" r="12" fill="#E7F8FE"></circle><path opacity="0.99" d="M5.333 11.4v1.2c0 2.24 0 3.36.436 4.216a4 4 0 0 0 1.748 1.748C8.373 19 9.493 19 11.733 19h.533c2.24 0 3.36 0 4.216-.436a4 4 0 0 0 1.748-1.748c.436-.856.436-1.976.436-4.216v-.833c0-.652 0-.978-.073-1.285a2.666 2.666 0 0 0-.32-.77c-.165-.27-.395-.5-.856-.962l-2.501-2.5c-.461-.462-.692-.692-.96-.857a2.667 2.667 0 0 0-.772-.32C12.877 5 12.551 5 11.9 5h-.166c-2.24 0-3.36 0-4.216.436A4 4 0 0 0 5.77 7.184c-.436.856-.436 1.976-.436 4.216Z" fill="#fff"></path><path d="M12.232 4.667c.637 0 1.01-.003 1.364.082a3 3 0 0 1 .867.36c.31.19.573.455 1.023.905l2.167 2.167c.45.45.715.712.905 1.023a3 3 0 0 1 .36.867c.084.354.082.727.082 1.363V12.6c0 1.115 0 1.97-.055 2.655-.056.687-.171 1.23-.417 1.712a4.334 4.334 0 0 1-1.894 1.894c-.483.246-1.025.36-1.713.417-.683.056-1.54.055-2.654.055h-.534c-1.114 0-1.97 0-2.654-.055-.688-.056-1.23-.17-1.713-.417a4.334 4.334 0 0 1-1.894-1.894c-.246-.482-.36-1.025-.417-1.712C5 14.57 5 13.715 5 12.6v-1.2c0-1.115 0-1.97.055-2.655.057-.687.171-1.23.417-1.712a4.334 4.334 0 0 1 1.894-1.894c.482-.246 1.025-.36 1.713-.417.683-.056 1.54-.055 2.654-.055h.5Zm-.499.666c-1.125 0-1.95 0-2.6.054-.646.053-1.091.156-1.464.346a3.671 3.671 0 0 0-1.603 1.602c-.19.373-.293.819-.346 1.465-.053.65-.053 1.474-.053 2.6v1.2c0 1.126 0 1.95.053 2.6.053.646.156 1.092.346 1.465.352.69.913 1.25 1.603 1.602.373.19.818.294 1.464.346.65.053 1.475.054 2.6.054h.534c1.125 0 1.95 0 2.6-.054.646-.052 1.091-.156 1.464-.346a3.666 3.666 0 0 0 1.603-1.602c.19-.373.293-.819.346-1.465.053-.65.053-1.474.053-2.6v-1.166c0-.668-.002-.948-.064-1.207a2.312 2.312 0 0 0-.086-.275.834.834 0 0 0-.208-.07 3.175 3.175 0 0 0-.642-.049V9.83c-.1.002-.216.003-.347.003-.457 0-.808 0-1.09-.019-.283-.019-.508-.057-.713-.14-.54-.22-.97-.65-1.19-1.19a2.254 2.254 0 0 1-.14-.713c-.02-.282-.02-.633-.02-1.09 0-.131.001-.247.003-.348h-.003a3.18 3.18 0 0 0-.048-.642.832.832 0 0 0-.072-.208 2.334 2.334 0 0 0-.273-.085c-.26-.063-.54-.065-1.208-.065h-.499Z" fill="#A5DFFA"></path><path d="M15.61 15.098a.833.833 0 1 1-1.21-.743v-.072a2.4 2.4 0 0 0-1.978-2.362v2.433a.833.833 0 1 1-.8.028v-2.47a2.4 2.4 0 0 0-2.021 2.37v.074a.832.832 0 1 1-.8.024v-.097a3.2 3.2 0 0 1 2.821-3.177v-.687a.832.832 0 0 1 .422-1.552.834.834 0 0 1 .378 1.576v.67a3.199 3.199 0 0 1 2.778 3.17v.098c.245.145.41.411.41.717Z" fill="#047FB0"></path></svg>',
165
+ FileRoundUnknowV2Colorful:
166
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileRoundUnknowV2Colorful"><circle cx="12" cy="12" r="12" fill="#F5F6F7"></circle><path opacity="0.99" d="M5.333 11.4v1.2c0 2.24 0 3.36.436 4.216a4 4 0 0 0 1.748 1.748C8.373 19 9.493 19 11.733 19h.533c2.24 0 3.36 0 4.216-.436a4 4 0 0 0 1.748-1.748c.436-.856.436-1.976.436-4.216v-.833c0-.652 0-.978-.073-1.285a2.666 2.666 0 0 0-.32-.77c-.165-.27-.395-.5-.856-.962l-2.501-2.5c-.461-.462-.692-.692-.96-.857a2.667 2.667 0 0 0-.772-.32C12.877 5 12.551 5 11.9 5h-.166c-2.24 0-3.36 0-4.216.436A4 4 0 0 0 5.77 7.184c-.436.856-.436 1.976-.436 4.216Z" fill="#fff"></path><path d="M12.232 4.667c.637 0 1.01-.003 1.364.082a3 3 0 0 1 .867.36c.31.19.573.455 1.023.905l2.167 2.167c.45.45.715.712.905 1.023a3 3 0 0 1 .36.867c.084.354.082.727.082 1.363V12.6c0 1.115 0 1.97-.055 2.655-.056.687-.171 1.23-.417 1.712a4.334 4.334 0 0 1-1.894 1.894c-.483.246-1.025.36-1.713.417-.683.056-1.54.055-2.654.055h-.534c-1.114 0-1.97 0-2.654-.055-.688-.056-1.23-.17-1.713-.417a4.334 4.334 0 0 1-1.894-1.894c-.246-.482-.36-1.025-.417-1.712C5 14.57 5 13.715 5 12.6v-1.2c0-1.115 0-1.97.055-2.655.057-.687.171-1.23.417-1.712a4.334 4.334 0 0 1 1.894-1.894c.482-.246 1.025-.36 1.713-.417.683-.056 1.54-.055 2.654-.055h.5Zm-.499.666c-1.125 0-1.95 0-2.6.054-.646.053-1.091.156-1.464.346a3.671 3.671 0 0 0-1.603 1.602c-.19.373-.293.819-.346 1.465-.053.65-.053 1.474-.053 2.6v1.2c0 1.126 0 1.95.053 2.6.053.646.156 1.092.346 1.465.352.69.913 1.25 1.603 1.602.373.19.818.294 1.464.346.65.053 1.475.054 2.6.054h.534c1.125 0 1.95 0 2.6-.054.646-.052 1.091-.156 1.464-.346a3.666 3.666 0 0 0 1.603-1.602c.19-.373.293-.819.346-1.465.053-.65.053-1.474.053-2.6v-1.166c0-.668-.002-.948-.064-1.207a2.312 2.312 0 0 0-.086-.275.834.834 0 0 0-.208-.07 3.175 3.175 0 0 0-.642-.049V9.83c-.1.002-.216.003-.347.003-.457 0-.808 0-1.09-.019-.283-.019-.508-.057-.713-.14-.54-.22-.97-.65-1.19-1.19a2.254 2.254 0 0 1-.14-.713c-.02-.282-.02-.633-.02-1.09 0-.131.001-.247.003-.348h-.003a3.18 3.18 0 0 0-.048-.642.832.832 0 0 0-.072-.208 2.334 2.334 0 0 0-.273-.085c-.26-.063-.54-.065-1.208-.065h-.499Z" fill="#D0D3D6"></path><path d="M12 14.77a.667.667 0 1 1 0 1.334.667.667 0 0 1 0-1.334Zm0-5.844c1.128 0 2.006.947 2.006 2.067 0 .62-.265 1.18-.69 1.56-.227.205-.428.383-.58.575-.148.187-.202.331-.202.453a.534.534 0 0 1-1.067 0c0-.46.21-.833.433-1.115.22-.278.5-.522.704-.706.202-.182.335-.455.335-.767 0-.574-.441-1-.94-1-.497 0-.938.427-.938 1 0 .1.014.194.038.282a.534.534 0 0 1-1.029.283 2.11 2.11 0 0 1-.075-.565c0-1.12.877-2.067 2.005-2.067Z" fill="#646A73"></path></svg>',
167
+ FileRoundPptV2Colorful:
168
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileRoundPptV2Colorful"><circle cx="12" cy="12" r="12" fill="#FFF3E5"></circle><path opacity="0.99" d="M5.333 11.4v1.2c0 2.24 0 3.36.436 4.216a4 4 0 0 0 1.748 1.748C8.373 19 9.493 19 11.733 19h.533c2.24 0 3.36 0 4.216-.436a4 4 0 0 0 1.748-1.748c.436-.856.436-1.976.436-4.216v-.833c0-.652 0-.978-.073-1.285a2.666 2.666 0 0 0-.32-.77c-.165-.27-.395-.5-.856-.962l-2.501-2.5c-.461-.462-.692-.692-.96-.857a2.667 2.667 0 0 0-.772-.32C12.877 5 12.551 5 11.9 5h-.166c-2.24 0-3.36 0-4.216.436A4 4 0 0 0 5.77 7.184c-.436.856-.436 1.976-.436 4.216Z" fill="#fff"></path><path d="M12.232 4.667c.637 0 1.01-.003 1.364.082a3 3 0 0 1 .867.36c.31.19.573.455 1.023.905l2.167 2.167c.45.45.715.712.905 1.023a3 3 0 0 1 .36.867c.084.354.082.727.082 1.363V12.6c0 1.115 0 1.97-.055 2.655-.056.687-.171 1.23-.417 1.712a4.334 4.334 0 0 1-1.894 1.894c-.483.246-1.025.36-1.713.417-.683.056-1.54.055-2.654.055h-.534c-1.114 0-1.97 0-2.654-.055-.688-.056-1.23-.17-1.713-.417a4.334 4.334 0 0 1-1.894-1.894c-.246-.482-.36-1.025-.417-1.712C5 14.57 5 13.715 5 12.6v-1.2c0-1.115 0-1.97.055-2.655.057-.687.171-1.23.417-1.712a4.334 4.334 0 0 1 1.894-1.894c.482-.246 1.025-.36 1.713-.417.683-.056 1.54-.055 2.654-.055h.5Zm-.499.666c-1.125 0-1.95 0-2.6.054-.646.053-1.091.156-1.464.346a3.671 3.671 0 0 0-1.603 1.602c-.19.373-.293.819-.346 1.465-.053.65-.053 1.474-.053 2.6v1.2c0 1.126 0 1.95.053 2.6.053.646.156 1.092.346 1.465.352.69.913 1.25 1.603 1.602.373.19.818.294 1.464.346.65.053 1.475.054 2.6.054h.534c1.125 0 1.95 0 2.6-.054.646-.052 1.091-.156 1.464-.346a3.666 3.666 0 0 0 1.603-1.602c.19-.373.293-.819.346-1.465.053-.65.053-1.474.053-2.6v-1.166c0-.668-.002-.948-.064-1.207a2.312 2.312 0 0 0-.086-.275.834.834 0 0 0-.208-.07 3.175 3.175 0 0 0-.642-.049V9.83c-.1.002-.216.003-.347.003-.457 0-.808 0-1.09-.019-.283-.019-.508-.057-.713-.14-.54-.22-.97-.65-1.19-1.19a2.254 2.254 0 0 1-.14-.713c-.02-.282-.02-.633-.02-1.09 0-.131.001-.247.003-.348h-.003a3.18 3.18 0 0 0-.048-.642.832.832 0 0 0-.072-.208 2.334 2.334 0 0 0-.273-.085c-.26-.063-.54-.065-1.208-.065h-.499Z" fill="#FCC38B"></path><path d="M13.426 11.759c0-.666-.539-1.205-1.204-1.205h-1.156v2.41h1.156c.665 0 1.204-.54 1.204-1.205Zm1.067 0a2.272 2.272 0 0 1-2.271 2.271h-1.156v1.382a.533.533 0 0 1-1.066 0v-5.058c0-.479.388-.867.867-.867h1.355a2.272 2.272 0 0 1 2.271 2.272Z" fill="#C25705"></path></svg>',
169
+ FileRoundSlidesV2Colorful:
170
+ '<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-icon="FileRoundSlidesV2Colorful"><circle cx="12" cy="12" r="12" fill="#FFF3E5"></circle><path opacity="0.99" d="M5.333 11.4v1.2c0 2.24 0 3.36.436 4.216a4 4 0 0 0 1.748 1.748C8.373 19 9.493 19 11.733 19h.533c2.24 0 3.36 0 4.216-.436a4 4 0 0 0 1.748-1.748c.436-.856.436-1.976.436-4.216v-.833c0-.652 0-.978-.073-1.285a2.666 2.666 0 0 0-.32-.77c-.165-.27-.395-.5-.856-.962l-2.501-2.5c-.461-.462-.692-.692-.96-.857a2.667 2.667 0 0 0-.772-.32C12.877 5 12.551 5 11.9 5h-.166c-2.24 0-3.36 0-4.216.436A4 4 0 0 0 5.77 7.184c-.436.856-.436 1.976-.436 4.216Z" fill="#fff"></path><path d="M12.232 4.667c.637 0 1.01-.003 1.364.082a3 3 0 0 1 .867.36c.31.19.573.455 1.023.905l2.167 2.167c.45.45.715.712.905 1.023a3 3 0 0 1 .36.867c.084.354.082.727.082 1.363V12.6c0 1.115 0 1.97-.055 2.655-.056.687-.171 1.23-.417 1.712a4.334 4.334 0 0 1-1.894 1.894c-.483.246-1.025.36-1.713.417-.683.056-1.54.055-2.654.055h-.534c-1.114 0-1.97 0-2.654-.055-.688-.056-1.23-.17-1.713-.417a4.334 4.334 0 0 1-1.894-1.894c-.246-.482-.36-1.025-.417-1.712C5 14.57 5 13.715 5 12.6v-1.2c0-1.115 0-1.97.055-2.655.057-.687.171-1.23.417-1.712a4.334 4.334 0 0 1 1.894-1.894c.482-.246 1.025-.36 1.713-.417.683-.056 1.54-.055 2.654-.055h.5Zm-.499.666c-1.125 0-1.95 0-2.6.054-.646.053-1.091.156-1.464.346a3.671 3.671 0 0 0-1.603 1.602c-.19.373-.293.819-.346 1.465-.053.65-.053 1.474-.053 2.6v1.2c0 1.126 0 1.95.053 2.6.053.646.156 1.092.346 1.465.352.69.913 1.25 1.603 1.602.373.19.818.294 1.464.346.65.053 1.475.054 2.6.054h.534c1.125 0 1.95 0 2.6-.054.646-.052 1.091-.156 1.464-.346a3.666 3.666 0 0 0 1.603-1.602c.19-.373.293-.819.346-1.465.053-.65.053-1.474.053-2.6v-1.166c0-.668-.002-.948-.064-1.207a2.312 2.312 0 0 0-.086-.275.834.834 0 0 0-.208-.07 3.175 3.175 0 0 0-.642-.049V9.83c-.1.002-.216.003-.347.003-.457 0-.808 0-1.09-.019-.283-.019-.508-.057-.713-.14-.54-.22-.97-.65-1.19-1.19a2.254 2.254 0 0 1-.14-.713c-.02-.282-.02-.633-.02-1.09 0-.131.001-.247.003-.348h-.003a3.18 3.18 0 0 0-.048-.642.832.832 0 0 0-.072-.208 2.334 2.334 0 0 0-.273-.085c-.26-.063-.54-.065-1.208-.065h-.499Z" fill="#FCC38B"></path><path d="M14.833 12.833c.184 0 .335.15.317.333a3.333 3.333 0 1 1-3.65-3.65.31.31 0 0 1 .333.317V12.5c0 .184.15.333.334.333h2.666Z" fill="#FF9D4C"></path><path d="M15.167 12.167c.184 0 .335-.15.315-.333a2.998 2.998 0 0 0-2.65-2.649c-.182-.02-.332.13-.332.315v2.467c0 .11.09.2.2.2h2.467Z" fill="#ED6D0C"></path></svg>',
171
+ } as const;