- Dashboard: 16 business-focused panels (KPIs, charts, tables, feeds) - New data queries: AOV, conversion rate, revenue by category, top spenders, purchase funnel, 30-day trend, geography, wallet totals - ApexCharts: 30-day revenue line, category bar, funnel bar, geo bar, conversion mini-donut, revenue sparkline - SortableJS: draggable panels within rows, layout saved to localStorage - Theme persistence: body classes (nav-dark, header-fixed, etc.) saved to localStorage and restored on load, MutationObserver syncs all toggles - Panel data-panel-id attributes for layout persistence - All panels use existing SmartAdmin panel-icon/card styling
122 lines
3.6 KiB
Plaintext
122 lines
3.6 KiB
Plaintext
<!DOCTYPE html>
|
|
<html lang="en" data-bs-theme="light">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title><%= title || 'Admin' %> | Shop Admin</title>
|
|
<meta name="description" content="Shop Admin Panel">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=5">
|
|
|
|
<!-- Standard favicon for browsers -->
|
|
<link rel="icon" href="/img/favicon-32x32.png" type="image/png" sizes="32x32">
|
|
<link rel="icon" href="/img/favicon-16x16.png" type="image/png" sizes="16x16">
|
|
|
|
<!-- Apple Touch Icon (iOS) -->
|
|
<link rel="apple-touch-icon" href="/img/apple-touch-icon.png" sizes="180x180">
|
|
|
|
<!-- Android/Chrome (Progressive Web App) -->
|
|
<link rel="icon" href="/img/favicon-192x192.png" type="image/png" sizes="192x192">
|
|
|
|
<!-- Call App Mode on ios devices -->
|
|
<meta name="mobile-web-app-capable" content="yes">
|
|
|
|
<!-- Remove Tap Highlight on Windows Phone IE -->
|
|
<meta name="msapplication-tap-highlight" content="no">
|
|
|
|
<%- include('partials/app-head-css') %>
|
|
|
|
<style>
|
|
/* Table cell padding */
|
|
.main-content table.table td,
|
|
.main-content table.table th {
|
|
padding: 0.75rem 1rem;
|
|
}
|
|
/* Button spacing in action columns */
|
|
.main-content td .btn + .btn,
|
|
.main-content td .btn + form,
|
|
.main-content td form + .btn,
|
|
.main-content td form + form {
|
|
margin-left: 0.5rem;
|
|
}
|
|
/* Button icon visibility */
|
|
.btn svg.sa-icon {
|
|
fill: currentColor;
|
|
flex-shrink: 0;
|
|
}
|
|
/* Ensure icons are visible on all button variants */
|
|
.btn-primary svg.sa-icon,
|
|
.btn-success svg.sa-icon,
|
|
.btn-info svg.sa-icon,
|
|
.btn-danger svg.sa-icon,
|
|
.btn-warning svg.sa-icon,
|
|
.btn-dark svg.sa-icon {
|
|
fill: #fff;
|
|
}
|
|
/* Icon on light buttons */
|
|
.btn-outline-primary svg.sa-icon,
|
|
.btn-outline-secondary svg.sa-icon,
|
|
.btn-outline-success svg.sa-icon,
|
|
.btn-outline-info svg.sa-icon,
|
|
.btn-outline-warning svg.sa-icon,
|
|
.btn-outline-danger svg.sa-icon,
|
|
.btn-secondary svg.sa-icon,
|
|
.btn-light svg.sa-icon {
|
|
fill: currentColor;
|
|
}
|
|
/* Prevent text wrapping in icon buttons */
|
|
.btn {
|
|
white-space: nowrap;
|
|
}
|
|
/* Better alignment for icon+text buttons */
|
|
a.btn, button.btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 0.4rem;
|
|
}
|
|
/* Draggable panel cursor */
|
|
.panel-hdr { cursor: grab; }
|
|
.panel-hdr:active { cursor: grabbing; }
|
|
.sortable-ghost { opacity: 0.4; }
|
|
</style>
|
|
</head>
|
|
|
|
<body class="set-nav-dark set-nav-fixed set-header-fixed set-nav-full">
|
|
<div class="app-wrap">
|
|
|
|
<%- include('partials/app-header') %>
|
|
|
|
<%- include('partials/app-sidebar') %>
|
|
|
|
<main class="app-body">
|
|
<div class="app-content">
|
|
|
|
<div class="content-wrapper">
|
|
|
|
<%- include('partials/app-pagetitle', { pageTitle: title || 'Page', pageSubTitle1: 'Home', pageSubTitle2: title || 'Page' }) %>
|
|
|
|
<div class="main-content">
|
|
<%- body %>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<%- include('partials/app-footer') %>
|
|
|
|
</main>
|
|
|
|
<%- include('partials/app-drawer') %>
|
|
|
|
<%- include('partials/app-settings') %>
|
|
|
|
</div>
|
|
|
|
<%- include('partials/app-scripts') %>
|
|
|
|
</body>
|
|
|
|
</html>
|