diff --git a/web/src/app.css b/web/src/app.css index 2c8d150b4f..03f87de080 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -34,6 +34,9 @@ --immich-ui-info: 14 165 233; --immich-ui-default-border: 209 213 219; } + * { + --tw-ring-offset-width: 0px; + } .dark { /* dark */ diff --git a/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte b/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte index 04493b273c..314afe5685 100644 --- a/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte +++ b/web/src/lib/components/assets/thumbnail/image-thumbnail.svelte @@ -5,8 +5,8 @@ import { cancelImageUrl } from '$lib/utils/sw-messaging'; import { TUNABLES } from '$lib/utils/tunables'; import { mdiEyeOffOutline } from '@mdi/js'; - import type { ClassValue } from 'svelte/elements'; import type { ActionReturn } from 'svelte/action'; + import type { ClassValue } from 'svelte/elements'; import { fade } from 'svelte/transition'; interface Props { @@ -77,7 +77,7 @@ circle && 'rounded-full', shadow && 'shadow-lg', (circle || !heightStyle) && 'aspect-square', - border && 'border-[3px] border-immich-dark-primary/80 hover:border-immich-primary', + border && 'border-[3px] border-immich-dark-primary/80 hocus:border-immich-primary', brokenAssetClass, ] .filter(Boolean) diff --git a/web/src/lib/components/elements/buttons/circle-icon-button.svelte b/web/src/lib/components/elements/buttons/circle-icon-button.svelte index c243c06f92..0bd79f869a 100644 --- a/web/src/lib/components/elements/buttons/circle-icon-button.svelte +++ b/web/src/lib/components/elements/buttons/circle-icon-button.svelte @@ -61,17 +61,17 @@ }: Props = $props(); const colorClasses: Record = { - transparent: 'bg-transparent hover:bg-[#d3d3d3] dark:text-immich-dark-fg', - opaque: 'bg-transparent hover:bg-immich-bg/30 text-white hover:dark:text-white', - light: 'bg-white hover:bg-[#d3d3d3]', - red: 'text-red-400 bg-red-100 hover:bg-[#d3d3d3]', - dark: 'bg-[#202123] hover:bg-[#d3d3d3]', - alert: 'text-[#ff0000] hover:text-white', - gray: 'bg-[#d3d3d3] hover:bg-[#e2e7e9] text-immich-dark-gray hover:text-black', + transparent: 'bg-transparent hocus:bg-[#d3d3d3] dark:text-immich-dark-fg', + opaque: 'bg-transparent hocus:bg-immich-bg/30 text-white hocus:dark:text-white', + light: 'bg-white hocus:bg-[#d3d3d3]', + red: 'text-red-400 bg-red-100 hocus:bg-[#d3d3d3]', + dark: 'bg-[#202123] hocus:bg-[#d3d3d3]', + alert: 'text-[#ff0000] hocus:text-white', + gray: 'bg-[#d3d3d3] hocus:bg-[#e2e7e9] text-immich-dark-gray hocus:text-black', neutral: - 'dark:bg-immich-dark-gray dark:text-gray-300 hover:dark:bg-immich-dark-gray/50 hover:dark:text-gray-300 bg-gray-200 text-gray-700 hover:bg-gray-300', + 'dark:bg-immich-dark-gray dark:text-gray-300 hocus:dark:bg-immich-dark-gray/50 hocus:dark:text-gray-300 bg-gray-200 text-gray-700 hocus:bg-gray-300', primary: - 'bg-immich-primary dark:bg-immich-dark-primary hover:bg-immich-primary/75 hover:dark:bg-immich-dark-primary/80 text-white dark:text-immich-dark-gray', + 'bg-immich-primary dark:bg-immich-dark-primary hocus:bg-immich-primary/75 hocus:dark:bg-immich-dark-primary/80 text-white dark:text-immich-dark-gray', }; const paddingClasses: Record = { @@ -92,9 +92,16 @@ {href} style:width={buttonSize ? buttonSize + 'px' : ''} style:height={buttonSize ? buttonSize + 'px' : ''} - class="flex place-content-center place-items-center rounded-full {colorClass} {paddingClass} transition-all disabled:cursor-default hover:dark:text-immich-dark-gray {className} {mobileClass}" + class="flex place-content-center place-items-center rounded-full {colorClass} {paddingClass} transition-all disabled:cursor-default hover:dark:text-immich-dark-gray focus:dark:text-immich-dark-gray outline-none ring-offset-transparent focus:ring-4 {className} {mobileClass}" {onclick} {...rest} > + + diff --git a/web/src/lib/components/faces-page/people-card.svelte b/web/src/lib/components/faces-page/people-card.svelte index b740953340..3c06100274 100644 --- a/web/src/lib/components/faces-page/people-card.svelte +++ b/web/src/lib/components/faces-page/people-card.svelte @@ -1,5 +1,4 @@ -
(showVerticalDots = true)} - onmouseleave={() => (showVerticalDots = false)} - role="group" - use:focusOutside={{ onFocusOut: () => (showVerticalDots = false) }} -> +
(showVerticalDots = true)} >
- {#if showVerticalDots} -
- - - - - - -
- {/if} +
+ + + + + + +
diff --git a/web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte b/web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte index c8009a8fd9..e92ce415a5 100644 --- a/web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte +++ b/web/src/lib/components/shared-components/navigation-bar/navigation-bar.svelte @@ -13,6 +13,7 @@ import { AppRoute } from '$lib/constants'; import { authManager } from '$lib/managers/auth-manager.svelte'; import { mobileDevice } from '$lib/stores/mobile-device.svelte'; + import { notificationManager } from '$lib/stores/notification-manager.svelte'; import { featureFlags } from '$lib/stores/server-config.store'; import { sidebarStore } from '$lib/stores/sidebar.svelte'; import { user } from '$lib/stores/user.store'; @@ -26,7 +27,6 @@ import ThemeButton from '../theme-button.svelte'; import UserAvatar from '../user-avatar.svelte'; import AccountInfoPanel from './account-info-panel.svelte'; - import { notificationManager } from '$lib/stores/notification-manager.svelte'; interface Props { showUploadButton?: boolean; @@ -35,6 +35,8 @@ let { showUploadButton = true, onUploadClick }: Props = $props(); + let isHocus = $state(false); + let shouldShowAccountInfo = $state(false); let shouldShowAccountInfoPanel = $state(false); let shouldShowHelpPanel = $state(false); @@ -83,7 +85,11 @@ }} class="sidebar:hidden" /> - +
@@ -97,6 +103,7 @@
{#if $featureFlags.search} {/if} @@ -113,7 +119,7 @@