PageSourceSearch

https://shalev396.com/assets/DashboardPage-CGcRVlZC.js

js shalev396.com collected 2026-09-24 14:52:29 UTC 2,964 bytes, 1 lines download raw bytes

1import{j as s,Z as l}from"./vendor-DEZMEr9l.js";import{P as f,a as p}from"./PageMetadata-0q7_CMqW.js";import{u as N,B as b,p as i,R as a,C as n,m as C,n as k,o as d}from"./index-M-p6Hmfh.js";import{F as o}from"./FadeContent-BLNFTI68.js";import{a as y}from"./projects-CZIPvjX_.js";import{u as I}from"./skills-BQh7pkVh.js";import{u as S}from"./collaborators-C8BXQ_wc.js";import{u as v}from"./organizations-D1yiI5wE.js";import{g as z,d as A,e as O,f as P,B as T,I as D}from"./icons-D27EeKJF.js";import"./three-DQ3O7-sJ.js";import"./redux-BZEuQggb.js";import"./query-CHsQj_ED.js";import"./ui-lib-CUCVhCgZ.js";import"./upload-RCYeCZk8.js";const R=[{key:"skills",label:"Skills",icon:A,route:a.ADMIN.SKILLS},{key:"projects",label:"Projects",icon:O,route:a.ADMIN.PROJECTS},{key:"collaborators",label:"Collaborators",icon:P,route:a.ADMIN.COLLABORATORS},{key:"organizations",label:"Organizations",icon:T,route:a.ADMIN.ORGANIZATIONS}];function Q(){const{language:r}=N(),{data:c=[]}=I(),{data:t=[]}=y(),{data:m=[]}=S(),{data:x=[]}=v(),u={skills:c.length,projects:t.length,collaborators:m.length,organizations:x.length};return s.jsxs("div",{className:"space-y-8",children:[s.jsx(f,{title:p("Dashboard"),description:"Portfolio admin dashboard — manage skills, projects, and content.",noIndex:!0}),s.jsx(o,{children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("h1",{className:"text-2xl font-bold tracking-tight text-foreground sm:text-3xl",children:"Dashboard"}),s.jsx(b,{asChild:!0,variant:"outline",children:s.jsxs(l,{to:i(a.ADMIN.SETTINGS,r),children:[s.jsx(z,{className:"size-4"}),"Settings"]})})]})}),s.jsx(o,{delay:50,children:s.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-4",children:R.map(({key:e,label:h,icon:g,route:j})=>s.jsx(l,{to:i(j,r),children:s.jsxs(n,{className:"transition-shadow hover:shadow-md",children:[s.jsxs(C,{className:"flex flex-row items-center justify-between pb-2",children:[s.jsx(k,{className:"text-sm font-medium text-muted-foreground",children:h}),s.jsx(g,{className:"size-5 text-muted-foreground"})]}),s.jsx(d,{children:s.jsx("p",{className:"text-3xl font-bold",children:u[e]})})]})},e))})}),t.length>0&&s.jsx(o,{delay:100,children:s.jsxs("div",{className:"mt-8",children:[s.jsx("h2",{className:"mb-4 text-lg font-semibold",children:"Recent Projects"}),s.jsx("div",{className:"space-y-3",children:t.slice(0,5).map(e=>s.jsx(n,{children:s.jsxs(d,{className:"flex items-center gap-4 py-3",children:[e.images[0]?.cloudfrontUrl?s.jsx("img",{src:e.images[0].cloudfrontUrl,alt:e.title,className:"size-12 rounded object-cover"}):s.jsx("div",{className:"flex size-12 shrink-0 items-center justify-center rounded bg-muted",children:s.jsx(D,{className:"size-6 text-muted-foreground"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"font-medium",children:e.title}),s.jsx("p",{className:"text-sm text-muted-foreground",children:e.subt
1itle})]})]})},e.id))})]})})]})}export{Q as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.