From 76f573fb0825dfdae87d1743d67b64868a9ea973 Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Tue, 9 Dec 2025 17:49:07 +0100 Subject: [PATCH] refactor(shared-ui): convert settings components from scoped CSS to Tailwind MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SettingsCard, SettingsSection, SettingsRow now use Tailwind classes - SettingsToggle, SettingsSelect, SettingsNumberInput updated - SettingsTimeInput, SettingsDangerZone, SettingsDangerButton updated - SettingsPage updated with Tailwind layout classes - Fixes dark mode styling issues when components used across packages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../web/src/lib/components/FilterBar.svelte | 31 ++- .../src/settings/SettingsDangerButton.svelte | 156 +++---------- .../src/settings/SettingsDangerZone.svelte | 55 +---- .../src/settings/SettingsNumberInput.svelte | 177 ++------------ .../src/settings/SettingsPage.svelte | 58 +---- .../src/settings/SettingsTimeInput.svelte | 215 +++--------------- 6 files changed, 119 insertions(+), 573 deletions(-) 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}
-
+
- -