codexmate 0.1.5 → 0.1.7
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/README.md +3 -1
- package/README.vi.md +6 -3
- package/README.zh.md +6 -3
- package/package.json +1 -1
- package/skills/{codexmate-project-context-recovery → context-recovery}/SKILL.md +2 -2
- package/web-ui/modules/app.methods.session-actions.mjs +28 -1
- package/web-ui/modules/app.methods.session-trash.mjs +5 -0
- package/web-ui/modules/i18n/locales/en.mjs +18 -0
- package/web-ui/modules/i18n/locales/ja.mjs +32 -0
- package/web-ui/modules/i18n/locales/vi.mjs +16 -0
- package/web-ui/modules/i18n/locales/zh-tw.mjs +16 -0
- package/web-ui/modules/i18n/locales/zh.mjs +16 -0
- package/web-ui/partials/index/panel-sessions.html +8 -12
- package/web-ui/partials/index/panel-settings.html +0 -23
- package/web-ui/partials/index/panel-trash.html +36 -1
- package/web-ui/res/web-ui-render.precompiled.js +208 -200
- package/web-ui/session-helpers.mjs +9 -0
- package/web-ui/styles/responsive.css +12 -0
- package/web-ui/styles/sessions-list.css +5 -0
- package/web-ui/styles/sessions-toolbar-trash.css +23 -1
- package/web-ui/styles/trash-panel.css +9 -0
- /package/skills/{codexmate-project-context-recovery → context-recovery}/scripts/search_sessions.py +0 -0
|
@@ -6,8 +6,43 @@
|
|
|
6
6
|
role="tabpanel"
|
|
7
7
|
aria-labelledby="tab-trash">
|
|
8
8
|
<div v-if="!loading" class="trash-panel-shell">
|
|
9
|
+
<!-- Trash configuration -->
|
|
10
|
+
<section class="settings-card trash-config-card" :aria-label="t('settings.trashConfig.title')">
|
|
11
|
+
<div class="settings-card-main">
|
|
12
|
+
<div class="settings-card-content">
|
|
13
|
+
<div class="settings-card-title">{{ t('settings.trashConfig.title') }}</div>
|
|
14
|
+
<p class="settings-card-desc">{{ t('settings.trashConfig.meta') }}</p>
|
|
15
|
+
<label class="settings-toggle-row">
|
|
16
|
+
<input type="checkbox" :checked="sessionTrashEnabled" @change="setSessionTrashEnabled($event.target.checked)">
|
|
17
|
+
<span class="toggle-track">
|
|
18
|
+
<span class="toggle-thumb"></span>
|
|
19
|
+
</span>
|
|
20
|
+
<span>{{ t('settings.deleteBehavior.toggle') }}</span>
|
|
21
|
+
</label>
|
|
22
|
+
<div class="settings-retention">
|
|
23
|
+
<label for="settings-trash-retention-days">{{ t('settings.trash.retentionLabel') }}</label>
|
|
24
|
+
<input id="settings-trash-retention-days" type="number" min="1" max="365" :value="sessionTrashRetentionDays" @change="setSessionTrashRetentionDays(Number($event.target.value))" class="settings-retention-input" />
|
|
25
|
+
<span>{{ t('settings.trash.retentionUnit') }}</span>
|
|
26
|
+
</div>
|
|
27
|
+
<p class="settings-card-hint">{{ t('settings.trash.retentionHint') }}</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</section>
|
|
31
|
+
|
|
32
|
+
<!-- Disabled state -->
|
|
33
|
+
<div v-if="getSessionTrashViewState() === 'disabled'" class="trash-empty-state trash-disabled-state">
|
|
34
|
+
<svg class="trash-empty-svg" viewBox="0 0 64 64" fill="none" stroke="currentColor" stroke-width="1.2">
|
|
35
|
+
<path d="M20 22l4 32h16l4-32" />
|
|
36
|
+
<path d="M14 22h36" />
|
|
37
|
+
<path d="M24 22v-4a4 4 0 014-4h8a4 4 0 014 4v4" />
|
|
38
|
+
<path d="M10 10l44 44" stroke-width="2" stroke-linecap="round" />
|
|
39
|
+
</svg>
|
|
40
|
+
<div class="trash-empty-title">{{ t('settings.trash.disabled') }}</div>
|
|
41
|
+
<div class="trash-empty-hint">{{ t('settings.trash.disabledHint') }}</div>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
9
44
|
<!-- Empty state -->
|
|
10
|
-
<div v-if="getSessionTrashViewState() === 'empty'" class="trash-empty-state">
|
|
45
|
+
<div v-else-if="getSessionTrashViewState() === 'empty'" class="trash-empty-state">
|
|
11
46
|
<svg class="trash-empty-svg" viewBox="0 0 64 64" fill="none" stroke="currentColor" stroke-width="1.2">
|
|
12
47
|
<path d="M20 22l4 32h16l4-32"/>
|
|
13
48
|
<path d="M14 22h36"/>
|
|
@@ -3512,7 +3512,7 @@ return function render(_ctx, _cache) {
|
|
|
3512
3512
|
]),
|
|
3513
3513
|
_createElementVNode("div", { class: "session-actions" }, [
|
|
3514
3514
|
_createElementVNode("button", {
|
|
3515
|
-
class: "btn-session-refresh",
|
|
3515
|
+
class: "btn-session-refresh has-label",
|
|
3516
3516
|
onClick: _ctx.loadActiveSessionDetail,
|
|
3517
3517
|
disabled: _ctx.sessionDetailLoading || !_ctx.activeSession,
|
|
3518
3518
|
title: _ctx.sessionDetailLoading ? _ctx.t('sessions.preview.loading') : _ctx.t('sessions.preview.refresh'),
|
|
@@ -3530,12 +3530,13 @@ return function render(_ctx, _cache) {
|
|
|
3530
3530
|
_createElementVNode("path", { d: "M13.5 8a5.5 5.5 0 0 1-9.4 3.8" }),
|
|
3531
3531
|
_createElementVNode("polyline", { points: "2.5 2 2.5 5 5.5 5" }),
|
|
3532
3532
|
_createElementVNode("polyline", { points: "13.5 14 13.5 11 10.5 11" })
|
|
3533
|
-
]))
|
|
3533
|
+
])),
|
|
3534
|
+
_createElementVNode("span", { class: "session-action-label" }, _toDisplayString(_ctx.t('sessions.preview.refresh')), 1 /* TEXT */)
|
|
3534
3535
|
], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"]),
|
|
3535
3536
|
(_ctx.isDeleteAvailable(_ctx.activeSession))
|
|
3536
3537
|
? (_openBlock(), _createElementBlock("button", {
|
|
3537
3538
|
key: 0,
|
|
3538
|
-
class: "btn-session-delete",
|
|
3539
|
+
class: "btn-session-delete has-label",
|
|
3539
3540
|
onClick: $event => (_ctx.deleteSession(_ctx.activeSession)),
|
|
3540
3541
|
disabled: !_ctx.activeSession || _ctx.sessionsLoading || _ctx.sessionDeleting[_ctx.getSessionExportKey(_ctx.activeSession)],
|
|
3541
3542
|
title: (_ctx.activeSession && _ctx.sessionDeleting[_ctx.getSessionExportKey(_ctx.activeSession)]) ? (_ctx.sessionTrashEnabled === false ? _ctx.t('sessions.preview.deleting') : _ctx.t('sessions.preview.moving')) : (_ctx.sessionTrashEnabled === false ? _ctx.t('sessions.preview.deleteHard') : _ctx.t('sessions.preview.moveToTrash')),
|
|
@@ -3552,11 +3553,12 @@ return function render(_ctx, _cache) {
|
|
|
3552
3553
|
_createElementVNode("polyline", { points: "3 4 4 4 13 4" }),
|
|
3553
3554
|
_createElementVNode("path", { d: "M5.5 4V2.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1V4" }),
|
|
3554
3555
|
_createElementVNode("path", { d: "M12 4v9.5a1.5 1.5 0 0 1-1.5 1.5h-5A1.5 1.5 0 0 1 4 13.5V4" })
|
|
3555
|
-
]))
|
|
3556
|
+
])),
|
|
3557
|
+
_createElementVNode("span", { class: "session-action-label" }, _toDisplayString((_ctx.activeSession && _ctx.sessionDeleting[_ctx.getSessionExportKey(_ctx.activeSession)]) ? (_ctx.sessionTrashEnabled === false ? _ctx.t('sessions.preview.deleting') : _ctx.t('sessions.preview.moving')) : (_ctx.sessionTrashEnabled === false ? _ctx.t('sessions.preview.deleteHard') : _ctx.t('sessions.preview.moveToTrash'))), 1 /* TEXT */)
|
|
3556
3558
|
], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"]))
|
|
3557
3559
|
: _createCommentVNode("v-if", true),
|
|
3558
3560
|
_createElementVNode("button", {
|
|
3559
|
-
class: "btn-session-export",
|
|
3561
|
+
class: "btn-session-export has-label",
|
|
3560
3562
|
onClick: $event => (_ctx.exportSession(_ctx.activeSession)),
|
|
3561
3563
|
disabled: !_ctx.activeSession || _ctx.sessionExporting[_ctx.getSessionExportKey(_ctx.activeSession)],
|
|
3562
3564
|
title: (_ctx.activeSession && _ctx.sessionExporting[_ctx.getSessionExportKey(_ctx.activeSession)]) ? _ctx.t('sessions.preview.exporting') : _ctx.t('sessions.preview.export'),
|
|
@@ -3573,28 +3575,8 @@ return function render(_ctx, _cache) {
|
|
|
3573
3575
|
_createElementVNode("path", { d: "M8 2v8" }),
|
|
3574
3576
|
_createElementVNode("polyline", { points: "4 7 8 10.5 12 7" }),
|
|
3575
3577
|
_createElementVNode("path", { d: "M2.5 12v1.5a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V12" })
|
|
3576
|
-
]))
|
|
3577
|
-
|
|
3578
|
-
_createElementVNode("button", {
|
|
3579
|
-
class: "btn-session-open session-brief-copy",
|
|
3580
|
-
onClick: _ctx.copySessionWorkspaceBrief,
|
|
3581
|
-
disabled: !_ctx.activeSessionWorkspaceSummary.available,
|
|
3582
|
-
title: _ctx.t('sessions.workspace.copy'),
|
|
3583
|
-
"aria-label": _ctx.t('sessions.workspace.copy')
|
|
3584
|
-
}, [
|
|
3585
|
-
(_openBlock(), _createElementBlock("svg", {
|
|
3586
|
-
viewBox: "0 0 16 16",
|
|
3587
|
-
fill: "none",
|
|
3588
|
-
stroke: "currentColor",
|
|
3589
|
-
"stroke-width": "1.8",
|
|
3590
|
-
"stroke-linecap": "round",
|
|
3591
|
-
"stroke-linejoin": "round"
|
|
3592
|
-
}, [
|
|
3593
|
-
_createElementVNode("path", { d: "M4 2.5h6.5L13 5v8.5H4z" }),
|
|
3594
|
-
_createElementVNode("path", { d: "M10.5 2.5V5H13" }),
|
|
3595
|
-
_createElementVNode("path", { d: "M6 8h5" }),
|
|
3596
|
-
_createElementVNode("path", { d: "M6 10.5h5" })
|
|
3597
|
-
]))
|
|
3578
|
+
])),
|
|
3579
|
+
_createElementVNode("span", { class: "session-action-label" }, _toDisplayString((_ctx.activeSession && _ctx.sessionExporting[_ctx.getSessionExportKey(_ctx.activeSession)]) ? _ctx.t('sessions.preview.exporting') : _ctx.t('sessions.preview.export')), 1 /* TEXT */)
|
|
3598
3580
|
], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"]),
|
|
3599
3581
|
_createElementVNode("div", { class: "session-link-group" }, [
|
|
3600
3582
|
_createElementVNode("button", {
|
|
@@ -3638,7 +3620,7 @@ return function render(_ctx, _cache) {
|
|
|
3638
3620
|
], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"])
|
|
3639
3621
|
]),
|
|
3640
3622
|
_createElementVNode("button", {
|
|
3641
|
-
class: "btn-session-open",
|
|
3623
|
+
class: "btn-session-open has-label",
|
|
3642
3624
|
onClick: $event => (_ctx.copySessionPath(_ctx.activeSession)),
|
|
3643
3625
|
disabled: !_ctx.activeSession || !_ctx.getSessionFilePath(_ctx.activeSession),
|
|
3644
3626
|
title: _ctx.t('sessions.preview.copyPath'),
|
|
@@ -3653,7 +3635,8 @@ return function render(_ctx, _cache) {
|
|
|
3653
3635
|
"stroke-linejoin": "round"
|
|
3654
3636
|
}, [
|
|
3655
3637
|
_createElementVNode("path", { d: "M2 5.5V12.5a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V7.5a1 1 0 0 0-1-1H8L6.5 5H3a1 1 0 0 0-1 1z" })
|
|
3656
|
-
]))
|
|
3638
|
+
])),
|
|
3639
|
+
_createElementVNode("span", { class: "session-action-label" }, _toDisplayString(_ctx.t('sessions.preview.copyPath')), 1 /* TEXT */)
|
|
3657
3640
|
], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"])
|
|
3658
3641
|
])
|
|
3659
3642
|
], 512 /* NEED_PATCH */),
|
|
@@ -5903,42 +5886,6 @@ return function render(_ctx, _cache) {
|
|
|
5903
5886
|
}, _toDisplayString(_ctx.providerCacheSyncing ? _ctx.t('settings.providerCache.syncing') : _ctx.t('settings.providerCache.sync')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
5904
5887
|
])
|
|
5905
5888
|
], 8 /* PROPS */, ["aria-label"]),
|
|
5906
|
-
_createElementVNode("section", {
|
|
5907
|
-
class: "settings-card",
|
|
5908
|
-
"aria-label": _ctx.t('settings.trashConfig.title')
|
|
5909
|
-
}, [
|
|
5910
|
-
_createElementVNode("div", { class: "settings-card-main" }, [
|
|
5911
|
-
_createElementVNode("div", { class: "settings-card-content" }, [
|
|
5912
|
-
_createElementVNode("div", { class: "settings-card-title" }, _toDisplayString(_ctx.t('settings.trashConfig.title')), 1 /* TEXT */),
|
|
5913
|
-
_createElementVNode("p", { class: "settings-card-desc" }, _toDisplayString(_ctx.t('settings.trashConfig.meta')), 1 /* TEXT */),
|
|
5914
|
-
_createElementVNode("label", { class: "settings-toggle-row" }, [
|
|
5915
|
-
_createElementVNode("input", {
|
|
5916
|
-
type: "checkbox",
|
|
5917
|
-
checked: _ctx.sessionTrashEnabled,
|
|
5918
|
-
onChange: $event => (_ctx.setSessionTrashEnabled($event.target.checked))
|
|
5919
|
-
}, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
|
|
5920
|
-
_createElementVNode("span", { class: "toggle-track" }, [
|
|
5921
|
-
_createElementVNode("span", { class: "toggle-thumb" })
|
|
5922
|
-
]),
|
|
5923
|
-
_createElementVNode("span", null, _toDisplayString(_ctx.t('settings.deleteBehavior.toggle')), 1 /* TEXT */)
|
|
5924
|
-
]),
|
|
5925
|
-
_createElementVNode("div", { class: "settings-retention" }, [
|
|
5926
|
-
_createElementVNode("label", { for: "settings-trash-retention-days" }, _toDisplayString(_ctx.t('settings.trash.retentionLabel')), 1 /* TEXT */),
|
|
5927
|
-
_createElementVNode("input", {
|
|
5928
|
-
id: "settings-trash-retention-days",
|
|
5929
|
-
type: "number",
|
|
5930
|
-
min: "1",
|
|
5931
|
-
max: "365",
|
|
5932
|
-
value: _ctx.sessionTrashRetentionDays,
|
|
5933
|
-
onChange: $event => (_ctx.setSessionTrashRetentionDays(Number($event.target.value))),
|
|
5934
|
-
class: "settings-retention-input"
|
|
5935
|
-
}, null, 40 /* PROPS, NEED_HYDRATION */, ["value", "onChange"]),
|
|
5936
|
-
_createElementVNode("span", null, _toDisplayString(_ctx.t('settings.trash.retentionUnit')), 1 /* TEXT */)
|
|
5937
|
-
]),
|
|
5938
|
-
_createElementVNode("p", { class: "settings-card-hint" }, _toDisplayString(_ctx.t('settings.trash.retentionHint')), 1 /* TEXT */)
|
|
5939
|
-
])
|
|
5940
|
-
])
|
|
5941
|
-
], 8 /* PROPS */, ["aria-label"]),
|
|
5942
5889
|
_createElementVNode("section", {
|
|
5943
5890
|
class: "settings-card settings-card--destructive",
|
|
5944
5891
|
"aria-label": _ctx.t('settings.reset.title')
|
|
@@ -5975,11 +5922,48 @@ return function render(_ctx, _cache) {
|
|
|
5975
5922
|
key: 0,
|
|
5976
5923
|
class: "trash-panel-shell"
|
|
5977
5924
|
}, [
|
|
5978
|
-
_createCommentVNode("
|
|
5979
|
-
(
|
|
5925
|
+
_createCommentVNode(" Trash configuration "),
|
|
5926
|
+
_createElementVNode("section", {
|
|
5927
|
+
class: "settings-card trash-config-card",
|
|
5928
|
+
"aria-label": _ctx.t('settings.trashConfig.title')
|
|
5929
|
+
}, [
|
|
5930
|
+
_createElementVNode("div", { class: "settings-card-main" }, [
|
|
5931
|
+
_createElementVNode("div", { class: "settings-card-content" }, [
|
|
5932
|
+
_createElementVNode("div", { class: "settings-card-title" }, _toDisplayString(_ctx.t('settings.trashConfig.title')), 1 /* TEXT */),
|
|
5933
|
+
_createElementVNode("p", { class: "settings-card-desc" }, _toDisplayString(_ctx.t('settings.trashConfig.meta')), 1 /* TEXT */),
|
|
5934
|
+
_createElementVNode("label", { class: "settings-toggle-row" }, [
|
|
5935
|
+
_createElementVNode("input", {
|
|
5936
|
+
type: "checkbox",
|
|
5937
|
+
checked: _ctx.sessionTrashEnabled,
|
|
5938
|
+
onChange: $event => (_ctx.setSessionTrashEnabled($event.target.checked))
|
|
5939
|
+
}, null, 40 /* PROPS, NEED_HYDRATION */, ["checked", "onChange"]),
|
|
5940
|
+
_createElementVNode("span", { class: "toggle-track" }, [
|
|
5941
|
+
_createElementVNode("span", { class: "toggle-thumb" })
|
|
5942
|
+
]),
|
|
5943
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.t('settings.deleteBehavior.toggle')), 1 /* TEXT */)
|
|
5944
|
+
]),
|
|
5945
|
+
_createElementVNode("div", { class: "settings-retention" }, [
|
|
5946
|
+
_createElementVNode("label", { for: "settings-trash-retention-days" }, _toDisplayString(_ctx.t('settings.trash.retentionLabel')), 1 /* TEXT */),
|
|
5947
|
+
_createElementVNode("input", {
|
|
5948
|
+
id: "settings-trash-retention-days",
|
|
5949
|
+
type: "number",
|
|
5950
|
+
min: "1",
|
|
5951
|
+
max: "365",
|
|
5952
|
+
value: _ctx.sessionTrashRetentionDays,
|
|
5953
|
+
onChange: $event => (_ctx.setSessionTrashRetentionDays(Number($event.target.value))),
|
|
5954
|
+
class: "settings-retention-input"
|
|
5955
|
+
}, null, 40 /* PROPS, NEED_HYDRATION */, ["value", "onChange"]),
|
|
5956
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.t('settings.trash.retentionUnit')), 1 /* TEXT */)
|
|
5957
|
+
]),
|
|
5958
|
+
_createElementVNode("p", { class: "settings-card-hint" }, _toDisplayString(_ctx.t('settings.trash.retentionHint')), 1 /* TEXT */)
|
|
5959
|
+
])
|
|
5960
|
+
])
|
|
5961
|
+
], 8 /* PROPS */, ["aria-label"]),
|
|
5962
|
+
_createCommentVNode(" Disabled state "),
|
|
5963
|
+
(_ctx.getSessionTrashViewState() === 'disabled')
|
|
5980
5964
|
? (_openBlock(), _createElementBlock("div", {
|
|
5981
5965
|
key: 0,
|
|
5982
|
-
class: "trash-empty-state"
|
|
5966
|
+
class: "trash-empty-state trash-disabled-state"
|
|
5983
5967
|
}, [
|
|
5984
5968
|
(_openBlock(), _createElementBlock("svg", {
|
|
5985
5969
|
class: "trash-empty-svg",
|
|
@@ -5992,158 +5976,182 @@ return function render(_ctx, _cache) {
|
|
|
5992
5976
|
_createElementVNode("path", { d: "M14 22h36" }),
|
|
5993
5977
|
_createElementVNode("path", { d: "M24 22v-4a4 4 0 014-4h8a4 4 0 014 4v4" }),
|
|
5994
5978
|
_createElementVNode("path", {
|
|
5995
|
-
d: "
|
|
5996
|
-
"stroke-width": "
|
|
5979
|
+
d: "M10 10l44 44",
|
|
5980
|
+
"stroke-width": "2",
|
|
5997
5981
|
"stroke-linecap": "round"
|
|
5998
5982
|
})
|
|
5999
5983
|
])),
|
|
6000
|
-
_createElementVNode("div", { class: "trash-empty-title" }, _toDisplayString(_ctx.t('settings.trash.
|
|
6001
|
-
_createElementVNode("div", { class: "trash-empty-hint" }, _toDisplayString(_ctx.t('settings.trash.
|
|
5984
|
+
_createElementVNode("div", { class: "trash-empty-title" }, _toDisplayString(_ctx.t('settings.trash.disabled')), 1 /* TEXT */),
|
|
5985
|
+
_createElementVNode("div", { class: "trash-empty-hint" }, _toDisplayString(_ctx.t('settings.trash.disabledHint')), 1 /* TEXT */)
|
|
6002
5986
|
]))
|
|
6003
|
-
: (_ctx.getSessionTrashViewState() === '
|
|
5987
|
+
: (_ctx.getSessionTrashViewState() === 'empty')
|
|
6004
5988
|
? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [
|
|
6005
|
-
_createCommentVNode("
|
|
5989
|
+
_createCommentVNode(" Empty state "),
|
|
6006
5990
|
_createElementVNode("div", { class: "trash-empty-state" }, [
|
|
6007
|
-
|
|
6008
|
-
|
|
5991
|
+
(_openBlock(), _createElementBlock("svg", {
|
|
5992
|
+
class: "trash-empty-svg",
|
|
5993
|
+
viewBox: "0 0 64 64",
|
|
5994
|
+
fill: "none",
|
|
5995
|
+
stroke: "currentColor",
|
|
5996
|
+
"stroke-width": "1.2"
|
|
5997
|
+
}, [
|
|
5998
|
+
_createElementVNode("path", { d: "M20 22l4 32h16l4-32" }),
|
|
5999
|
+
_createElementVNode("path", { d: "M14 22h36" }),
|
|
6000
|
+
_createElementVNode("path", { d: "M24 22v-4a4 4 0 014-4h8a4 4 0 014 4v4" }),
|
|
6001
|
+
_createElementVNode("path", {
|
|
6002
|
+
d: "M28 30v16M36 30v16",
|
|
6003
|
+
"stroke-width": "1.6",
|
|
6004
|
+
"stroke-linecap": "round"
|
|
6005
|
+
})
|
|
6006
|
+
])),
|
|
6007
|
+
_createElementVNode("div", { class: "trash-empty-title" }, _toDisplayString(_ctx.t('settings.trash.empty')), 1 /* TEXT */),
|
|
6008
|
+
_createElementVNode("div", { class: "trash-empty-hint" }, _toDisplayString(_ctx.t('settings.trash.emptyHint', { days: _ctx.sessionTrashRetentionDays })), 1 /* TEXT */)
|
|
6009
6009
|
])
|
|
6010
6010
|
], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
|
|
6011
|
-
: (_ctx.getSessionTrashViewState() === '
|
|
6011
|
+
: (_ctx.getSessionTrashViewState() === 'loading')
|
|
6012
6012
|
? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [
|
|
6013
|
-
_createCommentVNode("
|
|
6013
|
+
_createCommentVNode(" Loading state "),
|
|
6014
6014
|
_createElementVNode("div", { class: "trash-empty-state" }, [
|
|
6015
|
-
(
|
|
6016
|
-
|
|
6017
|
-
viewBox: "0 0 64 64",
|
|
6018
|
-
fill: "none",
|
|
6019
|
-
stroke: "currentColor",
|
|
6020
|
-
"stroke-width": "1.2"
|
|
6021
|
-
}, [
|
|
6022
|
-
_createElementVNode("circle", {
|
|
6023
|
-
cx: "32",
|
|
6024
|
-
cy: "32",
|
|
6025
|
-
r: "22"
|
|
6026
|
-
}),
|
|
6027
|
-
_createElementVNode("path", {
|
|
6028
|
-
d: "M32 20v16M32 44v2",
|
|
6029
|
-
"stroke-width": "2",
|
|
6030
|
-
"stroke-linecap": "round"
|
|
6031
|
-
})
|
|
6032
|
-
])),
|
|
6033
|
-
_createElementVNode("div", { class: "trash-empty-title" }, _toDisplayString(_ctx.t('settings.trash.retry')), 1 /* TEXT */),
|
|
6034
|
-
_createElementVNode("button", {
|
|
6035
|
-
class: "btn-tool",
|
|
6036
|
-
onClick: $event => (_ctx.loadSessionTrash({ forceRefresh: true }))
|
|
6037
|
-
}, _toDisplayString(_ctx.t('common.retry')), 9 /* TEXT, PROPS */, ["onClick"])
|
|
6015
|
+
_createElementVNode("div", { class: "trash-spinner" }),
|
|
6016
|
+
_createElementVNode("div", { class: "trash-empty-title" }, _toDisplayString(_ctx.t('settings.trash.loading')), 1 /* TEXT */)
|
|
6038
6017
|
])
|
|
6039
6018
|
], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
|
|
6040
|
-
: (
|
|
6041
|
-
|
|
6042
|
-
|
|
6043
|
-
_createElementVNode("div", { class: "trash-
|
|
6044
|
-
|
|
6045
|
-
|
|
6046
|
-
|
|
6047
|
-
|
|
6048
|
-
|
|
6049
|
-
|
|
6050
|
-
onClick: $event => (_ctx.loadSessionTrash({ forceRefresh: true })),
|
|
6051
|
-
disabled: _ctx.sessionTrashLoading,
|
|
6052
|
-
"aria-label": _ctx.t('sessions.refresh'),
|
|
6053
|
-
title: _ctx.t('sessions.refresh')
|
|
6019
|
+
: (_ctx.getSessionTrashViewState() === 'retry')
|
|
6020
|
+
? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [
|
|
6021
|
+
_createCommentVNode(" Error state "),
|
|
6022
|
+
_createElementVNode("div", { class: "trash-empty-state" }, [
|
|
6023
|
+
(_openBlock(), _createElementBlock("svg", {
|
|
6024
|
+
class: "trash-empty-svg",
|
|
6025
|
+
viewBox: "0 0 64 64",
|
|
6026
|
+
fill: "none",
|
|
6027
|
+
stroke: "currentColor",
|
|
6028
|
+
"stroke-width": "1.2"
|
|
6054
6029
|
}, [
|
|
6055
|
-
(
|
|
6056
|
-
|
|
6057
|
-
|
|
6058
|
-
|
|
6030
|
+
_createElementVNode("circle", {
|
|
6031
|
+
cx: "32",
|
|
6032
|
+
cy: "32",
|
|
6033
|
+
r: "22"
|
|
6034
|
+
}),
|
|
6035
|
+
_createElementVNode("path", {
|
|
6036
|
+
d: "M32 20v16M32 44v2",
|
|
6059
6037
|
"stroke-width": "2",
|
|
6060
|
-
|
|
6061
|
-
}
|
|
6062
|
-
|
|
6063
|
-
|
|
6064
|
-
], 8 /* PROPS */, ["onClick", "disabled", "aria-label", "title"]),
|
|
6038
|
+
"stroke-linecap": "round"
|
|
6039
|
+
})
|
|
6040
|
+
])),
|
|
6041
|
+
_createElementVNode("div", { class: "trash-empty-title" }, _toDisplayString(_ctx.t('settings.trash.retry')), 1 /* TEXT */),
|
|
6065
6042
|
_createElementVNode("button", {
|
|
6066
|
-
class: "btn-
|
|
6067
|
-
onClick: _ctx.
|
|
6068
|
-
|
|
6069
|
-
}, _toDisplayString(_ctx.sessionTrashClearing ? _ctx.t('settings.trash.clearing') : _ctx.t('settings.trash.clearShort')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
6043
|
+
class: "btn-tool",
|
|
6044
|
+
onClick: $event => (_ctx.loadSessionTrash({ forceRefresh: true }))
|
|
6045
|
+
}, _toDisplayString(_ctx.t('common.retry')), 9 /* TEXT, PROPS */, ["onClick"])
|
|
6070
6046
|
])
|
|
6071
|
-
])
|
|
6072
|
-
|
|
6073
|
-
(
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
class: "trash-
|
|
6077
|
-
|
|
6078
|
-
|
|
6079
|
-
|
|
6080
|
-
|
|
6081
|
-
|
|
6082
|
-
|
|
6083
|
-
|
|
6084
|
-
|
|
6085
|
-
|
|
6086
|
-
|
|
6087
|
-
|
|
6088
|
-
|
|
6089
|
-
|
|
6090
|
-
|
|
6091
|
-
|
|
6092
|
-
|
|
6093
|
-
|
|
6094
|
-
|
|
6095
|
-
|
|
6096
|
-
|
|
6097
|
-
|
|
6098
|
-
|
|
6099
|
-
|
|
6100
|
-
|
|
6101
|
-
|
|
6102
|
-
|
|
6103
|
-
|
|
6104
|
-
|
|
6105
|
-
|
|
6106
|
-
|
|
6107
|
-
|
|
6047
|
+
], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
|
|
6048
|
+
: (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [
|
|
6049
|
+
_createCommentVNode(" List state "),
|
|
6050
|
+
_createElementVNode("div", { class: "trash-toolbar" }, [
|
|
6051
|
+
_createElementVNode("div", { class: "trash-toolbar-left" }, [
|
|
6052
|
+
_createElementVNode("span", { class: "trash-toolbar-count" }, _toDisplayString(_ctx.t('settings.trash.count', { count: _ctx.sessionTrashCount })), 1 /* TEXT */),
|
|
6053
|
+
_createElementVNode("span", { class: "trash-toolbar-retention" }, _toDisplayString(_ctx.t('settings.trash.retentionShort', { days: _ctx.sessionTrashRetentionDays })), 1 /* TEXT */)
|
|
6054
|
+
]),
|
|
6055
|
+
_createElementVNode("div", { class: "trash-toolbar-right" }, [
|
|
6056
|
+
_createElementVNode("button", {
|
|
6057
|
+
class: "btn-mini",
|
|
6058
|
+
onClick: $event => (_ctx.loadSessionTrash({ forceRefresh: true })),
|
|
6059
|
+
disabled: _ctx.sessionTrashLoading,
|
|
6060
|
+
"aria-label": _ctx.t('sessions.refresh'),
|
|
6061
|
+
title: _ctx.t('sessions.refresh')
|
|
6062
|
+
}, [
|
|
6063
|
+
(_openBlock(), _createElementBlock("svg", {
|
|
6064
|
+
viewBox: "0 0 24 24",
|
|
6065
|
+
fill: "none",
|
|
6066
|
+
stroke: "currentColor",
|
|
6067
|
+
"stroke-width": "2",
|
|
6068
|
+
class: "btn-icon-sm"
|
|
6069
|
+
}, [
|
|
6070
|
+
_createElementVNode("path", { d: "M21 2v6h-6M3 12a9 9 0 0115-6.7L21 8M3 22v-6h6M21 12a9 9 0 01-15 6.7L3 16" })
|
|
6071
|
+
]))
|
|
6072
|
+
], 8 /* PROPS */, ["onClick", "disabled", "aria-label", "title"]),
|
|
6073
|
+
_createElementVNode("button", {
|
|
6074
|
+
class: "btn-mini delete",
|
|
6075
|
+
onClick: _ctx.clearSessionTrash,
|
|
6076
|
+
disabled: _ctx.sessionTrashClearing || _ctx.sessionTrashLoading || !(Number(_ctx.sessionTrashCount) > 0)
|
|
6077
|
+
}, _toDisplayString(_ctx.sessionTrashClearing ? _ctx.t('settings.trash.clearing') : _ctx.t('settings.trash.clearShort')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
6078
|
+
])
|
|
6079
|
+
]),
|
|
6080
|
+
_createElementVNode("div", { class: "trash-list" }, [
|
|
6081
|
+
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.visibleSessionTrashItems, (item) => {
|
|
6082
|
+
return (_openBlock(), _createElementBlock("div", {
|
|
6083
|
+
key: item.trashId,
|
|
6084
|
+
class: "trash-item"
|
|
6085
|
+
}, [
|
|
6086
|
+
_createElementVNode("div", { class: "trash-item-body" }, [
|
|
6087
|
+
_createElementVNode("div", { class: "trash-item-main" }, [
|
|
6088
|
+
_createElementVNode("div", { class: "trash-item-title" }, _toDisplayString(item.title || item.sessionId), 1 /* TEXT */),
|
|
6089
|
+
_createElementVNode("div", { class: "trash-item-meta" }, [
|
|
6090
|
+
_createElementVNode("span", {
|
|
6091
|
+
class: "session-source",
|
|
6092
|
+
"data-source": item.source
|
|
6093
|
+
}, _toDisplayString(item.sourceLabel), 9 /* TEXT, PROPS */, ["data-source"]),
|
|
6094
|
+
_createElementVNode("span", { class: "trash-item-time" }, _toDisplayString(item.deletedAt || item.updatedAt || _ctx.t('sessions.unknownTime')), 1 /* TEXT */),
|
|
6095
|
+
(item.cwd)
|
|
6096
|
+
? (_openBlock(), _createElementBlock("span", {
|
|
6097
|
+
key: 0,
|
|
6098
|
+
class: "trash-item-cwd"
|
|
6099
|
+
}, _toDisplayString(item.cwd), 1 /* TEXT */))
|
|
6100
|
+
: _createCommentVNode("v-if", true)
|
|
6101
|
+
])
|
|
6102
|
+
]),
|
|
6103
|
+
_createElementVNode("div", { class: "trash-item-actions" }, [
|
|
6104
|
+
_createElementVNode("button", {
|
|
6105
|
+
class: "trash-action-btn restore",
|
|
6106
|
+
onClick: $event => (_ctx.restoreSessionTrash(item)),
|
|
6107
|
+
disabled: _ctx.sessionTrashLoading || _ctx.sessionTrashClearing || _ctx.isSessionTrashActionBusy(item),
|
|
6108
|
+
"aria-label": _ctx.sessionTrashRestoring[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.restoring') : _ctx.t('settings.trash.restore'),
|
|
6109
|
+
title: _ctx.sessionTrashRestoring[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.restoring') : _ctx.t('settings.trash.restore')
|
|
6108
6110
|
}, [
|
|
6109
|
-
|
|
6110
|
-
|
|
6111
|
-
|
|
6112
|
-
|
|
6113
|
-
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
|
|
6120
|
-
|
|
6121
|
-
|
|
6122
|
-
|
|
6123
|
-
|
|
6124
|
-
|
|
6111
|
+
(_openBlock(), _createElementBlock("svg", {
|
|
6112
|
+
viewBox: "0 0 24 24",
|
|
6113
|
+
fill: "none",
|
|
6114
|
+
stroke: "currentColor",
|
|
6115
|
+
"stroke-width": "2"
|
|
6116
|
+
}, [
|
|
6117
|
+
_createElementVNode("path", { d: "M3 12a9 9 0 119 9" }),
|
|
6118
|
+
_createElementVNode("path", { d: "M3 4v6h6" })
|
|
6119
|
+
]))
|
|
6120
|
+
], 8 /* PROPS */, ["onClick", "disabled", "aria-label", "title"]),
|
|
6121
|
+
_createElementVNode("button", {
|
|
6122
|
+
class: "trash-action-btn delete",
|
|
6123
|
+
onClick: $event => (_ctx.purgeSessionTrash(item)),
|
|
6124
|
+
disabled: _ctx.sessionTrashLoading || _ctx.sessionTrashClearing || _ctx.isSessionTrashActionBusy(item),
|
|
6125
|
+
"aria-label": _ctx.sessionTrashPurging[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.purging') : _ctx.t('settings.trash.purge'),
|
|
6126
|
+
title: _ctx.sessionTrashPurging[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.purging') : _ctx.t('settings.trash.purge')
|
|
6125
6127
|
}, [
|
|
6126
|
-
|
|
6127
|
-
|
|
6128
|
-
|
|
6128
|
+
(_openBlock(), _createElementBlock("svg", {
|
|
6129
|
+
viewBox: "0 0 24 24",
|
|
6130
|
+
fill: "none",
|
|
6131
|
+
stroke: "currentColor",
|
|
6132
|
+
"stroke-width": "2"
|
|
6133
|
+
}, [
|
|
6134
|
+
_createElementVNode("path", { d: "M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6M10 11v6M14 11v6" })
|
|
6135
|
+
]))
|
|
6136
|
+
], 8 /* PROPS */, ["onClick", "disabled", "aria-label", "title"])
|
|
6137
|
+
])
|
|
6129
6138
|
])
|
|
6130
|
-
])
|
|
6131
|
-
]))
|
|
6132
|
-
}), 128 /* KEYED_FRAGMENT */)),
|
|
6133
|
-
(_ctx.sessionTrashHasMoreItems)
|
|
6134
|
-
? (_openBlock(), _createElementBlock("div", {
|
|
6135
|
-
key: 0,
|
|
6136
|
-
class: "trash-list-footer"
|
|
6137
|
-
}, [
|
|
6138
|
-
_createElementVNode("button", {
|
|
6139
|
-
class: "btn-tool btn-tool-compact",
|
|
6140
|
-
onClick: _ctx.loadMoreSessionTrashItems,
|
|
6141
|
-
disabled: _ctx.sessionTrashLoading || _ctx.sessionTrashClearing
|
|
6142
|
-
}, _toDisplayString(_ctx.t('settings.trash.loadMoreItems', { count: _ctx.sessionTrashHiddenCount })), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
6143
6139
|
]))
|
|
6144
|
-
|
|
6145
|
-
|
|
6146
|
-
|
|
6140
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
6141
|
+
(_ctx.sessionTrashHasMoreItems)
|
|
6142
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
6143
|
+
key: 0,
|
|
6144
|
+
class: "trash-list-footer"
|
|
6145
|
+
}, [
|
|
6146
|
+
_createElementVNode("button", {
|
|
6147
|
+
class: "btn-tool btn-tool-compact",
|
|
6148
|
+
onClick: _ctx.loadMoreSessionTrashItems,
|
|
6149
|
+
disabled: _ctx.sessionTrashLoading || _ctx.sessionTrashClearing
|
|
6150
|
+
}, _toDisplayString(_ctx.t('settings.trash.loadMoreItems', { count: _ctx.sessionTrashHiddenCount })), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
|
|
6151
|
+
]))
|
|
6152
|
+
: _createCommentVNode("v-if", true)
|
|
6153
|
+
])
|
|
6154
|
+
], 64 /* STABLE_FRAGMENT */))
|
|
6147
6155
|
]))
|
|
6148
6156
|
: _createCommentVNode("v-if", true)
|
|
6149
6157
|
], 512 /* NEED_PATCH */), [
|
|
@@ -165,6 +165,15 @@ export function switchMainTab(tab) {
|
|
|
165
165
|
) {
|
|
166
166
|
this.prepareSessionTabRender();
|
|
167
167
|
}
|
|
168
|
+
const enteringTrashTab = nextTab === 'trash';
|
|
169
|
+
const shouldLoadTrashListOnTrashEnter = enteringTrashTab
|
|
170
|
+
&& typeof this.loadSessionTrash === 'function'
|
|
171
|
+
&& this.sessionTrashEnabled !== false;
|
|
172
|
+
if (shouldLoadTrashListOnTrashEnter) {
|
|
173
|
+
this.loadSessionTrash({
|
|
174
|
+
forceRefresh: !!this.sessionTrashLoadedOnce
|
|
175
|
+
});
|
|
176
|
+
}
|
|
168
177
|
const shouldLoadTrashListOnSettingsEnter = nextTab === 'settings'
|
|
169
178
|
&& this.settingsTab === 'data'
|
|
170
179
|
&& typeof this.loadSessionTrash === 'function';
|
|
@@ -366,6 +366,14 @@ textarea:focus-visible {
|
|
|
366
366
|
height: 44px;
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
+
.btn-session-export.has-label,
|
|
370
|
+
.btn-session-open.has-label,
|
|
371
|
+
.btn-session-refresh.has-label,
|
|
372
|
+
.btn-session-delete.has-label {
|
|
373
|
+
width: auto;
|
|
374
|
+
height: 44px;
|
|
375
|
+
padding: 0 14px;
|
|
376
|
+
}
|
|
369
377
|
.session-link-group .btn-session-open {
|
|
370
378
|
width: 44px;
|
|
371
379
|
height: 44px;
|
|
@@ -585,6 +593,10 @@ textarea:focus-visible {
|
|
|
585
593
|
height: 40px;
|
|
586
594
|
}
|
|
587
595
|
|
|
596
|
+
.session-actions .session-action-label {
|
|
597
|
+
display: none;
|
|
598
|
+
}
|
|
599
|
+
|
|
588
600
|
.session-preview-body {
|
|
589
601
|
padding: 12px;
|
|
590
602
|
}
|