@rovela-ai/sdk 0.19.0 → 0.19.2
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/AdminLayout.d.ts +9 -2
- package/dist/admin/components/AdminLayout.d.ts.map +1 -1
- package/dist/admin/components/AdminLayout.js +40 -2
- package/dist/admin/components/AdminLayout.js.map +1 -1
- package/dist/admin/components/AdminModal.d.ts +2 -1
- package/dist/admin/components/AdminModal.d.ts.map +1 -1
- package/dist/admin/components/AdminModal.js +3 -19
- package/dist/admin/components/AdminModal.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts +5 -1
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +10 -5
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminTopBar.d.ts +3 -1
- package/dist/admin/components/AdminTopBar.d.ts.map +1 -1
- package/dist/admin/components/AdminTopBar.js +3 -3
- package/dist/admin/components/AdminTopBar.js.map +1 -1
- package/dist/admin/components/CookieBannerConfigurator.js +3 -3
- package/dist/admin/components/CookieBannerConfigurator.js.map +1 -1
- package/dist/admin/components/CustomerDetails.js +1 -1
- package/dist/admin/components/CustomerDetails.js.map +1 -1
- package/dist/admin/components/CustomerTable.d.ts.map +1 -1
- package/dist/admin/components/CustomerTable.js +11 -11
- package/dist/admin/components/CustomerTable.js.map +1 -1
- package/dist/admin/components/OrderTable.js +3 -3
- package/dist/admin/components/OrderTable.js.map +1 -1
- package/dist/admin/components/ProductTable.js +4 -4
- package/dist/admin/components/ProductTable.js.map +1 -1
- package/dist/admin/components/RecentOrders.d.ts.map +1 -1
- package/dist/admin/components/RecentOrders.js +6 -3
- package/dist/admin/components/RecentOrders.js.map +1 -1
- package/dist/admin/components/ShippingSettings.js +2 -2
- package/dist/admin/components/ShippingSettings.js.map +1 -1
- package/dist/admin/components/UsersTable.d.ts.map +1 -1
- package/dist/admin/components/UsersTable.js +18 -18
- package/dist/admin/components/UsersTable.js.map +1 -1
- package/dist/admin/components/emails/EmailPreviewPane.js +1 -1
- package/dist/admin/components/emails/EmailPreviewPane.js.map +1 -1
- package/dist/admin/components/scroll-lock.d.ts +11 -0
- package/dist/admin/components/scroll-lock.d.ts.map +1 -0
- package/dist/admin/components/scroll-lock.js +24 -0
- package/dist/admin/components/scroll-lock.js.map +1 -0
- package/dist/admin/styles/admin-theme.css +346 -0
- package/dist/analytics/views/DashboardsView.js +6 -2
- package/dist/analytics/views/DashboardsView.js.map +1 -1
- package/dist/analytics/views/EventsView.d.ts.map +1 -1
- package/dist/analytics/views/EventsView.js +6 -6
- package/dist/analytics/views/EventsView.js.map +1 -1
- package/dist/analytics/views/VisitorsView.d.ts.map +1 -1
- package/dist/analytics/views/VisitorsView.js +3 -3
- package/dist/analytics/views/VisitorsView.js.map +1 -1
- package/dist/core/db/queries.d.ts +35 -31
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +15 -4
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +1 -1
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +3 -1
- package/dist/core/db/schema.js.map +1 -1
- package/package.json +1 -1
|
@@ -5234,3 +5234,349 @@ body[data-admin-savebar] .rovela-admin-theme .admin-toaster {
|
|
|
5234
5234
|
.rovela-admin-theme .lucide {
|
|
5235
5235
|
stroke-width: 1.5;
|
|
5236
5236
|
}
|
|
5237
|
+
|
|
5238
|
+
/* ═══════════════════════════════════════════════════════════════════════════
|
|
5239
|
+
MOBILE (2026-07 responsiveness pass — the LEDGER at thumb size)
|
|
5240
|
+
Additive only. One shell pivot at 767px (matches the save bar's existing
|
|
5241
|
+
mobile rule and stays desktop inside the platform's preview iframe);
|
|
5242
|
+
sheets at 639px; column priority at 479px; touch sizing via pointer
|
|
5243
|
+
media queries, never width.
|
|
5244
|
+
═══════════════════════════════════════════════════════════════════════════ */
|
|
5245
|
+
|
|
5246
|
+
/* ── Shell chrome defaults (desktop: burger + drawer head + scrim inert) ── */
|
|
5247
|
+
.rovela-admin-theme .admin-topbar-burger {
|
|
5248
|
+
display: none;
|
|
5249
|
+
}
|
|
5250
|
+
|
|
5251
|
+
.rovela-admin-theme .admin-nav-drawer-head {
|
|
5252
|
+
display: none;
|
|
5253
|
+
}
|
|
5254
|
+
|
|
5255
|
+
.rovela-admin-theme .admin-nav-backdrop {
|
|
5256
|
+
display: none;
|
|
5257
|
+
}
|
|
5258
|
+
|
|
5259
|
+
/* Row ⋯ menus can never exceed the viewport (safe at every width). */
|
|
5260
|
+
.rovela-admin-theme .admin-dropdown-content {
|
|
5261
|
+
max-width: calc(100vw - 2rem);
|
|
5262
|
+
}
|
|
5263
|
+
|
|
5264
|
+
/* ── The shell pivot: sidebar → overlay drawer ─────────────────────────── */
|
|
5265
|
+
@media (max-width: 767px) {
|
|
5266
|
+
/* Hamburger in the top bar */
|
|
5267
|
+
.rovela-admin-theme .admin-topbar-burger {
|
|
5268
|
+
display: flex;
|
|
5269
|
+
align-items: center;
|
|
5270
|
+
justify-content: center;
|
|
5271
|
+
width: 2.5rem;
|
|
5272
|
+
height: 2.5rem;
|
|
5273
|
+
margin-left: calc(-1 * var(--admin-space-2));
|
|
5274
|
+
border: none;
|
|
5275
|
+
background: none;
|
|
5276
|
+
border-radius: var(--admin-radius-md);
|
|
5277
|
+
color: hsl(var(--admin-foreground));
|
|
5278
|
+
cursor: pointer;
|
|
5279
|
+
flex-shrink: 0;
|
|
5280
|
+
}
|
|
5281
|
+
|
|
5282
|
+
.rovela-admin-theme .admin-topbar-burger:hover {
|
|
5283
|
+
background: hsl(var(--admin-background-subtle));
|
|
5284
|
+
}
|
|
5285
|
+
|
|
5286
|
+
/* Top bar tightens; View/Edit pills go icon-only (aria-labels carry the
|
|
5287
|
+
names); the Admin chip yields to the store name. */
|
|
5288
|
+
.rovela-admin-theme .admin-topbar {
|
|
5289
|
+
padding-left: var(--admin-space-3);
|
|
5290
|
+
padding-right: var(--admin-space-3);
|
|
5291
|
+
gap: var(--admin-space-2);
|
|
5292
|
+
}
|
|
5293
|
+
|
|
5294
|
+
.rovela-admin-theme .admin-topbar-btn-label {
|
|
5295
|
+
display: none;
|
|
5296
|
+
}
|
|
5297
|
+
|
|
5298
|
+
.rovela-admin-theme .admin-topbar-btn {
|
|
5299
|
+
width: 2.25rem;
|
|
5300
|
+
height: 2.25rem;
|
|
5301
|
+
padding: 0;
|
|
5302
|
+
justify-content: center;
|
|
5303
|
+
}
|
|
5304
|
+
|
|
5305
|
+
.rovela-admin-theme .admin-topbar-divider {
|
|
5306
|
+
display: none;
|
|
5307
|
+
}
|
|
5308
|
+
|
|
5309
|
+
/* The sidebar becomes a fixed overlay drawer: off-canvas by default,
|
|
5310
|
+
slid in by data-mobile-open. Pure CSS animation both directions. */
|
|
5311
|
+
.rovela-admin-theme .admin-sidebar {
|
|
5312
|
+
position: fixed;
|
|
5313
|
+
top: 0;
|
|
5314
|
+
bottom: 0;
|
|
5315
|
+
left: 0;
|
|
5316
|
+
width: 17rem;
|
|
5317
|
+
min-height: 0;
|
|
5318
|
+
z-index: 230; /* above content + topbar, below modals (250) */
|
|
5319
|
+
transform: translateX(-105%);
|
|
5320
|
+
transition: transform 200ms var(--admin-ease, cubic-bezier(0.2, 0, 0, 1));
|
|
5321
|
+
box-shadow: none;
|
|
5322
|
+
}
|
|
5323
|
+
|
|
5324
|
+
.rovela-admin-theme .admin-sidebar[data-mobile-open="true"] {
|
|
5325
|
+
transform: none;
|
|
5326
|
+
box-shadow: var(--admin-shadow-2xl);
|
|
5327
|
+
}
|
|
5328
|
+
|
|
5329
|
+
/* Scrim under the drawer — same visual family as the modal backdrop. */
|
|
5330
|
+
.rovela-admin-theme .admin-nav-backdrop {
|
|
5331
|
+
display: block;
|
|
5332
|
+
position: fixed;
|
|
5333
|
+
inset: 0;
|
|
5334
|
+
z-index: 220;
|
|
5335
|
+
background: rgb(0 0 0 / 0.5);
|
|
5336
|
+
backdrop-filter: blur(4px);
|
|
5337
|
+
opacity: 0;
|
|
5338
|
+
pointer-events: none;
|
|
5339
|
+
transition: opacity 200ms ease;
|
|
5340
|
+
}
|
|
5341
|
+
|
|
5342
|
+
.rovela-admin-theme .admin-nav-backdrop[data-open="true"] {
|
|
5343
|
+
opacity: 1;
|
|
5344
|
+
pointer-events: auto;
|
|
5345
|
+
}
|
|
5346
|
+
|
|
5347
|
+
/* Drawer head — the drawer overlays the top bar, so it carries its own
|
|
5348
|
+
identity + a 44px close. */
|
|
5349
|
+
.rovela-admin-theme .admin-nav-drawer-head {
|
|
5350
|
+
display: flex;
|
|
5351
|
+
align-items: center;
|
|
5352
|
+
gap: var(--admin-space-2-5);
|
|
5353
|
+
padding: var(--admin-space-3);
|
|
5354
|
+
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
5355
|
+
flex-shrink: 0;
|
|
5356
|
+
}
|
|
5357
|
+
|
|
5358
|
+
.rovela-admin-theme .admin-nav-drawer-name {
|
|
5359
|
+
display: flex;
|
|
5360
|
+
align-items: center;
|
|
5361
|
+
gap: var(--admin-space-2);
|
|
5362
|
+
min-width: 0;
|
|
5363
|
+
}
|
|
5364
|
+
|
|
5365
|
+
.rovela-admin-theme .admin-nav-drawer-name b {
|
|
5366
|
+
font-size: var(--admin-text-sm);
|
|
5367
|
+
font-weight: var(--admin-font-bold);
|
|
5368
|
+
overflow: hidden;
|
|
5369
|
+
text-overflow: ellipsis;
|
|
5370
|
+
white-space: nowrap;
|
|
5371
|
+
}
|
|
5372
|
+
|
|
5373
|
+
.rovela-admin-theme .admin-nav-drawer-x {
|
|
5374
|
+
margin-left: auto;
|
|
5375
|
+
display: flex;
|
|
5376
|
+
align-items: center;
|
|
5377
|
+
justify-content: center;
|
|
5378
|
+
width: 2.75rem;
|
|
5379
|
+
height: 2.75rem;
|
|
5380
|
+
margin-right: calc(-1 * var(--admin-space-2));
|
|
5381
|
+
border: none;
|
|
5382
|
+
background: none;
|
|
5383
|
+
border-radius: var(--admin-radius-md);
|
|
5384
|
+
color: hsl(var(--admin-foreground-muted));
|
|
5385
|
+
cursor: pointer;
|
|
5386
|
+
}
|
|
5387
|
+
|
|
5388
|
+
.rovela-admin-theme .admin-nav-drawer-x:hover {
|
|
5389
|
+
background: hsl(var(--admin-background-hover, var(--admin-background-subtle)));
|
|
5390
|
+
color: hsl(var(--admin-foreground));
|
|
5391
|
+
}
|
|
5392
|
+
|
|
5393
|
+
/* Drawer nav rows read at thumb size */
|
|
5394
|
+
.rovela-admin-theme .admin-sidebar .admin-sidebar-item {
|
|
5395
|
+
min-height: 2.75rem;
|
|
5396
|
+
}
|
|
5397
|
+
|
|
5398
|
+
/* Content breathes at phone width */
|
|
5399
|
+
.rovela-admin-theme .admin-layout-content {
|
|
5400
|
+
padding: var(--admin-space-4);
|
|
5401
|
+
}
|
|
5402
|
+
|
|
5403
|
+
/* Filter rows: the search takes its own full line; hard min-widths relax */
|
|
5404
|
+
.rovela-admin-theme .admin-filter-search {
|
|
5405
|
+
min-width: 0;
|
|
5406
|
+
}
|
|
5407
|
+
|
|
5408
|
+
.rovela-admin-theme .admin-filter-bar .admin-input-with-icon {
|
|
5409
|
+
flex: 1 1 100%;
|
|
5410
|
+
}
|
|
5411
|
+
|
|
5412
|
+
/* Save bar: full width (rule predates this pass), safe-area padded, and
|
|
5413
|
+
the desktop-only hints step aside. */
|
|
5414
|
+
.rovela-admin-theme .admin-savebar {
|
|
5415
|
+
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
5416
|
+
height: calc(var(--admin-savebar-h) + env(safe-area-inset-bottom, 0px));
|
|
5417
|
+
}
|
|
5418
|
+
|
|
5419
|
+
.rovela-admin-theme .admin-savebar-meta,
|
|
5420
|
+
.rovela-admin-theme .admin-savebar-kbd {
|
|
5421
|
+
display: none;
|
|
5422
|
+
}
|
|
5423
|
+
}
|
|
5424
|
+
|
|
5425
|
+
/* ── Phones: column priority + full-width feedback ─────────────────────── */
|
|
5426
|
+
@media (max-width: 479px) {
|
|
5427
|
+
/* Low-priority table columns + bulk-select checkboxes rest until desktop
|
|
5428
|
+
(Polaris' own condensed-mode call — bulk work belongs to bigger screens). */
|
|
5429
|
+
.rovela-admin-theme .admin-col-optional,
|
|
5430
|
+
.rovela-admin-theme .admin-col-bulk {
|
|
5431
|
+
display: none;
|
|
5432
|
+
}
|
|
5433
|
+
|
|
5434
|
+
/* Chips become a one-line thumb-scrollable row */
|
|
5435
|
+
.rovela-admin-theme .admin-chip-row {
|
|
5436
|
+
flex-wrap: nowrap;
|
|
5437
|
+
overflow-x: auto;
|
|
5438
|
+
scrollbar-width: none;
|
|
5439
|
+
-webkit-overflow-scrolling: touch;
|
|
5440
|
+
padding-bottom: 2px;
|
|
5441
|
+
}
|
|
5442
|
+
|
|
5443
|
+
.rovela-admin-theme .admin-chip-row::-webkit-scrollbar {
|
|
5444
|
+
display: none;
|
|
5445
|
+
}
|
|
5446
|
+
|
|
5447
|
+
.rovela-admin-theme .admin-chip {
|
|
5448
|
+
flex-shrink: 0;
|
|
5449
|
+
}
|
|
5450
|
+
|
|
5451
|
+
/* Toasts span the width instead of overflowing it */
|
|
5452
|
+
.rovela-admin-theme .admin-toaster {
|
|
5453
|
+
left: var(--admin-space-3);
|
|
5454
|
+
right: var(--admin-space-3);
|
|
5455
|
+
bottom: max(var(--admin-space-4), env(safe-area-inset-bottom, 1rem));
|
|
5456
|
+
align-items: stretch;
|
|
5457
|
+
}
|
|
5458
|
+
|
|
5459
|
+
.rovela-admin-theme .admin-toast-v2 {
|
|
5460
|
+
max-width: none;
|
|
5461
|
+
}
|
|
5462
|
+
|
|
5463
|
+
/* The Admin chip yields the TOP BAR to the store name — scoped so the
|
|
5464
|
+
drawer head keeps its chip (it has room; the top bar doesn't). */
|
|
5465
|
+
.rovela-admin-theme .admin-topbar .admin-topbar-tag {
|
|
5466
|
+
display: none;
|
|
5467
|
+
}
|
|
5468
|
+
}
|
|
5469
|
+
|
|
5470
|
+
/* ── Bottom sheets: AdminModal below 640px ──────────────────────────────
|
|
5471
|
+
Pure CSS — the component is untouched. Cards dock to the bottom edge,
|
|
5472
|
+
keep only the top radius, gain a grab affordance and slide up. */
|
|
5473
|
+
@media (max-width: 639px) {
|
|
5474
|
+
.rovela-admin-theme .admin-modal-root {
|
|
5475
|
+
align-items: flex-end;
|
|
5476
|
+
padding: 0;
|
|
5477
|
+
}
|
|
5478
|
+
|
|
5479
|
+
.rovela-admin-theme .admin-modal {
|
|
5480
|
+
max-width: none;
|
|
5481
|
+
margin: 0;
|
|
5482
|
+
border-radius: var(--admin-radius-xl) var(--admin-radius-xl) 0 0;
|
|
5483
|
+
max-height: calc(100vh - 2rem);
|
|
5484
|
+
max-height: calc(100svh - 2rem);
|
|
5485
|
+
animation: admin-sheet-in 260ms var(--admin-ease, cubic-bezier(0.2, 0, 0, 1));
|
|
5486
|
+
}
|
|
5487
|
+
|
|
5488
|
+
/* Grab affordance (decorative — Escape / scrim / buttons dismiss) */
|
|
5489
|
+
.rovela-admin-theme .admin-modal::before {
|
|
5490
|
+
content: '';
|
|
5491
|
+
display: block;
|
|
5492
|
+
width: 2.25rem;
|
|
5493
|
+
height: 4px;
|
|
5494
|
+
border-radius: var(--admin-radius-full);
|
|
5495
|
+
background: hsl(var(--admin-border));
|
|
5496
|
+
margin: var(--admin-space-2) auto 0;
|
|
5497
|
+
}
|
|
5498
|
+
|
|
5499
|
+
.rovela-admin-theme .admin-modal-footer {
|
|
5500
|
+
padding-bottom: max(var(--admin-space-4), env(safe-area-inset-bottom, 1rem));
|
|
5501
|
+
}
|
|
5502
|
+
}
|
|
5503
|
+
|
|
5504
|
+
@keyframes admin-sheet-in {
|
|
5505
|
+
from {
|
|
5506
|
+
transform: translateY(100%);
|
|
5507
|
+
}
|
|
5508
|
+
to {
|
|
5509
|
+
transform: none;
|
|
5510
|
+
}
|
|
5511
|
+
}
|
|
5512
|
+
|
|
5513
|
+
/* ── Touch ergonomics — sized by input modality, not width ──────────────
|
|
5514
|
+
44px controls on coarse pointers (WCAG 2.5.5 / Apple HIG); desktop
|
|
5515
|
+
pointer density is untouched. */
|
|
5516
|
+
@media (pointer: coarse) {
|
|
5517
|
+
.rovela-admin-theme .admin-btn {
|
|
5518
|
+
height: 2.75rem;
|
|
5519
|
+
}
|
|
5520
|
+
|
|
5521
|
+
.rovela-admin-theme .admin-btn-sm {
|
|
5522
|
+
height: 2.5rem;
|
|
5523
|
+
}
|
|
5524
|
+
|
|
5525
|
+
.rovela-admin-theme .admin-btn-icon.admin-btn-sm {
|
|
5526
|
+
width: 2.5rem;
|
|
5527
|
+
height: 2.5rem;
|
|
5528
|
+
}
|
|
5529
|
+
|
|
5530
|
+
.rovela-admin-theme .admin-input,
|
|
5531
|
+
.rovela-admin-theme .admin-filter-search {
|
|
5532
|
+
height: 2.75rem;
|
|
5533
|
+
}
|
|
5534
|
+
|
|
5535
|
+
.rovela-admin-theme textarea.admin-input {
|
|
5536
|
+
height: auto;
|
|
5537
|
+
}
|
|
5538
|
+
|
|
5539
|
+
.rovela-admin-theme .admin-select-trigger {
|
|
5540
|
+
min-height: 2.75rem;
|
|
5541
|
+
}
|
|
5542
|
+
|
|
5543
|
+
.rovela-admin-theme .admin-chip {
|
|
5544
|
+
height: 2.25rem;
|
|
5545
|
+
}
|
|
5546
|
+
|
|
5547
|
+
.rovela-admin-theme .admin-sidebar-item {
|
|
5548
|
+
min-height: 2.75rem;
|
|
5549
|
+
}
|
|
5550
|
+
|
|
5551
|
+
.rovela-admin-theme .admin-topbar-btn {
|
|
5552
|
+
height: 2.25rem;
|
|
5553
|
+
}
|
|
5554
|
+
}
|
|
5555
|
+
|
|
5556
|
+
/* Reduced motion: the drawer and sheets appear without travel */
|
|
5557
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5558
|
+
.rovela-admin-theme .admin-sidebar,
|
|
5559
|
+
.rovela-admin-theme .admin-nav-backdrop {
|
|
5560
|
+
transition: none;
|
|
5561
|
+
}
|
|
5562
|
+
|
|
5563
|
+
.rovela-admin-theme .admin-modal {
|
|
5564
|
+
animation: none;
|
|
5565
|
+
}
|
|
5566
|
+
}
|
|
5567
|
+
|
|
5568
|
+
/* ═══════════════════════════════════════════════════════════════════════════
|
|
5569
|
+
CHART-BODY OVERFLOW GUARANTEE (2026-07 card-table incident)
|
|
5570
|
+
A <table> dropped bare into a chart/card body can never break the page
|
|
5571
|
+
again: the body is a scroll region. Same structural move as the
|
|
5572
|
+
table-wrapper rule — refinements (stacked rows, column priority) are
|
|
5573
|
+
per-card polish on top of this floor.
|
|
5574
|
+
═══════════════════════════════════════════════════════════════════════════ */
|
|
5575
|
+
|
|
5576
|
+
.rovela-admin-theme .admin-chart {
|
|
5577
|
+
min-width: 0;
|
|
5578
|
+
}
|
|
5579
|
+
|
|
5580
|
+
.rovela-admin-theme .admin-chart-body {
|
|
5581
|
+
overflow-x: auto;
|
|
5582
|
+
}
|
|
@@ -78,7 +78,7 @@ export function DashboardsView({ period }) {
|
|
|
78
78
|
return formatXAxis(value);
|
|
79
79
|
return '';
|
|
80
80
|
};
|
|
81
|
-
return (_jsxs("div", { className: "space-y-6", children: [error && (_jsx("div", { className: "rounded-md bg-
|
|
81
|
+
return (_jsxs("div", { className: "space-y-6", children: [error && (_jsx("div", { className: "rounded-md bg-[hsl(var(--admin-error)/0.1)] px-4 py-3 text-sm text-[hsl(var(--admin-error))]", children: error })), _jsx("section", { children: _jsxs("div", { className: "admin-stats-grid", children: [_jsx(StatCard, { label: "Page Views", value: data ? numberFmt(data.overview.current.pageviews) : '0', delta: data?.overview.deltas.pageviews ?? null, icon: Eye, isLoading: isLoading }), _jsx(StatCard, { label: "Unique Visitors", value: data ? numberFmt(data.overview.current.visitors) : '0', delta: data?.overview.deltas.visitors ?? null, icon: Users, isLoading: isLoading }), _jsx(StatCard, { label: "Sessions", value: data ? numberFmt(data.overview.current.sessions) : '0', delta: data?.overview.deltas.sessions ?? null, icon: Activity, isLoading: isLoading }), _jsx(StatCard, { label: "Conversion Rate", value: data ? pctFmt(data.overview.current.conversionRate) : '—', delta: data?.overview.deltas.conversionRate ?? null, icon: Target, isLoading: isLoading })] }) }), _jsxs("section", { className: "grid grid-cols-1 gap-6 lg:grid-cols-2", children: [_jsxs("div", { className: "admin-chart", children: [_jsx("div", { className: "admin-chart-header", children: _jsxs("div", { children: [_jsx("h3", { className: "admin-chart-title", children: "Page Views Over Time" }), _jsx("p", { className: "admin-chart-subtitle", children: "Daily, period of selection" })] }) }), _jsx("div", { className: "admin-chart-body", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("span", { className: "admin-spinner admin-spinner-lg" }) })) : trendData.length === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx(BarChart3, { className: "h-12 w-12 admin-chart-empty-icon", strokeWidth: 1 }), _jsx("p", { className: "admin-chart-empty-text", children: "No traffic yet" }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Visitor data will appear here once people browse your store." })] })) : (_jsx(ResponsiveContainer, { width: "100%", height: 260, children: _jsxs(AreaChart, { data: trendData, margin: { top: 10, right: 10, left: 0, bottom: 0 }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "visitorsGradient", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "hsl(var(--admin-primary))", stopOpacity: 0.3 }), _jsx("stop", { offset: "100%", stopColor: "hsl(var(--admin-primary))", stopOpacity: 0 })] }) }), _jsx(CartesianGrid, { strokeDasharray: "3 3", vertical: false, stroke: "hsl(var(--admin-border))" }), _jsx(XAxis, { dataKey: "date", tickFormatter: tickFormatter, axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--admin-foreground-muted))', fontSize: 12 }, dy: 10 }), _jsx(YAxis, { axisLine: false, tickLine: false, tick: { fill: 'hsl(var(--admin-foreground-muted))', fontSize: 12 }, width: 40, allowDecimals: false }), _jsx(Tooltip, { content: _jsx(TrendTooltip, {}) }), _jsx(Area, { type: "monotone", dataKey: "visitors", stroke: "hsl(var(--admin-primary))", strokeWidth: 2, fill: "url(#visitorsGradient)" })] }) })) })] }), _jsx(CompactTable, { title: "Top Pages", headers: ['Page', 'Views'], rows: data?.topPages.map((p) => [p.path, numberFmt(p.views)]) ?? [], isLoading: isLoading, emptyMessage: "No pageviews yet." })] }), _jsxs("section", { className: "grid grid-cols-1 gap-6 lg:grid-cols-2", children: [_jsx(CompactTable, { title: "Top Products", headers: ['Product', 'Views', 'Cart adds', 'Purchases'], rows: data?.topProducts.map((p) => [
|
|
82
82
|
// Name comes from the SQL LEFT JOIN on products; falls back
|
|
83
83
|
// to the truncated id when the product has been deleted so
|
|
84
84
|
// the row still surfaces (analytics events outlive product
|
|
@@ -90,6 +90,10 @@ export function DashboardsView({ period }) {
|
|
|
90
90
|
]) ?? [], isLoading: isLoading, emptyMessage: "No product views yet." }), _jsx(CompactTable, { title: "Traffic Sources", headers: ['Source', 'Visitors'], rows: data?.sources.map((s) => [s.source, numberFmt(s.visitors)]) ?? [], isLoading: isLoading, emptyMessage: "No traffic data yet." })] })] }));
|
|
91
91
|
}
|
|
92
92
|
function CompactTable({ title, headers, rows, isLoading, emptyMessage, }) {
|
|
93
|
-
return (_jsxs("div", { className: "admin-chart", children: [_jsx("div", { className: "admin-chart-header", children: _jsx("div", { children: _jsx("h3", { className: "admin-chart-title", children: title }) }) }), _jsx("div", { className: "admin-chart-body", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("
|
|
93
|
+
return (_jsxs("div", { className: "admin-chart", children: [_jsx("div", { className: "admin-chart-header", children: _jsx("div", { children: _jsx("h3", { className: "admin-chart-title", children: title }) }) }), _jsx("div", { className: "admin-chart-body", children: isLoading ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("span", { className: "admin-spinner admin-spinner-lg" }) })) : rows.length === 0 ? (_jsx("div", { className: "admin-chart-empty", children: _jsx("p", { className: "admin-chart-empty-text", children: emptyMessage }) })) : (
|
|
94
|
+
/* Stacked row list — a 2-4 column card never needed a <table>:
|
|
95
|
+
the label truncates instead of colliding, the numbers keep
|
|
96
|
+
fixed right-aligned slots, and nothing can overflow the card. */
|
|
97
|
+
_jsxs("div", { children: [_jsxs("div", { className: "flex items-baseline gap-3 border-b border-[hsl(var(--admin-border))] pb-2", children: [_jsx("span", { className: "admin-section-title min-w-0 flex-1", children: headers[0] }), headers.slice(1).map((h) => (_jsx("span", { className: "admin-section-title w-16 flex-shrink-0 text-right leading-tight", children: h }, h)))] }), _jsx("ul", { children: rows.map((row, i) => (_jsxs("li", { className: "flex items-baseline gap-3 border-b border-[hsl(var(--admin-border)/0.5)] py-2 last:border-0", children: [_jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-[hsl(var(--admin-foreground))]", title: String(row[0]), children: row[0] }), row.slice(1).map((cell, j) => (_jsx("span", { className: "w-16 flex-shrink-0 text-right text-sm tabular-nums text-[hsl(var(--admin-foreground))]", children: cell }, j)))] }, i))) })] })) })] }));
|
|
94
98
|
}
|
|
95
99
|
//# sourceMappingURL=DashboardsView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardsView.js","sourceRoot":"","sources":["../../../src/analytics/views/DashboardsView.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DashboardsView.js","sourceRoot":"","sources":["../../../src/analytics/views/DashboardsView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsView.d.ts","sourceRoot":"","sources":["../../../src/analytics/views/EventsView.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAA;CACxB;
|
|
1
|
+
{"version":3,"file":"EventsView.d.ts","sourceRoot":"","sources":["../../../src/analytics/views/EventsView.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAA;CACxB;AA4FD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,2CAwLrD"}
|
|
@@ -21,7 +21,7 @@ function eventTint(kind) {
|
|
|
21
21
|
if (kind === 'purchase')
|
|
22
22
|
return 'bg-emerald-500/10 text-emerald-700';
|
|
23
23
|
if (kind === 'refund')
|
|
24
|
-
return 'bg-
|
|
24
|
+
return 'bg-[hsl(var(--admin-error)/0.1)] text-[hsl(var(--admin-error))]';
|
|
25
25
|
if (kind === 'add_to_cart' ||
|
|
26
26
|
kind === 'view_cart' ||
|
|
27
27
|
kind === 'begin_checkout' ||
|
|
@@ -29,10 +29,10 @@ function eventTint(kind) {
|
|
|
29
29
|
kind === 'view_item' ||
|
|
30
30
|
kind === 'select_item' ||
|
|
31
31
|
kind === 'view_item_list') {
|
|
32
|
-
return 'bg-
|
|
32
|
+
return 'bg-[hsl(var(--admin-primary)/0.1)] text-[hsl(var(--admin-primary))]';
|
|
33
33
|
}
|
|
34
34
|
// page_view / session_* → muted
|
|
35
|
-
return 'bg-foreground/
|
|
35
|
+
return 'bg-[hsl(var(--admin-foreground)/0.04)] text-[hsl(var(--admin-foreground))]';
|
|
36
36
|
}
|
|
37
37
|
// =============================================================================
|
|
38
38
|
// View
|
|
@@ -61,9 +61,9 @@ function formatTs(iso, timeZone = 'UTC') {
|
|
|
61
61
|
function shortId(id, len = 8) {
|
|
62
62
|
return id.length <= len ? id : `${id.slice(0, len)}…`;
|
|
63
63
|
}
|
|
64
|
-
function SortableHeader({ label, column, activeColumn, activeDir, onClick, }) {
|
|
64
|
+
function SortableHeader({ label, column, activeColumn, activeDir, onClick, className = '', }) {
|
|
65
65
|
const isActive = activeColumn === column;
|
|
66
|
-
return (_jsx("th", { className:
|
|
66
|
+
return (_jsx("th", { className: `py-2 text-left text-xs font-medium uppercase tracking-wider text-[hsl(var(--admin-foreground-muted))] ${className}`.trim(), children: _jsxs("button", { type: "button", onClick: () => onClick(column), className: "inline-flex items-center gap-1 transition-colors hover:text-[hsl(var(--admin-foreground))]", children: [label, isActive &&
|
|
67
67
|
(activeDir === 'asc' ? (_jsx(ArrowUp, { className: "h-3 w-3" })) : (_jsx(ArrowDown, { className: "h-3 w-3" })))] }) }));
|
|
68
68
|
}
|
|
69
69
|
export function EventsView({ period }) {
|
|
@@ -85,6 +85,6 @@ export function EventsView({ period }) {
|
|
|
85
85
|
// Cursor pagination only stable on ts-sorted; disable next when custom sort.
|
|
86
86
|
const canPaginate = sortBy === 'ts';
|
|
87
87
|
const hasNext = Boolean(page?.nextCursor) && canPaginate;
|
|
88
|
-
return (_jsxs("div", { className: "space-y-4", children: [error && (_jsx("div", { className: "rounded-md bg-
|
|
88
|
+
return (_jsxs("div", { className: "space-y-4", children: [error && (_jsx("div", { className: "rounded-md bg-[hsl(var(--admin-error)/0.1)] px-4 py-3 text-sm text-[hsl(var(--admin-error))]", children: error })), _jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsx("h2", { className: "text-sm font-semibold text-[hsl(var(--admin-foreground))]", children: "Events" }), _jsxs("label", { className: "inline-flex items-center gap-2 text-sm text-[hsl(var(--admin-foreground-muted))]", children: [_jsx("input", { type: "checkbox", checked: !hideHeartbeats, onChange: (e) => setHideHeartbeats(!e.target.checked), className: "admin-checkbox" }), "Show heartbeats"] })] }), _jsx("div", { className: "admin-chart", children: _jsx("div", { className: "admin-chart-body", children: isLoading && !page ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("span", { className: "admin-spinner admin-spinner-lg" }) })) : !page || page.rows.length === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx("p", { className: "admin-chart-empty-text", children: "No events yet." }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Once visitors start browsing your store, you'll see every page view, cart add, and purchase right here." })] })) : (_jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-[hsl(var(--admin-border))]", children: [_jsx(SortableHeader, { label: "Timestamp", column: "ts", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick }), _jsx(SortableHeader, { label: "Event", column: "event", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick }), _jsx(SortableHeader, { label: "Path", column: "path", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick }), _jsx(SortableHeader, { label: "Referrer", column: "referrer", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick, className: "admin-col-optional" }), _jsx(SortableHeader, { label: "Country", column: "country", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick, className: "admin-col-optional" }), _jsx("th", { className: "admin-col-optional py-2 text-left text-xs font-medium uppercase tracking-wider text-[hsl(var(--admin-foreground-muted))]", children: "Session" })] }) }), _jsx("tbody", { children: page.rows.map((row) => (_jsxs("tr", { className: "border-b border-[hsl(var(--admin-border)/0.5)] last:border-0 hover:bg-[hsl(var(--admin-foreground)/0.02)]", children: [_jsx("td", { className: "whitespace-nowrap py-2 tabular-nums text-[hsl(var(--admin-foreground))]", children: formatTs(row.ts, storeTz) }), _jsx("td", { className: "py-2", children: _jsx("span", { className: `inline-flex items-center rounded-md px-2 py-0.5 font-mono text-xs ${eventTint(row.event)}`, children: row.event }) }), _jsx("td", { className: "max-w-[14rem] truncate py-2 font-mono text-xs text-[hsl(var(--admin-foreground))]", title: row.path, children: row.path }), _jsx("td", { className: "admin-col-optional max-w-[12rem] truncate py-2 text-[hsl(var(--admin-foreground-muted))]", title: row.referrer ?? undefined, children: row.referrer ?? _jsx("span", { className: "italic", children: "(direct)" }) }), _jsx("td", { className: "admin-col-optional py-2 tabular-nums text-[hsl(var(--admin-foreground))]", children: row.country ?? '—' }), _jsx("td", { className: "admin-col-optional py-2 font-mono text-xs text-[hsl(var(--admin-foreground-muted))]", title: row.sessionId, children: shortId(row.sessionId, 8) })] }, row.id))) })] })) }) }), (cursor || hasNext) && (_jsxs("div", { className: "flex items-center justify-end gap-2", children: [!canPaginate && (_jsx("span", { className: "text-xs text-[hsl(var(--admin-foreground-muted))]", children: "Pagination disabled for custom sort" })), _jsxs("button", { type: "button", onClick: firstPage, disabled: !cursor || isLoading, className: "admin-btn admin-btn-secondary admin-btn-sm gap-1", children: [_jsx(ChevronLeft, { className: "h-3 w-3" }), "Newer"] }), _jsxs("button", { type: "button", onClick: nextPage, disabled: !hasNext || isLoading, className: "admin-btn admin-btn-secondary admin-btn-sm gap-1", children: ["Older", _jsx(ChevronRight, { className: "h-3 w-3" })] })] }))] }));
|
|
89
89
|
}
|
|
90
90
|
//# sourceMappingURL=EventsView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsView.js","sourceRoot":"","sources":["../../../src/analytics/views/EventsView.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAarD,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAEhF,SAAS,SAAS,CAAC,IAAwB;IACzC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,oCAAoC,CAAA;IACpE,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"EventsView.js","sourceRoot":"","sources":["../../../src/analytics/views/EventsView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisitorsView.d.ts","sourceRoot":"","sources":["../../../src/analytics/views/VisitorsView.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,UAAU,CAAA;AAGjE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAA;CACxB;
|
|
1
|
+
{"version":3,"file":"VisitorsView.d.ts","sourceRoot":"","sources":["../../../src/analytics/views/VisitorsView.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,UAAU,CAAA;AAGjE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAA;CACxB;AA+DD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CA8JzD"}
|
|
@@ -34,9 +34,9 @@ function shortId(id, len = 8) {
|
|
|
34
34
|
return id.length <= len ? id : `${id.slice(0, len)}…`;
|
|
35
35
|
}
|
|
36
36
|
const numberFmt = (n) => n.toLocaleString('en-US');
|
|
37
|
-
function SortableHeader({ label, column, activeColumn, activeDir, onClick, }) {
|
|
37
|
+
function SortableHeader({ label, column, activeColumn, activeDir, onClick, className = '', }) {
|
|
38
38
|
const isActive = activeColumn === column;
|
|
39
|
-
return (_jsx("th", { className:
|
|
39
|
+
return (_jsx("th", { className: `py-2 text-center text-xs font-medium uppercase tracking-wider text-[hsl(var(--admin-foreground-muted))] ${className}`.trim(), children: _jsxs("button", { type: "button", onClick: () => onClick(column), className: "inline-flex items-center gap-1 transition-colors hover:text-[hsl(var(--admin-foreground))]", children: [label, isActive &&
|
|
40
40
|
(activeDir === 'asc' ? (_jsx(ArrowUp, { className: "h-3 w-3" })) : (_jsx(ArrowDown, { className: "h-3 w-3" })))] }) }));
|
|
41
41
|
}
|
|
42
42
|
export function VisitorsView({ period }) {
|
|
@@ -56,6 +56,6 @@ export function VisitorsView({ period }) {
|
|
|
56
56
|
setSortDir(column === 'country' ? 'asc' : 'desc');
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
|
-
return (_jsxs("div", { className: "space-y-4", children: [error && (_jsx("div", { className: "rounded-md bg-
|
|
59
|
+
return (_jsxs("div", { className: "space-y-4", children: [error && (_jsx("div", { className: "rounded-md bg-[hsl(var(--admin-error)/0.1)] px-4 py-3 text-sm text-[hsl(var(--admin-error))]", children: error })), _jsx("h2", { className: "text-sm font-semibold text-[hsl(var(--admin-foreground))]", children: "Visitors" }), _jsx("div", { className: "admin-chart", children: _jsx("div", { className: "admin-chart-body", children: isLoading && !page ? (_jsx("div", { className: "admin-chart-loading", children: _jsx("span", { className: "admin-spinner admin-spinner-lg" }) })) : !page || page.rows.length === 0 ? (_jsxs("div", { className: "admin-chart-empty", children: [_jsx("p", { className: "admin-chart-empty-text", children: "No visitors yet." }), _jsx("p", { className: "admin-chart-empty-subtext", children: "Anyone who visits your storefront will appear here, grouped by their pseudonymous visitor ID." })] })) : (_jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-[hsl(var(--admin-border))]", children: [_jsx("th", { className: "py-2 text-center text-xs font-medium uppercase tracking-wider text-[hsl(var(--admin-foreground-muted))]", children: "Visitor" }), _jsx(SortableHeader, { label: "First seen", column: "first_seen", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick, className: "admin-col-optional" }), _jsx(SortableHeader, { label: "Last seen", column: "last_seen", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick }), _jsx(SortableHeader, { label: "Sessions", column: "sessions", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick }), _jsx(SortableHeader, { label: "Pageviews", column: "pageviews", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick }), _jsx(SortableHeader, { label: "Country", column: "country", activeColumn: sortBy, activeDir: sortDir, onClick: onSortClick, className: "admin-col-optional" }), _jsx("th", { className: "admin-col-optional py-2 text-center text-xs font-medium uppercase tracking-wider text-[hsl(var(--admin-foreground-muted))]", children: "Source" })] }) }), _jsx("tbody", { children: page.rows.map((row) => (_jsxs("tr", { className: "border-b border-[hsl(var(--admin-border)/0.5)] last:border-0 hover:bg-[hsl(var(--admin-foreground)/0.02)]", children: [_jsx("td", { className: "py-2 text-center font-mono text-xs text-[hsl(var(--admin-foreground))]", title: row.visitorId, children: shortId(row.visitorId) }), _jsx("td", { className: "admin-col-optional whitespace-nowrap py-2 text-center tabular-nums text-[hsl(var(--admin-foreground-muted))]", children: formatTs(row.firstSeen, storeTz) }), _jsx("td", { className: "whitespace-nowrap py-2 text-center tabular-nums text-[hsl(var(--admin-foreground))]", children: formatTs(row.lastSeen, storeTz) }), _jsx("td", { className: "py-2 text-center tabular-nums text-[hsl(var(--admin-foreground))]", children: numberFmt(row.sessions) }), _jsx("td", { className: "py-2 text-center tabular-nums text-[hsl(var(--admin-foreground))]", children: numberFmt(row.pageviews) }), _jsx("td", { className: "admin-col-optional py-2 text-center tabular-nums text-[hsl(var(--admin-foreground))]", children: row.country ?? '—' }), _jsx("td", { className: "admin-col-optional max-w-[10rem] truncate py-2 text-center text-[hsl(var(--admin-foreground-muted))]", title: row.initialSource, children: row.initialSource })] }, row.visitorId))) })] })) }) }), (cursor || page?.nextCursor) && (_jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsxs("button", { type: "button", onClick: firstPage, disabled: !cursor || isLoading, className: "admin-btn admin-btn-secondary admin-btn-sm gap-1", children: [_jsx(ChevronLeft, { className: "h-3 w-3" }), "Newer"] }), _jsxs("button", { type: "button", onClick: nextPage, disabled: !page?.nextCursor || isLoading, className: "admin-btn admin-btn-secondary admin-btn-sm gap-1", children: ["Older", _jsx(ChevronRight, { className: "h-3 w-3" })] })] }))] }));
|
|
60
60
|
}
|
|
61
61
|
//# sourceMappingURL=VisitorsView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisitorsView.js","sourceRoot":"","sources":["../../../src/analytics/views/VisitorsView.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAQrD,SAAS,QAAQ,CAAC,GAAW,EAAE,WAAmB,KAAK;IACrD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;QACvB,OAAO,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACnC,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,KAAK;YACb,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EAAU,EAAE,GAAG,GAAG,CAAC;IAClC,OAAO,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAA;AACvD,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"VisitorsView.js","sourceRoot":"","sources":["../../../src/analytics/views/VisitorsView.tsx"],"names":[],"mappings":"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"}
|