codexmate 0.1.7 → 0.1.9

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.
@@ -103,6 +103,22 @@
103
103
  <button class="btn-tool btn-tool-compact" type="button" @click="clearSessionFilters" :disabled="sessionsLoading">
104
104
  {{ t('common.resetFilters') }}
105
105
  </button>
106
+ <button v-if="!sessionBatchSelectMode" class="btn-tool btn-tool-compact btn-tool-batch" type="button" @click="enterSessionBatchSelectMode" :disabled="sessionsLoading" :title="t('sessions.batch.select')">
107
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="3 6 5 6 21 6"/><path d="M7 6V4a2 2 0 012-2h6a2 2 0 012 2v2M10 11v6M14 11v6"/><path d="M5 6l1 14a2 2 0 002 2h8a2 2 0 002-2l1-14"/></svg>
108
+ <span>{{ t('sessions.batch.select') }}</span>
109
+ </button>
110
+ <template v-else>
111
+ <button class="btn-tool btn-tool-compact" type="button" @click="toggleSelectAllVisibleForBatch" :disabled="sessionsLoading" :title="isAllVisibleBatchSelected() ? t('sessions.batch.unselectAll') : t('sessions.batch.selectAll')">
112
+ {{ isAllVisibleBatchSelected() ? t('sessions.batch.unselectAll') : t('sessions.batch.selectAll') }}
113
+ </button>
114
+ <button class="btn-tool btn-tool-compact btn-tool-batch-delete" type="button" @click="deleteSelectedSessions" :disabled="sessionsLoading || sessionDeletingSelected || getSelectedBatchCount() === 0" :title="getSelectedBatchCount() > 0 ? t('sessions.batch.deleteSelectedN', { count: getSelectedBatchCount() }) : t('sessions.batch.emptySelection')">
115
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="3 6 5 6 21 6"/><path d="M7 6V4a2 2 0 012-2h6a2 2 0 012 2v2M10 11v6M14 11v6"/><path d="M5 6l1 14a2 2 0 002 2h8a2 2 0 002-2l1-14"/></svg>
116
+ <span>{{ sessionDeletingSelected ? t('sessions.batch.deletingSelected') : (getSelectedBatchCount() > 0 ? t('sessions.batch.deleteSelectedN', { count: getSelectedBatchCount() }) : t('sessions.batch.deleteSelected')) }}</span>
117
+ </button>
118
+ <button class="btn-tool btn-tool-compact" type="button" @click="exitSessionBatchSelectMode" :disabled="sessionDeletingSelected" :title="t('sessions.batch.exit')">
119
+ {{ t('sessions.batch.exit') }}
120
+ </button>
121
+ </template>
106
122
  </div>
107
123
  </div>
108
124
  <div v-if="hasActiveSessionFilters()" class="session-filter-chips" :aria-label="t('sessions.filters.copyLink')">
@@ -137,12 +153,14 @@
137
153
  <div
138
154
  v-for="session in visibleSessionsList"
139
155
  :key="session.source + '-' + session.sessionId + '-' + session.filePath"
140
- v-memo="[activeSessionExportKey === getSessionExportKey(session), session.messageCount, session.updatedAt, session.title, session.sourceLabel, session.cwd, isSessionPinned(session), sessionsLoading, session.match && session.match.count]"
156
+ v-memo="[activeSessionExportKey === getSessionExportKey(session), session.messageCount, session.updatedAt, session.title, session.sourceLabel, session.cwd, isSessionPinned(session), sessionsLoading, session.match && session.match.count, sessionBatchSelectMode, isSessionSelectedForBatch(session)]"
141
157
  :class="[
142
158
  'session-item',
143
159
  {
144
160
  active: activeSessionExportKey === getSessionExportKey(session),
145
- pinned: isSessionPinned(session)
161
+ pinned: isSessionPinned(session),
162
+ 'batch-selected': sessionBatchSelectMode && isSessionSelectedForBatch(session),
163
+ 'batch-selectable': sessionBatchSelectMode
146
164
  }
147
165
  ]"
148
166
  @click="selectSession(session)"
@@ -152,6 +170,16 @@
152
170
  role="button"
153
171
  :aria-current="activeSessionExportKey === getSessionExportKey(session) ? 'true' : null">
154
172
  <div class="session-item-header">
173
+ <label v-if="sessionBatchSelectMode" class="session-batch-check" @click.stop :data-session-key="getSessionExportKey(session)">
174
+ <input
175
+ type="checkbox"
176
+ :checked="isSessionSelectedForBatch(session)"
177
+ :disabled="sessionsLoading || sessionDeletingSelected || sessionDeleting[getSessionExportKey(session)] || !isSessionBatchSelectable(session)"
178
+ @change="toggleSessionSelectionForBatch(session)"
179
+ @click.stop
180
+ :aria-label="t('sessions.batch.select')">
181
+ <span class="session-batch-check-mark"></span>
182
+ </label>
155
183
  <div class="session-item-main">
156
184
  <div class="session-item-title">{{ session.title || session.sessionId }}</div>
157
185
  <span class="session-count-badge">{{ session.messageCount == null ? '...' : session.messageCount }}</span>