dsh-input-traffic 0.2.8 → 0.2.10-beta.1
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.ja.md +78 -0
- package/CHANGELOG.ko.md +78 -0
- package/CHANGELOG.md +92 -0
- package/INSTALL.ja.md +151 -0
- package/INSTALL.ko.md +151 -0
- package/INSTALL.md +152 -0
- package/INSTALL.zh.md +151 -0
- package/README.en.md +63 -7
- package/README.ja.md +187 -0
- package/README.ko.md +181 -0
- package/README.md +86 -10
- package/dsh.plugin.json +13 -0
- package/lib/client.js +1433 -1338
- package/lib/client.js.map +1 -1
- package/lib/types/client/freeze-button.d.ts +16 -9
- package/lib/types/client/freeze-button.d.ts.map +1 -1
- package/lib/types/client/freeze-button.js +86 -55
- package/lib/types/client/freeze-button.js.map +1 -1
- package/lib/types/client/freeze-store.d.ts +17 -10
- package/lib/types/client/freeze-store.d.ts.map +1 -1
- package/lib/types/client/freeze-store.js +54 -38
- package/lib/types/client/freeze-store.js.map +1 -1
- package/lib/types/client/index.d.ts +47 -24
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +117 -79
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/locales.d.ts +63 -58
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/locales.js +211 -105
- package/lib/types/client/locales.js.map +1 -1
- package/lib/types/client/session-guard-bridge.d.ts +18 -0
- package/lib/types/client/session-guard-bridge.d.ts.map +1 -0
- package/lib/types/client/session-guard-bridge.js +42 -0
- package/lib/types/client/session-guard-bridge.js.map +1 -0
- package/lib/types/client/steer-queue-dock.d.ts +9 -1
- package/lib/types/client/steer-queue-dock.d.ts.map +1 -1
- package/lib/types/client/steer-queue-dock.js +6 -5
- package/lib/types/client/steer-queue-dock.js.map +1 -1
- package/package.json +15 -7
|
@@ -1,106 +1,212 @@
|
|
|
1
|
-
/** `steer`
|
|
2
|
-
/** Dictionary namespace owned by this plugin. */
|
|
3
|
-
export const NS = 'steer';
|
|
4
|
-
/** Simplified Chinese dictionary (the key-set source of truth). */
|
|
5
|
-
export const zh = {
|
|
6
|
-
'queue.count': '{n} 条排队消息',
|
|
7
|
-
'queue.edit': '编辑排队消息',
|
|
8
|
-
'queue.edit.unsupported': '包含非文本内容,暂不支持编辑',
|
|
9
|
-
'queue.save': '保存排队消息',
|
|
10
|
-
'queue.cancelEdit': '取消编辑',
|
|
11
|
-
'queue.remove': '删除排队消息',
|
|
12
|
-
'queue.removeFailed': '删除失败:这条消息可能已经开始发送。',
|
|
13
|
-
'queue.editFailed': '编辑失败:这条消息可能已经开始发送。',
|
|
14
|
-
'queue.editFailed.pulledBack': '编辑失败,内容已退回主输入框,请确认后重新发送。',
|
|
15
|
-
'steer.inflight': '{n} 条正在插入',
|
|
16
|
-
'steer.now': '打断并输入',
|
|
17
|
-
'steer.now.aria': '红色:打断当前动作并立即输入',
|
|
18
|
-
'steer.now.unsupported': '包含非文本内容,暂不支持打断',
|
|
19
|
-
'steer.nowFailed': '打断失败,请重试。',
|
|
20
|
-
'steer.next': '插话发送',
|
|
21
|
-
'steer.next.aria': '黄色:当前动作结束后插入输入',
|
|
22
|
-
'steer.nextFailed': '插话发送失败,请重试。',
|
|
23
|
-
'steer.later': '排队到下一轮',
|
|
24
|
-
'steer.later.aria': '绿色:排队,上一轮输入的动作都结束后再处理',
|
|
25
|
-
'steer.revoke': '收回排队',
|
|
26
|
-
'steer.revoke.aria': '绿色:撤销插入,收回排队(下一轮处理)',
|
|
27
|
-
'steer.revoke.unsupported': '包含非文本内容,暂不支持收回',
|
|
28
|
-
'steer.revokeFailed': '收回排队失败,请重试。',
|
|
29
|
-
'steer.moveUp': '上移',
|
|
30
|
-
'steer.moveDown': '下移',
|
|
31
|
-
'steer.reorder.unsupported': '包含非文本内容,暂不支持排序',
|
|
32
|
-
'steer.reorderFailed': '调整顺序失败,请重试。',
|
|
33
|
-
'steer.reorderStale': '队列已变化,本次排序已取消,请重试。',
|
|
34
|
-
'steer.dragReorder': '拖动调整顺序',
|
|
35
|
-
'steer.pullBack': '打回输入框编辑',
|
|
36
|
-
'steer.pullBack.unsupported': '包含非文本内容,暂不支持打回编辑',
|
|
37
|
-
'steer.pullBack.composerBusy': '主输入框已有内容,请先发送或清空后再打回',
|
|
38
|
-
'steer.pullBackFailed': '打回输入框失败,请重试。',
|
|
39
|
-
'steer.badge.now': '打断中',
|
|
40
|
-
'steer.badge.next': '插话中',
|
|
41
|
-
'steer.badge.later': '排队',
|
|
42
|
-
'steer.unavailable.running': '仅运行中可规划',
|
|
43
|
-
'steer.clear': '取消并清空',
|
|
44
|
-
'steer.clear.confirm': '确认清空?',
|
|
45
|
-
'steer.clear.cancel': '取消清空',
|
|
46
|
-
'steer.clear.aria': '取消当前执行并清空全部排队消息',
|
|
47
|
-
'steer.clearFailed': '取消并清空失败,请重试。',
|
|
48
|
-
'steer.freeze': '冻结会话',
|
|
49
|
-
'steer.resume': '恢复会话',
|
|
50
|
-
'steer.frozen': '已冻结:当前轮次完成后暂停,排队消息将在恢复后继续',
|
|
51
|
-
'steer.
|
|
52
|
-
'steer.
|
|
53
|
-
'steer.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
'queue.
|
|
59
|
-
'queue.edit
|
|
60
|
-
'queue.
|
|
61
|
-
'queue.
|
|
62
|
-
'queue.
|
|
63
|
-
'queue.
|
|
64
|
-
'queue.
|
|
65
|
-
'queue.editFailed
|
|
66
|
-
'
|
|
67
|
-
'steer.
|
|
68
|
-
'steer.now
|
|
69
|
-
'steer.now.
|
|
70
|
-
'steer.
|
|
71
|
-
'steer.
|
|
72
|
-
'steer.next
|
|
73
|
-
'steer.
|
|
74
|
-
'steer.
|
|
75
|
-
'steer.later
|
|
76
|
-
'steer.
|
|
77
|
-
'steer.revoke
|
|
78
|
-
'steer.revoke.
|
|
79
|
-
'steer.
|
|
80
|
-
'steer.
|
|
81
|
-
'steer.
|
|
82
|
-
'steer.
|
|
83
|
-
'steer.
|
|
84
|
-
'steer.
|
|
85
|
-
'steer.
|
|
86
|
-
'steer.
|
|
87
|
-
'steer.pullBack
|
|
88
|
-
'steer.pullBack.
|
|
89
|
-
'steer.
|
|
90
|
-
'steer.
|
|
91
|
-
'steer.badge.
|
|
92
|
-
'steer.badge.
|
|
93
|
-
'steer.
|
|
94
|
-
'steer.
|
|
95
|
-
'steer.clear
|
|
96
|
-
'steer.clear.
|
|
97
|
-
'steer.clear.
|
|
98
|
-
'steer.
|
|
99
|
-
'steer.
|
|
100
|
-
'steer.
|
|
101
|
-
'steer.
|
|
102
|
-
'steer.
|
|
103
|
-
'steer.
|
|
104
|
-
'steer.
|
|
105
|
-
|
|
1
|
+
/** `steer` client dictionaries (zh / en / ja / ko). */
|
|
2
|
+
/** Dictionary namespace owned by this plugin. */
|
|
3
|
+
export const NS = 'steer';
|
|
4
|
+
/** Simplified Chinese dictionary (the key-set source of truth). */
|
|
5
|
+
export const zh = {
|
|
6
|
+
'queue.count': '{n} 条排队消息',
|
|
7
|
+
'queue.edit': '编辑排队消息',
|
|
8
|
+
'queue.edit.unsupported': '包含非文本内容,暂不支持编辑',
|
|
9
|
+
'queue.save': '保存排队消息',
|
|
10
|
+
'queue.cancelEdit': '取消编辑',
|
|
11
|
+
'queue.remove': '删除排队消息',
|
|
12
|
+
'queue.removeFailed': '删除失败:这条消息可能已经开始发送。',
|
|
13
|
+
'queue.editFailed': '编辑失败:这条消息可能已经开始发送。',
|
|
14
|
+
'queue.editFailed.pulledBack': '编辑失败,内容已退回主输入框,请确认后重新发送。',
|
|
15
|
+
'steer.inflight': '{n} 条正在插入',
|
|
16
|
+
'steer.now': '打断并输入',
|
|
17
|
+
'steer.now.aria': '红色:打断当前动作并立即输入',
|
|
18
|
+
'steer.now.unsupported': '包含非文本内容,暂不支持打断',
|
|
19
|
+
'steer.nowFailed': '打断失败,请重试。',
|
|
20
|
+
'steer.next': '插话发送',
|
|
21
|
+
'steer.next.aria': '黄色:当前动作结束后插入输入',
|
|
22
|
+
'steer.nextFailed': '插话发送失败,请重试。',
|
|
23
|
+
'steer.later': '排队到下一轮',
|
|
24
|
+
'steer.later.aria': '绿色:排队,上一轮输入的动作都结束后再处理',
|
|
25
|
+
'steer.revoke': '收回排队',
|
|
26
|
+
'steer.revoke.aria': '绿色:撤销插入,收回排队(下一轮处理)',
|
|
27
|
+
'steer.revoke.unsupported': '包含非文本内容,暂不支持收回',
|
|
28
|
+
'steer.revokeFailed': '收回排队失败,请重试。',
|
|
29
|
+
'steer.moveUp': '上移',
|
|
30
|
+
'steer.moveDown': '下移',
|
|
31
|
+
'steer.reorder.unsupported': '包含非文本内容,暂不支持排序',
|
|
32
|
+
'steer.reorderFailed': '调整顺序失败,请重试。',
|
|
33
|
+
'steer.reorderStale': '队列已变化,本次排序已取消,请重试。',
|
|
34
|
+
'steer.dragReorder': '拖动调整顺序',
|
|
35
|
+
'steer.pullBack': '打回输入框编辑',
|
|
36
|
+
'steer.pullBack.unsupported': '包含非文本内容,暂不支持打回编辑',
|
|
37
|
+
'steer.pullBack.composerBusy': '主输入框已有内容,请先发送或清空后再打回',
|
|
38
|
+
'steer.pullBackFailed': '打回输入框失败,请重试。',
|
|
39
|
+
'steer.badge.now': '打断中',
|
|
40
|
+
'steer.badge.next': '插话中',
|
|
41
|
+
'steer.badge.later': '排队',
|
|
42
|
+
'steer.unavailable.running': '仅运行中可规划',
|
|
43
|
+
'steer.clear': '取消并清空',
|
|
44
|
+
'steer.clear.confirm': '确认清空?',
|
|
45
|
+
'steer.clear.cancel': '取消清空',
|
|
46
|
+
'steer.clear.aria': '取消当前执行并清空全部排队消息',
|
|
47
|
+
'steer.clearFailed': '取消并清空失败,请重试。',
|
|
48
|
+
'steer.freeze': '冻结会话',
|
|
49
|
+
'steer.resume': '恢复会话',
|
|
50
|
+
'steer.frozen': '已冻结:当前轮次完成后暂停,排队消息将在恢复后继续',
|
|
51
|
+
'steer.frozenInput': '已冻结:输入已暂停,恢复后继续',
|
|
52
|
+
'steer.frozenBadge': '已冻结',
|
|
53
|
+
'steer.freezeFailed': '冻结失败,请重试。',
|
|
54
|
+
'steer.resumeFailed': '恢复失败,请重试。',
|
|
55
|
+
};
|
|
56
|
+
/** English dictionary (keys mirror zh). */
|
|
57
|
+
export const en = {
|
|
58
|
+
'queue.count': '{n} queued messages',
|
|
59
|
+
'queue.edit': 'Edit queued message',
|
|
60
|
+
'queue.edit.unsupported': 'Contains non-text content; editing is unsupported',
|
|
61
|
+
'queue.save': 'Save queued message',
|
|
62
|
+
'queue.cancelEdit': 'Cancel edit',
|
|
63
|
+
'queue.remove': 'Remove queued message',
|
|
64
|
+
'queue.removeFailed': 'Remove failed: the message may have started sending.',
|
|
65
|
+
'queue.editFailed': 'Edit failed: the message may have started sending.',
|
|
66
|
+
'queue.editFailed.pulledBack': 'Edit failed; the content was moved back to the composer, please review and resend.',
|
|
67
|
+
'steer.inflight': '{n} inserting',
|
|
68
|
+
'steer.now': 'Interrupt and send',
|
|
69
|
+
'steer.now.aria': 'Red: interrupt the running action and send now',
|
|
70
|
+
'steer.now.unsupported': 'Contains non-text content; interrupting is unsupported',
|
|
71
|
+
'steer.nowFailed': 'Interrupt failed, please retry.',
|
|
72
|
+
'steer.next': 'Send after action',
|
|
73
|
+
'steer.next.aria': 'Yellow: insert after the current action finishes',
|
|
74
|
+
'steer.nextFailed': 'Steering failed, please retry.',
|
|
75
|
+
'steer.later': 'Queue for next turn',
|
|
76
|
+
'steer.later.aria': 'Green: queue; processed after all previously steered actions finish',
|
|
77
|
+
'steer.revoke': 'Pull back to queue',
|
|
78
|
+
'steer.revoke.aria': 'Green: revoke the insertion and queue for the next turn',
|
|
79
|
+
'steer.revoke.unsupported': 'Contains non-text content; revoking is unsupported',
|
|
80
|
+
'steer.revokeFailed': 'Revoke failed, please retry.',
|
|
81
|
+
'steer.moveUp': 'Move up',
|
|
82
|
+
'steer.moveDown': 'Move down',
|
|
83
|
+
'steer.reorder.unsupported': 'Contains non-text content; reordering is unsupported',
|
|
84
|
+
'steer.reorderFailed': 'Reorder failed, please retry.',
|
|
85
|
+
'steer.reorderStale': 'The queue changed; this reorder was cancelled, please retry.',
|
|
86
|
+
'steer.dragReorder': 'Drag to reorder',
|
|
87
|
+
'steer.pullBack': 'Edit in composer',
|
|
88
|
+
'steer.pullBack.unsupported': 'Contains non-text content; pulling back is unsupported',
|
|
89
|
+
'steer.pullBack.composerBusy': 'The composer already has content; send or clear it first',
|
|
90
|
+
'steer.pullBackFailed': 'Pull back failed, please retry.',
|
|
91
|
+
'steer.badge.now': 'interrupting',
|
|
92
|
+
'steer.badge.next': 'steering',
|
|
93
|
+
'steer.badge.later': 'queued',
|
|
94
|
+
'steer.unavailable.running': 'Planning requires a running session',
|
|
95
|
+
'steer.clear': 'Cancel and clear',
|
|
96
|
+
'steer.clear.confirm': 'Confirm clear?',
|
|
97
|
+
'steer.clear.cancel': 'Cancel clearing',
|
|
98
|
+
'steer.clear.aria': 'Cancel the current run and clear all queued messages',
|
|
99
|
+
'steer.clearFailed': 'Cancel and clear failed, please retry.',
|
|
100
|
+
'steer.freeze': 'Freeze session',
|
|
101
|
+
'steer.resume': 'Resume session',
|
|
102
|
+
'steer.frozen': 'Frozen: the current turn finishes, then the queue pauses until resumed',
|
|
103
|
+
'steer.frozenInput': 'Frozen: input paused, resume to continue',
|
|
104
|
+
'steer.frozenBadge': 'frozen',
|
|
105
|
+
'steer.freezeFailed': 'Freeze failed, please retry.',
|
|
106
|
+
'steer.resumeFailed': 'Resume failed, please retry.',
|
|
107
|
+
};
|
|
108
|
+
/** Japanese dictionary (keys mirror zh). */
|
|
109
|
+
export const ja = {
|
|
110
|
+
'queue.count': '{n} 件のキューイング済みメッセージ',
|
|
111
|
+
'queue.edit': 'キューイング済みメッセージを編集',
|
|
112
|
+
'queue.edit.unsupported': '非テキストコンテンツが含まれており、編集はサポートされていません',
|
|
113
|
+
'queue.save': 'キューイング済みメッセージを保存',
|
|
114
|
+
'queue.cancelEdit': '編集をキャンセル',
|
|
115
|
+
'queue.remove': 'キューイング済みメッセージを削除',
|
|
116
|
+
'queue.removeFailed': '削除失敗:メッセージの送信が既に開始されている可能性があります。',
|
|
117
|
+
'queue.editFailed': '編集失敗:メッセージの送信が既に開始されている可能性があります。',
|
|
118
|
+
'queue.editFailed.pulledBack': '編集失敗。コンテンツはコンポーザに戻されました。確認後再送信してください。',
|
|
119
|
+
'steer.inflight': '{n} 件挿入中',
|
|
120
|
+
'steer.now': '中断して送信',
|
|
121
|
+
'steer.now.aria': '赤:実行中のアクションを中断して即座に送信',
|
|
122
|
+
'steer.now.unsupported': '非テキストコンテンツが含まれており、中断はサポートされていません',
|
|
123
|
+
'steer.nowFailed': '中断失敗。再試行してください。',
|
|
124
|
+
'steer.next': 'アクション後に送信',
|
|
125
|
+
'steer.next.aria': '黄:現在のアクション完了後に挿入',
|
|
126
|
+
'steer.nextFailed': 'ステア失敗。再試行してください。',
|
|
127
|
+
'steer.later': '次のターンまでキューイング',
|
|
128
|
+
'steer.later.aria': '緑:キューイング。以前のステア済みアクションがすべて完了してから処理',
|
|
129
|
+
'steer.revoke': 'キューに戻す',
|
|
130
|
+
'steer.revoke.aria': '緑:挿入を取り消し、次のターンまでキューイング',
|
|
131
|
+
'steer.revoke.unsupported': '非テキストコンテンツが含まれており、取り消しはサポートされていません',
|
|
132
|
+
'steer.revokeFailed': '取り消し失敗。再試行してください。',
|
|
133
|
+
'steer.moveUp': '上へ移動',
|
|
134
|
+
'steer.moveDown': '下へ移動',
|
|
135
|
+
'steer.reorder.unsupported': '非テキストコンテンツが含まれており、並べ替えはサポートされていません',
|
|
136
|
+
'steer.reorderFailed': '並べ替え失敗。再試行してください。',
|
|
137
|
+
'steer.reorderStale': 'キューが変更されました。本次の並べ替えはキャンセルされました。再試行してください。',
|
|
138
|
+
'steer.dragReorder': 'ドラッグして並べ替え',
|
|
139
|
+
'steer.pullBack': 'コンポーザに送り直して編集',
|
|
140
|
+
'steer.pullBack.unsupported': '非テキストコンテンツが含まれており、送り直しはサポートされていません',
|
|
141
|
+
'steer.pullBack.composerBusy': 'コンポーザに既にコンテンツがあります。送信またはクリアしてください',
|
|
142
|
+
'steer.pullBackFailed': '送り直し失敗。再試行してください。',
|
|
143
|
+
'steer.badge.now': '中断中',
|
|
144
|
+
'steer.badge.next': 'ステア中',
|
|
145
|
+
'steer.badge.later': 'キューイング済み',
|
|
146
|
+
'steer.unavailable.running': '実行中のみプランニング可能',
|
|
147
|
+
'steer.clear': '取り消して全消去',
|
|
148
|
+
'steer.clear.confirm': '消去を確認?',
|
|
149
|
+
'steer.clear.cancel': '消去をキャンセル',
|
|
150
|
+
'steer.clear.aria': '実行を停止し、すべてのキューイング済みメッセージを消去',
|
|
151
|
+
'steer.clearFailed': '取り消して全消去失敗。再試行してください。',
|
|
152
|
+
'steer.freeze': 'セッション凍結',
|
|
153
|
+
'steer.resume': 'セッション再開',
|
|
154
|
+
'steer.frozen': '凍結中:現在のターン完了後一時停止、再開後にキューが継続',
|
|
155
|
+
'steer.frozenInput': '凍結中:入力一時停止、再開後に継続',
|
|
156
|
+
'steer.frozenBadge': '凍結済み',
|
|
157
|
+
'steer.freezeFailed': '凍結失敗。再試行してください。',
|
|
158
|
+
'steer.resumeFailed': '再開失敗。再試行してください。',
|
|
159
|
+
};
|
|
160
|
+
/** Korean dictionary (keys mirror zh). */
|
|
161
|
+
export const ko = {
|
|
162
|
+
'queue.count': '{n}개 대기열 메시지',
|
|
163
|
+
'queue.edit': '대기열 메시지 편집',
|
|
164
|
+
'queue.edit.unsupported': '비텍스트 콘텐츠가 포함되어 있어 편집이 지원되지 않습니다',
|
|
165
|
+
'queue.save': '대기열 메시지 저장',
|
|
166
|
+
'queue.cancelEdit': '편집 취소',
|
|
167
|
+
'queue.remove': '대기열 메시지 삭제',
|
|
168
|
+
'queue.removeFailed': '삭제 실패: 메시지 전송이 이미 시작되었을 수 있습니다.',
|
|
169
|
+
'queue.editFailed': '편집 실패: 메시지 전송이 이미 시작되었을 수 있습니다.',
|
|
170
|
+
'queue.editFailed.pulledBack': '편집 실패. 콘텐츠가 컴포저로 돌아갔습니다. 확인 후 다시 전송하세요.',
|
|
171
|
+
'steer.inflight': '{n}개 삽입 중',
|
|
172
|
+
'steer.now': '중단 후 전송',
|
|
173
|
+
'steer.now.aria': '빨간색: 실행 중인 액션을 중단하고 즉시 전송',
|
|
174
|
+
'steer.now.unsupported': '비텍스트 콘텐츠가 포함되어 있어 중단이 지원되지 않습니다',
|
|
175
|
+
'steer.nowFailed': '중단 실패. 다시 시도하세요.',
|
|
176
|
+
'steer.next': '액션 후 전송',
|
|
177
|
+
'steer.next.aria': '노란색: 현재 액션 완료 후 삽입',
|
|
178
|
+
'steer.nextFailed': '스티어 실패. 다시 시도하세요.',
|
|
179
|
+
'steer.later': '다음 턴까지 대기',
|
|
180
|
+
'steer.later.aria': '초록색: 대기. 이전 스티어된 액션이 모두 완료된 후 처리',
|
|
181
|
+
'steer.revoke': '대기열로 되돌리기',
|
|
182
|
+
'steer.revoke.aria': '초록색: 삽입 취소, 다음 턴까지 대기',
|
|
183
|
+
'steer.revoke.unsupported': '비텍스트 콘텐츠가 포함되어 있어 취소가 지원되지 않습니다',
|
|
184
|
+
'steer.revokeFailed': '취소 실패. 다시 시도하세요.',
|
|
185
|
+
'steer.moveUp': '위로 이동',
|
|
186
|
+
'steer.moveDown': '아래로 이동',
|
|
187
|
+
'steer.reorder.unsupported': '비텍스트 콘텐츠가 포함되어 있어 재정렬이 지원되지 않습니다',
|
|
188
|
+
'steer.reorderFailed': '재정렬 실패. 다시 시도하세요.',
|
|
189
|
+
'steer.reorderStale': '대기열이 변경되었습니다. 이번 재정렬이 취소되었습니다. 다시 시도하세요.',
|
|
190
|
+
'steer.dragReorder': '드래그로 재정렬',
|
|
191
|
+
'steer.pullBack': '컴포저로 되돌려 편집',
|
|
192
|
+
'steer.pullBack.unsupported': '비텍스트 콘텐츠가 포함되어 있어 되돌리기가 지원되지 않습니다',
|
|
193
|
+
'steer.pullBack.composerBusy': '컴포저에 이미 콘텐츠가 있습니다. 먼저 전송하거나 비우세요',
|
|
194
|
+
'steer.pullBackFailed': '되돌리기 실패. 다시 시도하세요.',
|
|
195
|
+
'steer.badge.now': '중단 중',
|
|
196
|
+
'steer.badge.next': '스티어 중',
|
|
197
|
+
'steer.badge.later': '대기열',
|
|
198
|
+
'steer.unavailable.running': '실행 중에만 계획 가능',
|
|
199
|
+
'steer.clear': '취소 후 전체 지우기',
|
|
200
|
+
'steer.clear.confirm': '지우기 확인?',
|
|
201
|
+
'steer.clear.cancel': '지우기 취소',
|
|
202
|
+
'steer.clear.aria': '현재 실행을 중지하고 모든 대기열 메시지를 지우기',
|
|
203
|
+
'steer.clearFailed': '취소 후 전체 지우기 실패. 다시 시도하세요.',
|
|
204
|
+
'steer.freeze': '세션 동결',
|
|
205
|
+
'steer.resume': '세션 재개',
|
|
206
|
+
'steer.frozen': '동결됨: 현재 턴 완료 후 일시정지, 재개 시 대기열 계속',
|
|
207
|
+
'steer.frozenInput': '동결됨: 입력 일시정지, 재개 시 계속',
|
|
208
|
+
'steer.frozenBadge': '동결됨',
|
|
209
|
+
'steer.freezeFailed': '동결 실패. 다시 시도하세요.',
|
|
210
|
+
'steer.resumeFailed': '재개 실패. 다시 시도하세요.',
|
|
211
|
+
};
|
|
106
212
|
//# sourceMappingURL=locales.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* input-traffic ↔ dsh-session-guard 透传桥(D8 fail-open)。
|
|
3
|
+
*
|
|
4
|
+
* input-traffic **只做冻结增强**(队列冻结/解冻),服务端会话门(暂停/恢复会话)
|
|
5
|
+
* 归 dsh-session-guard 插件。冻结/解冻按钮触发时,尽力调用
|
|
6
|
+
* `sessionGuard.stopNextTurn` / `resume`;**插件未装**(路由 404 / 网络失败 /
|
|
7
|
+
* 返回错误)→ 静默跳过,**绝不报错**,前端冻结仍正常生效。
|
|
8
|
+
*
|
|
9
|
+
* 不吸收任何 auto-continue / 重试逻辑(重试归后端 dsh-session-guard,D9)。
|
|
10
|
+
*/
|
|
11
|
+
/** 尽力调用 sessionGuard.stopNextTurn(停掉 session 下一回合)。失败静默。 */
|
|
12
|
+
export declare function sessionGuardStopNextTurn(sessionId: string): Promise<boolean>;
|
|
13
|
+
/** 尽力调用 sessionGuard.resume。失败静默。 */
|
|
14
|
+
export declare function sessionGuardResume(sessionId: string): Promise<boolean>;
|
|
15
|
+
declare global {
|
|
16
|
+
var __DSH_SESSION_GUARD_BRIDGE__: boolean | undefined;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=session-guard-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-guard-bridge.d.ts","sourceRoot":"","sources":["../../../src/client/session-guard-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4DAA4D;AAC5D,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAElF;AAED,qCAAqC;AACrC,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE5E;AAoBD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,4BAA4B,EAAE,OAAO,GAAG,SAAS,CAAA;CACtD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* input-traffic ↔ dsh-session-guard 透传桥(D8 fail-open)。
|
|
3
|
+
*
|
|
4
|
+
* input-traffic **只做冻结增强**(队列冻结/解冻),服务端会话门(暂停/恢复会话)
|
|
5
|
+
* 归 dsh-session-guard 插件。冻结/解冻按钮触发时,尽力调用
|
|
6
|
+
* `sessionGuard.stopNextTurn` / `resume`;**插件未装**(路由 404 / 网络失败 /
|
|
7
|
+
* 返回错误)→ 静默跳过,**绝不报错**,前端冻结仍正常生效。
|
|
8
|
+
*
|
|
9
|
+
* 不吸收任何 auto-continue / 重试逻辑(重试归后端 dsh-session-guard,D9)。
|
|
10
|
+
*/
|
|
11
|
+
/** 尽力调用 sessionGuard.stopNextTurn(停掉 session 下一回合)。失败静默。 */
|
|
12
|
+
export async function sessionGuardStopNextTurn(sessionId) {
|
|
13
|
+
return callGuard(sessionId, 'stopNextTurn');
|
|
14
|
+
}
|
|
15
|
+
/** 尽力调用 sessionGuard.resume。失败静默。 */
|
|
16
|
+
export async function sessionGuardResume(sessionId) {
|
|
17
|
+
return callGuard(sessionId, 'resume');
|
|
18
|
+
}
|
|
19
|
+
async function callGuard(sessionId, action) {
|
|
20
|
+
try {
|
|
21
|
+
const res = await fetch('/session-guard/rpc', {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: { 'content-type': 'application/json' },
|
|
24
|
+
body: JSON.stringify({ sessionId, action }),
|
|
25
|
+
});
|
|
26
|
+
if (!res.ok)
|
|
27
|
+
return false;
|
|
28
|
+
const body = await res.json().catch(() => null);
|
|
29
|
+
return body?.ok === true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// 路由不存在(session-guard 未装)/ 网络失败 → fail-open。
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
globalThis.__DSH_SESSION_GUARD_BRIDGE__ = true;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
/* 浏览器环境无 window 时忽略 */
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=session-guard-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-guard-bridge.js","sourceRoot":"","sources":["../../../src/client/session-guard-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,SAAiB;IAC9D,OAAO,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;AAC7C,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB;IACxD,OAAO,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;AACvC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,SAAiB,EAAE,MAAc;IACxD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,KAAK,CAAA;QACzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC/C,OAAO,IAAI,EAAE,EAAE,KAAK,IAAI,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAQD,IAAI,CAAC;IACH,UAAU,CAAC,4BAA4B,GAAG,IAAI,CAAA;AAChD,CAAC;AAAC,MAAM,CAAC;IACP,uBAAuB;AACzB,CAAC"}
|
|
@@ -18,9 +18,17 @@ export interface SteerQueueDockInjected {
|
|
|
18
18
|
cancel: () => Promise<void>;
|
|
19
19
|
/** Re-send one plain-text message as a queued follow-up (the revoke path). */
|
|
20
20
|
send: (text: string) => Promise<void>;
|
|
21
|
+
/** Steer one plain-text message into the session's next step (resume's safe_point tier). */
|
|
22
|
+
sendSteer?: (text: string) => Promise<void>;
|
|
21
23
|
/** Back-fill the composer draft (the pull-back-to-composer edit path). */
|
|
22
24
|
setDraft: (text: string) => void;
|
|
23
25
|
notify: (level: 'info' | 'error', text: string) => void;
|
|
26
|
+
/** Owning session id (for the dsh-session-guard bridge RPC). */
|
|
27
|
+
sessionId?: string;
|
|
28
|
+
/** Raise/clear the composer block for the owning session (freeze keeps the
|
|
29
|
+
* composer inert so Enter cannot leak into the conversation; absent on the
|
|
30
|
+
* dock entry, only the freeze button injects it). */
|
|
31
|
+
setComposerBlock?: (reason: string | undefined) => void;
|
|
24
32
|
}
|
|
25
33
|
/** Full props of a dock entry: InputZone owner share + session standard kit + global seat + the locale seat. */
|
|
26
34
|
export type SteerQueueDockProps = PropsRuntime<'conversation.input.dock'> & SteerQueueDockInjected & PropsLocale<'steer'>;
|
|
@@ -55,5 +63,5 @@ export declare function resizeEditor(el: HTMLTextAreaElement): void;
|
|
|
55
63
|
* Queue strip with three-tier planning: one item renders directly; multiple
|
|
56
64
|
* items default to a collapsible count header; an empty queue renders nothing.
|
|
57
65
|
*/
|
|
58
|
-
export declare function SteerQueueDock({ useSession, input, updateQueue, cancel, send, setDraft, notify, t }: SteerQueueDockProps): import("react").JSX.Element | null;
|
|
66
|
+
export declare function SteerQueueDock({ sessionId, useSession, input, updateQueue, cancel, send, setDraft, notify, t }: SteerQueueDockProps): import("react").JSX.Element | null;
|
|
59
67
|
//# sourceMappingURL=steer-queue-dock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steer-queue-dock.d.ts","sourceRoot":"","sources":["../../../src/client/steer-queue-dock.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAYjF,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAQrB,oEAAoE;AACpE,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,kEAAkE;IAClE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,8EAA8E;IAC9E,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACxD;AAED,gHAAgH;AAChH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,yBAAyB,CAAC,GAAG,sBAAsB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzH,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAEhD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAIpG;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAIvF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI,CAG1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"steer-queue-dock.d.ts","sourceRoot":"","sources":["../../../src/client/steer-queue-dock.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAYjF,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAQrB,oEAAoE;AACpE,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,kEAAkE;IAClE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,8EAA8E;IAC9E,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,4FAA4F;IAC5F,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;0DAEsD;IACtD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;CACxD;AAED,gHAAgH;AAChH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,yBAAyB,CAAC,GAAG,sBAAsB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzH,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAEhD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAIpG;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAIvF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI,CAG1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,mBAAmB,sCA6vBnI"}
|
|
@@ -72,7 +72,7 @@ export function resizeEditor(el) {
|
|
|
72
72
|
* Queue strip with three-tier planning: one item renders directly; multiple
|
|
73
73
|
* items default to a collapsible count header; an empty queue renders nothing.
|
|
74
74
|
*/
|
|
75
|
-
export function SteerQueueDock({ useSession, input, updateQueue, cancel, send, setDraft, notify, t }) {
|
|
75
|
+
export function SteerQueueDock({ sessionId, useSession, input, updateQueue, cancel, send, setDraft, notify, t }) {
|
|
76
76
|
const inbox = useSession(s => s.queue);
|
|
77
77
|
const queue = useMemo(() => inbox.filter(row => row.placement === 'queued'), [inbox]);
|
|
78
78
|
const steering = useMemo(() => inbox.filter(row => row.placement === 'steering'), [inbox]);
|
|
@@ -103,7 +103,8 @@ export function SteerQueueDock({ useSession, input, updateQueue, cancel, send, s
|
|
|
103
103
|
// detached queue is rendered here (read-only) so the waiting area stays
|
|
104
104
|
// visible — freezing only pauses the running behavior, it must not hide
|
|
105
105
|
// the queued messages.
|
|
106
|
-
const { frozen, pending: frozenPending } = useSyncExternalStore(freezeStore.subscribe, freezeStore.getSnapshot);
|
|
106
|
+
const { frozen, pending: frozenPending } = useSyncExternalStore(freezeStore.subscribe, () => freezeStore.getSnapshot(sessionId ?? ''));
|
|
107
|
+
const sid = sessionId ?? '';
|
|
107
108
|
const listId = useId();
|
|
108
109
|
// The edit textarea; grown to its content on entry and on every input.
|
|
109
110
|
const editorRef = useRef(null);
|
|
@@ -345,7 +346,7 @@ export function SteerQueueDock({ useSession, input, updateQueue, cancel, send, s
|
|
|
345
346
|
setEditing(null);
|
|
346
347
|
return;
|
|
347
348
|
}
|
|
348
|
-
updatePendingAt(index, text);
|
|
349
|
+
updatePendingAt(sid, index, text);
|
|
349
350
|
setEditing(null);
|
|
350
351
|
};
|
|
351
352
|
/**
|
|
@@ -406,7 +407,7 @@ export function SteerQueueDock({ useSession, input, updateQueue, cancel, send, s
|
|
|
406
407
|
dragIndex.current = null;
|
|
407
408
|
setDragOver(null);
|
|
408
409
|
if (from !== null)
|
|
409
|
-
movePending(from, i);
|
|
410
|
+
movePending(sid, from, i);
|
|
410
411
|
}, onDragEnd: () => {
|
|
411
412
|
dragIndex.current = null;
|
|
412
413
|
setDragOver(null);
|
|
@@ -421,7 +422,7 @@ export function SteerQueueDock({ useSession, input, updateQueue, cancel, send, s
|
|
|
421
422
|
void saveFrozenEdit(i);
|
|
422
423
|
}
|
|
423
424
|
} }))
|
|
424
|
-
: _jsx("span", { className: css.preview, children: text }), _jsx("div", { className: css.actions, children: editingFrozen ? (_jsxs(_Fragment, { children: [_jsx(Tooltip, { label: t('queue.save'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.save'), disabled: editing === null || editing.text.trim() === '', onClick: () => { void saveFrozenEdit(i); }, children: _jsx(IconCheckOutline16, { size: 14 }) }) }), _jsx(Tooltip, { label: t('queue.cancelEdit'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.cancelEdit'), onClick: () => { setEditing(null); }, children: _jsx(IconCloseOutline16, { size: 14 }) }) })] })) : (_jsxs(_Fragment, { children: [_jsx(Tooltip, { label: t('steer.moveUp'), side: "bottom", delayMs: 500, disabled: i === 0, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('steer.moveUp'), disabled: i === 0, onClick: () => movePending(i, i - 1), children: _jsx(IconChevronUpOutline14, {}) }) }), _jsx(Tooltip, { label: t('steer.moveDown'), side: "bottom", delayMs: 500, disabled: i === frozenPending.length - 1, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('steer.moveDown'), disabled: i === frozenPending.length - 1, onClick: () => movePending(i, i + 1), children: _jsx(IconChevronDownOutline14, {}) }) }), _jsx(Tooltip, { label: t('queue.edit'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.edit'), onClick: () => { setEditing({ id: `frozen:${i}`, text }); }, children: _jsx(IconEditOutline16, { size: 14 }) }) }), _jsx(Tooltip, { label: t('queue.remove'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.remove'), onClick: () => removePendingAt(i), children: _jsx(IconTrashOutline16, { size: 14 }) }) }), _jsxs("span", { className: css.plan, role: "group", "aria-label": t('steer.later.aria'), children: [_jsx(Tooltip, { label: t('steer.now'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierNow}`, "aria-label": t('steer.now'), "aria-pressed": entry.tier === 'force' || undefined, onClick: () => setTierAt(i, 'force'), children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) }), _jsx(Tooltip, { label: t('steer.next'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierNext}`, "aria-label": t('steer.next'), "aria-pressed": entry.tier === 'safe_point' || undefined, onClick: () => setTierAt(i, 'safe_point'), children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) }), _jsx(Tooltip, { label: t('steer.later'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierLater}`, "aria-label": t('steer.later'), "aria-pressed": entry.tier === 'queue' || undefined, onClick: () => setTierAt(i, 'queue'), children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) })] })] })) }), _jsx("span", { className: css.frozenMark, children: t('steer.frozenBadge') })] }, i));
|
|
425
|
+
: _jsx("span", { className: css.preview, children: text }), _jsx("div", { className: css.actions, children: editingFrozen ? (_jsxs(_Fragment, { children: [_jsx(Tooltip, { label: t('queue.save'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.save'), disabled: editing === null || editing.text.trim() === '', onClick: () => { void saveFrozenEdit(i); }, children: _jsx(IconCheckOutline16, { size: 14 }) }) }), _jsx(Tooltip, { label: t('queue.cancelEdit'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.cancelEdit'), onClick: () => { setEditing(null); }, children: _jsx(IconCloseOutline16, { size: 14 }) }) })] })) : (_jsxs(_Fragment, { children: [_jsx(Tooltip, { label: t('steer.moveUp'), side: "bottom", delayMs: 500, disabled: i === 0, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('steer.moveUp'), disabled: i === 0, onClick: () => movePending(sid, i, i - 1), children: _jsx(IconChevronUpOutline14, {}) }) }), _jsx(Tooltip, { label: t('steer.moveDown'), side: "bottom", delayMs: 500, disabled: i === frozenPending.length - 1, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('steer.moveDown'), disabled: i === frozenPending.length - 1, onClick: () => movePending(sid, i, i + 1), children: _jsx(IconChevronDownOutline14, {}) }) }), _jsx(Tooltip, { label: t('queue.edit'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.edit'), onClick: () => { setEditing({ id: `frozen:${i}`, text }); }, children: _jsx(IconEditOutline16, { size: 14 }) }) }), _jsx(Tooltip, { label: t('queue.remove'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: css.action, "aria-label": t('queue.remove'), onClick: () => removePendingAt(sid, i), children: _jsx(IconTrashOutline16, { size: 14 }) }) }), _jsxs("span", { className: css.plan, role: "group", "aria-label": t('steer.later.aria'), children: [_jsx(Tooltip, { label: t('steer.now'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierNow}`, "aria-label": t('steer.now'), "aria-pressed": entry.tier === 'force' || undefined, onClick: () => setTierAt(sid, i, 'force'), children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) }), _jsx(Tooltip, { label: t('steer.next'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierNext}`, "aria-label": t('steer.next'), "aria-pressed": entry.tier === 'safe_point' || undefined, onClick: () => setTierAt(sid, i, 'safe_point'), children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) }), _jsx(Tooltip, { label: t('steer.later'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: `${css.tier} ${css.tierLater}`, "aria-label": t('steer.later'), "aria-pressed": entry.tier === 'queue' || undefined, onClick: () => setTierAt(sid, i, 'queue'), children: _jsx("span", { className: css.dot, "aria-hidden": true }) }) })] })] })) }), _jsx("span", { className: css.frozenMark, children: t('steer.frozenBadge') })] }, i));
|
|
425
426
|
}) })), _jsx("ul", { id: listId, className: css.list, hidden: !listVisible, children: listVisible && queue.map((row, index) => (_jsxs("li", { className: `${css.row} ${dragOver === index ? css.rowDragOver : ''}`, "data-tier": badgeFor('queued') ?? undefined, "data-editing": editing?.id === row.id ? '' : undefined, draggable: queueMutable && !reorderUnsupported && busy === null && !frozen, title: queueMutable && !reorderUnsupported && busy === null && !frozen ? t('steer.dragReorder') : undefined, onDragStart: (event) => {
|
|
426
427
|
dragIndex.current = index;
|
|
427
428
|
event.dataTransfer.effectAllowed = 'move';
|