@@ -328,4 +328,154 @@ export const ProjectBoard = {
328328 </ main >
329329 </ nve-page >
330330 `
331- }
331+ } ;
332+
333+ /**
334+ * @summary Multi-route dashboard with top-level navigation and URL-synchronized tab views. Use for resource management pages where nested routes preserve context and browser history while keeping overview, activity, and access tasks close together.
335+ * @tags pattern
336+ */
337+ export const AdminRoutes = {
338+ render ( ) {
339+ return html `
340+ < nve-page >
341+ < nve-page-header slot ="header ">
342+ < nve-logo slot ="prefix " size ="sm " color ="brand-green "> OP</ nve-logo >
343+ < h2 slot ="prefix " nve-text ="heading "> Operations Admin</ h2 >
344+ < nve-button selected container ="flat "> < a href ="/admin/dashboard "> Dashboard</ a > </ nve-button >
345+ < nve-button container ="flat "> < a href ="/admin/teams "> Teams</ a > </ nve-button >
346+ < nve-button container ="flat "> < a href ="/admin/billing "> Billing</ a > </ nve-button >
347+ < nve-icon-button interaction ="emphasis " slot ="suffix " size ="sm "> MK</ nve-icon-button >
348+ </ nve-page-header >
349+ < main nve-layout ="column gap:lg pad:lg " style ="max-width: 1300px; ">
350+ < div nve-layout ="column gap:sm ">
351+ < p nve-text ="label sm muted "> Dashboard / Services / Inference API</ p >
352+ < h1 nve-text ="heading lg "> Inference API</ h1 >
353+ </ div >
354+ < nve-tabs-group id ="admin-route-tabs ">
355+ < nve-tabs >
356+ < nve-tabs-item
357+ selected
358+ command ="--toggle "
359+ commandfor ="admin-route-tabs "
360+ value ="overview "
361+ > Overview</ nve-tabs-item >
362+ < nve-tabs-item
363+ command ="--toggle "
364+ commandfor ="admin-route-tabs "
365+ value ="activity "
366+ > Activity</ nve-tabs-item >
367+ < nve-tabs-item
368+ command ="--toggle "
369+ commandfor ="admin-route-tabs "
370+ value ="access "
371+ > Access</ nve-tabs-item >
372+ </ nve-tabs >
373+ < section slot ="overview " nve-layout ="column gap:lg ">
374+ < div nve-layout ="grid gap:lg span-items:4 align:vertical-stretch ">
375+ < nve-card >
376+ < nve-card-header > < h2 nve-text ="label muted "> Requests today</ h2 > </ nve-card-header >
377+ < nve-card-content >
378+ < div nve-layout ="column gap:xs ">
379+ < p nve-text ="heading lg "> 2.4M</ p >
380+ < p nve-text ="body sm muted "> 12% above the daily average</ p >
381+ </ div >
382+ </ nve-card-content >
383+ </ nve-card >
384+ < nve-card >
385+ < nve-card-header > < h2 nve-text ="label muted "> Success rate</ h2 > </ nve-card-header >
386+ < nve-card-content >
387+ < div nve-layout ="column gap:xs ">
388+ < p nve-text ="heading lg "> 99.98%</ p >
389+ < p nve-text ="body sm muted "> Within the 99.9% target</ p >
390+ </ div >
391+ </ nve-card-content >
392+ </ nve-card >
393+ < nve-card >
394+ < nve-card-header > < h2 nve-text ="label muted "> P95 latency</ h2 > </ nve-card-header >
395+ < nve-card-content >
396+ < div nve-layout ="column gap:xs ">
397+ < p nve-text ="heading lg "> 182 ms</ p >
398+ < p nve-text ="body sm muted "> 18 ms below the alert threshold</ p >
399+ </ div >
400+ </ nve-card-content >
401+ </ nve-card >
402+ </ div >
403+ < nve-card >
404+ < nve-card-header >
405+ < div nve-layout ="column gap:xs ">
406+ < h2 nve-text ="heading sm "> Service details</ h2 >
407+ < p nve-text ="body sm muted "> Current production configuration.</ p >
408+ </ div >
409+ </ nve-card-header >
410+ < nve-card-content >
411+ < dl nve-layout ="grid gap:sm ">
412+ < dt nve-layout ="span:4 " nve-text ="body muted medium "> Region</ dt >
413+ < dd nve-layout ="span:8 " nve-text ="body "> us-central-1</ dd >
414+ < dt nve-layout ="span:4 " nve-text ="body muted medium "> Model</ dt >
415+ < dd nve-layout ="span:8 " nve-text ="body "> Llama 3.3 70B Instruct</ dd >
416+ < dt nve-layout ="span:4 " nve-text ="body muted medium "> Deployment</ dt >
417+ < dd nve-layout ="span:8 " nve-text ="body "> inference-api-v42</ dd >
418+ </ dl >
419+ </ nve-card-content >
420+ </ nve-card >
421+ </ section >
422+ < section slot ="activity " nve-layout ="column gap:md ">
423+ < nve-grid >
424+ < nve-grid-header >
425+ < nve-grid-column width ="25% "> Event</ nve-grid-column >
426+ < nve-grid-column width ="25% "> Actor</ nve-grid-column >
427+ < nve-grid-column width ="25% "> Time</ nve-grid-column >
428+ < nve-grid-column width ="25% "> Status</ nve-grid-column >
429+ </ nve-grid-header >
430+ < nve-grid-row >
431+ < nve-grid-cell > Deployed inference-api-v42</ nve-grid-cell >
432+ < nve-grid-cell > Maya Kim</ nve-grid-cell >
433+ < nve-grid-cell > 18 minutes ago</ nve-grid-cell >
434+ < nve-grid-cell > < nve-badge status ="success " container ="flat "> Completed</ nve-badge > </ nve-grid-cell >
435+ </ nve-grid-row >
436+ < nve-grid-row >
437+ < nve-grid-cell > Updated autoscaling target</ nve-grid-cell >
438+ < nve-grid-cell > Jon Bell</ nve-grid-cell >
439+ < nve-grid-cell > 2 hours ago</ nve-grid-cell >
440+ < nve-grid-cell > < nve-badge status ="finished " container ="flat "> Applied</ nve-badge > </ nve-grid-cell >
441+ </ nve-grid-row >
442+ < nve-grid-row >
443+ < nve-grid-cell > Rotated service credentials</ nve-grid-cell >
444+ < nve-grid-cell > System</ nve-grid-cell >
445+ < nve-grid-cell > Yesterday</ nve-grid-cell >
446+ < nve-grid-cell > < nve-badge status ="finished " container ="flat "> Applied</ nve-badge > </ nve-grid-cell >
447+ </ nve-grid-row >
448+ </ nve-grid >
449+ </ section >
450+ < section slot ="access " nve-layout ="column gap:md ">
451+ < div nve-layout ="grid gap:lg span-items:6 align:vertical-stretch ">
452+ < nve-card >
453+ < nve-card-header >
454+ < div nve-layout ="row gap:sm align:space-between align:vertical-center ">
455+ < h3 nve-text ="heading xs "> Platform administrators</ h3 >
456+ < nve-badge container ="flat "> Owner</ nve-badge >
457+ </ div >
458+ </ nve-card-header >
459+ < nve-card-content >
460+ < p nve-text ="body sm muted "> 12 members can deploy, configure, and manage access.</ p >
461+ </ nve-card-content >
462+ </ nve-card >
463+ < nve-card >
464+ < nve-card-header >
465+ < div nve-layout ="row gap:sm align:space-between align:vertical-center ">
466+ < h3 nve-text ="heading xs "> ML operations</ h3 >
467+ < nve-badge container ="flat "> Editor</ nve-badge >
468+ </ div >
469+ </ nve-card-header >
470+ < nve-card-content >
471+ < p nve-text ="body sm muted "> 28 members can deploy and update service configuration.</ p >
472+ </ nve-card-content >
473+ </ nve-card >
474+ </ div >
475+ </ section >
476+ </ nve-tabs-group >
477+ </ main >
478+ </ nve-page >
479+ `
480+ }
481+ } ;
0 commit comments