- backend: users.preferences jsonb (migration 000004), Me returns preferences, PATCH /auth/me/preferences with validation (visible list + labels) - frontend: gear in info section opens PhotoInfoSettingsDialog; base attribute set shown by default, remaining under ellipsis; per-attribute visibility and custom labels persisted to the profile; reset clears settings from the profile - frontend: dialog has select-all/deselect-all icon buttons (no 'show all'); EXIF constants extracted to lib/exif.ts - fix: render modal overlays via portal to document.body so they center in the viewport despite transformed panel/rail ancestors - openspec: sync lightroom-workspace-ui artifacts (spec/design/proposal/tasks 9.8)
26 lines
644 B
Svelte
26 lines
644 B
Svelte
<script lang="ts">
|
|
import { onMount } from 'svelte';
|
|
import '../app.css';
|
|
import IconSprite from '$lib/components/IconSprite.svelte';
|
|
import { auth } from '$lib/stores/auth.svelte';
|
|
import { theme } from '$lib/stores/theme.svelte';
|
|
import { density } from '$lib/stores/density.svelte';
|
|
import { authApi } from '$lib/api';
|
|
|
|
let { children } = $props();
|
|
|
|
onMount(() => {
|
|
theme.init();
|
|
density.init();
|
|
if (auth.isAuthenticated && !auth.user) {
|
|
authApi
|
|
.me()
|
|
.then((data) => auth.setUser({ ...data.user, preferences: data.preferences ?? {} }))
|
|
.catch(() => {});
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<IconSprite />
|
|
{@render children()}
|