diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte
index d76f1f7f..d14f69f6 100644
--- a/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte
+++ b/frontend/src/lib/components/dashboard/pedimentos/edit/contributions-tab-form.svelte
@@ -26,15 +26,16 @@
Trash2
} from 'lucide-svelte';
import { shortcutStore } from '$lib/stores/shortcut-store';
- import { focusStore } from '$lib/stores/focus-store';
+ import { focusStore, interactionMode } from '$lib/stores/focus-store';
import { obtenerAtajosPestanaContribuciones } from '$lib/config/shortcuts/dashboard/pedimentos/tabs/contributions';
// Active tab
let activeTab = $state('DTA');
// Focus first input when switching sub-tabs via mouse
+
$effect(() => {
- if (activeTab) {
+ if (activeTab && $interactionMode === 'keyboard') {
focusStore.request('first-input');
}
});
diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte
index 73527e05..adf9f65b 100644
--- a/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte
+++ b/frontend/src/lib/components/dashboard/pedimentos/edit/general-tab-form.svelte
@@ -25,7 +25,7 @@
import { useShortcuts } from '$lib/hooks/use-shortcuts';
import { obtenerAtajosPestanaGeneral } from '$lib/config/shortcuts/dashboard/pedimentos/tabs/general';
import { shortcutStore } from '$lib/stores/shortcut-store';
- import { focusStore } from '$lib/stores/focus-store';
+ import { focusStore, interactionMode } from '$lib/stores/focus-store';
let {
pedimento,
@@ -54,8 +54,9 @@
// Focus first input when switching sections via mouse
// Shortcuts will override this by focusing the trigger themselves
+
$effect(() => {
- if (activeSection) {
+ if (activeSection && $interactionMode === 'keyboard') {
focusStore.request('first-input');
}
});
diff --git a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte
index 676ff0c5..a7a749f6 100644
--- a/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte
+++ b/frontend/src/lib/components/dashboard/pedimentos/edit/other-data-tab-form.svelte
@@ -14,7 +14,7 @@
TableRow
} from '$lib/components/ui/table';
import { shortcutStore } from '$lib/stores/shortcut-store';
- import { focusStore } from '$lib/stores/focus-store';
+ import { focusStore, interactionMode } from '$lib/stores/focus-store';
import { obtenerAtajosOtrosDatos } from '$lib/config/shortcuts/dashboard/pedimentos/tabs/other_data';
import {
Dialog,
@@ -165,8 +165,9 @@
>('calculos');
// Focus first input when switching sub-views via mouse
+
$effect(() => {
- if (activeView) {
+ if (activeView && $interactionMode === 'keyboard') {
focusStore.request('first-input');
}
});
diff --git a/frontend/src/lib/components/keyboard/KeyboardManager.svelte b/frontend/src/lib/components/keyboard/KeyboardManager.svelte
index 2c55c9f3..cd7288cb 100644
--- a/frontend/src/lib/components/keyboard/KeyboardManager.svelte
+++ b/frontend/src/lib/components/keyboard/KeyboardManager.svelte
@@ -4,7 +4,7 @@
import { browser } from '$app/environment';
import { GLOBAL_NAV } from '$lib/config/shortcuts';
import { shortcutStore, activeShortcutsList } from '$lib/stores/shortcut-store';
- import { focusStore } from '$lib/stores/focus-store';
+ import { focusStore, interactionMode } from '$lib/stores/focus-store';
import ShortcutsHelpModal from './ShortcutsHelpModal.svelte';
let showHelp = $state(false);
@@ -15,8 +15,8 @@
if (!browser) return false;
const currentPath = $page?.url?.pathname || '';
const isAuthenticatedRoute = currentPath.startsWith('/dashboard');
- const hasAccessToken = document.cookie.includes('access_token=') ||
- localStorage.getItem('access_token');
+ const hasAccessToken =
+ document.cookie.includes('access_token=') || localStorage.getItem('access_token');
return isAuthenticatedRoute && !!hasAccessToken;
}
@@ -203,24 +203,24 @@
event.preventDefault();
event.stopPropagation(); // Stop bubbling
- lastShortcutTime = Date.now();
- match.action();
+ lastShortcutTime = Date.now();
+ match.action();
- // Hybrid focus strategy
- if (combo.includes('Alt+') && match) {
- const isDigit = combo.includes('Digit') || (event.code && event.code.startsWith('Digit'));
- const strategy = FOCUS_POLICY[match.context] || 'first-input';
+ // Hybrid focus strategy
+ if (combo.includes('Alt+') && match) {
+ const isDigit = combo.includes('Digit') || (event.code && event.code.startsWith('Digit'));
+ const strategy = FOCUS_POLICY[match.context] || 'first-input';
- if (isDigit && strategy === 'trigger') {
- // Focus the trigger for specific views (General sub-tabs)
- focusTriggerByDescription(match.description);
- } else {
- // Default: Focus the first input (Main tabs, non-trigger sub-tabs)
- autoFocusFirstInput();
+ if (isDigit && strategy === 'trigger') {
+ // Focus the trigger for specific views (General sub-tabs)
+ focusTriggerByDescription(match.description);
+ } else {
+ // Default: Focus the first input (Main tabs, non-trigger sub-tabs)
+ autoFocusFirstInput();
+ }
}
+ return;
}
- return;
- }
} // Fin del bloque authenticated
// 4. GLOBAL NAV: Alt + Key (Legacy/Default behavior for global nav)
@@ -355,7 +355,14 @@
});
-
+ {
+ interactionMode.set('keyboard');
+ handleKeydown(e);
+ }}
+ onmousedown={() => interactionMode.set('mouse')}
+ onfocusin={handleFocusIn}
+/>
{#if showHelp}
(showHelp = false)} />
diff --git a/frontend/src/lib/stores/focus-store.ts b/frontend/src/lib/stores/focus-store.ts
index b9450e43..ae72626d 100644
--- a/frontend/src/lib/stores/focus-store.ts
+++ b/frontend/src/lib/stores/focus-store.ts
@@ -1,6 +1,7 @@
import { writable } from 'svelte/store';
export type FocusStrategy = 'first-input' | 'trigger';
+export type InteractionMode = 'mouse' | 'keyboard';
interface FocusRequest {
strategy: FocusStrategy;
@@ -20,3 +21,4 @@ function createFocusStore() {
}
export const focusStore = createFocusStore();
+export const interactionMode = writable('mouse');
diff --git a/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte b/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte
index 88a57648..85fab884 100644
--- a/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte
+++ b/frontend/src/routes/dashboard/pedimentos/edit/[id]/+page.svelte
@@ -24,7 +24,7 @@
} from 'lucide-svelte';
import { useSidebar } from '$lib/components/ui/sidebar/context.svelte';
import { useShortcuts } from '$lib/hooks/use-shortcuts';
- import { focusStore } from '$lib/stores/focus-store';
+ import { focusStore, interactionMode } from '$lib/stores/focus-store';
import { obtenerAtajosPrincipalesEdicionPedimento } from '$lib/config/shortcuts/dashboard/pedimentos/edit';
// Importar los componentes de cada pestaƱa (ahora sin botones de guardar propios)
@@ -43,13 +43,17 @@
import ValidationTabForm from '$lib/components/dashboard/pedimentos/edit/validation-tab-form.svelte';
// Importar solo la API de pedimentos
- import { pedimentosApi, type CreatePedimentoData, type UpdatePedimentoData } from '$lib/api/dashboard/a76/pedimentos';
+ import {
+ pedimentosApi,
+ type CreatePedimentoData,
+ type UpdatePedimentoData
+ } from '$lib/api/dashboard/a76/pedimentos';
import type { PedimentoCode } from '$lib/api/dashboard/reference_data/pedimento_codes';
import type { CustomsSection } from '$lib/api/dashboard/reference_data/customs_sections';
import type { CustomsBroker } from '$lib/api/dashboard/a76/customs-brokers';
import type { ClientProvider } from '$lib/api/dashboard/a76/clients-providers';
import type { CodePedimentoRegimen } from '$lib/api/dashboard/reference_data/code_pedimento_regimens';
-
+
// Get sidebar context
const sidebar = useSidebar();
@@ -76,8 +80,9 @@
let activeTab = $state('general');
// Focus first input when switching main tabs (mouse or shortcut)
+
$effect(() => {
- if (activeTab) {
+ if (activeTab && $interactionMode === 'keyboard') {
focusStore.request('first-input');
}
});