zcw-shared 2.10.0 → 2.11.0

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 (68) hide show
  1. package/assets/materialFileIconMaps.json +3256 -0
  2. package/dist/functions/ai/aiLlmModelCapabilities.d.ts +13 -0
  3. package/dist/functions/ai/aiLlmModelCapabilities.js +80 -0
  4. package/dist/functions/ai/aiLlmModelCapabilities.js.map +1 -0
  5. package/dist/functions/browser/shortcutModKeyHint.d.ts +7 -0
  6. package/dist/functions/browser/shortcutModKeyHint.js +21 -0
  7. package/dist/functions/browser/shortcutModKeyHint.js.map +1 -0
  8. package/dist/functions/chat/chatShellTabConfig.d.ts +31 -0
  9. package/dist/functions/chat/chatShellTabConfig.js +219 -0
  10. package/dist/functions/chat/chatShellTabConfig.js.map +1 -0
  11. package/dist/functions/chat/chatShellTabEditor.d.ts +7 -0
  12. package/dist/functions/chat/chatShellTabEditor.js +42 -0
  13. package/dist/functions/chat/chatShellTabEditor.js.map +1 -0
  14. package/dist/functions/code/getLanguageFromExtension.d.ts +5 -0
  15. package/dist/functions/code/getLanguageFromExtension.js +90 -0
  16. package/dist/functions/code/getLanguageFromExtension.js.map +1 -0
  17. package/dist/functions/code/index.d.ts +1 -0
  18. package/dist/functions/code/index.js +2 -0
  19. package/dist/functions/code/index.js.map +1 -0
  20. package/dist/functions/dom/copyTextToClipboard.d.ts +1 -0
  21. package/dist/functions/dom/copyTextToClipboard.js +36 -0
  22. package/dist/functions/dom/copyTextToClipboard.js.map +1 -0
  23. package/dist/functions/file/extractVideoCover.d.ts +6 -0
  24. package/dist/functions/file/extractVideoCover.js +57 -0
  25. package/dist/functions/file/extractVideoCover.js.map +1 -0
  26. package/dist/functions/file/index.d.ts +4 -0
  27. package/dist/functions/file/index.js +5 -0
  28. package/dist/functions/file/index.js.map +1 -0
  29. package/dist/functions/file/inferMediaType.d.ts +8 -0
  30. package/dist/functions/file/inferMediaType.js +24 -0
  31. package/dist/functions/file/inferMediaType.js.map +1 -0
  32. package/dist/functions/file/materialFileIcon.d.ts +10 -0
  33. package/dist/functions/file/materialFileIcon.js +36 -0
  34. package/dist/functions/file/materialFileIcon.js.map +1 -0
  35. package/dist/functions/im/parseImMentionSegments.js +7 -1
  36. package/dist/functions/im/parseImMentionSegments.js.map +1 -1
  37. package/dist/functions/path/index.d.ts +4 -0
  38. package/dist/functions/path/index.js +5 -0
  39. package/dist/functions/path/index.js.map +1 -0
  40. package/dist/functions/path/pathBasename.d.ts +1 -0
  41. package/dist/functions/path/pathBasename.js +11 -0
  42. package/dist/functions/path/pathBasename.js.map +1 -0
  43. package/dist/functions/path/pathDirname.d.ts +1 -0
  44. package/dist/functions/path/pathDirname.js +19 -0
  45. package/dist/functions/path/pathDirname.js.map +1 -0
  46. package/dist/functions/path/pathExtname.d.ts +4 -0
  47. package/dist/functions/path/pathExtname.js +15 -0
  48. package/dist/functions/path/pathExtname.js.map +1 -0
  49. package/dist/functions/path/pathLastSegment.d.ts +1 -0
  50. package/dist/functions/path/pathLastSegment.js +11 -0
  51. package/dist/functions/path/pathLastSegment.js.map +1 -0
  52. package/dist/functions/qiankun/createQiankunVueApp.js +94 -18
  53. package/dist/functions/qiankun/createQiankunVueApp.js.map +1 -1
  54. package/dist/functions/tree/index.d.ts +1 -0
  55. package/dist/functions/tree/index.js +2 -0
  56. package/dist/functions/tree/index.js.map +1 -0
  57. package/dist/functions/tree/pathsToTreeNodes.d.ts +26 -0
  58. package/dist/functions/tree/pathsToTreeNodes.js +102 -0
  59. package/dist/functions/tree/pathsToTreeNodes.js.map +1 -0
  60. package/dist/schemas/video.schema.d.ts +39 -39
  61. package/dist/schemas/video.schema.js +3 -3
  62. package/dist/schemas/video.schema.js.map +1 -1
  63. package/package.json +30 -14
  64. package/types/ai-llm-model-capabilities.d.ts +25 -0
  65. package/types/assets.d.ts +12 -0
  66. package/types/chat-shell-tab-config.d.ts +63 -0
  67. package/types/im-chat.d.ts +9 -0
  68. package/types/video.d.ts +8 -4
@@ -0,0 +1,13 @@
1
+ import type { AiLlmModelCapabilities, AiLlmModelCapabilitiesFormFlags } from '../../../types/ai-llm-model-capabilities';
2
+ export declare const DEFAULT_AI_LLM_MODEL_CAPABILITIES: AiLlmModelCapabilities;
3
+ export declare function normalizeAiLlmModelCapabilities(raw: unknown): AiLlmModelCapabilities;
4
+ export declare function capabilitiesFromDbRow(row: Record<string, unknown>): AiLlmModelCapabilities;
5
+ export declare function capabilitiesFlagsFromCapabilitiesRaw(capabilities: unknown): AiLlmModelCapabilitiesFormFlags;
6
+ export declare function capabilitiesFlagsFromModelRow(row: {
7
+ capabilities?: unknown;
8
+ }): AiLlmModelCapabilitiesFormFlags;
9
+ export declare function buildCapabilitiesPayload(flags: AiLlmModelCapabilitiesFormFlags): AiLlmModelCapabilities;
10
+ export declare function modelCallModeLabelFromCapabilities(capabilities: unknown): string;
11
+ export declare function modelCallModeLabelFromModelRow(row: {
12
+ capabilities?: unknown;
13
+ }): string;
@@ -0,0 +1,80 @@
1
+ export const DEFAULT_AI_LLM_MODEL_CAPABILITIES = {
2
+ attachments: false,
3
+ imageInput: false,
4
+ streaming: true,
5
+ parameters: {
6
+ temperature: { enabled: true, min: 0, max: 2, default: 0.7 },
7
+ maxTokens: { enabled: false, min: 256, max: 8192, default: 4096 },
8
+ },
9
+ };
10
+ export function normalizeAiLlmModelCapabilities(raw) {
11
+ const base = {
12
+ ...DEFAULT_AI_LLM_MODEL_CAPABILITIES,
13
+ parameters: { ...DEFAULT_AI_LLM_MODEL_CAPABILITIES.parameters },
14
+ };
15
+ if (raw == null || typeof raw !== 'object' || Array.isArray(raw)) {
16
+ return base;
17
+ }
18
+ const o = raw;
19
+ if (typeof o.attachments === 'boolean')
20
+ base.attachments = o.attachments;
21
+ if (typeof o.imageInput === 'boolean')
22
+ base.imageInput = o.imageInput;
23
+ if (typeof o.streaming === 'boolean')
24
+ base.streaming = o.streaming;
25
+ const params = o.parameters;
26
+ if (params != null && typeof params === 'object' && !Array.isArray(params)) {
27
+ const p = params;
28
+ for (const key of ['temperature', 'maxTokens']) {
29
+ const spec = p[key];
30
+ if (spec != null && typeof spec === 'object' && !Array.isArray(spec)) {
31
+ const s = spec;
32
+ base.parameters[key] = {
33
+ enabled: s.enabled === true,
34
+ min: typeof s.min === 'number' ? s.min : undefined,
35
+ max: typeof s.max === 'number' ? s.max : undefined,
36
+ default: typeof s.default === 'number' ? s.default : undefined,
37
+ };
38
+ }
39
+ }
40
+ }
41
+ return base;
42
+ }
43
+ export function capabilitiesFromDbRow(row) {
44
+ return normalizeAiLlmModelCapabilities(row.capabilities);
45
+ }
46
+ export function capabilitiesFlagsFromCapabilitiesRaw(capabilities) {
47
+ const cap = normalizeAiLlmModelCapabilities(capabilities);
48
+ return {
49
+ attachments: cap.attachments,
50
+ imageInput: cap.imageInput,
51
+ temperature: cap.parameters.temperature?.enabled === true,
52
+ streaming: cap.streaming,
53
+ };
54
+ }
55
+ export function capabilitiesFlagsFromModelRow(row) {
56
+ return capabilitiesFlagsFromCapabilitiesRaw(row.capabilities);
57
+ }
58
+ export function buildCapabilitiesPayload(flags) {
59
+ return {
60
+ attachments: flags.attachments,
61
+ imageInput: flags.imageInput,
62
+ streaming: flags.streaming,
63
+ parameters: {
64
+ temperature: {
65
+ enabled: flags.temperature,
66
+ min: 0,
67
+ max: 2,
68
+ default: 0.7,
69
+ },
70
+ },
71
+ };
72
+ }
73
+ export function modelCallModeLabelFromCapabilities(capabilities) {
74
+ const cap = normalizeAiLlmModelCapabilities(capabilities);
75
+ return cap.streaming ? 'SSE 流式' : 'HTTP 同步';
76
+ }
77
+ export function modelCallModeLabelFromModelRow(row) {
78
+ return modelCallModeLabelFromCapabilities(row.capabilities);
79
+ }
80
+ //# sourceMappingURL=aiLlmModelCapabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiLlmModelCapabilities.js","sourceRoot":"","sources":["../../../src/functions/ai/aiLlmModelCapabilities.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iCAAiC,GAA2B;IACvE,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;QAC5D,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;KAClE;CACF,CAAA;AAED,MAAM,UAAU,+BAA+B,CAC7C,GAAY;IAEZ,MAAM,IAAI,GAA2B;QACnC,GAAG,iCAAiC;QACpC,UAAU,EAAE,EAAE,GAAG,iCAAiC,CAAC,UAAU,EAAE;KAChE,CAAA;IACD,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,CAAC,GAAG,GAA8B,CAAA;IACxC,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAA;IACxE,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAA;IACrE,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAA;IAClE,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAA;IAC3B,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAG,MAAiC,CAAA;QAC3C,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAU,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YACnB,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,MAAM,CAAC,GAAG,IAA+B,CAAA;gBACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG;oBACrB,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,IAAI;oBAC3B,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;oBAClD,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;oBAClD,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;iBAC/D,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,GAA4B;IAE5B,OAAO,+BAA+B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,YAAqB;IAErB,MAAM,GAAG,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAA;IACzD,OAAO;QACL,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI;QACzD,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAE7C;IACC,OAAO,oCAAoC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAsC;IAEtC,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,OAAO,EAAE,KAAK,CAAC,WAAW;gBAC1B,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,CAAC;gBACN,OAAO,EAAE,GAAG;aACb;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,YAAqB;IAErB,MAAM,GAAG,GAAG,+BAA+B,CAAC,YAAY,CAAC,CAAA;IACzD,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,GAE9C;IACC,OAAO,kCAAkC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;AAC7D,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface ShortcutModKeyHint {
2
+ modKeyLabel: string;
3
+ ariaKeyshortcuts: string;
4
+ title: string;
5
+ }
6
+ export declare function prefersMetaModifierInShortcutUi(userAgent: string): boolean;
7
+ export declare function getShortcutModKeyHint(userAgent: string | undefined): ShortcutModKeyHint;
@@ -0,0 +1,21 @@
1
+ import { detectOS } from './detectOS';
2
+ const META_HINT = {
3
+ modKeyLabel: '⌘',
4
+ ariaKeyshortcuts: 'Meta+K',
5
+ title: '快捷键 Command K',
6
+ };
7
+ const CTRL_HINT = {
8
+ modKeyLabel: 'Ctrl',
9
+ ariaKeyshortcuts: 'Control+K',
10
+ title: '快捷键 Control K',
11
+ };
12
+ export function prefersMetaModifierInShortcutUi(userAgent) {
13
+ const os = detectOS({ userAgent });
14
+ return os === 'macOS' || os === 'iOS';
15
+ }
16
+ export function getShortcutModKeyHint(userAgent) {
17
+ if (!userAgent)
18
+ return CTRL_HINT;
19
+ return prefersMetaModifierInShortcutUi(userAgent) ? META_HINT : CTRL_HINT;
20
+ }
21
+ //# sourceMappingURL=shortcutModKeyHint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcutModKeyHint.js","sourceRoot":"","sources":["../../../src/functions/browser/shortcutModKeyHint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQrC,MAAM,SAAS,GAAuB;IACpC,WAAW,EAAE,GAAG;IAChB,gBAAgB,EAAE,QAAQ;IAC1B,KAAK,EAAE,eAAe;CACvB,CAAA;AAED,MAAM,SAAS,GAAuB;IACpC,WAAW,EAAE,MAAM;IACnB,gBAAgB,EAAE,WAAW;IAC7B,KAAK,EAAE,eAAe;CACvB,CAAA;AAGD,MAAM,UAAU,+BAA+B,CAAC,SAAiB;IAC/D,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;IAClC,OAAO,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,KAAK,CAAA;AACvC,CAAC;AAGD,MAAM,UAAU,qBAAqB,CAAC,SAA6B;IACjE,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAChC,OAAO,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3E,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { ChatShellTabConfig, ChatShellTabbarItem } from '../../../types/chat-shell-tab-config';
2
+ export declare const DEFAULT_CHAT_SHELL_TABS: ChatShellTabConfig[];
3
+ export declare function isChatShellTabShellDark(tabs: ChatShellTabConfig[], activeKey: string): boolean;
4
+ export declare function parseChatShellTabsFromDisplays(displays: unknown): ChatShellTabConfig[];
5
+ export declare function filterChatShellTabsForRuntime(tabs: ChatShellTabConfig[], opts: {
6
+ isElectron: boolean;
7
+ }): ChatShellTabConfig[];
8
+ export declare function findChatShellDesktopFooterTab(tabs: ChatShellTabConfig[]): ChatShellTabConfig | undefined;
9
+ export declare function isChatShellMineTab(tab: {
10
+ key?: string;
11
+ useMineAvatar?: boolean;
12
+ }): boolean;
13
+ export type ChatShellNavTabbarItem = ChatShellTabbarItem & {
14
+ tooltip?: string;
15
+ };
16
+ export declare function buildChatShellNavTabbarItems(tabs: ChatShellTabConfig[]): ChatShellNavTabbarItem[];
17
+ export declare function buildChatShellMobileTabbarItems(tabs: ChatShellTabConfig[]): ChatShellTabbarItem[];
18
+ export declare function resolveChatShellTabRouteTarget(tab: ChatShellTabConfig): {
19
+ name: string;
20
+ } | {
21
+ path: string;
22
+ } | null;
23
+ export declare function toChatShellTabbarItem(tab: ChatShellTabConfig): ChatShellTabbarItem;
24
+ export declare function tabMatchesRoute(tab: ChatShellTabConfig, route: {
25
+ name?: string | symbol | null;
26
+ path?: string;
27
+ }): boolean;
28
+ export declare function resolveActiveTabKey(tabs: ChatShellTabConfig[], route: {
29
+ name?: string | symbol | null;
30
+ path?: string;
31
+ }): string;
@@ -0,0 +1,219 @@
1
+ export const DEFAULT_CHAT_SHELL_TABS = [
2
+ {
3
+ key: 'messages',
4
+ label: '会话',
5
+ icon: 'a-huihuakuang',
6
+ iconActive: 'a-huihuakuang-filled',
7
+ route: '/messages',
8
+ routeName: 'chat',
9
+ desktopNav: true,
10
+ mobile: true,
11
+ },
12
+ {
13
+ key: 'ai',
14
+ label: 'AI',
15
+ icon: 'cebian_liaotiancebianlan',
16
+ iconActive: 'rengongzhineng',
17
+ route: '/ai',
18
+ routeName: 'chat-ai',
19
+ desktopNav: true,
20
+ mobile: true,
21
+ shellDark: true,
22
+ },
23
+ {
24
+ key: 'contacts',
25
+ label: '通讯录',
26
+ icon: 'pengyou',
27
+ route: '/contacts',
28
+ routeName: 'chat-contacts',
29
+ desktopNav: true,
30
+ mobile: true,
31
+ },
32
+ {
33
+ key: 'org',
34
+ label: '组织',
35
+ icon: 'zuzhi',
36
+ route: '/org',
37
+ routeName: 'chat-org',
38
+ desktopNav: true,
39
+ mobile: true,
40
+ },
41
+ {
42
+ key: 'short-video',
43
+ label: '短视频',
44
+ icon: 'Video',
45
+ route: '/short-video',
46
+ routeName: 'chat-short-video',
47
+ desktopNav: true,
48
+ mobile: true,
49
+ },
50
+ {
51
+ key: 'docs',
52
+ label: '文档',
53
+ icon: 'wendang',
54
+ route: '/docs/home',
55
+ routeName: 'chat-docs-home',
56
+ routeNamePrefix: 'chat-doc',
57
+ desktopNav: true,
58
+ mobile: true,
59
+ },
60
+ {
61
+ key: 'code',
62
+ label: '代码',
63
+ icon: 'code',
64
+ route: '/code',
65
+ routeName: 'chat-code',
66
+ routeNamePrefix: 'chat-code',
67
+ electronOnly: true,
68
+ desktopNav: true,
69
+ mobile: false,
70
+ },
71
+ {
72
+ key: 'mine',
73
+ label: '我的',
74
+ route: '/mine',
75
+ routeName: 'chat-mine',
76
+ relatedRouteNames: ['chat-wallet'],
77
+ hideLabel: true,
78
+ useMineAvatar: true,
79
+ desktopNav: false,
80
+ desktopFooter: true,
81
+ mobile: true,
82
+ },
83
+ ];
84
+ function normalizeTab(raw) {
85
+ if (raw == null || typeof raw !== 'object' || Array.isArray(raw))
86
+ return null;
87
+ const o = raw;
88
+ const key = String(o.key ?? '').trim();
89
+ if (!key)
90
+ return null;
91
+ const label = String(o.label ?? key).trim();
92
+ return {
93
+ key,
94
+ label,
95
+ icon: o.icon != null ? String(o.icon).trim() : undefined,
96
+ iconActive: o.iconActive != null ? String(o.iconActive).trim() : undefined,
97
+ route: o.route != null ? String(o.route).trim() : undefined,
98
+ routeName: o.routeName != null ? String(o.routeName).trim() : undefined,
99
+ routeNamePrefix: o.routeNamePrefix != null ? String(o.routeNamePrefix).trim() : undefined,
100
+ relatedRouteNames: Array.isArray(o.relatedRouteNames)
101
+ ? o.relatedRouteNames.map((n) => String(n).trim()).filter(Boolean)
102
+ : undefined,
103
+ hideLabel: o.hideLabel === true,
104
+ desktopHideLabel: o.desktopHideLabel === false
105
+ ? false
106
+ : o.desktopHideLabel === true
107
+ ? true
108
+ : undefined,
109
+ electronOnly: o.electronOnly === true,
110
+ desktopNav: o.desktopNav !== false,
111
+ desktopFooter: o.desktopFooter === true,
112
+ mobile: o.mobile !== false,
113
+ useMineAvatar: o.useMineAvatar === true,
114
+ shellDark: o.shellDark === true ? true : undefined,
115
+ };
116
+ }
117
+ export function isChatShellTabShellDark(tabs, activeKey) {
118
+ const tab = tabs.find((t) => t.key === activeKey);
119
+ return tab?.shellDark === true;
120
+ }
121
+ export function parseChatShellTabsFromDisplays(displays) {
122
+ const d = displays;
123
+ const shell = d?.chatShell;
124
+ const fromShell = shell?.tabs;
125
+ if (Array.isArray(fromShell) && fromShell.length > 0) {
126
+ const parsed = fromShell
127
+ .map((t) => normalizeTab(t))
128
+ .filter((t) => t != null);
129
+ if (parsed.length > 0)
130
+ return parsed;
131
+ }
132
+ const legacy = d
133
+ ?.mobileTabbar?.enabledTabs;
134
+ if (Array.isArray(legacy) && legacy.length > 0) {
135
+ const order = legacy.map((x) => String(x));
136
+ const byKey = new Map(DEFAULT_CHAT_SHELL_TABS.map((t) => [t.key, { ...t }]));
137
+ const out = [];
138
+ for (const key of order) {
139
+ const tab = byKey.get(key);
140
+ if (tab)
141
+ out.push(tab);
142
+ }
143
+ return out.length > 0 ? out : [...DEFAULT_CHAT_SHELL_TABS];
144
+ }
145
+ return [...DEFAULT_CHAT_SHELL_TABS];
146
+ }
147
+ export function filterChatShellTabsForRuntime(tabs, opts) {
148
+ return tabs.filter((t) => {
149
+ if (t.electronOnly && !opts.isElectron)
150
+ return false;
151
+ return true;
152
+ });
153
+ }
154
+ export function findChatShellDesktopFooterTab(tabs) {
155
+ return tabs.find((t) => t.desktopFooter === true);
156
+ }
157
+ export function isChatShellMineTab(tab) {
158
+ return tab.useMineAvatar === true;
159
+ }
160
+ export function buildChatShellNavTabbarItems(tabs) {
161
+ return tabs
162
+ .filter((t) => t.desktopNav !== false && !t.desktopFooter)
163
+ .map((t) => {
164
+ const item = toChatShellTabbarItem(t);
165
+ const hideLabelOnDesktop = t.desktopHideLabel !== false;
166
+ const tip = (item.label || item.ariaLabel || '').trim() || undefined;
167
+ return {
168
+ ...item,
169
+ hideLabel: hideLabelOnDesktop,
170
+ tooltip: hideLabelOnDesktop ? tip : undefined,
171
+ };
172
+ });
173
+ }
174
+ export function buildChatShellMobileTabbarItems(tabs) {
175
+ return tabs.filter((t) => t.mobile !== false).map((t) => toChatShellTabbarItem(t));
176
+ }
177
+ export function resolveChatShellTabRouteTarget(tab) {
178
+ const routeName = tab.routeName?.trim();
179
+ if (routeName)
180
+ return { name: routeName };
181
+ const path = tab.route?.trim();
182
+ if (!path)
183
+ return null;
184
+ return path.startsWith('/') ? { path } : { path: `/${path}` };
185
+ }
186
+ export function toChatShellTabbarItem(tab) {
187
+ return {
188
+ key: tab.key,
189
+ label: tab.label,
190
+ icon: '',
191
+ iconName: tab.icon,
192
+ iconActiveName: tab.iconActive || tab.icon,
193
+ hideLabel: tab.hideLabel,
194
+ ariaLabel: tab.hideLabel ? tab.label || tab.key : undefined,
195
+ useMineAvatar: tab.useMineAvatar,
196
+ };
197
+ }
198
+ export function tabMatchesRoute(tab, route) {
199
+ const name = route.name != null ? String(route.name) : '';
200
+ const path = route.path ?? '';
201
+ if (tab.routeName && name === tab.routeName)
202
+ return true;
203
+ if (tab.routeNamePrefix && name.startsWith(tab.routeNamePrefix))
204
+ return true;
205
+ if (tab.relatedRouteNames?.includes(name))
206
+ return true;
207
+ const r = tab.route?.trim();
208
+ if (r) {
209
+ const p = r.startsWith('/') ? r : `/${r}`;
210
+ if (path === p || path.startsWith(`${p}/`))
211
+ return true;
212
+ }
213
+ return false;
214
+ }
215
+ export function resolveActiveTabKey(tabs, route) {
216
+ const hit = tabs.find((t) => tabMatchesRoute(t, route));
217
+ return hit?.key ?? tabs[0]?.key ?? '';
218
+ }
219
+ //# sourceMappingURL=chatShellTabConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatShellTabConfig.js","sourceRoot":"","sources":["../../../src/functions/chat/chatShellTabConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ChatShellTabConfig } from '../../../types/chat-shell-tab-config';
2
+ export type EditableChatShellTab = ChatShellTabConfig & {
3
+ _localId: string;
4
+ };
5
+ export declare function resetChatShellTabEditorLocalIds(): void;
6
+ export declare function toEditableChatShellTabs(tabs: ChatShellTabConfig[]): EditableChatShellTab[];
7
+ export declare function stripEditableChatShellTabs(tabs: EditableChatShellTab[]): ChatShellTabConfig[];
@@ -0,0 +1,42 @@
1
+ let localIdSeq = 0;
2
+ function nextLocalId() {
3
+ localIdSeq += 1;
4
+ return `tab-${localIdSeq}`;
5
+ }
6
+ export function resetChatShellTabEditorLocalIds() {
7
+ localIdSeq = 0;
8
+ }
9
+ export function toEditableChatShellTabs(tabs) {
10
+ return tabs.map((t) => ({
11
+ ...t,
12
+ _localId: nextLocalId(),
13
+ desktopNav: t.desktopNav !== false,
14
+ mobile: t.mobile !== false,
15
+ }));
16
+ }
17
+ export function stripEditableChatShellTabs(tabs) {
18
+ return tabs.map(({ _localId: _, ...rest }) => {
19
+ const tab = {
20
+ key: rest.key.trim(),
21
+ label: rest.label.trim(),
22
+ icon: rest.icon?.trim() || undefined,
23
+ iconActive: rest.iconActive?.trim() || undefined,
24
+ route: rest.route?.trim() || undefined,
25
+ routeName: rest.routeName?.trim() || undefined,
26
+ routeNamePrefix: rest.routeNamePrefix?.trim() || undefined,
27
+ relatedRouteNames: rest.relatedRouteNames && rest.relatedRouteNames.length > 0
28
+ ? rest.relatedRouteNames
29
+ : undefined,
30
+ electronOnly: rest.electronOnly === true ? true : undefined,
31
+ desktopNav: rest.desktopNav === false ? false : undefined,
32
+ desktopFooter: rest.desktopFooter === true ? true : undefined,
33
+ mobile: rest.mobile === false ? false : undefined,
34
+ useMineAvatar: rest.useMineAvatar === true ? true : undefined,
35
+ hideLabel: rest.hideLabel === true ? true : undefined,
36
+ desktopHideLabel: rest.desktopHideLabel === false ? false : undefined,
37
+ shellDark: rest.shellDark === true ? true : undefined,
38
+ };
39
+ return tab;
40
+ });
41
+ }
42
+ //# sourceMappingURL=chatShellTabEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatShellTabEditor.js","sourceRoot":"","sources":["../../../src/functions/chat/chatShellTabEditor.ts"],"names":[],"mappings":"AAKA,IAAI,UAAU,GAAG,CAAC,CAAA;AAClB,SAAS,WAAW;IAClB,UAAU,IAAI,CAAC,CAAA;IACf,OAAO,OAAO,UAAU,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,UAAU,GAAG,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAA0B;IAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC;QACJ,QAAQ,EAAE,WAAW,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,KAAK;QAClC,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,KAAK;KAC3B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAA4B;IAE5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAuB;YAC9B,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS;YACpC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;YACtC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,SAAS;YAC9C,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,SAAS;YAC1D,iBAAiB,EACf,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBACzD,CAAC,CAAC,IAAI,CAAC,iBAAiB;gBACxB,CAAC,CAAC,SAAS;YACf,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC3D,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACzD,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACjD,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACrD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACrE,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACtD,CAAA;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type CodeLanguage = 'typescript' | 'javascript' | 'json' | 'css' | 'html' | 'vue' | 'markdown' | 'python' | 'sql' | 'xml' | 'yaml' | 'java' | 'cpp' | 'plaintext';
2
+ export declare function getLanguageFromExtension(path: string | null | undefined): CodeLanguage;
3
+ export declare function getCodeMirrorLanguage(path: string | null | undefined): string;
4
+ export declare function isFrontendLanguage(path: string | null | undefined): boolean;
5
+ export declare function isHighlightable(path: string | null | undefined): boolean;
@@ -0,0 +1,90 @@
1
+ const EXTENSION_TO_LANGUAGE = {
2
+ ts: 'typescript',
3
+ tsx: 'typescript',
4
+ mts: 'typescript',
5
+ cts: 'typescript',
6
+ js: 'javascript',
7
+ jsx: 'javascript',
8
+ mjs: 'javascript',
9
+ cjs: 'javascript',
10
+ json: 'json',
11
+ jsonc: 'json',
12
+ json5: 'json',
13
+ css: 'css',
14
+ scss: 'css',
15
+ sass: 'css',
16
+ less: 'css',
17
+ styl: 'css',
18
+ stylus: 'css',
19
+ html: 'html',
20
+ htm: 'html',
21
+ hbs: 'html',
22
+ handlebars: 'html',
23
+ vue: 'vue',
24
+ md: 'markdown',
25
+ mdx: 'markdown',
26
+ markdown: 'markdown',
27
+ py: 'python',
28
+ pyw: 'python',
29
+ pyi: 'python',
30
+ sql: 'sql',
31
+ mysql: 'sql',
32
+ pgsql: 'sql',
33
+ plsql: 'sql',
34
+ xml: 'xml',
35
+ svg: 'xml',
36
+ xsd: 'xml',
37
+ xsl: 'xml',
38
+ xslt: 'xml',
39
+ wsdl: 'xml',
40
+ yaml: 'yaml',
41
+ yml: 'yaml',
42
+ java: 'java',
43
+ cpp: 'cpp',
44
+ cc: 'cpp',
45
+ cxx: 'cpp',
46
+ hpp: 'cpp',
47
+ c: 'cpp',
48
+ h: 'cpp',
49
+ hh: 'cpp',
50
+ };
51
+ export function getLanguageFromExtension(path) {
52
+ if (!path) {
53
+ return 'plaintext';
54
+ }
55
+ const basename = path.split('/').pop() ?? path;
56
+ const lastDotIndex = basename.lastIndexOf('.');
57
+ if (lastDotIndex <= 0) {
58
+ return 'plaintext';
59
+ }
60
+ const ext = basename.slice(lastDotIndex + 1).toLowerCase();
61
+ return EXTENSION_TO_LANGUAGE[ext] ?? 'plaintext';
62
+ }
63
+ export function getCodeMirrorLanguage(path) {
64
+ const lang = getLanguageFromExtension(path);
65
+ const codemirrorMap = {
66
+ typescript: 'typescript',
67
+ javascript: 'javascript',
68
+ json: 'json',
69
+ css: 'css',
70
+ html: 'html',
71
+ vue: 'vue',
72
+ markdown: 'markdown',
73
+ python: 'python',
74
+ sql: 'sql',
75
+ xml: 'xml',
76
+ yaml: 'yaml',
77
+ java: 'java',
78
+ cpp: 'cpp',
79
+ plaintext: 'plaintext',
80
+ };
81
+ return codemirrorMap[lang];
82
+ }
83
+ export function isFrontendLanguage(path) {
84
+ const lang = getLanguageFromExtension(path);
85
+ return ['typescript', 'javascript', 'vue', 'css', 'html'].includes(lang);
86
+ }
87
+ export function isHighlightable(path) {
88
+ return getLanguageFromExtension(path) !== 'plaintext';
89
+ }
90
+ //# sourceMappingURL=getLanguageFromExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getLanguageFromExtension.js","sourceRoot":"","sources":["../../../src/functions/code/getLanguageFromExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { getLanguageFromExtension, getCodeMirrorLanguage, isFrontendLanguage, isHighlightable, type CodeLanguage, } from './getLanguageFromExtension';
@@ -0,0 +1,2 @@
1
+ export { getLanguageFromExtension, getCodeMirrorLanguage, isFrontendLanguage, isHighlightable, } from './getLanguageFromExtension';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/functions/code/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAEhB,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function copyTextToClipboard(text: string): Promise<boolean>;
@@ -0,0 +1,36 @@
1
+ export async function copyTextToClipboard(text) {
2
+ if (text === '')
3
+ return false;
4
+ const w = globalThis;
5
+ const doc = w.document;
6
+ const nav = w.navigator;
7
+ if (!doc?.body)
8
+ return false;
9
+ if (nav?.clipboard?.writeText) {
10
+ try {
11
+ await nav.clipboard.writeText(text);
12
+ return true;
13
+ }
14
+ catch {
15
+ }
16
+ }
17
+ try {
18
+ const ta = doc.createElement('textarea');
19
+ const t = ta;
20
+ t.value = text;
21
+ t.readOnly = true;
22
+ t.style.cssText =
23
+ 'position:fixed;top:0;left:0;width:2em;height:2em;padding:0;border:none;outline:none;opacity:0;pointer-events:none;';
24
+ doc.body.appendChild(ta);
25
+ t.focus();
26
+ t.select();
27
+ t.setSelectionRange(0, text.length);
28
+ const ok = doc.execCommand?.('copy') ?? false;
29
+ doc.body.removeChild(ta);
30
+ return ok;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ //# sourceMappingURL=copyTextToClipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyTextToClipboard.js","sourceRoot":"","sources":["../../../src/functions/dom/copyTextToClipboard.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IAC7B,MAAM,CAAC,GAAG,UAAuE,CAAA;IACjF,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAA;IACtB,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAA;IACvB,IAAI,CAAC,GAAG,EAAE,IAAI;QAAE,OAAO,KAAK,CAAA;IAE5B,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACnC,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,GAAG,EAOT,CAAA;QACD,CAAC,CAAC,KAAK,GAAG,IAAI,CAAA;QACd,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAA;QACjB,CAAC,CAAC,KAAK,CAAC,OAAO;YACb,oHAAoH,CAAA;QACtH,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC,CAAC,KAAK,EAAE,CAAA;QACT,CAAC,CAAC,MAAM,EAAE,CAAA;QACV,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACnC,MAAM,EAAE,GAAI,GAAuB,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAA;QAClE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function extractVideoCoverAsFile(videoFile: File, options?: {
2
+ seekTimeSec?: number;
3
+ quality?: number;
4
+ mimeType?: 'image/jpeg' | 'image/png';
5
+ maxWidth?: number;
6
+ }): Promise<File>;