@nextclaw/ui 0.12.14 → 0.12.15
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.
- package/CHANGELOG.md +14 -0
- package/dist/assets/{api-C51456xV.js → api-HsS9C7l0.js} +1 -1
- package/dist/assets/{app-manager-provider-D_cKqqRG.js → app-manager-provider-CNa6cmOk.js} +1 -1
- package/dist/assets/{app-navigation.config-Dve1W20Y.js → app-navigation.config-Dy69P_3O.js} +1 -1
- package/dist/assets/{book-open-B4mOKdz8.js → book-open-DJSe9YLj.js} +1 -1
- package/dist/assets/{channels-list-page-WJ7d4zMI.js → channels-list-page-DtjYJ1FX.js} +1 -1
- package/dist/assets/chat-Rmwi-kQn.js +58 -0
- package/dist/assets/{chat-page-DLFTPfmu.js → chat-page-Cslvp6SG.js} +1 -1
- package/dist/assets/{chunk-JZWAC4HX-ptDyT_1C.js → chunk-JZWAC4HX-CMPxE3BJ.js} +1 -1
- package/dist/assets/{config-split-page-B3PRA_AV.js → config-split-page-v7p1CQjU.js} +1 -1
- package/dist/assets/{createLucideIcon-C_GFKVuW.js → createLucideIcon-Y1cWg3R9.js} +1 -1
- package/dist/assets/{desktop-update-config-CzGi43xw.js → desktop-update-config-CqJmmpjR.js} +1 -1
- package/dist/assets/{dialog-BHcaU6NE.js → dialog-CYis0wx_.js} +1 -1
- package/dist/assets/{dist-DtBFqZ6_.js → dist-DIWOVzPY.js} +1 -1
- package/dist/assets/{doc-browser-CwgI7ipB.js → doc-browser-BQT0fa3g.js} +1 -1
- package/dist/assets/{doc-browser-CoKIUCJj.js → doc-browser-CP6kjGaF.js} +1 -1
- package/dist/assets/doc-browser-DK2tXLi_.js +1 -0
- package/dist/assets/{doc-browser-context-Dib9sS83.js → doc-browser-context-BacwCbOG.js} +1 -1
- package/dist/assets/{es2015-BlNhrQUG.js → es2015-3VnZDFPs.js} +1 -1
- package/dist/assets/{external-link-DP2IJ7AM.js → external-link-CPhZo92k.js} +1 -1
- package/dist/assets/{folder-BPwc278w.js → folder-orBwjR8h.js} +1 -1
- package/dist/assets/{hash-CvcvtMBq.js → hash-BvWW8Scd.js} +1 -1
- package/dist/assets/i18n-BhoFaF7E.js +1 -0
- package/dist/assets/{index-CAYF44Dz.js → index-D0_J-bk_.js} +2 -2
- package/dist/assets/index-OrUEVLgT.css +1 -0
- package/dist/assets/{key-round-BQXmPSxD.js → key-round-B5u2XQwa.js} +1 -1
- package/dist/assets/loader-circle-DotuB8NZ.js +1 -0
- package/dist/assets/{logo-badge-uB4SwANR.js → logo-badge-BLQdO_th.js} +1 -1
- package/dist/assets/{logos-BcELLmYh.js → logos-WPtZ1joO.js} +1 -1
- package/dist/assets/marketplace-page-CJHkdgv_.js +1 -0
- package/dist/assets/{marketplace-page-DiqqX25V.js → marketplace-page-It54wla_.js} +1 -1
- package/dist/assets/{mcp-marketplace-page-C_akqPwv.js → mcp-marketplace-page-C64VUmni.js} +1 -1
- package/dist/assets/mcp-marketplace-page-DIItTRy_.js +1 -0
- package/dist/assets/message-square-CO_7rU-N.js +1 -0
- package/dist/assets/{model-config-B0L43HTL.js → model-config-Cu6zLI8a.js} +1 -1
- package/dist/assets/{notice-card-C9PFAR67.js → notice-card-DDVM6IFQ.js} +1 -1
- package/dist/assets/play-kSfmJAme.js +1 -0
- package/dist/assets/plus-BNaF7Wq5.js +1 -0
- package/dist/assets/{popover-B8msg2FQ.js → popover-Dliq2K8O.js} +1 -1
- package/dist/assets/{provider-scoped-model-input-DeAo2Y65.js → provider-scoped-model-input-D0oXIrWA.js} +1 -1
- package/dist/assets/{providers-list-5_VShcn7.js → providers-list-CrwTWzge.js} +1 -1
- package/dist/assets/{refresh-ccw-CeG203yU.js → refresh-ccw-pX3BUxPF.js} +1 -1
- package/dist/assets/remote-BpAw88FR.js +1 -0
- package/dist/assets/{rotate-cw-F7aThvYj.js → rotate-cw-Bm8W8iaF.js} +1 -1
- package/dist/assets/{runtime-config-page-B-y_0HIS.js → runtime-config-page-CYZyCr04.js} +1 -1
- package/dist/assets/{save-7ztImRj7.js → save-CZ9zvmBJ.js} +1 -1
- package/dist/assets/{search-DZSNKEGp.js → search-DpxqxcpP.js} +1 -1
- package/dist/assets/{search-config-DJTm9Fno.js → search-config-D_H6cr07.js} +1 -1
- package/dist/assets/{secrets-config-DKFeFii1.js → secrets-config-BG9fic_R.js} +1 -1
- package/dist/assets/{select-DRDejPLk.js → select-D-gjRjhr.js} +1 -1
- package/dist/assets/{sessions-config-page-CZGqS32n.js → sessions-config-page-DzSOCrQt.js} +1 -1
- package/dist/assets/{setting-row-BcF6eTW0.js → setting-row-Cl4_XpIR.js} +1 -1
- package/dist/assets/{settings-DjvNMJde.js → settings-C9WgQdGW.js} +1 -1
- package/dist/assets/skeleton-BN6fOana.js +1 -0
- package/dist/assets/{sparkles-CyDTgTM4.js → sparkles-gvRilA9f.js} +1 -1
- package/dist/assets/{status-dot-aQU9Mia4.js → status-dot-W2TPs1Zf.js} +1 -1
- package/dist/assets/{tabs-custom-C4P7g4vR.js → tabs-custom-BxZfWeD1.js} +1 -1
- package/dist/assets/{tag-chip-CVIqyMv7.js → tag-chip-DfmhmN50.js} +1 -1
- package/dist/assets/{theme-provider-dHqcWU-j.js → theme-provider-CajCgE_N.js} +1 -1
- package/dist/assets/{tooltip-C6VPreZ7.js → tooltip-C1XVx_h1.js} +1 -1
- package/dist/assets/{trash-2-C1cdqL6V.js → trash-2-WC4Dlakj.js} +1 -1
- package/dist/assets/{use-config-DFja1sda.js → use-config-BIErdQNR.js} +1 -1
- package/dist/assets/{use-confirm-dialog-DvIbSUX3.js → use-confirm-dialog-B3ZsM4V-.js} +1 -1
- package/dist/assets/{use-infinite-scroll-loader-D8h0k-iL.js → use-infinite-scroll-loader-rO55YHGO.js} +1 -1
- package/dist/assets/{use-viewport-layout-D-pjxsyz.js → use-viewport-layout-zLAsjh3A.js} +1 -1
- package/dist/assets/x-D1867E7F.js +1 -0
- package/dist/index.html +39 -39
- package/package.json +3 -3
- package/src/features/chat/components/chat-sidebar-session-item.tsx +22 -24
- package/src/features/chat/managers/ncp-chat-input.manager.test.ts +29 -0
- package/src/features/chat/utils/chat-input-bar.utils.test.ts +27 -1
- package/src/features/chat/utils/chat-input-toolbar.utils.ts +20 -19
- package/src/features/chat/utils/ncp-chat-input-availability.utils.test.ts +35 -3
- package/src/features/chat/utils/ncp-chat-input-availability.utils.ts +4 -6
- package/src/shared/lib/i18n/chat.ts +1 -1
- package/dist/assets/chat-BxA-mw53.js +0 -58
- package/dist/assets/doc-browser-DYKpRqe-.js +0 -1
- package/dist/assets/i18n-BnNAQpVM.js +0 -1
- package/dist/assets/index-mRmSAB-e.css +0 -1
- package/dist/assets/loader-circle-C6gg2m2a.js +0 -1
- package/dist/assets/marketplace-page-0sEdt5sA.js +0 -1
- package/dist/assets/mcp-marketplace-page-B8vmu9xe.js +0 -1
- package/dist/assets/message-square-CLVODA23.js +0 -1
- package/dist/assets/play-DeNVUA5C.js +0 -1
- package/dist/assets/plus-BptLViq1.js +0 -1
- package/dist/assets/remote-pzp4oLcL.js +0 -1
- package/dist/assets/skeleton-5Mg6vZHN.js +0 -1
- package/dist/assets/x-BjMO7v8q.js +0 -1
|
@@ -41,7 +41,7 @@ function createSnapshot(
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
describe('ncp-chat-input-availability.utils', () => {
|
|
44
|
-
it('keeps the composer editable during cold start while
|
|
44
|
+
it('keeps the composer editable during cold start while runtime blocking still prevents send', () => {
|
|
45
45
|
const snapshot = createSnapshot({
|
|
46
46
|
isProviderStateResolved: false,
|
|
47
47
|
modelOptions: [],
|
|
@@ -60,6 +60,22 @@ describe('ncp-chat-input-availability.utils', () => {
|
|
|
60
60
|
).toBe(true);
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
+
it('does not block send only because model options have not loaded yet', () => {
|
|
64
|
+
const snapshot = createSnapshot({
|
|
65
|
+
isProviderStateResolved: false,
|
|
66
|
+
modelOptions: [],
|
|
67
|
+
sessionTypeUnavailable: false,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
expect(
|
|
71
|
+
isNcpChatSendDisabled({
|
|
72
|
+
snapshot,
|
|
73
|
+
hasSendableDraft: true,
|
|
74
|
+
isRuntimeBlocked: false,
|
|
75
|
+
})
|
|
76
|
+
).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
|
|
63
79
|
it('marks model options as empty only after provider state resolves', () => {
|
|
64
80
|
const loadingSnapshot = createSnapshot({
|
|
65
81
|
isProviderStateResolved: false,
|
|
@@ -74,19 +90,35 @@ describe('ncp-chat-input-availability.utils', () => {
|
|
|
74
90
|
expect(isNcpChatModelOptionsEmpty(emptySnapshot)).toBe(true);
|
|
75
91
|
});
|
|
76
92
|
|
|
77
|
-
it('
|
|
93
|
+
it('keeps editing and sending available when the selected session type reports unavailable', () => {
|
|
78
94
|
const snapshot = createSnapshot({
|
|
79
95
|
isProviderStateResolved: true,
|
|
80
96
|
sessionTypeUnavailable: true,
|
|
81
97
|
});
|
|
82
98
|
|
|
83
|
-
expect(isNcpChatComposerDisabled(snapshot)).toBe(
|
|
99
|
+
expect(isNcpChatComposerDisabled(snapshot)).toBe(false);
|
|
84
100
|
expect(
|
|
85
101
|
isNcpChatSendDisabled({
|
|
86
102
|
snapshot,
|
|
87
103
|
hasSendableDraft: true,
|
|
88
104
|
isRuntimeBlocked: false,
|
|
89
105
|
})
|
|
106
|
+
).toBe(false);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('blocks send when there is no sendable draft', () => {
|
|
110
|
+
const snapshot = createSnapshot({
|
|
111
|
+
isProviderStateResolved: true,
|
|
112
|
+
modelOptions: [],
|
|
113
|
+
sessionTypeUnavailable: true,
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
expect(
|
|
117
|
+
isNcpChatSendDisabled({
|
|
118
|
+
snapshot,
|
|
119
|
+
hasSendableDraft: false,
|
|
120
|
+
isRuntimeBlocked: false,
|
|
121
|
+
})
|
|
90
122
|
).toBe(true);
|
|
91
123
|
});
|
|
92
124
|
});
|
|
@@ -24,9 +24,9 @@ export function isNcpChatModelOptionsEmpty(
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export function isNcpChatComposerDisabled(
|
|
27
|
-
|
|
27
|
+
_snapshot: NcpChatInputAvailabilitySnapshot
|
|
28
28
|
): boolean {
|
|
29
|
-
return
|
|
29
|
+
return false;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export function isNcpChatSendDisabled(params: {
|
|
@@ -34,12 +34,10 @@ export function isNcpChatSendDisabled(params: {
|
|
|
34
34
|
snapshot: NcpChatInputAvailabilitySnapshot;
|
|
35
35
|
isRuntimeBlocked: boolean;
|
|
36
36
|
}): boolean {
|
|
37
|
-
const { hasSendableDraft, isRuntimeBlocked
|
|
37
|
+
const { hasSendableDraft, isRuntimeBlocked } = params;
|
|
38
38
|
|
|
39
39
|
return (
|
|
40
40
|
isRuntimeBlocked ||
|
|
41
|
-
!hasSendableDraft
|
|
42
|
-
!hasNcpChatModelOptions(snapshot) ||
|
|
43
|
-
snapshot.sessionTypeUnavailable
|
|
41
|
+
!hasSendableDraft
|
|
44
42
|
);
|
|
45
43
|
}
|
|
@@ -67,7 +67,7 @@ export const CHAT_LABELS: Record<string, { zh: string; en: string }> = {
|
|
|
67
67
|
zh: '聊天能力启动失败,请稍后重试或检查服务日志。',
|
|
68
68
|
en: 'Chat startup failed. Please retry in a moment or inspect the service logs.'
|
|
69
69
|
},
|
|
70
|
-
chatInputPlaceholder: { zh: '
|
|
70
|
+
chatInputPlaceholder: { zh: '发消息...', en: 'Message NextClaw...' },
|
|
71
71
|
chatInputHint: { zh: '支持多轮上下文,默认走当前会话。', en: 'Multi-turn context is preserved in the current session.' },
|
|
72
72
|
chatSlashSectionCommands: { zh: '命令', en: 'Commands' },
|
|
73
73
|
chatSlashSectionSkills: { zh: '技能', en: 'Skills' },
|