Skip to content

Commit 4439dc9

Browse files
committed
feat: Add click-to-copy alias and bump to 2.2.1
- Add clipboard copy with "Copied!" tooltip on full alias in web UI - Bump all crates from 2.2.0 to 2.2.1 - Close beads theme issue (aliasman-847), add clipboard issue (aliasman-ixa)
1 parent dc03590 commit 4439dc9

7 files changed

Lines changed: 41 additions & 8 deletions

File tree

.beads/issues.jsonl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
{"id":"aliasman-847.6","title":"Favicon support","status":"closed","priority":2,"issue_type":"task","created_at":"2026-03-22T04:35:52.633755Z","created_by":"pjl","updated_at":"2026-03-22T16:43:28.327921Z","closed_at":"2026-03-22T16:43:28.327597Z","close_reason":"Add favicon, dark-mode logo, and default branding assets","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"aliasman-847.6","depends_on_id":"aliasman-847","type":"parent-child","created_at":"2026-03-22T04:35:52.633755Z","created_by":"pjl","metadata":"{}","thread_id":""}]}
1010
{"id":"aliasman-dev","title":"Implement sync and sync-from-email CLI commands","status":"open","priority":2,"issue_type":"feature","created_at":"2026-03-22T21:48:25.714280Z","created_by":"pjl","updated_at":"2026-03-22T21:48:25.714280Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["cli","core"]}
1111
{"id":"aliasman-dpx","title":"Auth types and user store in core","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-21T19:13:49.679066Z","created_by":"pjl","updated_at":"2026-03-21T22:37:47.126085Z","closed_at":"2026-03-21T22:37:47.125914Z","close_reason":"Add auth module with UserStore trait and SQLite/Postgres implementations","source_repo":".","compaction_level":0,"original_size":0}
12-
{"id":"aliasman-ixa","title":"Have clicking on the full alias in the web ui put it on the clipboard","status":"open","priority":1,"issue_type":"feature","created_at":"2026-03-30T02:55:51.524884Z","created_by":"pjl","updated_at":"2026-03-30T02:55:51.524884Z","source_repo":".","compaction_level":0,"original_size":0}
12+
{"id":"aliasman-ixa","title":"Have clicking on the full alias in the web ui put it on the clipboard","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-03-30T02:55:51.524884Z","created_by":"pjl","updated_at":"2026-03-30T03:02:47.024444Z","closed_at":"2026-03-30T03:02:47.024066Z","close_reason":"Added click-to-copy on full alias in web UI using Clipboard API with CSS tooltip feedback","source_repo":".","compaction_level":0,"original_size":0}
1313
{"id":"aliasman-k5x","title":"Wire auth into existing routes","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-21T19:14:36.597816Z","created_by":"pjl","updated_at":"2026-03-22T01:57:54.939105Z","closed_at":"2026-03-22T01:57:54.938697Z","close_reason":"Add per-domain permission checks to web mutation handlers","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"aliasman-k5x","depends_on_id":"aliasman-5dn","type":"blocks","created_at":"2026-03-21T19:16:47.492776Z","created_by":"pjl","metadata":"{}","thread_id":""}]}
1414
{"id":"aliasman-mvn","title":"CLI user management commands","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-21T19:14:06.059543Z","created_by":"pjl","updated_at":"2026-03-21T22:49:11.773901Z","closed_at":"2026-03-21T22:49:11.773714Z","close_reason":"Add CLI user management commands for auth administration","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"aliasman-mvn","depends_on_id":"aliasman-dpx","type":"blocks","created_at":"2026-03-21T19:16:24.325655Z","created_by":"pjl","metadata":"{}","thread_id":""}]}
1515
{"id":"aliasman-wo4","title":"Web user management UI (superuser only)","status":"closed","priority":0,"issue_type":"task","created_at":"2026-03-21T19:14:49.605051Z","created_by":"pjl","updated_at":"2026-03-22T02:15:26.122461Z","closed_at":"2026-03-22T02:15:26.122079Z","close_reason":"Add web admin UI for user and permission management","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"aliasman-wo4","depends_on_id":"aliasman-k5x","type":"blocks","created_at":"2026-03-21T19:16:57.260156Z","created_by":"pjl","metadata":"{}","thread_id":""}]}

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/aliasman-cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "aliasman-cli"
3-
version = "2.2.0"
3+
version = "2.2.1"
44
edition = "2021"
55

66
[[bin]]

crates/aliasman-core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "aliasman-core"
3-
version = "2.2.0"
3+
version = "2.2.1"
44
edition = "2021"
55

66
[dependencies]

crates/aliasman-web/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "aliasman-web"
3-
version = "2.2.0"
3+
version = "2.2.1"
44
edition = "2021"
55

66
[[bin]]

crates/aliasman-web/templates/base.html

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,33 @@
3535
--color-accent: {{ theme.dark_accent }};
3636
--color-accent-hover: {{ theme.dark_accent_hover }};
3737
}
38+
.copy-alias {
39+
cursor: pointer;
40+
position: relative;
41+
}
42+
.copy-alias:hover {
43+
text-decoration: underline;
44+
text-decoration-style: dotted;
45+
}
46+
.copy-alias.copied::after {
47+
content: 'Copied!';
48+
position: absolute;
49+
left: 50%;
50+
transform: translateX(-50%);
51+
top: -1.75rem;
52+
background: #1f2937;
53+
color: #fff;
54+
font-size: 0.7rem;
55+
padding: 2px 8px;
56+
border-radius: 4px;
57+
white-space: nowrap;
58+
pointer-events: none;
59+
animation: fade-out 1.5s forwards;
60+
}
61+
@keyframes fade-out {
62+
0%, 70% { opacity: 1; }
63+
100% { opacity: 0; }
64+
}
3865
</style>
3966
<script>
4067
(function() {
@@ -95,6 +122,12 @@
95122
document.getElementById('theme-icon-dark').classList.toggle('hidden', isDark);
96123
}
97124
updateThemeIcon();
125+
function copyAlias(el) {
126+
navigator.clipboard.writeText(el.textContent).then(function() {
127+
el.classList.add('copied');
128+
setTimeout(function() { el.classList.remove('copied'); }, 1500);
129+
});
130+
}
98131
</script>
99132
</body>
100133
</html>

crates/aliasman-web/templates/partials/alias_table_rows.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{% for alias in aliases %}
22
<tr class="{% if alias.suspended %}bg-red-50 dark:bg-red-900/20 text-gray-400 dark:text-gray-500{% else %}hover:bg-gray-50 dark:hover:bg-gray-700/50{% endif %}">
3-
<td class="px-4 py-2 text-sm font-mono dark:text-gray-200">{{ alias.full_alias }}</td>
3+
<td class="px-4 py-2 text-sm font-mono dark:text-gray-200"><span class="copy-alias" onclick="copyAlias(this)" title="Click to copy">{{ alias.full_alias }}</span></td>
44
<td class="px-4 py-2 text-sm dark:text-gray-200">{{ alias.email_addresses }}</td>
55
<td class="px-4 py-2 text-sm dark:text-gray-200">{{ alias.description }}</td>
66
<td class="px-4 py-2 text-sm">

0 commit comments

Comments
 (0)