@rovela-ai/sdk 0.16.1 → 0.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AdminAccountPage.d.ts.map +1 -1
- package/dist/admin/components/AdminAccountPage.js +2 -1
- package/dist/admin/components/AdminAccountPage.js.map +1 -1
- package/dist/admin/components/AdminDateTimePicker.js +1 -1
- package/dist/admin/components/AdminDateTimePicker.js.map +1 -1
- package/dist/admin/components/AdminLayout.d.ts.map +1 -1
- package/dist/admin/components/AdminLayout.js +2 -1
- package/dist/admin/components/AdminLayout.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts +17 -9
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +44 -34
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminPageHeader.d.ts +23 -0
- package/dist/admin/components/AdminPageHeader.d.ts.map +1 -0
- package/dist/admin/components/AdminPageHeader.js +32 -0
- package/dist/admin/components/AdminPageHeader.js.map +1 -0
- package/dist/admin/components/AdminTopBar.d.ts +13 -0
- package/dist/admin/components/AdminTopBar.d.ts.map +1 -0
- package/dist/admin/components/AdminTopBar.js +48 -0
- package/dist/admin/components/AdminTopBar.js.map +1 -0
- package/dist/admin/components/AdminUserMenu.d.ts +3 -1
- package/dist/admin/components/AdminUserMenu.d.ts.map +1 -1
- package/dist/admin/components/AdminUserMenu.js +2 -2
- package/dist/admin/components/AdminUserMenu.js.map +1 -1
- package/dist/admin/components/CustomerAddressPanel.js +2 -2
- package/dist/admin/components/CustomerAddressPanel.js.map +1 -1
- package/dist/admin/components/CustomerDetails.d.ts.map +1 -1
- package/dist/admin/components/CustomerDetails.js +3 -2
- package/dist/admin/components/CustomerDetails.js.map +1 -1
- package/dist/admin/components/CustomerGroupsManager.d.ts.map +1 -1
- package/dist/admin/components/CustomerGroupsManager.js +2 -2
- package/dist/admin/components/CustomerGroupsManager.js.map +1 -1
- package/dist/admin/components/CustomerTable.d.ts.map +1 -1
- package/dist/admin/components/CustomerTable.js +6 -12
- package/dist/admin/components/CustomerTable.js.map +1 -1
- package/dist/admin/components/DiscountsManager.d.ts.map +1 -1
- package/dist/admin/components/DiscountsManager.js +6 -5
- package/dist/admin/components/DiscountsManager.js.map +1 -1
- package/dist/admin/components/EmailsManager.d.ts.map +1 -1
- package/dist/admin/components/EmailsManager.js +11 -10
- package/dist/admin/components/EmailsManager.js.map +1 -1
- package/dist/admin/components/FilesManager.d.ts.map +1 -1
- package/dist/admin/components/FilesManager.js +3 -2
- package/dist/admin/components/FilesManager.js.map +1 -1
- package/dist/admin/components/InviteUserDialog.js +1 -1
- package/dist/admin/components/InviteUserDialog.js.map +1 -1
- package/dist/admin/components/LocationsManager.d.ts.map +1 -1
- package/dist/admin/components/LocationsManager.js +3 -2
- package/dist/admin/components/LocationsManager.js.map +1 -1
- package/dist/admin/components/OrderDetails.d.ts.map +1 -1
- package/dist/admin/components/OrderDetails.js +3 -2
- package/dist/admin/components/OrderDetails.js.map +1 -1
- package/dist/admin/components/PaymentMethodsManager.d.ts.map +1 -1
- package/dist/admin/components/PaymentMethodsManager.js +2 -2
- package/dist/admin/components/PaymentMethodsManager.js.map +1 -1
- package/dist/admin/components/PaymentSettings.d.ts.map +1 -1
- package/dist/admin/components/PaymentSettings.js +3 -2
- package/dist/admin/components/PaymentSettings.js.map +1 -1
- package/dist/admin/components/ProductForm.js +1 -1
- package/dist/admin/components/ProductForm.js.map +1 -1
- package/dist/admin/components/ShippingSettings.d.ts.map +1 -1
- package/dist/admin/components/ShippingSettings.js +2 -1
- package/dist/admin/components/ShippingSettings.js.map +1 -1
- package/dist/admin/components/TaxSettings.d.ts.map +1 -1
- package/dist/admin/components/TaxSettings.js +3 -2
- package/dist/admin/components/TaxSettings.js.map +1 -1
- package/dist/admin/components/UsersTable.d.ts.map +1 -1
- package/dist/admin/components/UsersTable.js +8 -2
- package/dist/admin/components/UsersTable.js.map +1 -1
- package/dist/admin/components/emails/ColorField.d.ts.map +1 -1
- package/dist/admin/components/emails/ColorField.js +1 -0
- package/dist/admin/components/emails/ColorField.js.map +1 -1
- package/dist/admin/components/index.d.ts +4 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +2 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/hooks/useAdminSession.d.ts.map +1 -1
- package/dist/admin/hooks/useAdminSession.js +14 -2
- package/dist/admin/hooks/useAdminSession.js.map +1 -1
- package/dist/admin/index.d.ts +2 -2
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +5 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/styles/admin-theme.css +321 -15
- package/dist/analytics/components/AnalyticsTabNav.d.ts +5 -2
- package/dist/analytics/components/AnalyticsTabNav.d.ts.map +1 -1
- package/dist/analytics/components/AnalyticsTabNav.js +1 -1
- package/dist/analytics/components/AnalyticsTabNav.js.map +1 -1
- package/package.json +1 -1
|
@@ -1090,7 +1090,8 @@
|
|
|
1090
1090
|
font-size: var(--admin-text-2xs);
|
|
1091
1091
|
font-weight: var(--admin-font-semibold);
|
|
1092
1092
|
text-transform: uppercase;
|
|
1093
|
-
|
|
1093
|
+
/* Matches the page-header eyebrow — ONE eyebrow spec across the system. */
|
|
1094
|
+
letter-spacing: 0.14em;
|
|
1094
1095
|
color: hsl(var(--admin-sidebar-foreground-muted) / 0.75);
|
|
1095
1096
|
}
|
|
1096
1097
|
|
|
@@ -1135,17 +1136,20 @@
|
|
|
1135
1136
|
}
|
|
1136
1137
|
|
|
1137
1138
|
.rovela-admin-theme .admin-sidebar-item-icon {
|
|
1138
|
-
|
|
1139
|
-
|
|
1139
|
+
/* 16px at 1.5 stroke beside 13px labels (LAW 07) — was 18px / 2. */
|
|
1140
|
+
width: 1rem;
|
|
1141
|
+
height: 1rem;
|
|
1140
1142
|
flex-shrink: 0;
|
|
1141
1143
|
}
|
|
1142
1144
|
|
|
1143
1145
|
/* Sidebar item icon (svg) - ensure consistent sizing */
|
|
1144
1146
|
.rovela-admin-theme .admin-sidebar-item svg,
|
|
1145
1147
|
.rovela-admin-theme .admin-sidebar-item-svg {
|
|
1146
|
-
width:
|
|
1147
|
-
height:
|
|
1148
|
+
width: 1rem;
|
|
1149
|
+
height: 1rem;
|
|
1148
1150
|
flex-shrink: 0;
|
|
1151
|
+
/* CSS presentation property beats lucide's stroke-width="2" attribute. */
|
|
1152
|
+
stroke-width: 1.5;
|
|
1149
1153
|
}
|
|
1150
1154
|
|
|
1151
1155
|
/* Sidebar item label */
|
|
@@ -4174,13 +4178,12 @@
|
|
|
4174
4178
|
}
|
|
4175
4179
|
|
|
4176
4180
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
4177
|
-
PAGE HEADER
|
|
4181
|
+
PAGE HEADER — quiet since the 2026-07 sidebar revamp.
|
|
4178
4182
|
|
|
4179
|
-
The
|
|
4180
|
-
band
|
|
4181
|
-
|
|
4182
|
-
|
|
4183
|
-
read as Rovela at a glance.
|
|
4183
|
+
The accent wash + hairline moved UP into the AdminTopBar (the app's one
|
|
4184
|
+
identity band, Shopify's architecture). Page headers keep their structure
|
|
4185
|
+
(eyebrow / title / subtitle / actions via AdminPageHeader) but sit plainly
|
|
4186
|
+
on the cream — fewer horizontal lines, calmer chrome, nothing to misalign.
|
|
4184
4187
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
4185
4188
|
|
|
4186
4189
|
.rovela-admin-theme .admin-page-header {
|
|
@@ -4189,10 +4192,8 @@
|
|
|
4189
4192
|
justify-content: space-between;
|
|
4190
4193
|
flex-wrap: wrap;
|
|
4191
4194
|
gap: var(--admin-space-4);
|
|
4192
|
-
|
|
4193
|
-
|
|
4194
|
-
background: linear-gradient(to bottom, hsl(var(--admin-accent) / 0.055), transparent);
|
|
4195
|
-
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border) / 0.7);
|
|
4195
|
+
padding-top: var(--admin-space-1);
|
|
4196
|
+
margin-bottom: var(--admin-space-2);
|
|
4196
4197
|
}
|
|
4197
4198
|
|
|
4198
4199
|
.rovela-admin-theme .admin-page-header-eyebrow {
|
|
@@ -4217,6 +4218,54 @@
|
|
|
4217
4218
|
gap: var(--admin-space-2);
|
|
4218
4219
|
}
|
|
4219
4220
|
|
|
4221
|
+
/* AdminPageHeader structural slots (2026-07 architecture pass). The header
|
|
4222
|
+
is the ONE place a page states its title + primary action; managers no
|
|
4223
|
+
longer duplicate it in a card header. */
|
|
4224
|
+
.rovela-admin-theme .admin-page-header-main {
|
|
4225
|
+
display: flex;
|
|
4226
|
+
align-items: flex-start;
|
|
4227
|
+
gap: var(--admin-space-3);
|
|
4228
|
+
min-width: 0;
|
|
4229
|
+
}
|
|
4230
|
+
|
|
4231
|
+
.rovela-admin-theme .admin-page-header-titles {
|
|
4232
|
+
min-width: 0;
|
|
4233
|
+
}
|
|
4234
|
+
|
|
4235
|
+
/* Framed 28px back affordance — replaces the floating bare-arrow pattern. */
|
|
4236
|
+
.rovela-admin-theme .admin-page-header-back {
|
|
4237
|
+
display: inline-flex;
|
|
4238
|
+
align-items: center;
|
|
4239
|
+
justify-content: center;
|
|
4240
|
+
width: 1.75rem;
|
|
4241
|
+
height: 1.75rem;
|
|
4242
|
+
flex: none;
|
|
4243
|
+
margin-top: 1px;
|
|
4244
|
+
border-radius: var(--admin-radius-sm);
|
|
4245
|
+
border: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
4246
|
+
background: hsl(var(--admin-card));
|
|
4247
|
+
color: hsl(var(--admin-foreground-muted));
|
|
4248
|
+
cursor: pointer;
|
|
4249
|
+
transition: background var(--admin-transition-fast), color var(--admin-transition-fast),
|
|
4250
|
+
border-color var(--admin-transition-fast);
|
|
4251
|
+
}
|
|
4252
|
+
|
|
4253
|
+
.rovela-admin-theme .admin-page-header-back:hover {
|
|
4254
|
+
background: hsl(var(--admin-sidebar-hover));
|
|
4255
|
+
border-color: hsl(var(--admin-border-hover));
|
|
4256
|
+
color: hsl(var(--admin-foreground));
|
|
4257
|
+
}
|
|
4258
|
+
|
|
4259
|
+
/* Title row carries an optional inline status badge — flex keeps the badge
|
|
4260
|
+
optically centered against the 20px title. */
|
|
4261
|
+
.rovela-admin-theme .admin-page-header .admin-page-title {
|
|
4262
|
+
display: flex;
|
|
4263
|
+
align-items: center;
|
|
4264
|
+
flex-wrap: wrap;
|
|
4265
|
+
gap: var(--admin-space-2-5);
|
|
4266
|
+
min-width: 0;
|
|
4267
|
+
}
|
|
4268
|
+
|
|
4220
4269
|
/* Narrow content column for settings/detail pages (tables stay full width). */
|
|
4221
4270
|
.rovela-admin-theme .admin-content-narrow {
|
|
4222
4271
|
max-width: 60rem;
|
|
@@ -4375,3 +4424,260 @@ a.rovela-admin-theme .admin-id:hover,
|
|
|
4375
4424
|
.rovela-admin-theme .admin-stat-icon {
|
|
4376
4425
|
display: none;
|
|
4377
4426
|
}
|
|
4427
|
+
|
|
4428
|
+
/* ═══════════════════════════════════════════════════════════════════════════
|
|
4429
|
+
TOP BAR + SLIM SIDEBAR — 2026-07 sidebar revamp (Shopify's architecture)
|
|
4430
|
+
|
|
4431
|
+
Identity moved OUT of the sidebar into a 52px sticky top bar spanning the
|
|
4432
|
+
full width. The top bar carries the app's ONE accent wash + hairline (the
|
|
4433
|
+
page headers went quiet); the sidebar below is pure navigation with its
|
|
4434
|
+
own scroll region, hidden-until-hover scrollbar and directional fade
|
|
4435
|
+
indicators. All classes here are ADDITIVE — the legacy .admin-layout /
|
|
4436
|
+
.admin-sidebar-header / .admin-sidebar-link rules above stay for stores
|
|
4437
|
+
pinned to older SDKs and CC-authored custom chrome.
|
|
4438
|
+
═══════════════════════════════════════════════════════════════════════════ */
|
|
4439
|
+
|
|
4440
|
+
.rovela-admin-theme {
|
|
4441
|
+
--admin-topbar-h: 3.25rem; /* 52px */
|
|
4442
|
+
}
|
|
4443
|
+
|
|
4444
|
+
/* ── Shell: top bar over (sidebar | main) ─────────────────────────────── */
|
|
4445
|
+
.rovela-admin-theme .admin-shell {
|
|
4446
|
+
display: flex;
|
|
4447
|
+
flex-direction: column;
|
|
4448
|
+
height: 100vh;
|
|
4449
|
+
width: 100%;
|
|
4450
|
+
}
|
|
4451
|
+
|
|
4452
|
+
.rovela-admin-theme .admin-shell-body {
|
|
4453
|
+
display: flex;
|
|
4454
|
+
flex: 1;
|
|
4455
|
+
min-height: 0;
|
|
4456
|
+
width: 100%;
|
|
4457
|
+
}
|
|
4458
|
+
|
|
4459
|
+
/* ── Top bar — the identity band ──────────────────────────────────────── */
|
|
4460
|
+
.rovela-admin-theme .admin-topbar {
|
|
4461
|
+
display: flex;
|
|
4462
|
+
align-items: center;
|
|
4463
|
+
justify-content: space-between;
|
|
4464
|
+
gap: var(--admin-space-4);
|
|
4465
|
+
height: var(--admin-topbar-h);
|
|
4466
|
+
flex-shrink: 0;
|
|
4467
|
+
padding: 0 var(--admin-space-3) 0 var(--admin-space-4);
|
|
4468
|
+
background:
|
|
4469
|
+
linear-gradient(to bottom, hsl(var(--admin-accent) / 0.05), hsl(var(--admin-accent) / 0.012)),
|
|
4470
|
+
hsl(var(--admin-sidebar));
|
|
4471
|
+
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border) / 0.7);
|
|
4472
|
+
position: relative;
|
|
4473
|
+
z-index: var(--admin-z-sticky, 40);
|
|
4474
|
+
}
|
|
4475
|
+
|
|
4476
|
+
.rovela-admin-theme .admin-topbar-brand {
|
|
4477
|
+
display: flex;
|
|
4478
|
+
align-items: center;
|
|
4479
|
+
gap: var(--admin-space-2-5);
|
|
4480
|
+
min-width: 0;
|
|
4481
|
+
text-decoration: none;
|
|
4482
|
+
color: inherit;
|
|
4483
|
+
}
|
|
4484
|
+
|
|
4485
|
+
/* Framed logo tile: merchant logos are arbitrary — the tile makes them all
|
|
4486
|
+
read clean. White + hairline when an image exists; ink monogram fallback
|
|
4487
|
+
(never the accent — LAW 02). */
|
|
4488
|
+
.rovela-admin-theme .admin-brand-tile {
|
|
4489
|
+
display: flex;
|
|
4490
|
+
align-items: center;
|
|
4491
|
+
justify-content: center;
|
|
4492
|
+
width: 1.75rem;
|
|
4493
|
+
height: 1.75rem;
|
|
4494
|
+
border-radius: var(--admin-radius-sm);
|
|
4495
|
+
background: hsl(var(--admin-card));
|
|
4496
|
+
border: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
4497
|
+
box-shadow: var(--admin-shadow-sm);
|
|
4498
|
+
overflow: hidden;
|
|
4499
|
+
flex-shrink: 0;
|
|
4500
|
+
}
|
|
4501
|
+
|
|
4502
|
+
.rovela-admin-theme .admin-brand-tile img {
|
|
4503
|
+
width: 100%;
|
|
4504
|
+
height: 100%;
|
|
4505
|
+
object-fit: contain;
|
|
4506
|
+
padding: 2px;
|
|
4507
|
+
}
|
|
4508
|
+
|
|
4509
|
+
.rovela-admin-theme .admin-brand-tile-monogram {
|
|
4510
|
+
background: hsl(var(--admin-foreground));
|
|
4511
|
+
border-color: hsl(var(--admin-foreground));
|
|
4512
|
+
color: hsl(var(--admin-background));
|
|
4513
|
+
font-size: var(--admin-text-xs);
|
|
4514
|
+
font-weight: var(--admin-font-bold);
|
|
4515
|
+
}
|
|
4516
|
+
|
|
4517
|
+
.rovela-admin-theme .admin-brand-tile-skeleton {
|
|
4518
|
+
display: block;
|
|
4519
|
+
width: 100%;
|
|
4520
|
+
height: 100%;
|
|
4521
|
+
}
|
|
4522
|
+
|
|
4523
|
+
.rovela-admin-theme .admin-topbar-store {
|
|
4524
|
+
font-size: var(--admin-text-md);
|
|
4525
|
+
font-weight: var(--admin-font-bold);
|
|
4526
|
+
white-space: nowrap;
|
|
4527
|
+
overflow: hidden;
|
|
4528
|
+
text-overflow: ellipsis;
|
|
4529
|
+
}
|
|
4530
|
+
|
|
4531
|
+
.rovela-admin-theme .admin-topbar-name-skeleton {
|
|
4532
|
+
display: inline-block;
|
|
4533
|
+
width: 6rem;
|
|
4534
|
+
height: 0.875rem;
|
|
4535
|
+
border-radius: var(--admin-radius-xs);
|
|
4536
|
+
}
|
|
4537
|
+
|
|
4538
|
+
.rovela-admin-theme .admin-topbar-tag {
|
|
4539
|
+
font-size: 0.625rem;
|
|
4540
|
+
font-weight: var(--admin-font-bold);
|
|
4541
|
+
letter-spacing: 0.08em;
|
|
4542
|
+
text-transform: uppercase;
|
|
4543
|
+
color: hsl(var(--admin-foreground-muted));
|
|
4544
|
+
background: hsl(var(--admin-sidebar-hover));
|
|
4545
|
+
border-radius: var(--admin-radius-full);
|
|
4546
|
+
padding: 2px 7px;
|
|
4547
|
+
flex-shrink: 0;
|
|
4548
|
+
}
|
|
4549
|
+
|
|
4550
|
+
.rovela-admin-theme .admin-topbar-actions {
|
|
4551
|
+
display: flex;
|
|
4552
|
+
align-items: center;
|
|
4553
|
+
gap: 2px;
|
|
4554
|
+
flex-shrink: 0;
|
|
4555
|
+
}
|
|
4556
|
+
|
|
4557
|
+
.rovela-admin-theme .admin-topbar-btn {
|
|
4558
|
+
display: inline-flex;
|
|
4559
|
+
align-items: center;
|
|
4560
|
+
gap: var(--admin-space-1-5);
|
|
4561
|
+
height: 1.75rem;
|
|
4562
|
+
padding: 0 var(--admin-space-2-5);
|
|
4563
|
+
border-radius: var(--admin-radius-sm);
|
|
4564
|
+
font-size: var(--admin-text-xs);
|
|
4565
|
+
font-weight: var(--admin-font-semibold);
|
|
4566
|
+
color: hsl(var(--admin-foreground-muted));
|
|
4567
|
+
text-decoration: none;
|
|
4568
|
+
transition: background var(--admin-transition-fast), color var(--admin-transition-fast);
|
|
4569
|
+
}
|
|
4570
|
+
|
|
4571
|
+
.rovela-admin-theme .admin-topbar-btn:hover {
|
|
4572
|
+
background: hsl(var(--admin-foreground) / 0.05);
|
|
4573
|
+
color: hsl(var(--admin-foreground));
|
|
4574
|
+
}
|
|
4575
|
+
|
|
4576
|
+
.rovela-admin-theme .admin-topbar-divider {
|
|
4577
|
+
width: var(--admin-border-width);
|
|
4578
|
+
height: 1rem;
|
|
4579
|
+
background: hsl(var(--admin-border));
|
|
4580
|
+
margin: 0 var(--admin-space-1-5);
|
|
4581
|
+
}
|
|
4582
|
+
|
|
4583
|
+
/* Compact account trigger in the top bar: avatar + chevron, ghost. */
|
|
4584
|
+
.rovela-admin-theme .admin-topbar .admin-user-menu-btn {
|
|
4585
|
+
background: transparent;
|
|
4586
|
+
border: none;
|
|
4587
|
+
padding: var(--admin-space-1);
|
|
4588
|
+
gap: var(--admin-space-1);
|
|
4589
|
+
border-radius: var(--admin-radius-full);
|
|
4590
|
+
}
|
|
4591
|
+
|
|
4592
|
+
.rovela-admin-theme .admin-topbar .admin-user-menu-btn:hover {
|
|
4593
|
+
background: hsl(var(--admin-foreground) / 0.05);
|
|
4594
|
+
}
|
|
4595
|
+
|
|
4596
|
+
/* Identity is never painted wrong — skeleton slots while loading. */
|
|
4597
|
+
.rovela-admin-theme .admin-avatar-skeleton {
|
|
4598
|
+
display: block;
|
|
4599
|
+
width: 100%;
|
|
4600
|
+
height: 100%;
|
|
4601
|
+
border-radius: var(--admin-radius-full);
|
|
4602
|
+
}
|
|
4603
|
+
|
|
4604
|
+
.rovela-admin-theme .admin-user-menu-name-skeleton {
|
|
4605
|
+
display: inline-block;
|
|
4606
|
+
width: 5rem;
|
|
4607
|
+
height: 0.75rem;
|
|
4608
|
+
border-radius: var(--admin-radius-xs);
|
|
4609
|
+
}
|
|
4610
|
+
|
|
4611
|
+
/* ── Slim sidebar — navigation only, own scroll region ────────────────── */
|
|
4612
|
+
.rovela-admin-theme .admin-sidebar-slim {
|
|
4613
|
+
min-height: 0;
|
|
4614
|
+
height: 100%;
|
|
4615
|
+
flex-shrink: 0;
|
|
4616
|
+
}
|
|
4617
|
+
|
|
4618
|
+
.rovela-admin-theme .admin-sidebar-scrollwrap {
|
|
4619
|
+
position: relative;
|
|
4620
|
+
flex: 1;
|
|
4621
|
+
min-height: 0;
|
|
4622
|
+
display: flex;
|
|
4623
|
+
flex-direction: column;
|
|
4624
|
+
}
|
|
4625
|
+
|
|
4626
|
+
.rovela-admin-theme .admin-sidebar-slim .admin-sidebar-nav {
|
|
4627
|
+
flex: 1;
|
|
4628
|
+
min-height: 0;
|
|
4629
|
+
overflow-y: auto;
|
|
4630
|
+
/* Scrollbar hidden until hover — the fades are the indicator. */
|
|
4631
|
+
scrollbar-width: none;
|
|
4632
|
+
}
|
|
4633
|
+
|
|
4634
|
+
.rovela-admin-theme .admin-sidebar-slim .admin-sidebar-nav::-webkit-scrollbar {
|
|
4635
|
+
width: 0;
|
|
4636
|
+
height: 0;
|
|
4637
|
+
}
|
|
4638
|
+
|
|
4639
|
+
.rovela-admin-theme .admin-sidebar-slim:hover .admin-sidebar-nav {
|
|
4640
|
+
scrollbar-width: thin;
|
|
4641
|
+
scrollbar-color: hsl(var(--admin-border-hover)) transparent;
|
|
4642
|
+
}
|
|
4643
|
+
|
|
4644
|
+
.rovela-admin-theme .admin-sidebar-slim:hover .admin-sidebar-nav::-webkit-scrollbar {
|
|
4645
|
+
width: 6px;
|
|
4646
|
+
}
|
|
4647
|
+
|
|
4648
|
+
.rovela-admin-theme .admin-sidebar-slim:hover .admin-sidebar-nav::-webkit-scrollbar-thumb {
|
|
4649
|
+
background: hsl(var(--admin-border-hover));
|
|
4650
|
+
border-radius: var(--admin-radius-full);
|
|
4651
|
+
}
|
|
4652
|
+
|
|
4653
|
+
/* Directional fades — each shows ONLY while content continues that way. */
|
|
4654
|
+
.rovela-admin-theme .admin-sidebar-fade {
|
|
4655
|
+
position: absolute;
|
|
4656
|
+
left: 0;
|
|
4657
|
+
right: 0;
|
|
4658
|
+
height: 2rem;
|
|
4659
|
+
pointer-events: none;
|
|
4660
|
+
opacity: 0;
|
|
4661
|
+
transition: opacity var(--admin-transition-base);
|
|
4662
|
+
z-index: 2;
|
|
4663
|
+
}
|
|
4664
|
+
|
|
4665
|
+
.rovela-admin-theme .admin-sidebar-fade-up {
|
|
4666
|
+
top: 0;
|
|
4667
|
+
background: linear-gradient(to top, hsl(var(--admin-sidebar) / 0), hsl(var(--admin-sidebar)) 80%);
|
|
4668
|
+
}
|
|
4669
|
+
|
|
4670
|
+
.rovela-admin-theme .admin-sidebar-fade-down {
|
|
4671
|
+
bottom: 0;
|
|
4672
|
+
background: linear-gradient(to bottom, hsl(var(--admin-sidebar) / 0), hsl(var(--admin-sidebar)) 80%);
|
|
4673
|
+
}
|
|
4674
|
+
|
|
4675
|
+
.rovela-admin-theme .admin-sidebar-fade.show {
|
|
4676
|
+
opacity: 1;
|
|
4677
|
+
}
|
|
4678
|
+
|
|
4679
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4680
|
+
.rovela-admin-theme .admin-sidebar-fade {
|
|
4681
|
+
transition: none;
|
|
4682
|
+
}
|
|
4683
|
+
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export interface AnalyticsTabNavProps {
|
|
2
|
-
/** Header above the tab strip (default: 'Insights').
|
|
3
|
-
|
|
2
|
+
/** Header above the tab strip (default: 'Insights'). Pass `null` to render
|
|
3
|
+
* ONLY the tab strip — used by the store admin, where the page header is
|
|
4
|
+
* owned by AdminPageHeader (LEDGER page architecture) and this component
|
|
5
|
+
* must not emit a second title. The platform mirror keeps the default. */
|
|
6
|
+
title?: string | null;
|
|
4
7
|
/** Subtitle under the header (optional). */
|
|
5
8
|
subtitle?: string;
|
|
6
9
|
/** Base href for the three tab routes. Defaults to the admin path so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsTabNav.d.ts","sourceRoot":"","sources":["../../../src/analytics/components/AnalyticsTabNav.tsx"],"names":[],"mappings":"AAkBA,MAAM,WAAW,oBAAoB;IACnC
|
|
1
|
+
{"version":3,"file":"AnalyticsTabNav.d.ts","sourceRoot":"","sources":["../../../src/analytics/components/AnalyticsTabNav.tsx"],"names":[],"mappings":"AAkBA,MAAM,WAAW,oBAAoB;IACnC;;;+EAG2E;IAC3E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;oEAEgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAwBD,wBAAgB,eAAe,CAAC,EAC9B,KAAkB,EAClB,QAAQ,EACR,QAA6B,EAC7B,QAAQ,GACT,EAAE,oBAAoB,2CAkDtB"}
|
|
@@ -32,7 +32,7 @@ function resolveActiveTab(pathname, baseHref) {
|
|
|
32
32
|
export function AnalyticsTabNav({ title = 'Insights', subtitle, baseHref = '/admin/analytics', trailing, }) {
|
|
33
33
|
const pathname = usePathname();
|
|
34
34
|
const active = resolveActiveTab(pathname, baseHref);
|
|
35
|
-
return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold text-foreground sm:text-3xl", children: title }), subtitle && (_jsx("p", { className: "mt-1 text-muted-foreground", children: subtitle }))] }), trailing && _jsx("div", { className: "flex items-center gap-2", children: trailing })] }), _jsx("div", { className: "border-b border-border", children: _jsx("nav", { className: "-mb-px flex gap-6", children: TABS.map((tab) => {
|
|
35
|
+
return (_jsxs("div", { className: "space-y-4", children: [title !== null && (_jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold text-foreground sm:text-3xl", children: title }), subtitle && (_jsx("p", { className: "mt-1 text-muted-foreground", children: subtitle }))] }), trailing && _jsx("div", { className: "flex items-center gap-2", children: trailing })] })), title === null && trailing && (_jsx("div", { className: "flex items-center justify-end gap-2", children: trailing })), _jsx("div", { className: "border-b border-border", children: _jsx("nav", { className: "-mb-px flex gap-6", children: TABS.map((tab) => {
|
|
36
36
|
const isActive = active === tab.id;
|
|
37
37
|
return (_jsx(Link, { href: `${baseHref}${tab.sub}`, "aria-current": isActive ? 'page' : undefined, className: isActive
|
|
38
38
|
? 'border-b-2 border-foreground px-1 pb-3 pt-1 text-sm font-semibold text-foreground'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsTabNav.js","sourceRoot":"","sources":["../../../src/analytics/components/AnalyticsTabNav.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;GAWG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"AnalyticsTabNav.js","sourceRoot":"","sources":["../../../src/analytics/components/AnalyticsTabNav.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;GAWG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAyB7C,MAAM,IAAI,GAAU;IAClB,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE;IAClD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE;IACjD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE;CACxD,CAAA;AAED,SAAS,gBAAgB,CAAC,QAAuB,EAAE,QAAgB;IACjE,IAAI,CAAC,QAAQ;QAAE,OAAO,YAAY,CAAA;IAClC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAA;IAClF,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QACnE,OAAO,UAAU,CAAA;IACnB,0DAA0D;IAC1D,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;AACpE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,GAAG,UAAU,EAClB,QAAQ,EACR,QAAQ,GAAG,kBAAkB,EAC7B,QAAQ,GACa;IACrB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAEnD,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aAGvB,KAAK,KAAK,IAAI,IAAI,CACjB,eAAK,SAAS,EAAC,oEAAoE,aACjF,0BACE,aAAI,SAAS,EAAC,gDAAgD,YAC3D,KAAK,GACH,EACJ,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,4BAA4B,YAAE,QAAQ,GAAK,CACzD,IACG,EACL,QAAQ,IAAI,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAO,IAClE,CACP,EACA,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,CAC7B,cAAK,SAAS,EAAC,qCAAqC,YAAE,QAAQ,GAAO,CACtE,EAGD,cAAK,SAAS,EAAC,wBAAwB,YACrC,cAAK,SAAS,EAAC,mBAAmB,YAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;wBAChB,MAAM,QAAQ,GAAG,MAAM,KAAK,GAAG,CAAC,EAAE,CAAA;wBAClC,OAAO,CACL,KAAC,IAAI,IAEH,IAAI,EAAE,GAAG,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,kBACf,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAC3C,SAAS,EACP,QAAQ;gCACN,CAAC,CAAC,mFAAmF;gCACrF,CAAC,CAAC,gIAAgI,YAGrI,GAAG,CAAC,KAAK,IATL,GAAG,CAAC,EAAE,CAUN,CACR,CAAA;oBACH,CAAC,CAAC,GACE,GACF,IAEF,CACP,CAAA;AACH,CAAC"}
|