- Add reckless mode checkbox to auto-approve signing requests - Implement whitelisted apps management page - Reckless mode logic: allow all if whitelist empty, otherwise only whitelisted hosts - Add shouldRecklessModeApprove() in background service worker - Update default avatar to Plebeian Market Account icon - Fix manifest version scripts to strip v prefix for browsers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
73 lines
2.0 KiB
HTML
73 lines
2.0 KiB
HTML
<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->
|
|
<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->
|
|
<div class="custom-header" style="position: sticky; top: 0">
|
|
<span class="text">Identities</span>
|
|
|
|
<button class="button btn btn-primary btn-sm" (click)="onClickNewIdentity()">
|
|
<div class="sam-flex-row gap-h">
|
|
<i class="bi bi-plus-lg"></i>
|
|
<span>New</span>
|
|
</div>
|
|
</button>
|
|
</div>
|
|
|
|
<div class="reckless-mode-row">
|
|
<label class="reckless-label" (click)="onToggleRecklessMode()">
|
|
<input
|
|
type="checkbox"
|
|
[checked]="isRecklessMode"
|
|
(click)="$event.stopPropagation()"
|
|
(change)="onToggleRecklessMode()"
|
|
/>
|
|
<span
|
|
class="reckless-text"
|
|
data-bs-toggle="tooltip"
|
|
data-bs-placement="bottom"
|
|
title="Auto-approve all actions. If whitelist has entries, only those apps are auto-approved."
|
|
>Reckless mode</span>
|
|
</label>
|
|
<button
|
|
class="gear-btn"
|
|
title="Manage whitelisted apps"
|
|
(click)="onClickWhitelistedApps()"
|
|
>
|
|
<i class="bi bi-gear"></i>
|
|
</button>
|
|
</div>
|
|
|
|
@let sessionData = storage.getBrowserSessionHandler().browserSessionData;
|
|
@let identities = sessionData?.identities ?? [];
|
|
|
|
@if(identities.length === 0) {
|
|
<div class="empty-state">
|
|
<span class="sam-text-muted">
|
|
Create your first identity by clicking on the button in the upper right
|
|
corner.
|
|
</span>
|
|
</div>
|
|
}
|
|
|
|
@for(identity of identities; track identity.id) {
|
|
@let isSelected = identity.id === sessionData?.selectedIdentityId;
|
|
<div
|
|
class="identity"
|
|
[class.selected]="isSelected"
|
|
(click)="onClickSelectIdentity(identity.id)"
|
|
>
|
|
<img
|
|
class="avatar"
|
|
[src]="getAvatarUrl(identity)"
|
|
alt=""
|
|
(error)="$any($event.target).src = 'person-fill.svg'"
|
|
/>
|
|
<span class="name">{{ getDisplayName(identity) }}</span>
|
|
<lib-icon-button
|
|
icon="gear"
|
|
title="Identity settings"
|
|
(click)="onClickEditIdentity(identity.id, $event)"
|
|
></lib-icon-button>
|
|
</div>
|
|
}
|
|
|
|
<lib-toast #toast></lib-toast>
|