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.
@@ -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
- ], 8 /* PROPS */, ["onClick", "disabled", "title", "aria-label"]),
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(" Empty state "),
5979
- (_ctx.getSessionTrashViewState() === 'empty')
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: "M28 30v16M36 30v16",
5996
- "stroke-width": "1.6",
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.empty')), 1 /* TEXT */),
6001
- _createElementVNode("div", { class: "trash-empty-hint" }, _toDisplayString(_ctx.t('settings.trash.emptyHint', { days: _ctx.sessionTrashRetentionDays })), 1 /* TEXT */)
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() === 'loading')
5987
+ : (_ctx.getSessionTrashViewState() === 'empty')
6004
5988
  ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [
6005
- _createCommentVNode(" Loading state "),
5989
+ _createCommentVNode(" Empty state "),
6006
5990
  _createElementVNode("div", { class: "trash-empty-state" }, [
6007
- _createElementVNode("div", { class: "trash-spinner" }),
6008
- _createElementVNode("div", { class: "trash-empty-title" }, _toDisplayString(_ctx.t('settings.trash.loading')), 1 /* TEXT */)
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() === 'retry')
6011
+ : (_ctx.getSessionTrashViewState() === 'loading')
6012
6012
  ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [
6013
- _createCommentVNode(" Error state "),
6013
+ _createCommentVNode(" Loading state "),
6014
6014
  _createElementVNode("div", { class: "trash-empty-state" }, [
6015
- (_openBlock(), _createElementBlock("svg", {
6016
- class: "trash-empty-svg",
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
- : (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [
6041
- _createCommentVNode(" List state "),
6042
- _createElementVNode("div", { class: "trash-toolbar" }, [
6043
- _createElementVNode("div", { class: "trash-toolbar-left" }, [
6044
- _createElementVNode("span", { class: "trash-toolbar-count" }, _toDisplayString(_ctx.t('settings.trash.count', { count: _ctx.sessionTrashCount })), 1 /* TEXT */),
6045
- _createElementVNode("span", { class: "trash-toolbar-retention" }, _toDisplayString(_ctx.t('settings.trash.retentionShort', { days: _ctx.sessionTrashRetentionDays })), 1 /* TEXT */)
6046
- ]),
6047
- _createElementVNode("div", { class: "trash-toolbar-right" }, [
6048
- _createElementVNode("button", {
6049
- class: "btn-mini",
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
- (_openBlock(), _createElementBlock("svg", {
6056
- viewBox: "0 0 24 24",
6057
- fill: "none",
6058
- stroke: "currentColor",
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
- class: "btn-icon-sm"
6061
- }, [
6062
- _createElementVNode("path", { d: "M21 2v6h-6M3 12a9 9 0 0115-6.7L21 8M3 22v-6h6M21 12a9 9 0 01-15 6.7L3 16" })
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-mini delete",
6067
- onClick: _ctx.clearSessionTrash,
6068
- disabled: _ctx.sessionTrashClearing || _ctx.sessionTrashLoading || !(Number(_ctx.sessionTrashCount) > 0)
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
- _createElementVNode("div", { class: "trash-list" }, [
6073
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.visibleSessionTrashItems, (item) => {
6074
- return (_openBlock(), _createElementBlock("div", {
6075
- key: item.trashId,
6076
- class: "trash-item"
6077
- }, [
6078
- _createElementVNode("div", { class: "trash-item-body" }, [
6079
- _createElementVNode("div", { class: "trash-item-main" }, [
6080
- _createElementVNode("div", { class: "trash-item-title" }, _toDisplayString(item.title || item.sessionId), 1 /* TEXT */),
6081
- _createElementVNode("div", { class: "trash-item-meta" }, [
6082
- _createElementVNode("span", {
6083
- class: "session-source",
6084
- "data-source": item.source
6085
- }, _toDisplayString(item.sourceLabel), 9 /* TEXT, PROPS */, ["data-source"]),
6086
- _createElementVNode("span", { class: "trash-item-time" }, _toDisplayString(item.deletedAt || item.updatedAt || _ctx.t('sessions.unknownTime')), 1 /* TEXT */),
6087
- (item.cwd)
6088
- ? (_openBlock(), _createElementBlock("span", {
6089
- key: 0,
6090
- class: "trash-item-cwd"
6091
- }, _toDisplayString(item.cwd), 1 /* TEXT */))
6092
- : _createCommentVNode("v-if", true)
6093
- ])
6094
- ]),
6095
- _createElementVNode("div", { class: "trash-item-actions" }, [
6096
- _createElementVNode("button", {
6097
- class: "trash-action-btn restore",
6098
- onClick: $event => (_ctx.restoreSessionTrash(item)),
6099
- disabled: _ctx.sessionTrashLoading || _ctx.sessionTrashClearing || _ctx.isSessionTrashActionBusy(item),
6100
- "aria-label": _ctx.sessionTrashRestoring[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.restoring') : _ctx.t('settings.trash.restore'),
6101
- title: _ctx.sessionTrashRestoring[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.restoring') : _ctx.t('settings.trash.restore')
6102
- }, [
6103
- (_openBlock(), _createElementBlock("svg", {
6104
- viewBox: "0 0 24 24",
6105
- fill: "none",
6106
- stroke: "currentColor",
6107
- "stroke-width": "2"
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
- _createElementVNode("path", { d: "M3 12a9 9 0 119 9" }),
6110
- _createElementVNode("path", { d: "M3 4v6h6" })
6111
- ]))
6112
- ], 8 /* PROPS */, ["onClick", "disabled", "aria-label", "title"]),
6113
- _createElementVNode("button", {
6114
- class: "trash-action-btn delete",
6115
- onClick: $event => (_ctx.purgeSessionTrash(item)),
6116
- disabled: _ctx.sessionTrashLoading || _ctx.sessionTrashClearing || _ctx.isSessionTrashActionBusy(item),
6117
- "aria-label": _ctx.sessionTrashPurging[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.purging') : _ctx.t('settings.trash.purge'),
6118
- title: _ctx.sessionTrashPurging[_ctx.getSessionTrashActionKey(item)] ? _ctx.t('settings.trash.purging') : _ctx.t('settings.trash.purge')
6119
- }, [
6120
- (_openBlock(), _createElementBlock("svg", {
6121
- viewBox: "0 0 24 24",
6122
- fill: "none",
6123
- stroke: "currentColor",
6124
- "stroke-width": "2"
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
- _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" })
6127
- ]))
6128
- ], 8 /* PROPS */, ["onClick", "disabled", "aria-label", "title"])
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
- : _createCommentVNode("v-if", true)
6145
- ])
6146
- ], 64 /* STABLE_FRAGMENT */))
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
  }