diff --git a/apps/contacts/apps/web/src/lib/components/FilterBar.svelte b/apps/contacts/apps/web/src/lib/components/FilterBar.svelte index b4fdfc5a8..df6adce69 100644 --- a/apps/contacts/apps/web/src/lib/components/FilterBar.svelte +++ b/apps/contacts/apps/web/src/lib/components/FilterBar.svelte @@ -3,7 +3,7 @@ import { onMount } from 'svelte'; import { groupsApi, type ContactGroup, type Contact } from '$lib/api/contacts'; - export type ContactFilter = 'all' | 'hasPhone' | 'hasEmail' | 'incomplete'; + export type ContactFilter = 'all' | 'favorites' | 'hasPhone' | 'hasEmail' | 'incomplete'; export type BirthdayFilter = 'all' | 'today' | 'thisWeek' | 'thisMonth'; interface Props { @@ -110,7 +110,12 @@ {group.name} - + {/if} @@ -119,7 +124,12 @@ {/if} @@ -127,7 +137,12 @@ {/if} @@ -135,7 +150,12 @@ {/if} @@ -172,6 +192,7 @@ onchange={(e) => onContactFilterChange(e.currentTarget.value as ContactFilter)} > + diff --git a/packages/shared-ui/src/settings/SettingsDangerButton.svelte b/packages/shared-ui/src/settings/SettingsDangerButton.svelte index ceeabba0f..23891d98d 100644 --- a/packages/shared-ui/src/settings/SettingsDangerButton.svelte +++ b/packages/shared-ui/src/settings/SettingsDangerButton.svelte @@ -30,148 +30,46 @@ disabled = false, class: className = '', }: Props = $props(); + + // Tailwind classes + const baseClasses = 'flex items-center justify-between gap-4 px-5 py-4'; + const borderClasses = 'border-b border-red-500/[0.12] dark:border-red-500/[0.18] last:border-b-0'; + const disabledClasses = 'opacity-50 cursor-not-allowed'; + + const iconClasses = + 'flex items-center justify-center flex-shrink-0 w-9 h-9 rounded-[0.625rem] bg-red-500/10 dark:bg-red-500/[0.15] text-red-500 dark:text-red-400 [&>svg]:w-[1.125rem] [&>svg]:h-[1.125rem]';
-
+
{#if icon} - + {@render icon()} {/if} -
- {label} +
+ {label} {#if description} - {description} + {description} {/if}
-
- - diff --git a/packages/shared-ui/src/settings/SettingsDangerZone.svelte b/packages/shared-ui/src/settings/SettingsDangerZone.svelte index 648126fb6..32e0350d9 100644 --- a/packages/shared-ui/src/settings/SettingsDangerZone.svelte +++ b/packages/shared-ui/src/settings/SettingsDangerZone.svelte @@ -13,55 +13,16 @@ let { title = 'Danger Zone', class: className = '', children }: Props = $props(); -
-
-

{title}

+
+
+

{title}

-
+
{@render children()}
- - diff --git a/packages/shared-ui/src/settings/SettingsNumberInput.svelte b/packages/shared-ui/src/settings/SettingsNumberInput.svelte index 2098a061b..9d82deb30 100644 --- a/packages/shared-ui/src/settings/SettingsNumberInput.svelte +++ b/packages/shared-ui/src/settings/SettingsNumberInput.svelte @@ -61,30 +61,45 @@ onchange(clampedValue); } } + + // Tailwind classes + const baseClasses = 'flex items-center justify-between gap-4 px-5 py-4'; + const borderClasses = 'border-b border-black/[0.08] dark:border-white/10 last:border-b-0'; + const disabledClasses = 'opacity-50 cursor-not-allowed'; + + const iconClasses = + 'flex items-center justify-center flex-shrink-0 w-9 h-9 rounded-[0.625rem] bg-black/[0.04] dark:bg-white/[0.08] text-primary [&>svg]:w-[1.125rem] [&>svg]:h-[1.125rem]';
-
+
{#if icon} - + {@render icon()} {/if} -
- {label} +
+ {label} {#if description} - {description} + {description} {/if}
- - diff --git a/packages/shared-ui/src/settings/SettingsPage.svelte b/packages/shared-ui/src/settings/SettingsPage.svelte index 5131b047e..693ead145 100644 --- a/packages/shared-ui/src/settings/SettingsPage.svelte +++ b/packages/shared-ui/src/settings/SettingsPage.svelte @@ -24,63 +24,17 @@ }; -
-
-
-

{title}

+
+
+
+

{title}

{#if subtitle} -

{subtitle}

+

{subtitle}

{/if}
-
+
{@render children()}
- - diff --git a/packages/shared-ui/src/settings/SettingsTimeInput.svelte b/packages/shared-ui/src/settings/SettingsTimeInput.svelte index 74c4ef370..7b1ad85b3 100644 --- a/packages/shared-ui/src/settings/SettingsTimeInput.svelte +++ b/packages/shared-ui/src/settings/SettingsTimeInput.svelte @@ -52,31 +52,46 @@ function handleClear() { onchange(null); } + + // Tailwind classes + const baseClasses = 'flex items-center justify-between gap-4 px-5 py-4'; + const borderClasses = 'border-b border-black/[0.08] dark:border-white/10 last:border-b-0'; + const disabledClasses = 'opacity-50 cursor-not-allowed'; + + const iconClasses = + 'flex items-center justify-center flex-shrink-0 w-9 h-9 rounded-[0.625rem] bg-black/[0.04] dark:bg-white/[0.08] text-primary [&>svg]:w-[1.125rem] [&>svg]:h-[1.125rem]';
-
+
{#if icon} - + {@render icon()} {/if} -
- {label} +
+ {label} {#if description} - {description} + {description} {/if}
-
+
- -