Normalize journal entry config actions
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
*/
|
||||
import {
|
||||
Siren,
|
||||
MessageSquareWarning,
|
||||
Fingerprint,
|
||||
Globe,
|
||||
BookHeart,
|
||||
@@ -15,10 +14,11 @@ import {
|
||||
Settings
|
||||
} from '@lucide/svelte';
|
||||
import { ae_loc } from '$lib/stores/ae_stores';
|
||||
import type { ae_JournalEntry } from '$lib/types/ae_types';
|
||||
|
||||
interface Props {
|
||||
// The object containing the flags (bindable)
|
||||
obj: any;
|
||||
obj: ae_JournalEntry;
|
||||
|
||||
// Visibility configuration (optional overrides)
|
||||
show_labels?: boolean;
|
||||
@@ -49,9 +49,38 @@ let {
|
||||
container_class = 'flex flex-row flex-wrap gap-1 items-center justify-evenly py-2 border-y border-surface-500/10'
|
||||
}: Props = $props();
|
||||
|
||||
function handle_toggle(prop: string) {
|
||||
obj[prop] = !obj[prop];
|
||||
if (onToggle) onToggle(prop, obj[prop]);
|
||||
function emit_toggle(prop: string, value: boolean) {
|
||||
if (onToggle) onToggle(prop, value);
|
||||
}
|
||||
|
||||
function toggle_alert() {
|
||||
obj.alert = !obj.alert;
|
||||
emit_toggle('alert', !!obj.alert);
|
||||
}
|
||||
|
||||
function toggle_private() {
|
||||
obj.private = !obj.private;
|
||||
emit_toggle('private', !!obj.private);
|
||||
}
|
||||
|
||||
function toggle_public() {
|
||||
obj.public = !obj.public;
|
||||
emit_toggle('public', !!obj.public);
|
||||
}
|
||||
|
||||
function toggle_personal() {
|
||||
obj.personal = !obj.personal;
|
||||
emit_toggle('personal', !!obj.personal);
|
||||
}
|
||||
|
||||
function toggle_professional() {
|
||||
obj.professional = !obj.professional;
|
||||
emit_toggle('professional', !!obj.professional);
|
||||
}
|
||||
|
||||
function toggle_template() {
|
||||
obj.template = !obj.template;
|
||||
emit_toggle('template', !!obj.template);
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -63,81 +92,69 @@ function handle_toggle(prop: string) {
|
||||
</span>
|
||||
{/if}
|
||||
|
||||
<!-- Alert Status -->
|
||||
{#if !hide_alert}
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => handle_toggle('alert')}
|
||||
class="btn-icon btn-icon-sm preset-tonal-secondary hover:preset-filled-secondary-500 transition"
|
||||
title="Toggle Alert Status">
|
||||
<Siren
|
||||
size="1.2em"
|
||||
class={obj?.alert ? 'text-error-500' : 'opacity-40'} />
|
||||
onclick={toggle_alert}
|
||||
class="btn btn-sm flex items-center gap-2 px-3 transition preset-tonal-secondary hover:preset-filled-secondary-500"
|
||||
title="Toggle alert status">
|
||||
<Siren size="1.2em" class={obj?.alert ? 'text-error-500' : 'opacity-40'} />
|
||||
<span class="whitespace-nowrap text-[10px] font-bold uppercase tracking-wider">Alert</span>
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
<!-- Private / E2EE -->
|
||||
{#if !hide_private}
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => handle_toggle('private')}
|
||||
class="btn-icon btn-icon-sm preset-tonal-secondary hover:preset-filled-secondary-500 transition"
|
||||
title="Toggle Private/Encrypted">
|
||||
<Fingerprint
|
||||
size="1.2em"
|
||||
class={obj?.private ? 'text-success-500' : 'opacity-40'} />
|
||||
onclick={toggle_private}
|
||||
class="btn btn-sm flex items-center gap-2 px-3 transition preset-tonal-secondary hover:preset-filled-secondary-500"
|
||||
title="Toggle private or encrypted visibility">
|
||||
<Fingerprint size="1.2em" class={obj?.private ? 'text-success-500' : 'opacity-40'} />
|
||||
<span class="whitespace-nowrap text-[10px] font-bold uppercase tracking-wider">Private</span>
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
<!-- Public Visibility -->
|
||||
{#if !hide_public}
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => handle_toggle('public')}
|
||||
class="btn-icon btn-icon-sm preset-tonal-secondary hover:preset-filled-secondary-500 transition"
|
||||
title="Toggle Public Visibility">
|
||||
<Globe
|
||||
size="1.2em"
|
||||
class={obj?.public ? 'text-success-500' : 'opacity-40'} />
|
||||
onclick={toggle_public}
|
||||
class="btn btn-sm flex items-center gap-2 px-3 transition preset-tonal-secondary hover:preset-filled-secondary-500"
|
||||
title="Toggle public visibility">
|
||||
<Globe size="1.2em" class={obj?.public ? 'text-success-500' : 'opacity-40'} />
|
||||
<span class="whitespace-nowrap text-[10px] font-bold uppercase tracking-wider">Public</span>
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
<!-- Personal Scope -->
|
||||
{#if !hide_personal}
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => handle_toggle('personal')}
|
||||
class="btn-icon btn-icon-sm preset-tonal-secondary hover:preset-filled-secondary-500 transition"
|
||||
title="Toggle Personal Scope">
|
||||
<BookHeart
|
||||
size="1.2em"
|
||||
class={obj?.personal ? 'text-success-500' : 'opacity-40'} />
|
||||
onclick={toggle_personal}
|
||||
class="btn btn-sm flex items-center gap-2 px-3 transition preset-tonal-secondary hover:preset-filled-secondary-500"
|
||||
title="Toggle personal scope">
|
||||
<BookHeart size="1.2em" class={obj?.personal ? 'text-success-500' : 'opacity-40'} />
|
||||
<span class="whitespace-nowrap text-[10px] font-bold uppercase tracking-wider">Personal</span>
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
<!-- Professional Scope -->
|
||||
{#if !hide_professional}
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => handle_toggle('professional')}
|
||||
class="btn-icon btn-icon-sm preset-tonal-secondary hover:preset-filled-secondary-500 transition"
|
||||
title="Toggle Professional Scope">
|
||||
<BriefcaseBusiness
|
||||
size="1.2em"
|
||||
class={obj?.professional ? 'text-success-500' : 'opacity-40'} />
|
||||
onclick={toggle_professional}
|
||||
class="btn btn-sm flex items-center gap-2 px-3 transition preset-tonal-secondary hover:preset-filled-secondary-500"
|
||||
title="Toggle professional scope">
|
||||
<BriefcaseBusiness size="1.2em" class={obj?.professional ? 'text-success-500' : 'opacity-40'} />
|
||||
<span class="whitespace-nowrap text-[10px] font-bold uppercase tracking-wider">Professional</span>
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
<!-- Template Status -->
|
||||
{#if !hide_template && $ae_loc.edit_mode}
|
||||
<button
|
||||
type="button"
|
||||
onclick={() => handle_toggle('template')}
|
||||
class="btn-icon btn-icon-sm preset-tonal-secondary hover:preset-filled-secondary-500 transition"
|
||||
title="Toggle Template Mode">
|
||||
<NotepadTextDashed
|
||||
size="1.2em"
|
||||
class={obj?.template ? 'text-success-500' : 'opacity-40'} />
|
||||
onclick={toggle_template}
|
||||
class="btn btn-sm flex items-center gap-2 px-3 transition preset-tonal-secondary hover:preset-filled-secondary-500"
|
||||
title="Toggle template mode">
|
||||
<NotepadTextDashed size="1.2em" class={obj?.template ? 'text-success-500' : 'opacity-40'} />
|
||||
<span class="whitespace-nowrap text-[10px] font-bold uppercase tracking-wider">Template</span>
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user