refactor: migrate ui elements to lib

This commit is contained in:
3252a8
2026-05-12 09:05:22 +03:00
parent 6a367c1dec
commit fe976022ec
50 changed files with 1275 additions and 878 deletions
@@ -52,7 +52,7 @@
height: 36px;
border-radius: 8px;
border: 1px solid var(--admin-border-strong);
background: var(--admin-bg);
background: color-mix(in srgb, var(--admin-bg) 82%, var(--admin-surface-2));
color: var(--admin-text);
padding: 0 12px;
font-size: 13px;
@@ -88,7 +88,9 @@
padding: 0 14px;
border-radius: 8px;
border: 1px solid var(--admin-border);
background: var(--admin-surface-2);
background:
linear-gradient(135deg, rgba(255, 255, 255, 0.052), rgba(255, 255, 255, 0.014)),
var(--admin-surface-2);
color: var(--admin-text);
font-size: 13px;
font-weight: 500;
@@ -98,7 +100,10 @@
}
.admin-btn:hover:not(:disabled) {
background: var(--admin-elev);
background:
linear-gradient(135deg, rgba(255, 255, 255, 0.068), rgba(255, 255, 255, 0.018)),
var(--admin-elev);
border-color: var(--admin-border-strong);
}
.admin-btn:disabled {
@@ -124,7 +129,7 @@
}
.admin-btn.admin-btn-ghost:hover:not(:disabled) {
background: var(--admin-surface-2);
background: rgba(255, 255, 255, 0.04);
color: var(--admin-text);
}
+76 -51
View File
@@ -6,12 +6,20 @@
.admin-screen-wrap {
--admin-sidebar-w: var(--desktop-rail-width);
--admin-header-h: 60px;
--admin-card-bg:
linear-gradient(135deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.018)),
var(--admin-surface);
--admin-card-shadow:
0 18px 48px rgba(0, 0, 0, 0.22),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
position: fixed;
inset: 0;
width: 100vw;
height: 100dvh;
background: var(--admin-bg);
background:
radial-gradient(circle at 18% 0%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 32%),
#02070b;
color: var(--admin-text);
overflow: hidden;
overscroll-behavior: contain;
@@ -29,10 +37,12 @@
height: 100%;
display: flex;
flex-direction: column;
gap: 4px;
padding: 14px 12px 18px;
gap: 2px;
padding: 28px 14px;
border-right: 1px solid var(--admin-border);
background: var(--admin-surface);
background: rgba(7, 12, 17, 0.55);
backdrop-filter: blur(14px);
box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.02);
overflow-y: auto;
}
@@ -42,17 +52,18 @@
.admin-sidebar-brand {
display: grid;
grid-template-columns: 36px minmax(0, 1fr) 32px;
grid-template-columns: 38px minmax(0, 1fr) 34px;
align-items: center;
gap: 10px;
padding: 6px 6px 14px;
margin-bottom: 6px;
gap: 12px;
padding: 4px 12px 18px;
margin-bottom: 8px;
border-bottom: 1px solid var(--admin-border);
color: var(--admin-text);
}
.admin-sidebar-brand .admin-brand-mark {
width: 36px;
height: 36px;
width: 38px;
height: 38px;
display: grid;
place-items: center;
color: var(--accent);
@@ -60,9 +71,14 @@
.admin-sidebar-brand strong {
display: block;
font-size: 13px;
font-weight: 700;
min-width: 0;
overflow: hidden;
color: var(--accent);
font-size: 14px;
font-weight: 800;
letter-spacing: -0.01em;
text-overflow: ellipsis;
white-space: nowrap;
}
.admin-sidebar-brand small {
@@ -82,54 +98,52 @@
.admin-nav {
display: grid;
gap: 1px;
gap: 2px;
}
.admin-nav-item {
position: relative;
display: grid;
grid-template-columns: 18px minmax(0, 1fr) auto;
grid-template-columns: 22px minmax(0, 1fr) auto;
align-items: center;
gap: 10px;
padding: 9px 12px;
border-radius: 8px;
border: 0;
gap: 12px;
padding: 12px 14px;
border-radius: 10px;
border: 1px solid transparent;
background: transparent;
color: var(--admin-muted);
font-size: 13px;
font-weight: 500;
font-weight: 600;
text-align: left;
width: 100%;
cursor: pointer;
transition: background 0.12s ease, color 0.12s ease;
transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease;
}
.admin-nav-item > svg {
width: 20px;
height: 20px;
}
.admin-nav-item:hover {
background: var(--admin-surface-2);
background: rgba(255, 255, 255, 0.04);
color: var(--admin-text);
}
.admin-nav-item.active {
background: var(--admin-elev);
background: color-mix(in srgb, var(--accent) 16%, transparent);
border-color: color-mix(in srgb, var(--accent) 30%, transparent);
color: var(--admin-text);
font-weight: 600;
}
.admin-nav-item.active::before {
content: "";
position: absolute;
width: 3px;
height: 18px;
left: -4px;
top: 50%;
transform: translateY(-50%);
border-radius: 2px;
background: var(--accent);
display: none;
}
.admin-sidebar-footer {
margin-top: auto;
padding: 10px 6px 0;
padding: 14px 0 0;
border-top: 1px solid var(--admin-border);
font-size: 11px;
color: var(--admin-dim);
@@ -156,8 +170,8 @@
justify-content: space-between;
gap: 8px;
border: 1px solid var(--admin-border);
border-radius: 8px;
background: var(--admin-surface-2);
border-radius: 10px;
background: rgba(255, 255, 255, 0.035);
color: var(--admin-text);
padding: 8px 10px;
text-align: left;
@@ -237,9 +251,10 @@
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: 16px;
padding: 0 24px;
padding: 0 28px;
border-bottom: 1px solid var(--admin-border);
background: var(--admin-bg);
background: color-mix(in srgb, #02070b 82%, transparent);
backdrop-filter: blur(14px);
}
.admin-header-title {
@@ -285,7 +300,7 @@
overscroll-behavior: contain;
overflow-y: auto;
overflow-x: hidden;
padding: 22px 24px 32px;
padding: 24px 28px 36px;
display: flex;
flex-direction: column;
gap: 16px;
@@ -300,8 +315,9 @@
.admin-card {
border: 1px solid var(--admin-border);
background: var(--admin-surface);
background: var(--admin-card-bg);
border-radius: 12px;
box-shadow: var(--admin-card-shadow);
display: grid;
grid-template-columns: minmax(0, 1fr);
min-width: 0;
@@ -347,7 +363,7 @@
padding: 48px 16px;
border: 1px dashed var(--admin-border);
border-radius: 12px;
background: var(--admin-surface);
background: var(--admin-card-bg);
color: var(--admin-muted);
font-size: 13px;
}
@@ -383,8 +399,9 @@
.admin-stat-card {
border: 1px solid var(--admin-border);
background: var(--admin-surface);
background: var(--admin-card-bg);
border-radius: 12px;
box-shadow: var(--admin-card-shadow);
padding: 16px 18px;
display: grid;
gap: 6px;
@@ -443,8 +460,9 @@
.admin-revenue-panel {
border: 1px solid var(--admin-border);
background: var(--admin-surface);
background: var(--admin-card-bg);
border-radius: 12px;
box-shadow: var(--admin-card-shadow);
padding: 16px 18px;
display: grid;
gap: 14px;
@@ -572,8 +590,9 @@
.admin-dashboard-panel-card {
border: 1px solid var(--admin-border);
background: var(--admin-surface);
background: var(--admin-card-bg);
border-radius: 12px;
box-shadow: var(--admin-card-shadow);
padding: 16px 18px;
display: grid;
gap: 14px;
@@ -646,8 +665,9 @@
.admin-stat-skeleton-card {
border: 1px solid var(--admin-border);
background: var(--admin-surface);
background: var(--admin-card-bg);
border-radius: 12px;
box-shadow: var(--admin-card-shadow);
padding: 16px 18px;
display: grid;
gap: 10px;
@@ -678,7 +698,8 @@
padding: 12px;
border: 1px solid var(--admin-border);
border-radius: 12px;
background: var(--admin-surface);
background: var(--admin-card-bg);
box-shadow: var(--admin-card-shadow);
}
.admin-toolbar-card {
@@ -689,7 +710,8 @@
padding: 12px;
border: 1px solid var(--admin-border);
border-radius: 12px;
background: var(--admin-surface);
background: var(--admin-card-bg);
box-shadow: var(--admin-card-shadow);
}
.admin-toolbar-search {
@@ -776,7 +798,8 @@
.admin-table-wrap {
border: 1px solid var(--admin-border);
border-radius: 12px;
background: var(--admin-surface);
background: var(--admin-card-bg);
box-shadow: var(--admin-card-shadow);
overflow: hidden;
}
@@ -799,7 +822,7 @@
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 12px 16px;
background: var(--admin-surface-2);
background: color-mix(in srgb, var(--admin-surface-2) 72%, var(--admin-bg));
border-bottom: 1px solid var(--admin-border);
white-space: nowrap;
}
@@ -820,7 +843,7 @@
}
.admin-table tbody tr:hover {
background: color-mix(in srgb, var(--admin-elev) 50%, transparent);
background: rgba(255, 255, 255, 0.035);
}
.admin-table td.admin-cell-mono {
@@ -2235,8 +2258,8 @@
height: 36px;
padding: 0 12px;
border: 1px solid var(--admin-border-strong);
border-radius: 8px;
background: var(--admin-bg);
border-radius: 10px;
background: color-mix(in srgb, var(--admin-bg) 82%, var(--admin-surface-2));
color: var(--admin-text);
font: inherit;
font-size: 13px;
@@ -2273,7 +2296,9 @@
overflow-y: auto;
border: 1px solid var(--admin-border);
border-radius: 10px;
background: var(--admin-surface);
background:
linear-gradient(135deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.018)),
var(--admin-surface);
padding: 4px;
box-shadow: 0 16px 36px rgba(0, 0, 0, 0.45);
outline: none;
+111 -2
View File
@@ -25,8 +25,12 @@
min-width: 0;
border-radius: 12px;
border: 1px solid var(--admin-border);
background: var(--admin-surface);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
background:
linear-gradient(135deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.018)),
var(--admin-surface);
box-shadow:
0 18px 48px rgba(0, 0, 0, 0.22),
inset 0 1px 0 rgba(255, 255, 255, 0.05);
position: relative;
overflow: hidden;
}
@@ -180,3 +184,108 @@
background: color-mix(in srgb, var(--admin-surface-2) 70%, var(--admin-bg));
color: var(--admin-muted);
}
.ui-spinner,
.telegram-button-spinner {
width: 16px;
height: 16px;
border-radius: 999px;
border: 2px solid currentColor;
border-right-color: transparent;
display: inline-block;
flex: 0 0 auto;
animation: ui-spin 0.72s linear infinite;
}
.ui-spinner-sm {
width: 13px;
height: 13px;
border-width: 2px;
}
.ui-spinner-lg {
width: 24px;
height: 24px;
border-width: 3px;
}
@keyframes ui-spin {
to {
transform: rotate(360deg);
}
}
.ui-skeleton,
.admin-skeleton,
.skeleton-line,
.skeleton-dot,
.skeleton-pay-button {
display: inline-block;
background: linear-gradient(
90deg,
rgba(255, 255, 255, 0.08),
rgba(255, 255, 255, 0.14),
rgba(255, 255, 255, 0.08)
);
background-size: 220% 100%;
animation: ui-skeleton-pulse 1.2s ease-in-out infinite;
}
.ui-skeleton {
width: 100%;
min-height: 40px;
border-radius: 10px;
}
.ui-skeleton-line,
.admin-skeleton-line,
.skeleton-line {
width: 100%;
height: 10px;
min-height: 0;
border-radius: 999px;
}
.ui-skeleton-title,
.skeleton-line-title {
height: 14px;
min-height: 0;
width: 72%;
}
.ui-skeleton-short,
.admin-skeleton-line-short,
.skeleton-line-short {
width: 56%;
}
.ui-skeleton-tiny,
.admin-skeleton-line-tiny,
.skeleton-line-tiny {
width: 34%;
}
.ui-skeleton-badge,
.admin-skeleton-badge {
width: 64px;
height: 18px;
min-height: 0;
border-radius: 999px;
}
.ui-skeleton-dot,
.skeleton-dot {
width: 18px;
height: 18px;
min-height: 0;
border-radius: 999px;
}
@keyframes ui-skeleton-pulse {
0% {
background-position: 120% 0;
}
100% {
background-position: -120% 0;
}
}
@@ -821,22 +821,26 @@ a {
.skeleton-line-price {
width: 58px;
height: 12px;
min-height: 0;
}
.skeleton-line-tiny {
width: 34px;
height: 9px;
min-height: 0;
opacity: 0.7;
}
.skeleton-line-method {
width: 72px;
height: 12px;
min-height: 0;
}
.skeleton-dot {
width: 18px;
height: 18px;
min-height: 0;
flex: 0 0 auto;
}
@@ -2303,6 +2307,7 @@ a {
}
.bottom-nav .rail-brand strong {
color: var(--accent);
font-size: 14px;
font-weight: 800;
letter-spacing: -0.01em;