dsh-session-manager 0.7.4 → 0.7.6
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 +20 -0
- package/README.md +11 -12
- package/README.zh.md +10 -11
- package/lib/client.js +268 -38
- package/lib/compat/projection-cache-delete.js +110 -0
- package/lib/compat/zstd-frames.js +78 -1
- package/lib/index.js +260 -10
- package/lib/session-files.js +6 -9
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -289,6 +289,7 @@ function isTopmostDialog(z) {
|
|
|
289
289
|
"confirm.move.current": "当前工作区:{name}",
|
|
290
290
|
"confirm.move.same": "请选择与当前工作区不同的目标工作区",
|
|
291
291
|
"confirm.move.confirm": "确认移动",
|
|
292
|
+
"move.restartRequired": "会话已成功移动至目标工作区,但当前工作目录需要在重启 DSH 后生效。",
|
|
292
293
|
"confirm.cancel": "取消",
|
|
293
294
|
"busy.processing": "处理中…",
|
|
294
295
|
"error.operation": "操作失败:{message}",
|
|
@@ -640,6 +641,7 @@ function isTopmostDialog(z) {
|
|
|
640
641
|
"confirm.move.current": "Current workspace: {name}",
|
|
641
642
|
"confirm.move.same": "Choose a target workspace different from the current workspace",
|
|
642
643
|
"confirm.move.confirm": "Move",
|
|
644
|
+
"move.restartRequired": "Session moved to target workspace successfully, but working directory will take effect after restarting DSH.",
|
|
643
645
|
"confirm.cancel": "Cancel",
|
|
644
646
|
"busy.processing": "Working…",
|
|
645
647
|
"error.operation": "Operation failed: {message}",
|
|
@@ -693,11 +695,18 @@ function isTopmostDialog(z) {
|
|
|
693
695
|
};
|
|
694
696
|
|
|
695
697
|
const css = [
|
|
696
|
-
".sm-header{display:flex;align-items:center;gap:6px}",
|
|
697
|
-
".sm-
|
|
698
|
-
".sm-headerBtn:
|
|
698
|
+
".sm-header{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap}",
|
|
699
|
+
".sm-header{flex-shrink:0}",
|
|
700
|
+
".sm-headerBtn{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:28px;height:28px;box-sizing:border-box;color:var(--dsw-alias-label-secondary);background:transparent;border:0;border-radius:6px;cursor:pointer;padding:0 6px;font-size:12px;line-height:18px;white-space:nowrap;transition:background .12s,color .12s;flex-shrink:0}",
|
|
701
|
+
".sm-header .sm-headerBtn{width:28px;min-width:28px;padding:0;justify-content:center;position:relative}",
|
|
702
|
+
".sm-header .sm-headerBtnLabel{display:none}",
|
|
703
|
+
".sm-header .sm-priorityBadge{position:absolute;top:0;right:0;font-size:8px;line-height:9px;padding:0 2px;border-radius:3px;pointer-events:none}",
|
|
704
|
+
".sm-headerBtn:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}",
|
|
705
|
+
".sm-headerBtn:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}",
|
|
699
706
|
".sm-headerBtn:disabled{opacity:.5;cursor:not-allowed}",
|
|
700
|
-
".sm-headerBtn
|
|
707
|
+
".sm-headerBtn.sm-headerBtnActive{background:var(--dsw-alias-button-ghost-active-fill,rgba(0,0,0,.06));color:var(--dsw-alias-label-primary)}",
|
|
708
|
+
".sm-headerBtn svg{width:14px;height:14px;display:block;margin:auto;flex-shrink:0}",
|
|
709
|
+
".sm-headerBtn:hover{background:var(--dsw-alias-interactive-bg-hover)}",
|
|
701
710
|
".sm-busy{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:28px;margin-left:4px}",
|
|
702
711
|
".sm-footer{display:flex}",
|
|
703
712
|
".sm-footerBtn{min-height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:6px;padding:3px 8px;font-size:12px;line-height:18px;display:inline-flex}",
|
|
@@ -719,7 +728,7 @@ function isTopmostDialog(z) {
|
|
|
719
728
|
".sm-rowCurrent{border-color:var(--dsw-alias-state-business-primary,var(--dsw-alias-label-secondary))}",
|
|
720
729
|
".sm-rowMain{min-width:0;display:flex;flex-direction:column;gap:2px;flex:1 1 280px}",
|
|
721
730
|
".sm-rowTitle{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px;display:flex;align-items:center;gap:6px;min-width:0}",
|
|
722
|
-
".sm-rowTitle>span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}",
|
|
731
|
+
".sm-rowTitle>span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sm-rowTitleButton{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:0;padding:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.sm-rowTitleButton:hover{text-decoration:underline}",
|
|
723
732
|
".sm-rowMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}",
|
|
724
733
|
".sm-rowActions{display:flex;gap:4px;flex:none;flex-wrap:wrap;justify-content:flex-end}",
|
|
725
734
|
".sm-badge{flex:none;border-radius:999px;padding:0 6px;font-size:10px;line-height:16px}",
|
|
@@ -745,8 +754,8 @@ function isTopmostDialog(z) {
|
|
|
745
754
|
".sm-moveItem:hover{background:var(--dsw-alias-interactive-bg-hover)}",
|
|
746
755
|
".sm-moveItemSelected{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-tertiary)}",
|
|
747
756
|
".sm-moveItemName{color:var(--dsw-alias-label-primary);font-size:13px;line-height:18px}",
|
|
748
|
-
".sm-moveItemMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.sm-panelModal{width:760px;max-width:92vw}.sm-panelModal .sm-rowActions{flex-wrap:wrap;justify-content:flex-end}.sm-headerMenu{position:absolute;right:0;top:100%;margin-top:4px;z-index:100005;display:flex;flex-direction:column;min-width:140px;padding:4px;background:var(--dsw-alias-bg-layer-2,#fff);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.15)}.sm-headerMenuItem{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:0 0;border:0;border-radius:6px;color:var(--dsw-alias-label-primary,#111);cursor:pointer;padding:6px 10px;font-size:13px;line-height:18px;white-space:nowrap}.sm-headerMenuItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.sm-headerMenuItem:disabled{opacity:.5;cursor:not-allowed}.sm-headerMenuItem .sm-headerBtnIcon{width:
|
|
749
|
-
".sm-panelDialog{position:fixed;inset:0;margin:auto;transform:none;width:680px;max-width:calc(100vw - 32px);height:560px;max-height:calc(100vh - 32px);box-sizing:border-box;display:flex;flex-direction:column;gap:0;background:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.25);overflow:hidden;z-index:1020}.sm-panelDialog .sm-nativeDialogHeader{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 16px;border-bottom:1px solid var(--dsw-alias-border-l2,#eee);flex:none;position:relative;min-height:46px;box-sizing:border-box}.sm-panelDialog .sm-nativeDialogTitle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;font-size:14px;line-height:20px;font-weight:600;min-width:0;max-width:calc(100% - 140px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;pointer-events:auto;z-index:0}.sm-panelDialog .sm-nativeDialogHeaderActions{display:flex;align-items:center;gap:6px;flex:none;position:relative;z-index:1;margin-left:auto}.sm-nativeDialogFooter,.sm-bulkDialog .sm-nativeDialogFooter,.sm-confirmDialog .sm-nativeDialogFooter,.sm-migrateDialog .sm-nativeDialogFooter{display:flex;padding:10px 16px;border-top:1px solid var(--dsw-alias-border-l2,#eee);flex:none;flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0}.sm-panelDialog .sm-panel{display:flex;flex-direction:column;gap:6px;min-height:0;flex:1 1 auto;overflow:auto;padding:8px 12px}.sm-panelDialog .sm-list{display:flex;flex-direction:column;gap:2px;flex:1 1 auto;min-height:0;overflow:auto;scrollbar-gutter:stable}.sm-panelDialog .sm-row{display:flex;align-items:center;gap:8px;padding:6px 10px;min-height:36px;border:1px solid transparent;border-radius:8px;background:transparent;flex-shrink:0;transition:background .12s ease,border-color .12s ease}.sm-panelDialog .sm-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.sm-panelDialog .sm-rowCurrent{background:var(--dsw-alias-bg-module-platform);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-panelDialog .sm-rowMain{display:flex;align-items:stretch!important;gap:8px;min-width:0;flex:1 1 auto;overflow:visible;text-align:left!important}.sm-panelDialog .sm-rowTitle{min-width:0;flex:1 1 0%;width:100%;align-self:stretch;display:flex;align-items:center;justify-content:flex-start;gap:6px;font-size:12px;line-height:16px;overflow:hidden;text-align:left!important;direction:ltr!important;unicode-bidi:plaintext}.sm-confirmDialog{z-index:10000}.sm-confirmDialog.sm-nativeDialogLayer{position:fixed;left:calc(50vw + 184px);top:calc(50vh - 90px);width:360px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);display:block;align-items:initial;justify-content:initial;box-sizing:border-box;background:transparent;border:0;box-shadow:none;padding:0;inset:calc(50vh - 90px) auto auto calc(50vw + 308px)}.sm-confirmDialog.sm-nativeDialogLayer .sm-nativeDialogBackdrop{display:none}.sm-confirmDialog.sm-nativeDialogLayer .sm-nativeDialog{position:relative;left:auto;top:auto;transform:none;width:auto;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);display:flex;flex-direction:column;box-sizing:border-box;background:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.25);padding:0;overflow:hidden;animation:sm-confirmPop .14s ease-out}.sm-confirmDialog .sm-nativeDialogHeader{position:relative;padding:12px 16px;border-bottom:1px solid var(--dsw-alias-border-l2,#eee);display:flex;align-items:center;justify-content:center;min-height:44px;box-sizing:border-box}.sm-confirmDialog .sm-nativeDialogTitle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;font-size:14px;line-height:20px;font-weight:600;text-align:center;width:auto;max-width:calc(100% - 32px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm-confirmDialog .sm-nativeDialogBody{padding:10px 16px;display:flex;flex-direction:column;gap:8px;min-height:0;max-height:calc(100vh - 120px);overflow-y:auto}.sm-confirmDialog .sm-nativeDialogDescription{font-size:12px;line-height:18px;color:var(--dsw-alias-label-secondary);white-space:pre-wrap}.sm-confirmDialog .sm-warn{display:flex;align-items:flex-start;gap:8px;color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px;background:color-mix(in srgb,var(--dsw-alias-state-error-primary,#ec1313) 8%,transparent);border:1px solid color-mix(in srgb,var(--dsw-alias-state-error-primary,#ec1313) 25%,transparent);border-radius:8px;padding:8px 10px;margin-top:0}.sm-confirmDialog .sm-nativeDialogFooter{padding:10px 16px;border-top:1px solid var(--dsw-alias-border-l2,#eee);flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0}.sm-confirmDialog .sm-nativeDialogButton{min-height:28px;padding:3px 14px;font-size:12px;line-height:20px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;cursor:pointer;background:transparent;color:var(--dsw-alias-label-primary);text-align:center}.sm-confirmDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-migrateDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-updateDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-bulkDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-panelDialog .sm-nativeDialogCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.sm-confirmDialog .sm-nativeDialogConfirm{background:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-confirmDialog .sm-nativeDialogConfirm:hover:not(:disabled){filter:brightness(.94)}@keyframes sm-confirmPop{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.sm-confirmDialog.sm-nativeDialog{padding:0;width:auto;max-width:none}.sm-panelDialog .sm-rowTitle>span:first-child{display:block;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:auto;text-align:left!important;direction:ltr!important;unicode-bidi:plaintext}.sm-panelDialog .sm-rowMeta{display:none}.sm-panelDialog .sm-rowActions{display:flex;gap:2px;flex:none;justify-content:flex-end}.sm-panelDialog .sm-rowActions .sm-rowBtn{min-height:22px;padding:0 7px;font-size:11px;line-height:18px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap}.sm-rowBtn.sm-markIcon{padding:0 6px;font-size:13px;line-height:18px}.sm-panelDialog .sm-rowActions .sm-rowBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.sm-panelDialog .sm-rowActions .sm-rowBtnDanger{color:var(--dsw-alias-state-error-primary)}.sm-panelDialog .sm-rowActions .sm-rowBtnDanger:hover{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.sm-panelDialog .sm-filter{flex:none;padding:6px 12px 4px;gap:4px;display:flex;flex-wrap:wrap}.sm-panelDialog .sm-filterBtn{height:28px;min-height:28px;padding:3px 10px;font-size:12px;line-height:18px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;box-sizing:border-box;white-space:nowrap;flex-shrink:0;transition:all .15s ease}.sm-panelDialog .sm-filterBtn:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.sm-panelDialog .sm-filterBtn:disabled{opacity:.4;cursor:not-allowed}.sm-panelDialog .sm-filterBtn.sm-on{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary)}.sm-panelDialog .sm-badge{font-size:10px;line-height:14px;padding:0 5px;border-radius:6px;flex:none}.sm-panelDialog .sm-error{padding:6px 10px;margin:0;font-size:12px;line-height:16px}.sm-panelDialog .sm-nativeDialogButton{min-height:28px;padding:3px 14px;font-size:12px;line-height:20px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:transparent;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:center}.sm-panelDialog .sm-nativeDialogCancel{background:transparent}.sm-panelDialog .sm-nativeDialogConfirm,.sm-annotationDialog .sm-nativeDialogConfirm{background:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-panelDialog .sm-nativeDialogConfirm:hover:not(:disabled),.sm-annotationDialog .sm-nativeDialogConfirm:hover:not(:disabled){filter:brightness(.94)}.sm-nativeDialogDanger{background:var(--dsw-alias-state-error-primary,#d92d20);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-error-primary,#d92d20)}.sm-nativeDialogDanger:hover:not(:disabled){filter:brightness(.92)}.sm-confirmDialog .sm-nativeDialogDanger,.sm-migrateDialog .sm-nativeDialogDanger,.sm-bulkDialog .sm-nativeDialogDanger{background:var(--dsw-alias-state-error-primary,#d92d20);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-error-primary,#d92d20)}.sm-confirmDialog .sm-nativeDialogDanger:hover:not(:disabled),.sm-migrateDialog .sm-nativeDialogDanger:hover:not(:disabled),.sm-bulkDialog .sm-nativeDialogDanger:hover:not(:disabled){filter:brightness(.92)}.sm-panelDialog .sm-empty{padding:18px 0;font-size:12px;color:var(--dsw-alias-label-tertiary);text-align:center}.sm-panelDialog .sm-footError{font-size:11px;color:var(--dsw-alias-state-error-primary);margin-right:auto;line-height:20px}.sm-panelDialog .sm-moveLabel{font-size:12px;line-height:18px;color:var(--dsw-alias-label-secondary)}.sm-migrateDialog .sm-nativeDialogFooter{flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0}.sm-migrateDialog .sm-migrateChip{cursor:pointer;pointer-events:auto;position:relative;z-index:1}.sm-migrateDialog .sm-migrateChip[disabled]{opacity:.5;cursor:not-allowed}.sm-migrateDialog.sm-nativeDialogLayer{position:fixed;left:50vw;top:auto;bottom:48px;transform:translateX(-50%);width:min(560px,calc(100vw - 32px));max-height:none;display:block;align-items:initial;justify-content:initial;box-sizing:border-box;background:transparent;border:0;box-shadow:none;padding:0;inset:auto;z-index:10001}.sm-migrateDialog.sm-nativeDialogLayer .sm-nativeDialogBackdrop{display:none}.sm-migrateDialog.sm-nativeDialogLayer .sm-nativeDialog{position:relative;left:auto;top:auto;transform:none;width:360px;max-width:calc(100vw - 32px);max-height:min(70vh,520px);box-sizing:border-box;background-color:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.45);overflow:hidden;padding:0;display:flex;flex-direction:column;gap:0}.sm-migrateDialog{position:fixed;left:50vw;top:auto;bottom:48px;transform:translateX(-50%);width:min(560px,calc(100vw - 32px));max-height:min(70vh,520px);box-sizing:border-box;display:flex;flex-direction:column;gap:0;background-color:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.45);overflow:hidden;z-index:10001}.sm-migrateDialog .sm-nativeDialogHeader{padding:12px 18px;border-bottom:1px solid var(--dsw-alias-border-l2,#eee);flex:none;position:relative;display:flex;align-items:center;justify-content:center;min-height:44px;box-sizing:border-box}.sm-migrateDialog .sm-nativeDialogTitle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;font-size:14px;line-height:20px;font-weight:600;color:var(--dsw-alias-label-primary,#111);text-align:center;width:auto;max-width:calc(100% - 36px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm-migrateDialog .sm-migratePanel{padding:12px 18px;display:flex;flex-direction:column;gap:14px}.sm-migrateDialog .sm-nativeDialogBody{padding:0}.sm-migrateDialog .sm-nativeDialogFooter{padding:10px 16px;border-top:1px solid var(--dsw-alias-border-l2,#eee);flex:none;flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0;gap:8px}.sm-migrateDialog .sm-migrateRow>label{color:var(--dsw-alias-label-secondary,#444)}.sm-migrateDialog .sm-migrateChip{padding:6px 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2,#ddd);background-color:var(--dsw-alias-markdown-tag,#f1f3f5);color:var(--dsw-alias-label-primary,#111);font-size:13px;line-height:18px;cursor:pointer;pointer-events:auto;position:relative;z-index:1;white-space:nowrap}.sm-migrateDialog .sm-migrateChip:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover,#e8e8e8)}.sm-migrateDialog .sm-migrateChipOn{background-color:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-migrateDialog .sm-migrateChip.sm-migrateChipOn:hover:not(:disabled){background-color:var(--dsw-alias-button-info-hover,#4576f0);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-button-info-hover,#4576f0);filter:none}.sm-migrateDialog .sm-migrateChipOn:hover:not(:disabled){filter:brightness(.92)}.sm-migrateDialog .sm-migrateChip[disabled]{opacity:.5;cursor:not-allowed}.sm-migrateDialog .sm-migrateEmpty{color:var(--dsw-alias-label-tertiary,#888)}.sm-migrateDialog .sm-migratePreview{padding:10px 12px;border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:8px;background-color:var(--dsw-alias-bg-layer-2,#fff);color:var(--dsw-alias-label-primary,#111);font-size:13px;line-height:18px}.sm-migrateDialog .sm-migrateWarn{padding:10px 12px;border:1px solid color-mix(in srgb,var(--dsw-alias-state-warn-primary,#f59e0b) 30%,transparent);border-radius:8px;background-color:var(--dsw-alias-state-warn-tertiary,#fef5e7);color:var(--dsw-alias-label-secondary,#444);font-size:13px;line-height:18px}.sm-migrateDialog .sm-nativeDialogButton{min-height:28px;padding:3px 14px;font-size:12px;line-height:20px;border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:8px;cursor:pointer;background-color:transparent;color:var(--dsw-alias-label-primary,#111);text-align:center}.sm-migrateDialog .sm-nativeDialogButton:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover,#e8e8e8)}.sm-migrateDialog .sm-nativeDialogConfirm{background-color:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-migrateDialog .sm-nativeDialogConfirm:hover:not(:disabled){filter:brightness(.94)}",
|
|
757
|
+
".sm-moveItemMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.sm-panelModal{width:760px;max-width:92vw}.sm-panelModal .sm-rowActions{flex-wrap:wrap;justify-content:flex-end}.sm-headerMenu{position:absolute;right:0;top:100%;margin-top:4px;z-index:100005;display:flex;flex-direction:column;min-width:140px;padding:4px;background:var(--dsw-alias-bg-layer-2,#fff);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.15)}.sm-headerMenuItem{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:0 0;border:0;border-radius:6px;color:var(--dsw-alias-label-primary,#111);cursor:pointer;padding:6px 10px;font-size:13px;line-height:18px;white-space:nowrap}.sm-headerMenuItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.sm-headerMenuItem:disabled{opacity:.5;cursor:not-allowed}.sm-headerMenuItem .sm-headerBtnIcon{width:14px;min-width:14px;text-align:center;flex-shrink:0}.sm-headerMenuItemDanger{color:var(--dsw-alias-state-error-primary,#d92d20)}.sm-headerMenuItemDanger:hover{background:var(--dsw-alias-interactive-bg-hover-danger)}.sm-headerMenuUltraOnly{display:none!important}.sm-migratePanel{display:flex;flex-direction:column;gap:14px;min-width:480px}.sm-migrateRow{display:flex;flex-direction:column;gap:8px}.sm-migrateRow>label{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:16px;font-weight:500}.sm-migrateChips{display:flex;flex-wrap:wrap;gap:6px}.sm-migrateChip{padding:6px 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);background:transparent;cursor:pointer;font-size:13px;line-height:18px;color:var(--dsw-alias-label-primary);white-space:nowrap}.sm-migrateChip:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.sm-migrateChip:disabled{opacity:.5;cursor:not-allowed}.sm-migrateChipOn{background:var(--dsw-alias-state-business-primary);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary)}.sm-migrateEmpty{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.sm-migratePreview{padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font-size:13px;line-height:18px}.sm-migrateWarn{padding:10px 12px;border:1px solid color-mix(in srgb,var(--dsw-alias-state-warn-primary,#f59e0b) 30%,transparent);border-radius:8px;background:var(--dsw-alias-state-warn-tertiary,#fef5e7);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:18px}.sm-migrateList{max-height:200px;overflow:auto;border:1px solid var(--dsw-alias-border-l2);border-radius:8px}.sm-headerBtnDanger{background:transparent;color:var(--dsw-alias-state-error-primary,#d92d20);border:0;font-weight:500}.sm-headerBtnDanger:hover:not(:disabled){background:var(--dsw-alias-state-error-primary,#d92d20);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-error-primary,#d92d20)}.sm-headerSecondaryActions{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap}.sm-headerCompactMenu{display:none;position:relative}.sm-headerCompactMenu.sm-headerCompactMenuOpen{position:relative;z-index:100004}.sm-headerCompactMenuBtn{width:28px;min-width:28px;height:28px;padding:0;justify-content:center;font-size:14px;line-height:1}.sm-headerBtnIcon{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;font-size:14px;line-height:1;vertical-align:middle;flex-shrink:0}.sm-headerBtn.sm-markIcon{width:28px;min-width:28px;height:28px;padding:0;justify-content:center}.sm-headerBtn.sm-markIcon .sm-headerBtnIcon{width:14px;height:14px;font-size:14px;line-height:1}.sm-headerCompactMenuBtn .sm-headerBtnIcon{width:14px;height:14px;font-size:14px;line-height:1}.sm-annotationToggleOpen{position:relative;z-index:100004}@container (max-width:1000px){.sm-headerBtn{width:28px;min-width:28px;height:28px;padding:0;justify-content:center}.sm-headerBtnLabel,.sm-priorityText,.sm-priorityBadge{display:none}.sm-headerBtn.sm-headerBtn-withBadge{width:auto;min-width:28px;padding:0 6px}}@container (max-width:520px){.sm-headerSecondaryActions,.sm-headerSecondaryAction{display:none!important}.sm-headerCompactMenu{display:inline-flex}}@container (max-width:420px){.sm-header>:not(.sm-headerCompactMenu){display:none!important}.sm-header .sm-headerBtn:not(.sm-headerCompactMenuBtn){display:none!important}.sm-headerCompactMenu{display:inline-flex!important}.sm-headerMenu{right:auto!important;left:0!important}.sm-headerMenuUltraOnly{display:flex!important}}",
|
|
758
|
+
".sm-panelDialog{position:fixed;inset:0;margin:auto;transform:none;width:680px;max-width:calc(100vw - 32px);height:560px;max-height:calc(100vh - 32px);box-sizing:border-box;display:flex;flex-direction:column;gap:0;background:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.25);overflow:hidden;z-index:1020}.sm-panelDialog .sm-nativeDialogHeader{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 16px;border-bottom:1px solid var(--dsw-alias-border-l2,#eee);flex:none;position:relative;min-height:46px;box-sizing:border-box}.sm-panelDialog .sm-nativeDialogTitle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;font-size:14px;line-height:20px;font-weight:600;min-width:0;max-width:calc(100% - 140px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;pointer-events:auto;z-index:0}.sm-panelDialog .sm-nativeDialogHeaderActions{display:flex;align-items:center;gap:6px;flex:none;position:relative;z-index:1;margin-left:auto}.sm-nativeDialogFooter,.sm-bulkDialog .sm-nativeDialogFooter,.sm-confirmDialog .sm-nativeDialogFooter,.sm-migrateDialog .sm-nativeDialogFooter{display:flex;padding:10px 16px;border-top:1px solid var(--dsw-alias-border-l2,#eee);flex:none;flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0}.sm-panelDialog .sm-panel{display:flex;flex-direction:column;gap:6px;min-height:0;flex:1 1 auto;overflow:auto;padding:8px 12px}.sm-panelDialog .sm-list{display:flex;flex-direction:column;gap:2px;flex:1 1 auto;min-height:0;overflow:auto;scrollbar-gutter:stable}.sm-panelDialog .sm-row{display:flex;align-items:center;gap:8px;padding:6px 10px;min-height:36px;border:1px solid transparent;border-radius:8px;background:transparent;flex-shrink:0;transition:background .12s ease,border-color .12s ease}.sm-panelDialog .sm-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.sm-panelDialog .sm-rowCurrent{background:var(--dsw-alias-bg-module-platform);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-panelDialog .sm-rowMain{display:flex;align-items:stretch!important;gap:8px;min-width:0;flex:1 1 auto;overflow:visible;text-align:left!important}.sm-panelDialog .sm-rowTitle{min-width:0;flex:1 1 0%;width:100%;align-self:stretch;display:flex;align-items:center;justify-content:flex-start;gap:6px;font-size:12px;line-height:16px;overflow:hidden;text-align:left!important;direction:ltr!important;unicode-bidi:plaintext}.sm-confirmDialog{z-index:10000}.sm-confirmDialog.sm-nativeDialogLayer{position:fixed;left:calc(50vw + 184px);top:calc(50vh - 90px);width:360px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);display:block;align-items:initial;justify-content:initial;box-sizing:border-box;background:transparent;border:0;box-shadow:none;padding:0;inset:calc(50vh - 90px) auto auto calc(50vw + 308px)}.sm-confirmDialog.sm-nativeDialogLayer .sm-nativeDialogBackdrop{display:none}.sm-confirmDialog.sm-nativeDialogLayer .sm-nativeDialog{position:relative;left:auto;top:auto;transform:none;width:auto;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);display:flex;flex-direction:column;box-sizing:border-box;background:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.25);padding:0;overflow:hidden;animation:sm-confirmPop .14s ease-out}.sm-confirmDialog .sm-nativeDialogHeader{position:relative;padding:12px 16px;border-bottom:1px solid var(--dsw-alias-border-l2,#eee);display:flex;align-items:center;justify-content:center;min-height:44px;box-sizing:border-box}.sm-confirmDialog .sm-nativeDialogTitle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;font-size:14px;line-height:20px;font-weight:600;text-align:center;width:auto;max-width:calc(100% - 32px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm-confirmDialog .sm-nativeDialogBody{padding:10px 16px;display:flex;flex-direction:column;gap:8px;min-height:0;max-height:calc(100vh - 120px);overflow-y:auto}.sm-confirmDialog .sm-nativeDialogDescription{font-size:12px;line-height:18px;color:var(--dsw-alias-label-secondary);white-space:pre-wrap}.sm-confirmDialog .sm-warn{display:flex;align-items:flex-start;gap:8px;color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px;background:color-mix(in srgb,var(--dsw-alias-state-error-primary,#ec1313) 8%,transparent);border:1px solid color-mix(in srgb,var(--dsw-alias-state-error-primary,#ec1313) 25%,transparent);border-radius:8px;padding:8px 10px;margin-top:0}.sm-confirmDialog .sm-nativeDialogFooter{padding:10px 16px;border-top:1px solid var(--dsw-alias-border-l2,#eee);flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0}.sm-confirmDialog .sm-nativeDialogButton{min-height:28px;padding:3px 14px;font-size:12px;line-height:20px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;cursor:pointer;background:transparent;color:var(--dsw-alias-label-primary);text-align:center}.sm-confirmDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-migrateDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-updateDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-bulkDialog .sm-nativeDialogCancel:hover:not(:disabled),.sm-panelDialog .sm-nativeDialogCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.sm-confirmDialog .sm-nativeDialogConfirm{background:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-confirmDialog .sm-nativeDialogConfirm:hover:not(:disabled){filter:brightness(.94)}@keyframes sm-confirmPop{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.sm-confirmDialog.sm-nativeDialog{padding:0;width:auto;max-width:none}.sm-panelDialog .sm-rowTitle>span:first-child{display:block;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex:1 1 auto;width:auto;text-align:left!important;direction:ltr!important;unicode-bidi:plaintext}.sm-panelDialog .sm-rowMeta{display:none}.sm-panelDialog .sm-rowActions{display:flex;gap:4px;flex:none;align-items:center;justify-content:flex-end}.sm-panelDialog .sm-rowActions .sm-rowBtn{display:inline-flex;align-items:center;justify-content:center;min-height:22px;height:22px;box-sizing:border-box;padding:0 7px;font-size:11px;line-height:18px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;transition:background .12s,color .12s}.sm-panelDialog .sm-rowActions .sm-rowBtn.sm-rowBtnIcon,.sm-panelDialog .sm-rowActions .sm-rowBtn.sm-markIcon{width:22px;min-width:22px;padding:0;justify-content:center}.sm-panelDialog .sm-rowActions .sm-rowBtn.sm-markIcon .sm-headerBtnIcon,.sm-panelDialog .sm-rowActions .sm-rowBtn.sm-rowBtnIcon .sm-headerBtnIcon{width:14px;height:14px;font-size:14px;line-height:1}.sm-panelDialog .sm-rowActions .sm-rowBtn.sm-rowBtnIcon svg,.sm-panelDialog .sm-rowActions .sm-rowBtn.sm-markIcon svg{width:14px;height:14px;display:block;margin:auto;flex-shrink:0}.sm-rowActions .sm-rowBtnLabel{display:none}.sm-rowBtn.sm-markIcon{padding:0 6px;font-size:13px;line-height:18px}.sm-panelDialog .sm-rowActions .sm-rowBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.sm-panelDialog .sm-rowActions .sm-rowBtnActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.sm-panelDialog .sm-rowActions .sm-rowBtnDanger{color:var(--dsw-alias-state-error-primary)}.sm-panelDialog .sm-rowActions .sm-rowBtnDanger:hover{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.sm-panelDialog .sm-filter{flex:none;padding:6px 12px 4px;gap:4px;display:flex;flex-wrap:wrap}.sm-panelDialog .sm-filterBtn{height:28px;min-height:28px;padding:3px 10px;font-size:12px;line-height:18px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;box-sizing:border-box;white-space:nowrap;flex-shrink:0;transition:all .15s ease}.sm-panelDialog .sm-filterBtn:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.sm-panelDialog .sm-filterBtn:disabled{opacity:.4;cursor:not-allowed}.sm-panelDialog .sm-filterBtn.sm-on{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary)}.sm-panelDialog .sm-badge{font-size:10px;line-height:14px;padding:0 5px;border-radius:6px;flex:none}.sm-panelDialog .sm-error{padding:6px 10px;margin:0;font-size:12px;line-height:16px}.sm-panelDialog .sm-nativeDialogButton{min-height:28px;padding:3px 14px;font-size:12px;line-height:20px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:transparent;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:center}.sm-panelDialog .sm-nativeDialogCancel{background:transparent}.sm-panelDialog .sm-nativeDialogConfirm,.sm-annotationDialog .sm-nativeDialogConfirm{background:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-panelDialog .sm-nativeDialogConfirm:hover:not(:disabled),.sm-annotationDialog .sm-nativeDialogConfirm:hover:not(:disabled){filter:brightness(.94)}.sm-nativeDialogDanger{background:var(--dsw-alias-state-error-primary,#d92d20);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-error-primary,#d92d20)}.sm-nativeDialogDanger:hover:not(:disabled){filter:brightness(.92)}.sm-confirmDialog .sm-nativeDialogDanger,.sm-migrateDialog .sm-nativeDialogDanger,.sm-bulkDialog .sm-nativeDialogDanger{background:var(--dsw-alias-state-error-primary,#d92d20);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-error-primary,#d92d20)}.sm-confirmDialog .sm-nativeDialogDanger:hover:not(:disabled),.sm-migrateDialog .sm-nativeDialogDanger:hover:not(:disabled),.sm-bulkDialog .sm-nativeDialogDanger:hover:not(:disabled){filter:brightness(.92)}.sm-panelDialog .sm-empty{padding:18px 0;font-size:12px;color:var(--dsw-alias-label-tertiary);text-align:center}.sm-panelDialog .sm-footError{font-size:11px;color:var(--dsw-alias-state-error-primary);margin-right:auto;line-height:20px}.sm-panelDialog .sm-moveLabel{font-size:12px;line-height:18px;color:var(--dsw-alias-label-secondary)}.sm-migrateDialog .sm-nativeDialogFooter{flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0}.sm-migrateDialog .sm-migrateChip{cursor:pointer;pointer-events:auto;position:relative;z-index:1}.sm-migrateDialog .sm-migrateChip[disabled]{opacity:.5;cursor:not-allowed}.sm-migrateDialog.sm-nativeDialogLayer{position:fixed;left:50vw;top:auto;bottom:48px;transform:translateX(-50%);width:min(560px,calc(100vw - 32px));max-height:none;display:block;align-items:initial;justify-content:initial;box-sizing:border-box;background:transparent;border:0;box-shadow:none;padding:0;inset:auto;z-index:10001}.sm-migrateDialog.sm-nativeDialogLayer .sm-nativeDialogBackdrop{display:none}.sm-migrateDialog.sm-nativeDialogLayer .sm-nativeDialog{position:relative;left:auto;top:auto;transform:none;width:360px;max-width:calc(100vw - 32px);max-height:min(70vh,520px);box-sizing:border-box;background-color:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.45);overflow:hidden;padding:0;display:flex;flex-direction:column;gap:0}.sm-migrateDialog{position:fixed;left:50vw;top:auto;bottom:48px;transform:translateX(-50%);width:min(560px,calc(100vw - 32px));max-height:min(70vh,520px);box-sizing:border-box;display:flex;flex-direction:column;gap:0;background-color:var(--sm-dialog-fill);color:var(--dsw-alias-label-primary,#111);border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:12px;box-shadow:0 16px 48px rgba(0,0,0,.45);overflow:hidden;z-index:10001}.sm-migrateDialog .sm-nativeDialogHeader{padding:12px 18px;border-bottom:1px solid var(--dsw-alias-border-l2,#eee);flex:none;position:relative;display:flex;align-items:center;justify-content:center;min-height:44px;box-sizing:border-box}.sm-migrateDialog .sm-nativeDialogTitle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin:0;font-size:14px;line-height:20px;font-weight:600;color:var(--dsw-alias-label-primary,#111);text-align:center;width:auto;max-width:calc(100% - 36px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm-migrateDialog .sm-migratePanel{padding:12px 18px;display:flex;flex-direction:column;gap:14px}.sm-migrateDialog .sm-nativeDialogBody{padding:0}.sm-migrateDialog .sm-nativeDialogFooter{padding:10px 16px;border-top:1px solid var(--dsw-alias-border-l2,#eee);flex:none;flex-wrap:wrap;justify-content:space-between;gap:6px;margin-top:0;gap:8px}.sm-migrateDialog .sm-migrateRow>label{color:var(--dsw-alias-label-secondary,#444)}.sm-migrateDialog .sm-migrateChip{padding:6px 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2,#ddd);background-color:var(--dsw-alias-markdown-tag,#f1f3f5);color:var(--dsw-alias-label-primary,#111);font-size:13px;line-height:18px;cursor:pointer;pointer-events:auto;position:relative;z-index:1;white-space:nowrap}.sm-migrateDialog .sm-migrateChip:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover,#e8e8e8)}.sm-migrateDialog .sm-migrateChipOn{background-color:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-migrateDialog .sm-migrateChip.sm-migrateChipOn:hover:not(:disabled){background-color:var(--dsw-alias-button-info-hover,#4576f0);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-button-info-hover,#4576f0);filter:none}.sm-migrateDialog .sm-migrateChipOn:hover:not(:disabled){filter:brightness(.92)}.sm-migrateDialog .sm-migrateChip[disabled]{opacity:.5;cursor:not-allowed}.sm-migrateDialog .sm-migrateEmpty{color:var(--dsw-alias-label-tertiary,#888)}.sm-migrateDialog .sm-migratePreview{padding:10px 12px;border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:8px;background-color:var(--dsw-alias-bg-layer-2,#fff);color:var(--dsw-alias-label-primary,#111);font-size:13px;line-height:18px}.sm-migrateDialog .sm-migrateWarn{padding:10px 12px;border:1px solid color-mix(in srgb,var(--dsw-alias-state-warn-primary,#f59e0b) 30%,transparent);border-radius:8px;background-color:var(--dsw-alias-state-warn-tertiary,#fef5e7);color:var(--dsw-alias-label-secondary,#444);font-size:13px;line-height:18px}.sm-migrateDialog .sm-nativeDialogButton{min-height:28px;padding:3px 14px;font-size:12px;line-height:20px;border:1px solid var(--dsw-alias-border-l2,#ddd);border-radius:8px;cursor:pointer;background-color:transparent;color:var(--dsw-alias-label-primary,#111);text-align:center}.sm-migrateDialog .sm-nativeDialogButton:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover,#e8e8e8)}.sm-migrateDialog .sm-nativeDialogConfirm{background-color:var(--dsw-alias-state-business-primary,#356ae6);color:var(--dsw-alias-label-primary-foreground,#fff);border-color:var(--dsw-alias-state-business-primary,#356ae6)}.sm-migrateDialog .sm-nativeDialogConfirm:hover:not(:disabled){filter:brightness(.94)}",
|
|
750
759
|
// The .sm-tooltip rule below deliberately keeps !important: it targets
|
|
751
760
|
// DSH's Tooltip primitive (used through renderTip), which ships its own
|
|
752
761
|
// inline styles, so a plugin rule cannot win on specificity alone
|
|
@@ -2449,6 +2458,164 @@ function isTopmostDialog(z) {
|
|
|
2449
2458
|
useEffect(() => { void annotationStore.load(refreshOnMount); }, [refreshOnMount]);
|
|
2450
2459
|
return state;
|
|
2451
2460
|
};
|
|
2461
|
+
|
|
2462
|
+
function HeaderStarIcon(props = {}) {
|
|
2463
|
+
const size = props.size || 14;
|
|
2464
|
+
const filled = !!props.filled;
|
|
2465
|
+
return h("svg", {
|
|
2466
|
+
viewBox: "0 0 24 24",
|
|
2467
|
+
width: size,
|
|
2468
|
+
height: size,
|
|
2469
|
+
fill: filled ? "var(--dsw-alias-state-warn-primary, #eac54f)" : "none",
|
|
2470
|
+
stroke: filled ? "var(--dsw-alias-state-warn-primary, #eac54f)" : "currentColor",
|
|
2471
|
+
strokeWidth: "1.5",
|
|
2472
|
+
strokeLinecap: "round",
|
|
2473
|
+
strokeLinejoin: "round",
|
|
2474
|
+
"aria-hidden": "true",
|
|
2475
|
+
style: { display: "block" }
|
|
2476
|
+
},
|
|
2477
|
+
h("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" })
|
|
2478
|
+
);
|
|
2479
|
+
}
|
|
2480
|
+
|
|
2481
|
+
function HeaderClockIcon(props = {}) {
|
|
2482
|
+
const size = props.size || 14;
|
|
2483
|
+
return h("svg", {
|
|
2484
|
+
viewBox: "0 0 24 24",
|
|
2485
|
+
width: size,
|
|
2486
|
+
height: size,
|
|
2487
|
+
fill: "none",
|
|
2488
|
+
stroke: "currentColor",
|
|
2489
|
+
strokeWidth: "1.5",
|
|
2490
|
+
strokeLinecap: "round",
|
|
2491
|
+
strokeLinejoin: "round",
|
|
2492
|
+
"aria-hidden": "true",
|
|
2493
|
+
style: { display: "block" }
|
|
2494
|
+
},
|
|
2495
|
+
h("circle", { cx: 12, cy: 12, r: 9 }),
|
|
2496
|
+
h("polyline", { points: "12 7 12 12 15 14" })
|
|
2497
|
+
);
|
|
2498
|
+
}
|
|
2499
|
+
|
|
2500
|
+
function HeaderTagIcon(props = {}) {
|
|
2501
|
+
const size = props.size || 14;
|
|
2502
|
+
return h("svg", {
|
|
2503
|
+
viewBox: "0 0 24 24",
|
|
2504
|
+
width: size,
|
|
2505
|
+
height: size,
|
|
2506
|
+
fill: "none",
|
|
2507
|
+
stroke: "currentColor",
|
|
2508
|
+
strokeWidth: "1.5",
|
|
2509
|
+
strokeLinecap: "round",
|
|
2510
|
+
strokeLinejoin: "round",
|
|
2511
|
+
"aria-hidden": "true",
|
|
2512
|
+
style: { display: "block" }
|
|
2513
|
+
},
|
|
2514
|
+
h("path", { d: "M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z" }),
|
|
2515
|
+
h("line", { x1: 7, y1: 7, x2: 7.01, y2: 7 })
|
|
2516
|
+
);
|
|
2517
|
+
}
|
|
2518
|
+
|
|
2519
|
+
function HeaderArchiveIcon(props = {}) {
|
|
2520
|
+
const size = props.size || 14;
|
|
2521
|
+
const isUnarchive = !!props.unarchive;
|
|
2522
|
+
return h("svg", {
|
|
2523
|
+
viewBox: "0 0 24 24",
|
|
2524
|
+
width: size,
|
|
2525
|
+
height: size,
|
|
2526
|
+
fill: "none",
|
|
2527
|
+
stroke: "currentColor",
|
|
2528
|
+
strokeWidth: "1.5",
|
|
2529
|
+
strokeLinecap: "round",
|
|
2530
|
+
strokeLinejoin: "round",
|
|
2531
|
+
"aria-hidden": "true",
|
|
2532
|
+
style: { display: "block" }
|
|
2533
|
+
},
|
|
2534
|
+
h("polyline", { points: "21 8 21 21 3 21 3 8" }),
|
|
2535
|
+
h("rect", { x: 1, y: 3, width: 22, height: 5, rx: 1 }),
|
|
2536
|
+
isUnarchive
|
|
2537
|
+
? h(React.Fragment, null,
|
|
2538
|
+
h("polyline", { points: "10 12 12 10 14 12" }),
|
|
2539
|
+
h("line", { x1: 12, y1: 10, x2: 12, y2: 16 })
|
|
2540
|
+
)
|
|
2541
|
+
: h(React.Fragment, null,
|
|
2542
|
+
h("polyline", { points: "10 14 12 16 14 14" }),
|
|
2543
|
+
h("line", { x1: 12, y1: 16, x2: 12, y2: 10 })
|
|
2544
|
+
)
|
|
2545
|
+
);
|
|
2546
|
+
}
|
|
2547
|
+
|
|
2548
|
+
function HeaderMoveIcon(props = {}) {
|
|
2549
|
+
const size = props.size || 14;
|
|
2550
|
+
return h("svg", {
|
|
2551
|
+
viewBox: "0 0 24 24",
|
|
2552
|
+
width: size,
|
|
2553
|
+
height: size,
|
|
2554
|
+
fill: "none",
|
|
2555
|
+
stroke: "currentColor",
|
|
2556
|
+
strokeWidth: "1.5",
|
|
2557
|
+
strokeLinecap: "round",
|
|
2558
|
+
strokeLinejoin: "round",
|
|
2559
|
+
"aria-hidden": "true",
|
|
2560
|
+
style: { display: "block" }
|
|
2561
|
+
},
|
|
2562
|
+
h("polyline", { points: "17 4 21 8 17 12" }),
|
|
2563
|
+
h("line", { x1: 3, y1: 8, x2: 21, y2: 8 }),
|
|
2564
|
+
h("polyline", { points: "7 20 3 16 7 12" }),
|
|
2565
|
+
h("line", { x1: 21, y1: 16, x2: 3, y2: 16 })
|
|
2566
|
+
);
|
|
2567
|
+
}
|
|
2568
|
+
|
|
2569
|
+
function HeaderTrashIcon(props = {}) {
|
|
2570
|
+
const size = props.size || 14;
|
|
2571
|
+
return h("svg", {
|
|
2572
|
+
viewBox: "0 0 24 24",
|
|
2573
|
+
width: size,
|
|
2574
|
+
height: size,
|
|
2575
|
+
fill: "none",
|
|
2576
|
+
stroke: "currentColor",
|
|
2577
|
+
strokeWidth: "1.5",
|
|
2578
|
+
strokeLinecap: "round",
|
|
2579
|
+
strokeLinejoin: "round",
|
|
2580
|
+
"aria-hidden": "true",
|
|
2581
|
+
style: { display: "block" }
|
|
2582
|
+
},
|
|
2583
|
+
h("polyline", { points: "3 6 5 6 21 6" }),
|
|
2584
|
+
h("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
|
|
2585
|
+
);
|
|
2586
|
+
}
|
|
2587
|
+
|
|
2588
|
+
function PresetIcon() {
|
|
2589
|
+
return h("svg", {
|
|
2590
|
+
viewBox: "0 0 24 24", width: 14, height: 14,
|
|
2591
|
+
fill: "none", stroke: "currentColor", strokeWidth: "1.5",
|
|
2592
|
+
strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true",
|
|
2593
|
+
style: { display: "block" }
|
|
2594
|
+
},
|
|
2595
|
+
h("path", { d: "M3 6h3m4 0h11M3 12h11m4 0h3M3 18h5m4 0h9" }),
|
|
2596
|
+
h("circle", { cx: 8, cy: 6, r: 2 }),
|
|
2597
|
+
h("circle", { cx: 16, cy: 12, r: 2 }),
|
|
2598
|
+
h("circle", { cx: 10, cy: 18, r: 2 })
|
|
2599
|
+
);
|
|
2600
|
+
}
|
|
2601
|
+
|
|
2602
|
+
function HeaderEllipsisIcon(props = {}) {
|
|
2603
|
+
const size = props.size || 14;
|
|
2604
|
+
return h("svg", {
|
|
2605
|
+
viewBox: "0 0 24 24",
|
|
2606
|
+
width: size,
|
|
2607
|
+
height: size,
|
|
2608
|
+
fill: "currentColor",
|
|
2609
|
+
stroke: "none",
|
|
2610
|
+
"aria-hidden": "true",
|
|
2611
|
+
style: { display: "block" }
|
|
2612
|
+
},
|
|
2613
|
+
h("circle", { cx: 12, cy: 12, r: 2 }),
|
|
2614
|
+
h("circle", { cx: 19, cy: 12, r: 2 }),
|
|
2615
|
+
h("circle", { cx: 5, cy: 12, r: 2 })
|
|
2616
|
+
);
|
|
2617
|
+
}
|
|
2618
|
+
|
|
2452
2619
|
const annotationButtons = (id, title, t, state, className, onToggle, onEdit, disabled = false, editorOpen = false) => {
|
|
2453
2620
|
const value = annotationOf(state, id);
|
|
2454
2621
|
const busy = disabled || !state.loaded || !!state.error || state.pending.has(id);
|
|
@@ -2457,23 +2624,24 @@ function isTopmostDialog(z) {
|
|
|
2457
2624
|
const favoriteLabel = favoriteDesc + ": " + title;
|
|
2458
2625
|
const reviewLabel = reviewDesc + ": " + title;
|
|
2459
2626
|
const isHeader = className === "sm-headerBtn";
|
|
2627
|
+
const priorityInfo = value.priority ? ` (P${value.priority})` : "";
|
|
2460
2628
|
return h(React.Fragment, null,
|
|
2461
2629
|
renderTip(favoriteDesc, h("button", { type: "button", className: className + " sm-markIcon" + (value.favorite ? " sm-markOn" : ""), disabled: busy, "aria-label": favoriteLabel, "aria-pressed": value.favorite, onClick: () => onToggle({ favorite: !value.favorite }) },
|
|
2462
|
-
h("span", { className: "sm-headerBtnIcon" }, value.favorite
|
|
2630
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderStarIcon({ filled: value.favorite }))
|
|
2463
2631
|
)),
|
|
2464
2632
|
renderTip(reviewDesc, h("button", { type: "button", className: className + " sm-markIcon" + (value.reviewLater ? " sm-markOn" : ""), disabled: busy, "aria-label": reviewLabel, "aria-pressed": value.reviewLater, onClick: () => onToggle({ reviewLater: !value.reviewLater }) },
|
|
2465
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
2633
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderClockIcon())
|
|
2466
2634
|
)),
|
|
2467
|
-
renderTip(t("marks.edit.aria"), h("button", {
|
|
2635
|
+
renderTip(t("marks.edit.aria") + priorityInfo, h("button", {
|
|
2468
2636
|
type: "button",
|
|
2469
|
-
className: className + (isHeader ? " sm-headerSecondaryAction" : "") + (editorOpen ? " sm-annotationToggleOpen sm-headerBtnActive" : ""),
|
|
2637
|
+
className: className + (isHeader ? " sm-headerSecondaryAction" : " sm-rowBtnIcon") + (editorOpen ? " sm-annotationToggleOpen sm-headerBtnActive sm-rowBtnActive" : ""),
|
|
2470
2638
|
disabled: busy,
|
|
2471
2639
|
"aria-label": t("marks.edit.aria") + ": " + title,
|
|
2472
2640
|
...(isHeader ? { "aria-expanded": editorOpen } : {}),
|
|
2473
2641
|
onClick: e => onEdit(e)
|
|
2474
2642
|
},
|
|
2475
|
-
|
|
2476
|
-
|
|
2643
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderTagIcon()),
|
|
2644
|
+
h("span", { className: isHeader ? "sm-headerBtnLabel" : "sm-rowBtnLabel" }, isHeader ? t("marks.header.edit") : t("marks.edit")),
|
|
2477
2645
|
isHeader ? h("span", { className: "sm-priorityBadge sm-priority-" + (value.priority ?? 3) }, "P" + (value.priority ?? 3)) : null
|
|
2478
2646
|
))
|
|
2479
2647
|
);
|
|
@@ -2865,7 +3033,9 @@ function isTopmostDialog(z) {
|
|
|
2865
3033
|
h("div", { className: "sm-bulkResultList" },
|
|
2866
3034
|
group.map((item, i) => h("div", { key: (item.sessionId || i) + "-" + i, className: "sm-bulkResultItem", title: item.sessionId || "" },
|
|
2867
3035
|
h("div", { className: "sm-bulkResultItemTitle" }, item.displayTitle || item.sessionId || "—"),
|
|
2868
|
-
reasonClass && (item.reason || item.error) ? h("div", { className: reasonClass }, item.reason || item.error) : null
|
|
3036
|
+
reasonClass && (item.reason || item.error) ? h("div", { className: reasonClass }, item.reason || item.error) : null,
|
|
3037
|
+
Array.isArray(item.warnings) && item.warnings.length > 0
|
|
3038
|
+
? h("div", { className: "sm-warn", role: "status" }, item.warnings.filter(warning => typeof warning === "string").join("\n")) : null
|
|
2869
3039
|
))
|
|
2870
3040
|
)
|
|
2871
3041
|
);
|
|
@@ -3507,6 +3677,7 @@ function isTopmostDialog(z) {
|
|
|
3507
3677
|
window.removeEventListener("click", clickHandler, true);
|
|
3508
3678
|
};
|
|
3509
3679
|
}, [open, zIndex]);
|
|
3680
|
+
const floatingCoords = useFloatingPosition(props.anchor, open, { placement: "bottom-end", dialogWidth: 360, dialogHeight: 320 });
|
|
3510
3681
|
if (!open) return null;
|
|
3511
3682
|
|
|
3512
3683
|
const isSame = Boolean(selectedWorkspaceId && currentWorkspaceId && selectedWorkspaceId === currentWorkspaceId);
|
|
@@ -3540,7 +3711,6 @@ function isTopmostDialog(z) {
|
|
|
3540
3711
|
onConfirm(selectedWorkspaceId);
|
|
3541
3712
|
}
|
|
3542
3713
|
};
|
|
3543
|
-
const floatingCoords = useFloatingPosition(props.anchor, open, { placement: "bottom-end", dialogWidth: 360, dialogHeight: 320 });
|
|
3544
3714
|
const topPx = floatingCoords ? floatingCoords.top : (props.anchor && typeof props.anchor.top === "number" ? props.anchor.top : null);
|
|
3545
3715
|
const leftPx = floatingCoords ? floatingCoords.left : (props.anchor && typeof props.anchor.left === "number" ? props.anchor.left : null);
|
|
3546
3716
|
const isCentered = Boolean(floatingCoords && floatingCoords.centered);
|
|
@@ -3773,7 +3943,7 @@ function isTopmostDialog(z) {
|
|
|
3773
3943
|
));
|
|
3774
3944
|
}
|
|
3775
3945
|
|
|
3776
|
-
const CURRENT_VERSION = "0.7.
|
|
3946
|
+
const CURRENT_VERSION = "0.7.6";
|
|
3777
3947
|
|
|
3778
3948
|
function compareSemver(v1, v2) {
|
|
3779
3949
|
if (typeof v1 !== "string" || typeof v2 !== "string") return 0;
|
|
@@ -4971,6 +5141,15 @@ function isTopmostDialog(z) {
|
|
|
4971
5141
|
const mark = annotationOf(annotations, s.id);
|
|
4972
5142
|
const isSelected = selectedIds.has(s.id);
|
|
4973
5143
|
const isWsArchived = isSessionWorkspaceArchived(s);
|
|
5144
|
+
const openRow = () => {
|
|
5145
|
+
if (isArchived) {
|
|
5146
|
+
if (isWsArchived) {
|
|
5147
|
+
if (typeof window !== "undefined" && typeof window.alert === "function") window.alert(t("error.workspaceArchived"));
|
|
5148
|
+
return;
|
|
5149
|
+
}
|
|
5150
|
+
runRow(s.id, async () => { await onUnarchive(s.id); await onOpen(s.id); });
|
|
5151
|
+
} else onOpen(s.id);
|
|
5152
|
+
};
|
|
4974
5153
|
const checkbox = (selectedIds.size === 0 && !selectModeEnabled)
|
|
4975
5154
|
? null
|
|
4976
5155
|
: h("label", { className: "sm-bulkRowCheckbox", onClick: (e) => e.stopPropagation() },
|
|
@@ -4990,7 +5169,7 @@ function isTopmostDialog(z) {
|
|
|
4990
5169
|
h("div", { className: "sm-rowCheckboxSlot" + ((selectedIds.size > 0 || selectModeEnabled) ? " sm-rowCheckboxSlot-visible" : "") }, checkbox),
|
|
4991
5170
|
h("div", { className: "sm-rowMain" },
|
|
4992
5171
|
h("div", { className: "sm-rowTitle" },
|
|
4993
|
-
h("
|
|
5172
|
+
h("button", { type: "button", className: "sm-rowTitleButton", title: t("row.open"), "aria-label": t("row.open") + ": " + (s.blank ? t("panel.session.new") : (s.displayTitle || s.id)), disabled: busy || bulkBusy, onClick: openRow }, s.blank ? t("panel.session.new") : (s.displayTitle || s.id)),
|
|
4994
5173
|
isWsArchived ? h("span", { className: "sm-badge sm-badgeWorkspaceArchived" }, t("panel.workspaceArchived")) : null,
|
|
4995
5174
|
isArchived ? h("span", { className: "sm-badge sm-badgeArchived" }, t("panel.archived")) : null,
|
|
4996
5175
|
s.running ? h("span", { className: "sm-badge sm-badgeRunning" }, t("panel.running")) : null,
|
|
@@ -4998,19 +5177,65 @@ function isTopmostDialog(z) {
|
|
|
4998
5177
|
),
|
|
4999
5178
|
h("div", { className: "sm-rowSecondary" },
|
|
5000
5179
|
h("div", { className: "sm-rowBadges" },
|
|
5001
|
-
h("span", { className: "sm-priorityBadge sm-priority-" + (mark.priority ?? 3),
|
|
5180
|
+
renderTip(t("marks.priority." + (mark.priority ?? 3)), h("span", { className: "sm-priorityBadge sm-priority-" + (mark.priority ?? 3), "aria-label": t("marks.priority." + (mark.priority ?? 3)) }, "P" + (mark.priority ?? 3))),
|
|
5002
5181
|
mark.tags.slice(0, 2).map(tag => h("button", { key: tag, type: "button", className: "sm-tagChip", title: tag, onClick: () => setTagFilter("tag:" + tag.toLowerCase()) }, tag)),
|
|
5003
5182
|
mark.tags.length > 2 ? h("span", { title: mark.tags.join(", ") }, "+" + (mark.tags.length - 2)) : null,
|
|
5004
5183
|
mark.note ? h("button", { type: "button", className: "sm-noteBadge", title: t("marks.note.exists"), onClick: () => { setAnnotationAnchor(null); setAnnotationFor(current => current?.id === s.id ? null : s); } }, "✎") : null
|
|
5005
5184
|
),
|
|
5006
5185
|
h("div", { className: "sm-rowMeta" }, shortPath(s.cwd) + (s.cwd ? " · " : "") + formatRelative(s.updatedAt, now)),
|
|
5007
5186
|
h("div", { className: "sm-rowActions" },
|
|
5008
|
-
|
|
5009
|
-
|
|
5187
|
+
renderTip(t(isArchived ? "row.unarchive" : "row.archive"), h("button", {
|
|
5188
|
+
type: "button",
|
|
5189
|
+
className: "sm-rowBtn sm-rowBtnIcon" + (isArchived ? " sm-rowBtnActive" : ""),
|
|
5190
|
+
disabled: busy,
|
|
5191
|
+
"aria-label": t(isArchived ? "row.unarchive" : "row.archive") + ": " + (s.displayTitle || s.id),
|
|
5192
|
+
onClick: () => runRow(s.id, () => {
|
|
5193
|
+
if (isArchived) {
|
|
5194
|
+
if (isWsArchived) {
|
|
5195
|
+
if (typeof window !== "undefined" && typeof window.alert === "function") {
|
|
5196
|
+
window.alert(t("error.workspaceArchived"));
|
|
5197
|
+
}
|
|
5198
|
+
return;
|
|
5199
|
+
}
|
|
5200
|
+
return onUnarchive(s.id);
|
|
5201
|
+
}
|
|
5202
|
+
return onArchive(s.id);
|
|
5203
|
+
})
|
|
5204
|
+
},
|
|
5205
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderArchiveIcon({ unarchive: isArchived })),
|
|
5206
|
+
h("span", { className: "sm-rowBtnLabel" }, t(isArchived ? "row.unarchive" : "row.archive"))
|
|
5207
|
+
)),
|
|
5010
5208
|
annotationButtons(s.id, s.displayTitle || s.id, t, annotations, "sm-rowBtn", patch => runRow(s.id, () => annotationStore.save(s.id, patch)), () => { setAnnotationAnchor(null); setAnnotationFor(current => current?.id === s.id ? null : s); }, busy),
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5209
|
+
renderTip(t("row.move"), h("button", {
|
|
5210
|
+
type: "button",
|
|
5211
|
+
className: "sm-rowBtn sm-rowBtnIcon" + (moveFor && moveFor.id === s.id ? " sm-rowBtnActive" : ""),
|
|
5212
|
+
disabled: busy,
|
|
5213
|
+
"aria-label": t("row.move") + ": " + (s.displayTitle || s.id),
|
|
5214
|
+
onClick: () => { if (moveFor && moveFor.id === s.id) setMoveFor(null); else setMoveFor(s); }
|
|
5215
|
+
},
|
|
5216
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderMoveIcon()),
|
|
5217
|
+
h("span", { className: "sm-rowBtnLabel" }, t("row.move"))
|
|
5218
|
+
)),
|
|
5219
|
+
renderTip(t("row.migrate"), h("button", {
|
|
5220
|
+
type: "button",
|
|
5221
|
+
className: "sm-rowBtn sm-rowBtnIcon" + (migrateFor && migrateFor.id === s.id ? " sm-rowBtnActive" : ""),
|
|
5222
|
+
disabled: busy,
|
|
5223
|
+
"aria-label": t("row.migrate") + ": " + (s.displayTitle || s.id),
|
|
5224
|
+
onClick: () => { if (migrateFor && migrateFor.id === s.id) setMigrateFor(null); else setMigrateFor(s); }
|
|
5225
|
+
},
|
|
5226
|
+
h("span", { className: "sm-headerBtnIcon" }, PresetIcon()),
|
|
5227
|
+
h("span", { className: "sm-rowBtnLabel" }, t("row.migrate"))
|
|
5228
|
+
)),
|
|
5229
|
+
renderTip(t("row.delete"), h("button", {
|
|
5230
|
+
type: "button",
|
|
5231
|
+
className: "sm-rowBtn sm-rowBtnDanger sm-rowBtnIcon" + (confirmFor && confirmFor.id === s.id ? " sm-rowBtnActive" : ""),
|
|
5232
|
+
disabled: busy,
|
|
5233
|
+
"aria-label": t("row.delete") + ": " + (s.displayTitle || s.id),
|
|
5234
|
+
onClick: () => { if (confirmFor && confirmFor.id === s.id) setConfirmFor(null); else setConfirmFor(s); }
|
|
5235
|
+
},
|
|
5236
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderTrashIcon()),
|
|
5237
|
+
h("span", { className: "sm-rowBtnLabel" }, t("row.delete"))
|
|
5238
|
+
))
|
|
5014
5239
|
)
|
|
5015
5240
|
)
|
|
5016
5241
|
)
|
|
@@ -5897,16 +6122,15 @@ function isTopmostDialog(z) {
|
|
|
5897
6122
|
// <div data-slot-error="…" />, taking every title-bar button down
|
|
5898
6123
|
// and leaving 移动 / 删除 with no click target. Compute the value
|
|
5899
6124
|
// here once per render, then reuse the captured const in handlers.
|
|
6125
|
+
const sessionsSnapshot = useSessions ? useSessions((s) => s) : null;
|
|
5900
6126
|
const displayTitle = (() => {
|
|
5901
6127
|
const fallback = props.displayTitle;
|
|
5902
6128
|
if (fallback && fallback !== sessionId) return fallback;
|
|
5903
|
-
const
|
|
5904
|
-
const found = list ? list.byId[sessionId] : null;
|
|
6129
|
+
const found = sessionsSnapshot ? sessionsSnapshot.byId[sessionId] : null;
|
|
5905
6130
|
return (found && found.displayTitle) || "";
|
|
5906
6131
|
})();
|
|
5907
6132
|
const currentWorkspaceId = (() => {
|
|
5908
|
-
const
|
|
5909
|
-
const found = list ? list.byId[sessionId] : null;
|
|
6133
|
+
const found = sessionsSnapshot ? sessionsSnapshot.byId[sessionId] : null;
|
|
5910
6134
|
return (found && found.workspaceId) || props.workspaceId || "";
|
|
5911
6135
|
})();
|
|
5912
6136
|
const annotations = useAnnotations();
|
|
@@ -6096,7 +6320,7 @@ function isTopmostDialog(z) {
|
|
|
6096
6320
|
isArchived ? onUnarchive(sessionId) : onArchive(sessionId)
|
|
6097
6321
|
)
|
|
6098
6322
|
},
|
|
6099
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6323
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderArchiveIcon({ unarchive: isArchived })),
|
|
6100
6324
|
h("span", { className: "sm-headerBtnLabel" }, isArchived ? (t ? t("row.unarchive") : "移出归档") : (t ? t("row.archive") : "归档"))
|
|
6101
6325
|
)) : null,
|
|
6102
6326
|
annotationButtons(sessionId, props.displayTitle || sessionId, t, annotations, "sm-headerBtn", patch => runWithAlert("annotations", () => annotationStore.save(sessionId, patch)), (e) => {
|
|
@@ -6132,7 +6356,7 @@ function isTopmostDialog(z) {
|
|
|
6132
6356
|
}
|
|
6133
6357
|
}
|
|
6134
6358
|
},
|
|
6135
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6359
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderMoveIcon()),
|
|
6136
6360
|
h("span", { className: "sm-headerBtnLabel" }, t ? t("row.move") : "移动至工作区")
|
|
6137
6361
|
)),
|
|
6138
6362
|
renderTip(t ? t("row.delete") : "删除会话", h("button", {
|
|
@@ -6154,7 +6378,7 @@ function isTopmostDialog(z) {
|
|
|
6154
6378
|
}
|
|
6155
6379
|
}
|
|
6156
6380
|
},
|
|
6157
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6381
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderTrashIcon()),
|
|
6158
6382
|
h("span", { className: "sm-headerBtnLabel" }, t ? t("row.delete") : "删除会话")
|
|
6159
6383
|
))
|
|
6160
6384
|
),
|
|
@@ -6171,7 +6395,7 @@ function isTopmostDialog(z) {
|
|
|
6171
6395
|
setMoreOpen(v => !v);
|
|
6172
6396
|
}
|
|
6173
6397
|
},
|
|
6174
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6398
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderEllipsisIcon())
|
|
6175
6399
|
)),
|
|
6176
6400
|
moreOpen ? h("div", { className: "sm-headerMenu", role: "menu", style: menuStyle },
|
|
6177
6401
|
(onArchive || onUnarchive) ? h("button", {
|
|
@@ -6183,7 +6407,7 @@ function isTopmostDialog(z) {
|
|
|
6183
6407
|
runWithAlert("archive", () => isArchived ? onUnarchive(sessionId) : onArchive(sessionId));
|
|
6184
6408
|
}
|
|
6185
6409
|
},
|
|
6186
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6410
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderArchiveIcon({ unarchive: isArchived })),
|
|
6187
6411
|
h("span", null, isArchived ? (t ? t("row.unarchive") : "移出归档") : (t ? t("row.archive") : "归档"))
|
|
6188
6412
|
) : null,
|
|
6189
6413
|
h("button", {
|
|
@@ -6196,7 +6420,7 @@ function isTopmostDialog(z) {
|
|
|
6196
6420
|
runWithAlert("annotations", () => annotationStore.save(sessionId, { favorite: !currentAnnotation.favorite }));
|
|
6197
6421
|
}
|
|
6198
6422
|
},
|
|
6199
|
-
h("span", { className: "sm-headerBtnIcon" }, currentAnnotation.favorite
|
|
6423
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderStarIcon({ filled: currentAnnotation.favorite })),
|
|
6200
6424
|
h("span", null, t ? t(currentAnnotation.favorite ? "marks.favorite.remove" : "marks.favorite.add") : (currentAnnotation.favorite ? "取消收藏" : "收藏会话"))
|
|
6201
6425
|
),
|
|
6202
6426
|
h("button", {
|
|
@@ -6209,7 +6433,7 @@ function isTopmostDialog(z) {
|
|
|
6209
6433
|
runWithAlert("annotations", () => annotationStore.save(sessionId, { reviewLater: !currentAnnotation.reviewLater }));
|
|
6210
6434
|
}
|
|
6211
6435
|
},
|
|
6212
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6436
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderClockIcon()),
|
|
6213
6437
|
h("span", null, t ? t(currentAnnotation.reviewLater ? "marks.review.remove" : "marks.review.add") : (currentAnnotation.reviewLater ? "取消稍后回看" : "稍后回看"))
|
|
6214
6438
|
),
|
|
6215
6439
|
h("button", {
|
|
@@ -6226,7 +6450,7 @@ function isTopmostDialog(z) {
|
|
|
6226
6450
|
setAnnotationFor(curr => (curr?.id === sessionId ? null : { id: sessionId, displayTitle }));
|
|
6227
6451
|
}
|
|
6228
6452
|
},
|
|
6229
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6453
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderTagIcon()),
|
|
6230
6454
|
h("span", null, t ? t("marks.header.edit") : "标签/备注")
|
|
6231
6455
|
),
|
|
6232
6456
|
h("button", {
|
|
@@ -6245,7 +6469,7 @@ function isTopmostDialog(z) {
|
|
|
6245
6469
|
}
|
|
6246
6470
|
}
|
|
6247
6471
|
},
|
|
6248
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6472
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderMoveIcon()),
|
|
6249
6473
|
h("span", null, t ? t("row.move") : "移动至工作区")
|
|
6250
6474
|
),
|
|
6251
6475
|
h("button", {
|
|
@@ -6264,7 +6488,7 @@ function isTopmostDialog(z) {
|
|
|
6264
6488
|
}
|
|
6265
6489
|
}
|
|
6266
6490
|
},
|
|
6267
|
-
h("span", { className: "sm-headerBtnIcon" },
|
|
6491
|
+
h("span", { className: "sm-headerBtnIcon" }, HeaderTrashIcon()),
|
|
6268
6492
|
h("span", null, t ? t("row.delete") : "删除会话")
|
|
6269
6493
|
)
|
|
6270
6494
|
) : null
|
|
@@ -6976,6 +7200,12 @@ function isTopmostDialog(z) {
|
|
|
6976
7200
|
const wasCurrent = ctx.sessions.list.getSnapshot().current === sessionId;
|
|
6977
7201
|
const response = await callApi("/move", { sessionId, targetWorkspaceId });
|
|
6978
7202
|
if (!response.ok) throw new Error(response.error || "move failed");
|
|
7203
|
+
if (response.result?.restartRequired) {
|
|
7204
|
+
try {
|
|
7205
|
+
const msg = (typeof t === "function" ? t("move.restartRequired") : null) || "会话已成功移动至目标工作区,但当前工作目录需要在重启 DSH 后生效。";
|
|
7206
|
+
window.alert(msg);
|
|
7207
|
+
} catch (_) {}
|
|
7208
|
+
}
|
|
6979
7209
|
const refreshMovedSession = async () => {
|
|
6980
7210
|
await Promise.allSettled([
|
|
6981
7211
|
typeof ctx.workspaces?.refresh === "function" ? ctx.workspaces.refresh() : Promise.resolve(),
|
|
@@ -7050,7 +7280,7 @@ function isTopmostDialog(z) {
|
|
|
7050
7280
|
ctx.slots.inject("conversation.session.header.actions", () => ctx.slots.register({
|
|
7051
7281
|
name: "conversation.session.header.actions",
|
|
7052
7282
|
id: "session-manager-header",
|
|
7053
|
-
order:
|
|
7283
|
+
order: 0,
|
|
7054
7284
|
locale: NS,
|
|
7055
7285
|
inject: () => actions()
|
|
7056
7286
|
}, HeaderAction));
|