diff --git a/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte b/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte
index c69f7eeeb..c77dfca75 100644
--- a/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte
+++ b/apps/contacts/apps/web/src/lib/components/ContactsToolbar.svelte
@@ -1,7 +1,9 @@
+
+
+
+{#if !isSidebarMode}
+
+
+
+
+
+{/if}
+
+
diff --git a/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte b/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte
index d3142c21a..244b244d5 100644
--- a/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte
+++ b/apps/contacts/apps/web/src/lib/components/views/ContactAlphabetView.svelte
@@ -3,6 +3,8 @@
import type { Contact } from '$lib/api/contacts';
import type { SortField } from '$lib/components/SortToggle.svelte';
import { newContactModalStore } from '$lib/stores/new-contact-modal.svelte';
+ import { isSidebarMode } from '$lib/stores/navigation';
+ import { contactsFilterStore } from '$lib/stores/filter.svelte';
interface Props {
contacts: Contact[];
@@ -26,6 +28,14 @@
showNewContactCard = true,
}: Props = $props();
+ // Derived state for toolbar positioning
+ let isToolbarExpanded = $derived(!contactsFilterStore.isToolbarCollapsed);
+ let isAlphabetNavCollapsed = $derived(contactsFilterStore.isAlphabetNavCollapsed);
+
+ function toggleAlphabetNav() {
+ contactsFilterStore.toggleAlphabetNav();
+ }
+
function handleCheckboxClick(e: MouseEvent, id: string) {
e.stopPropagation();
onToggleSelection?.(id);
@@ -251,28 +261,67 @@
{/each}
-
-
-
- {#each alphabet as letter}
-
- {/each}
- {#if availableLetters.includes('#')}
-
- {/if}
-
+
+
+
+
+
+ {#if !isAlphabetNavCollapsed}
+
+
+ {#each alphabet as letter}
+
+ {/each}
+ {#if availableLetters.includes('#')}
+
+ {/if}
+
+
+ {/if}
diff --git a/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts b/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts
index eba2b00d5..a715eb0ba 100644
--- a/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts
+++ b/apps/contacts/apps/web/src/lib/stores/filter.svelte.ts
@@ -16,6 +16,7 @@ export interface ContactsFilterState {
selectedTagId: string | null;
selectedCompany: string | null;
isToolbarCollapsed: boolean;
+ isAlphabetNavCollapsed: boolean;
searchQuery: string;
}
@@ -26,6 +27,7 @@ const DEFAULT_STATE: ContactsFilterState = {
selectedTagId: null,
selectedCompany: null,
isToolbarCollapsed: true,
+ isAlphabetNavCollapsed: false,
searchQuery: '',
};
@@ -80,6 +82,9 @@ export const contactsFilterStore = {
get isToolbarCollapsed() {
return state.isToolbarCollapsed;
},
+ get isAlphabetNavCollapsed() {
+ return state.isAlphabetNavCollapsed;
+ },
get searchQuery() {
return state.searchQuery;
},
@@ -120,6 +125,16 @@ export const contactsFilterStore = {
saveState(state);
},
+ setAlphabetNavCollapsed(value: boolean) {
+ state = { ...state, isAlphabetNavCollapsed: value };
+ saveState(state);
+ },
+
+ toggleAlphabetNav() {
+ state = { ...state, isAlphabetNavCollapsed: !state.isAlphabetNavCollapsed };
+ saveState(state);
+ },
+
setSearchQuery(value: string) {
state = { ...state, searchQuery: value };
// Don't persist search query to localStorage