codexmate 0.1.5 → 0.1.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/package.json +1 -1
- package/web-ui/modules/app.methods.session-actions.mjs +1 -1
- package/web-ui/partials/index/panel-sessions.html +8 -12
- package/web-ui/res/web-ui-render.precompiled.js +12 -29
- package/web-ui/styles/responsive.css +12 -0
- package/web-ui/styles/sessions-toolbar-trash.css +23 -1
package/package.json
CHANGED
|
@@ -225,7 +225,7 @@ export function createSessionActionMethods(options = {}) {
|
|
|
225
225
|
isDeleteAvailable(session) {
|
|
226
226
|
if (!session) return false;
|
|
227
227
|
const source = String(session.source || '').trim().toLowerCase();
|
|
228
|
-
if (source !== 'codex' && source !== 'claude') return false;
|
|
228
|
+
if (source !== 'codex' && source !== 'claude' && source !== 'pi') return false;
|
|
229
229
|
const sessionId = typeof session.sessionId === 'string' ? session.sessionId.trim() : '';
|
|
230
230
|
const filePath = typeof session.filePath === 'string' ? session.filePath.trim() : '';
|
|
231
231
|
return !!sessionId || !!filePath;
|
|
@@ -220,35 +220,30 @@
|
|
|
220
220
|
</div>
|
|
221
221
|
</div>
|
|
222
222
|
<div class="session-actions">
|
|
223
|
-
<button class="btn-session-refresh" @click="loadActiveSessionDetail" :disabled="sessionDetailLoading || !activeSession"
|
|
223
|
+
<button class="btn-session-refresh has-label" @click="loadActiveSessionDetail" :disabled="sessionDetailLoading || !activeSession"
|
|
224
224
|
:title="sessionDetailLoading ? t('sessions.preview.loading') : t('sessions.preview.refresh')"
|
|
225
225
|
:aria-label="sessionDetailLoading ? t('sessions.preview.loading') : t('sessions.preview.refresh')">
|
|
226
226
|
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M2.5 8a5.5 5.5 0 0 1 9.4-3.8"/><path d="M13.5 8a5.5 5.5 0 0 1-9.4 3.8"/><polyline points="2.5 2 2.5 5 5.5 5"/><polyline points="13.5 14 13.5 11 10.5 11"/></svg>
|
|
227
|
+
<span class="session-action-label">{{ t('sessions.preview.refresh') }}</span>
|
|
227
228
|
</button>
|
|
228
229
|
<button
|
|
229
230
|
v-if="isDeleteAvailable(activeSession)"
|
|
230
|
-
class="btn-session-delete"
|
|
231
|
+
class="btn-session-delete has-label"
|
|
231
232
|
@click="deleteSession(activeSession)"
|
|
232
233
|
:disabled="!activeSession || sessionsLoading || sessionDeleting[getSessionExportKey(activeSession)]"
|
|
233
234
|
:title="(activeSession && sessionDeleting[getSessionExportKey(activeSession)]) ? (sessionTrashEnabled === false ? t('sessions.preview.deleting') : t('sessions.preview.moving')) : (sessionTrashEnabled === false ? t('sessions.preview.deleteHard') : t('sessions.preview.moveToTrash'))"
|
|
234
235
|
:aria-label="(activeSession && sessionDeleting[getSessionExportKey(activeSession)]) ? (sessionTrashEnabled === false ? t('sessions.preview.deleting') : t('sessions.preview.moving')) : (sessionTrashEnabled === false ? t('sessions.preview.deleteHard') : t('sessions.preview.moveToTrash'))">
|
|
235
236
|
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 4 4 4 13 4"/><path d="M5.5 4V2.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1V4"/><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"/></svg>
|
|
237
|
+
<span class="session-action-label">{{ (activeSession && sessionDeleting[getSessionExportKey(activeSession)]) ? (sessionTrashEnabled === false ? t('sessions.preview.deleting') : t('sessions.preview.moving')) : (sessionTrashEnabled === false ? t('sessions.preview.deleteHard') : t('sessions.preview.moveToTrash')) }}</span>
|
|
236
238
|
</button>
|
|
237
239
|
<button
|
|
238
|
-
class="btn-session-export"
|
|
240
|
+
class="btn-session-export has-label"
|
|
239
241
|
@click="exportSession(activeSession)"
|
|
240
242
|
:disabled="!activeSession || sessionExporting[getSessionExportKey(activeSession)]"
|
|
241
243
|
:title="(activeSession && sessionExporting[getSessionExportKey(activeSession)]) ? t('sessions.preview.exporting') : t('sessions.preview.export')"
|
|
242
244
|
:aria-label="(activeSession && sessionExporting[getSessionExportKey(activeSession)]) ? t('sessions.preview.exporting') : t('sessions.preview.export')">
|
|
243
245
|
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M8 2v8"/><polyline points="4 7 8 10.5 12 7"/><path d="M2.5 12v1.5a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V12"/></svg>
|
|
244
|
-
|
|
245
|
-
<button
|
|
246
|
-
class="btn-session-open session-brief-copy"
|
|
247
|
-
@click="copySessionWorkspaceBrief"
|
|
248
|
-
:disabled="!activeSessionWorkspaceSummary.available"
|
|
249
|
-
:title="t('sessions.workspace.copy')"
|
|
250
|
-
:aria-label="t('sessions.workspace.copy')">
|
|
251
|
-
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 2.5h6.5L13 5v8.5H4z"/><path d="M10.5 2.5V5H13"/><path d="M6 8h5"/><path d="M6 10.5h5"/></svg>
|
|
246
|
+
<span class="session-action-label">{{ (activeSession && sessionExporting[getSessionExportKey(activeSession)]) ? t('sessions.preview.exporting') : t('sessions.preview.export') }}</span>
|
|
252
247
|
</button>
|
|
253
248
|
<div class="session-link-group">
|
|
254
249
|
<button
|
|
@@ -269,12 +264,13 @@
|
|
|
269
264
|
</button>
|
|
270
265
|
</div>
|
|
271
266
|
<button
|
|
272
|
-
class="btn-session-open"
|
|
267
|
+
class="btn-session-open has-label"
|
|
273
268
|
@click="copySessionPath(activeSession)"
|
|
274
269
|
:disabled="!activeSession || !getSessionFilePath(activeSession)"
|
|
275
270
|
:title="t('sessions.preview.copyPath')"
|
|
276
271
|
:aria-label="t('sessions.preview.copyPath')">
|
|
277
272
|
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><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"/></svg>
|
|
273
|
+
<span class="session-action-label">{{ t('sessions.preview.copyPath') }}</span>
|
|
278
274
|
</button>
|
|
279
275
|
</div>
|
|
280
276
|
</div>
|
|
@@ -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 */),
|
|
@@ -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
|
}
|
|
@@ -544,12 +544,34 @@
|
|
|
544
544
|
transform: none;
|
|
545
545
|
}
|
|
546
546
|
|
|
547
|
+
.btn-session-export.has-label,
|
|
548
|
+
.btn-session-open.has-label,
|
|
549
|
+
.btn-session-clone.has-label,
|
|
550
|
+
.btn-session-refresh.has-label,
|
|
551
|
+
.btn-session-delete.has-label {
|
|
552
|
+
width: auto;
|
|
553
|
+
min-width: 32px;
|
|
554
|
+
height: 32px;
|
|
555
|
+
padding: 0 var(--spacing-sm);
|
|
556
|
+
gap: 6px;
|
|
557
|
+
font-size: var(--font-size-caption);
|
|
558
|
+
font-weight: var(--font-weight-secondary);
|
|
559
|
+
line-height: 1;
|
|
560
|
+
white-space: nowrap;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.session-action-label {
|
|
564
|
+
font-size: inherit;
|
|
565
|
+
line-height: 1;
|
|
566
|
+
letter-spacing: 0.01em;
|
|
567
|
+
white-space: nowrap;
|
|
568
|
+
}
|
|
569
|
+
|
|
547
570
|
.btn-icon-sm {
|
|
548
571
|
width: 16px;
|
|
549
572
|
height: 16px;
|
|
550
573
|
flex-shrink: 0;
|
|
551
574
|
}
|
|
552
|
-
|
|
553
575
|
/* ===== Session match badges ===== */
|
|
554
576
|
.session-match-badge {
|
|
555
577
|
display: inline-flex;
|