Skip to content

Commit 98e3c57

Browse files
authored
Merge pull request #43 from rudi-q/optimize-ux
Optimize ux
2 parents 08f6743 + d0dba27 commit 98e3c57

23 files changed

+286
-225
lines changed

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
"devDependencies": {
2828
"@eslint/js": "^9.34.0",
2929
"@playwright/test": "^1.55.0",
30-
"@sveltejs/adapter-static": "^3.0.9",
3130
"@sveltejs/adapter-vercel": "^5.10.2",
3231
"@sveltejs/kit": "^2.36.2",
3332
"@sveltejs/vite-plugin-svelte": "^5.1.1",

pnpm-lock.yaml

Lines changed: 0 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989

9090
%sveltekit.head%
9191
</head>
92-
<body data-sveltekit-preload-data="hover" class="overflow-hidden">
92+
<body class="overflow-hidden">
9393
<div style="display: contents">%sveltekit.body%</div>
9494
</body>
9595
</html>

src/lib/components/DebugPanel.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script lang="ts">
2-
import { invoke } from '@tauri-apps/api/core';
2+
import { invoke } from '@tauri-apps/api/core';
33
4-
export let isVisible = false;
4+
export let isVisible = false;
55
66
let debugResults = 'Click button to test...';
77
let testFilePath = '';
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<script lang="ts">
2+
import { createEventDispatcher } from 'svelte';
3+
4+
export let position: 'fixed' | 'absolute' | 'relative' | 'static' = 'static';
5+
export let positionClasses: string = '';
6+
export let showOnDesktopOnly: boolean = false;
7+
export let additionalClasses: string = '';
8+
9+
const dispatch = createEventDispatcher();
10+
11+
function handleClick() {
12+
dispatch('click');
13+
}
14+
15+
// Build the complete class string
16+
$: baseClasses = "text-xs text-charcoal dark:text-gray-100 hover:text-sage dark:hover:text-sage transition-colors flex items-center gap-1 bg-white/80 hover:bg-white/90 dark:bg-gray-800/80 dark:hover:bg-gray-700/90 px-2 py-1 rounded-lg backdrop-blur-sm border border-charcoal/10 dark:border-gray-600/20";
17+
$: positionClass = position !== 'static' ? position : '';
18+
$: hiddenClasses = showOnDesktopOnly ? 'hidden lg:flex' : '';
19+
$: allClasses = [baseClasses, positionClass, positionClasses, hiddenClasses, additionalClasses].filter(Boolean).join(' ');
20+
</script>
21+
22+
<button
23+
class={allClasses}
24+
on:click={handleClick}
25+
title="Show keyboard shortcuts (? or F1)"
26+
aria-label="Show keyboard shortcuts"
27+
>
28+
<span>?</span>
29+
<span>Help</span>
30+
</button>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<script lang="ts">
2+
import { goto } from '$app/navigation';
3+
4+
export let position: 'fixed' | 'absolute' | 'relative' | 'static' = 'absolute';
5+
export let positionClasses: string = 'top-16';
6+
export let showThumbnails: boolean = false;
7+
export let additionalClasses: string = '';
8+
9+
function goHome() {
10+
goto('/');
11+
}
12+
13+
// Build the complete class string - matching HelpButton styling but with appropriate sizing
14+
$: baseClasses = "text-sm text-charcoal/60 dark:text-gray-300 hover:text-charcoal dark:hover:text-white transition-colors flex items-center gap-2 bg-white/50 hover:bg-white/80 dark:bg-gray-800/80 dark:hover:bg-gray-700/90 px-3 py-2 rounded-lg backdrop-blur-sm border border-charcoal/10 dark:border-gray-600/20";
15+
$: positionClass = position !== 'static' ? position : '';
16+
$: dynamicLeftClass = showThumbnails ? 'left-52' : 'left-4';
17+
$: allClasses = [baseClasses, positionClass, positionClasses, dynamicLeftClass, additionalClasses].filter(Boolean).join(' ');
18+
</script>
19+
20+
<button
21+
class={allClasses}
22+
on:click={goHome}
23+
title="Go back to home"
24+
aria-label="Go back to home"
25+
>
26+
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
27+
<path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.42-1.41L7.83 13H20v-2z"/>
28+
</svg>
29+
<span>Home</span>
30+
</button>

src/lib/components/KeyboardShortcuts.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<script lang="ts">
2-
import { createEventDispatcher, onDestroy, onMount } from 'svelte';
3-
import { browser } from '$app/environment';
2+
import { createEventDispatcher, onDestroy, onMount } from 'svelte';
3+
import { browser } from '$app/environment';
44
5-
export let isOpen = false;
5+
export let isOpen = false;
66
77
const dispatch = createEventDispatcher();
88

src/lib/components/LicenseModal.svelte

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<script lang="ts">
2-
import { createEventDispatcher, onMount } from 'svelte';
3-
import { licenseManager } from '$lib/utils/licenseManager';
4-
import { invoke } from '@tauri-apps/api/core';
5-
import { isTauri } from '$lib/utils/tauriUtils';
2+
import { createEventDispatcher, onMount } from 'svelte';
3+
import { licenseManager } from '$lib/utils/licenseManager';
4+
import { invoke } from '@tauri-apps/api/core';
5+
import { isTauri } from '$lib/utils/tauriUtils';
66
7-
export let isOpen: boolean = false;
7+
export let isOpen: boolean = false;
88
export let needsActivation: boolean = true; // true = activation, false = validation
99
1010
const dispatch = createEventDispatcher();

src/lib/components/PDFViewer.svelte

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
<script lang="ts">
2-
import { onDestroy, onMount, tick } from 'svelte';
3-
import {
4-
addDrawingPath,
5-
arrowAnnotations,
6-
currentPageArrowAnnotations,
7-
currentPagePaths,
8-
currentPageStampAnnotations,
9-
currentPageStickyNotes,
10-
currentPageTextAnnotations,
11-
type DrawingPath,
12-
drawingPaths,
13-
drawingState,
14-
getStampById,
15-
pdfState,
16-
type Point,
17-
stampAnnotations,
18-
stickyNoteAnnotations,
19-
textAnnotations
20-
} from '../stores/drawingStore';
21-
import { PDFManager } from '../utils/pdfUtils';
22-
import { DrawingEngine } from '../utils/drawingUtils';
23-
import { toastStore } from '../stores/toastStore';
24-
import TextOverlay from './TextOverlay.svelte';
25-
import StickyNoteOverlay from './StickyNoteOverlay.svelte';
26-
import StampOverlay from './StampOverlay.svelte';
27-
import ArrowOverlay from './ArrowOverlay.svelte';
28-
import { TOOLBAR_HEIGHT } from '$lib/constants';
29-
30-
// Helper function to convert SVG string to image
2+
import { onDestroy, onMount, tick } from 'svelte';
3+
import {
4+
addDrawingPath,
5+
arrowAnnotations,
6+
currentPageArrowAnnotations,
7+
currentPagePaths,
8+
currentPageStampAnnotations,
9+
currentPageStickyNotes,
10+
currentPageTextAnnotations,
11+
type DrawingPath,
12+
drawingPaths,
13+
drawingState,
14+
getStampById,
15+
pdfState,
16+
type Point,
17+
stampAnnotations,
18+
stickyNoteAnnotations,
19+
textAnnotations
20+
} from '../stores/drawingStore';
21+
import { PDFManager } from '../utils/pdfUtils';
22+
import { DrawingEngine } from '../utils/drawingUtils';
23+
import { toastStore } from '../stores/toastStore';
24+
import TextOverlay from './TextOverlay.svelte';
25+
import StickyNoteOverlay from './StickyNoteOverlay.svelte';
26+
import StampOverlay from './StampOverlay.svelte';
27+
import ArrowOverlay from './ArrowOverlay.svelte';
28+
import { TOOLBAR_HEIGHT } from '$lib/constants';
29+
30+
// Helper function to convert SVG string to image
3131
async function svgToImage(svgString: string, width: number, height: number): Promise<HTMLImageElement> {
3232
return new Promise((resolve, reject) => {
3333
const img = new Image();

src/lib/components/SEOHead.svelte

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<script lang="ts">
2-
import { page } from '$app/stores';
3-
import type { SEOData } from '$lib/utils/seo';
4-
import { defaultSEOData, generateLDJSON, pageSEOData, softwareApplicationData } from '$lib/utils/seo';
2+
import { page } from '$app/stores';
3+
import type { SEOData } from '$lib/utils/seo';
4+
import { defaultSEOData, generateLDJSON, pageSEOData, softwareApplicationData } from '$lib/utils/seo';
55
6-
export let customSEO: Partial<SEOData> = {};
6+
export let customSEO: Partial<SEOData> = {};
77
88
// Get page-specific SEO data based on current route
99
$: currentPageSEO = pageSEOData[$page.route?.id || '/'] || {};

0 commit comments

Comments
 (0)