feat: Implement Phase 1 Shopify-inspired settings (Store, Payments, Shipping)

 Features:
- Store Details page with live currency preview
- Payments page with visual provider cards and test mode
- Shipping & Delivery page with zone cards and local pickup
- Shared components: SettingsLayout, SettingsCard, SettingsSection, ToggleField

🎨 UI/UX:
- Card-based layouts (not boring forms)
- Generous whitespace and visual hierarchy
- Toast notifications using sonner (reused from Orders)
- Sticky save button at top
- Mobile-responsive design

🔧 Technical:
- Installed ESLint with TypeScript support
- Fixed all lint errors (0 errors)
- Phase 1 files have zero warnings
- Used existing toast from sonner (not reinvented)
- Updated routes in App.tsx

📝 Files Created:
- Store.tsx (currency preview, address, timezone)
- Payments.tsx (provider cards, manual methods)
- Shipping.tsx (zone cards, rates, local pickup)
- SettingsLayout.tsx, SettingsCard.tsx, SettingsSection.tsx, ToggleField.tsx

Phase 1 complete: 18-24 hours estimated work
This commit is contained in:
dwindown
2025-11-05 18:54:41 +07:00
parent f8247faf22
commit e49a0d1e3d
19 changed files with 4264 additions and 68 deletions

View File

@@ -19,14 +19,14 @@ export function useShortcuts({ toggleFullscreen }: { toggleFullscreen?: () => vo
// Always handle Command Palette toggle first so it works everywhere
if (mod && key === "k") {
e.preventDefault();
try { useCommandStore.getState().toggle(); } catch {}
try { useCommandStore.getState().toggle(); } catch { /* ignore if store not available */ }
return;
}
// If Command Palette is open, ignore the rest
try {
if (useCommandStore.getState().open) return;
} catch {}
} catch { /* ignore if store not available */ }
// Do not trigger single-key shortcuts while typing
const ae = (document.activeElement as HTMLElement | null);