evals-lab 0.2.0 → 0.3.0
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/CHANGELOG.md +66 -0
- package/README.md +17 -9
- package/lab/VERSION +1 -1
- package/lab/demo/datasets/demo-1.json +2187 -1644
- package/lab/demo/datasets/demo-2.json +1870 -1485
- package/lab/demo/manifest.json +2 -2
- package/lab/demo/pipelines/demo-1.json +3 -7
- package/lab/demo/pipelines/demo-2.json +3 -7
- package/lab/evals-core.mjs +429 -434
- package/lab/kinds/list.mjs +1 -1
- package/lab/metrics/builtin.mjs +96 -18
- package/lab/run-evals.js +35 -33
- package/lab/server.py +296 -82
- package/lab/web/dist/assets/{gallery-o7c4lfpn.css → gallery-DFeJkfUw.css} +1 -1
- package/lab/web/dist/assets/gallery-DRBlZ8mP.js +3 -0
- package/lab/web/dist/assets/main-DMpQmW8l.js +21 -0
- package/lab/web/dist/assets/main-wfqC6HcM.css +1 -0
- package/lab/web/dist/assets/tokens-BEn6_hVz.css +1 -0
- package/lab/web/dist/assets/tokens-iGpvbD5R.js +55 -0
- package/lab/web/dist/gallery.html +4 -4
- package/lab/web/dist/index.html +4 -4
- package/package.json +3 -2
- package/lab/web/dist/assets/gallery-DsetJSXv.js +0 -3
- package/lab/web/dist/assets/main-B-VtDGxC.css +0 -1
- package/lab/web/dist/assets/main-ERoD2Kll.js +0 -19
- package/lab/web/dist/assets/tokens-ClRQ7Mui.js +0 -51
- package/lab/web/dist/assets/tokens-D3C8O2Ib.css +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{$ as e,C as t,H as n,O as r,S as i,b as a,c as o,d as s,et as c,f as l,h as u,k as d,m as f,n as p,p as m,r as h,v as g,x as _,y as v}from"./tokens-iGpvbD5R.js";var y=c(),b=e(),x=[{id:`text`,label:`Plain text`,settings:[]},{id:`list`,label:`List`,settings:[{key:`parse`,label:`Parse as`,type:`select`,choices:[{value:`csv`,label:`CSV`},{value:`lines`,label:`One a line`},{value:`json`,label:`JSON array`}]},{key:`preamble`,label:`Ignore preamble`,type:`checkbox`}]}],S=[{id:`case`,label:`Case`,accepts:[`list`],options:[{key:`mode`,label:`Mode`,type:`select`,choices:[{value:`LOWER`,label:`lower`},{value:`SENTENCE`,label:`Sentence`},{value:`TITLE`,label:`Title`},{value:`UPPER`,label:`UPPER`},{value:`NONE`,label:`As replied`}]}],defaults:()=>({type:`case`,mode:`LOWER`})},{id:`join`,label:`Join`,accepts:[`list`],options:[{key:`with`,label:`Separator`,type:`text`}],defaults:()=>({type:`join`,with:`, `})}],C=[{name:`language`,type:`value`,value:`English UK`},{name:`geo-location`,type:`value`,value:`Hamilton, Waikato, New Zealand`},{name:`geo`,type:`block`,enabled:!1}],w=[{path:`group/open`,title:`Group, open`},{path:`group/closed`,title:`Group, closed with a note`},{path:`group/no-menu`,title:`Group without actions`},{path:`group/sub`,title:`Sub-group, level 3`},{path:`group/depth`,title:`Group, three levels deep`},{path:`group/renaming`,title:`Group, renaming`},{path:`menu/disabled`,title:`Menu with a disabled item`},{path:`header/pipeline`,title:`Context header, a Pipeline`},{path:`header/dataset`,title:`Context header, a Dataset`},{path:`header/source`,title:`Context header, a Source with its crumb`},{path:`header/long`,title:`Context header, a long name`},{path:`menu/busy`,title:`Menu with a busy item`},{path:`loading/group`,title:`Loading, inside a group`},{path:`loading/error`,title:`Loading failed, with Retry`},{path:`loading/busy-button`,title:`Busy buttons`},{path:`repeater/empty`,title:`Repeater, empty`},{path:`repeater/min`,title:`Repeater at min 1`},{path:`repeater/between`,title:`Repeater, two of four`},{path:`repeater/max`,title:`Repeater at max`},{path:`repeater/locked`,title:`Repeater, a locked row`},{path:`props/controls`,title:`Property table, every control`},{path:`props/required`,title:`Property table, required only`},{path:`props/long`,title:`Property table, long values`},{path:`props/widths`,title:`Property table, a width per value`},{path:`props/secret`,title:`Property table, a key held and not held`},{path:`props/code`,title:`Property table, an endpoint and a payload`},{path:`table/sortable`,title:`Table, sortable headers and a row menu`},{path:`table/paged`,title:`Table, paged ten at a time`},{path:`table/filter`,title:`Table with a filter bar`},{path:`table/filter-on`,title:`Table, filtered, with a scope`},{path:`edit/form`,title:`Edit modal, a profile`},{path:`edit/plain`,title:`Edit modal, one section and no menu`},{path:`edit/long`,title:`Edit modal, a form that scrolls`},{path:`edit/status`,title:`Edit modal, a status that is a refusal`},{path:`view/tokens`,title:`Token mappings`},{path:`view/output`,title:`Output with Case`},{path:`view/output-text`,title:`Output, plain text`},{path:`view/output-two`,title:`Output with two modifiers`},{path:`view/output-twice`,title:`Output with the same modifier twice`},{path:`view/output-none`,title:`Responses, read as text`},{path:`view/output-flow`,title:`Responses with Read as`}],T=n(),E=()=>{},D=(...e)=>e.map(e=>({label:e,icon:e===`Remove`?i.remove:e===`Clone`?i.clone:i.rename,onSelect:E,destructive:e===`Remove`}));function O({start:e,min:t,max:n,locked:r}){let[i,a]=(0,y.useState)(e);return(0,T.jsx)(f,{noun:`scenario`,items:i,...t===void 0?{}:{min:t},...n===void 0?{}:{max:n},...r?{locked:r}:{},onAdd:()=>a([...i,`Target ${i.length+1}`]),onRemove:e=>a(i.filter((t,n)=>n!==e)),onClone:e=>a([...i.slice(0,e+1),`${i[e]} copy`,...i.slice(e+1)]),onRename:E,empty:`No targets yet.`,renderItem:(e,t,n)=>(0,T.jsx)(g,{id:`scenario-${t}`,title:e,level:3,actions:n,children:(0,T.jsx)(`p`,{className:`note`,children:`A Target profile and a prompt for each job.`})},`${e}-${t}`)})}function k(){let[e,t]=(0,y.useState)(C),n=(n,r)=>t(e.map(e=>e.name===n?{...e,...r}:e));return(0,T.jsx)(p,{mappings:e,onValue:(e,t)=>n(e,{value:t}),onEnabled:(e,t)=>n(e,{enabled:t}),onEdit:E,onRemove:n=>t(e.filter(e=>e.name!==n)),onAdd:()=>t([...e,{name:`token${e.length+1}`,type:`value`,value:``}])})}function A({start:e,format:t=!0,readAs:n}){let[r,i]=(0,y.useState)(e),[a,o]=(0,y.useState)(t),[s,c]=(0,y.useState)(n);return(0,T.jsx)(h,{id:`output`,out:r,format:a,readAs:s,outputKinds:x,modifiers:S,onAddFormat:()=>o(!0),onRemoveFormat:()=>{o(!1),i({kind:`text`,modifiers:[]})},onReadAs:c,onKind:e=>i({kind:e,modifiers:r.modifiers.filter(t=>S.find(e=>e.id===t.type)?.accepts.includes(e))}),onModifier:(e,t)=>i({...r,modifiers:r.modifiers.map((n,r)=>r===e?t:n)}),onAddModifier:e=>i({...r,modifiers:[...r.modifiers,e]}),onRemoveModifier:e=>i({...r,modifiers:r.modifiers.filter((t,n)=>n!==e)})})}function j(){let[e,t]=(0,y.useState)(`Job 1`),[n,r]=(0,y.useState)(!0);return(0,T.jsx)(g,{id:`renaming`,title:e,actions:[{label:`Rename`,icon:i.rename,onSelect:()=>r(!0)}],...n?{rename:{value:e,onCommit:n=>{t(n||e),r(!1)},onCancel:()=>r(!1)}}:{},children:(0,T.jsx)(`p`,{className:`note`,children:`Enter or leaving keeps the name; Escape cancels.`})})}function M({sections:e,menu:t,status:n,statusBad:r,outcome:i}){return(0,T.jsx)(s,{title:`Lab Ollama`,...n?{status:n}:{},...r?{statusBad:!0}:{},...t?{menu:t}:{},sections:e,actions:[{label:`Test connection`,icon:d,onSelect:E,outcome:i?{label:i,onOpen:E}:void 0}],onClose:E})}var N=()=>[{key:`name`,label:`Name`,required:!0,control:{type:`text`,value:`Lab Ollama`,onChange:E}},{key:`type`,label:`Type`,required:!0,control:{type:`select`,value:`ollama`,onChange:E,options:[{value:`ollama`,label:`Ollama (Local)`},{value:`anthropic`,label:`Anthropic`}]}},{key:`url`,label:`Address`,control:{type:`text`,value:``,placeholder:`the lab's Ollama`,onChange:E}},{key:`key`,label:`Key`,control:{type:`secret`,value:``,onChange:E}},{key:`model`,label:`Model`,control:{type:`text`,value:`minicpm-v4.6:latest`,onChange:E}}],P=()=>[{key:`seed`,label:`Seed`,control:{type:`text`,value:``,placeholder:`1234`,marker:`default`,onChange:E}},{key:`nPredict`,label:`Reply tokens`,control:{type:`text`,value:``,size:`num`,marker:`server`,onChange:E}},{key:`temperature`,label:`Temperature`,control:{type:`text`,value:`0.3`,onChange:E}},{key:`repeatPenalty`,label:`Repeat penalty`,control:{type:`text`,value:``,size:`num`,marker:`server`,onChange:E}}],F=()=>[{key:`endpoint`,label:`Endpoint`,required:!0,control:{type:`code`,text:`http://127.0.0.1:11434/api/chat`}},{key:`prompt`,label:`Prompt`,required:!0,control:{type:`static`,text:`(prompt)`}},{key:`model`,label:`model`,control:{type:`code`,text:`minicpm-v4.6:latest`}},{key:`options`,label:`options`,control:{type:`code`,text:`{"seed":1234,"temperature":0.3}`}}],I={key:`kind`,label:`Response Format`,required:!0,control:{type:`select`,value:`list`,onChange:E,options:x.map(e=>({value:e.id,label:e.label}))}},L=({children:e})=>(0,T.jsx)(`div`,{style:{borderTop:`1px solid var(--line)`,paddingTop:`var(--s4)`},children:e}),R=(...e)=>e.map(e=>({label:e,icon:e===`Delete`?i.remove:e===`Clone`?i.clone:i.rename,onSelect:E,destructive:e===`Delete`})),z={"header/pipeline":()=>(0,T.jsx)(L,{children:(0,T.jsx)(u,{kind:`Pipeline`,name:`Pipeline 1`,onPick:E,meta:`2 jobs · 3 Targets`,primary:{label:`New pipeline`,icon:r,onSelect:E},actions:R(`Rename`,`Clone`,`Export YAML`,`Import YAML…`,`Restore…`,`Delete`)})}),"header/dataset":()=>(0,T.jsx)(L,{children:(0,T.jsx)(u,{kind:`Dataset`,name:`Demo 1`,onPick:E,meta:`62 cases · 19 graded · Source: Demo 1 images`,primary:{label:`New dataset`,icon:r,onSelect:E},actions:R(`Rename`,`Clone`,`Import JSON…`,`Export JSON`,`Restore…`,`Delete`)})}),"header/source":()=>(0,T.jsx)(L,{children:(0,T.jsx)(u,{kind:`Source`,name:`Demo 1 images`,crumb:{label:`Sources`,onClick:E},onPick:E,meta:`File Library · 63 files · 48 MB`,primary:{label:`Upload`,icon:t,onSelect:E},actions:R(`Rename`,`Delete`)})}),"header/long":()=>(0,T.jsx)(L,{children:(0,T.jsx)(u,{kind:`Pipeline`,name:`Receipts and handwritten menus, second pass with the tighter prompt and a Contains metric`,onPick:E,meta:`12 jobs · 8 Targets`,primary:{label:`New pipeline`,icon:r,onSelect:E},actions:R(`Rename`,`Clone`,`Delete`)})}),"group/open":()=>(0,T.jsx)(g,{id:`g`,title:`Evals`,actions:D(`Change`,`Remove`),children:(0,T.jsx)(`p`,{className:`note`,children:`The graded set.`})}),"group/closed":()=>(0,T.jsx)(g,{id:`g`,title:`Content`,open:!1,note:`Sample library, 63 files`,actions:D(`Change`,`Remove`)}),"group/no-menu":()=>(0,T.jsx)(g,{id:`g`,title:`Mapping`,children:(0,T.jsx)(`p`,{className:`note`,children:`Nothing to do to it.`})}),"group/sub":()=>(0,T.jsx)(g,{id:`g`,title:`Job 1`,actions:D(`Rename`,`Remove`),children:(0,T.jsx)(g,{id:`g-sub`,title:`Scenarios`,level:3,actions:D(`Clear`),children:(0,T.jsx)(`p`,{className:`note`,children:`Inside a pane.`})})}),"group/depth":()=>(0,T.jsxs)(g,{id:`g`,title:`Job 1`,actions:D(`Rename`,`Remove`),children:[(0,T.jsxs)(g,{id:`g-scenarios`,title:`Scenarios`,level:3,children:[(0,T.jsx)(g,{id:`g-plain`,title:`Plain`,level:3,actions:D(`Rename`,`Remove`),children:(0,T.jsx)(`p`,{className:`note`,children:`A pane, a section of it, and a thing with a name inside that section.`})}),(0,T.jsx)(g,{id:`g-strict`,title:`Strict`,level:3,actions:D(`Rename`,`Remove`)})]}),(0,T.jsx)(g,{id:`g-output`,title:`Output`,level:3,children:(0,T.jsx)(`p`,{className:`note`,children:`The next section of the same pane.`})})]}),"group/renaming":()=>(0,T.jsx)(j,{}),"menu/disabled":()=>(0,T.jsx)(g,{id:`g`,title:`Target 4`,actions:[{label:`Rename`,icon:i.rename,onSelect:E},{label:`Clone`,icon:i.clone,onSelect:E,disabled:!0},{label:`Remove`,icon:i.remove,onSelect:E,destructive:!0}]}),"menu/busy":()=>(0,T.jsx)(g,{id:`g`,title:`History`,actions:[{label:`Export JSON`,icon:i.export,onSelect:E,busy:!0},{label:`Clear`,icon:i.clear,onSelect:E,destructive:!0}]}),"loading/group":()=>(0,T.jsx)(g,{id:`g`,title:`History`,actions:D(`Rename`),children:(0,T.jsx)(a,{label:`Runs`,delay:0})}),"loading/error":()=>(0,T.jsx)(g,{id:`g`,title:`History`,children:(0,T.jsx)(a,{label:`Runs`,error:`Runs not loaded: server unreachable.`,onRetry:E})}),"loading/busy-button":()=>(0,T.jsx)(g,{id:`g`,title:`Run`,children:(0,T.jsxs)(`div`,{className:`gallery-row`,children:[(0,T.jsxs)(`button`,{type:`button`,className:`run`,disabled:!0,"aria-busy":!0,children:[(0,T.jsx)(_,{size:16}),`Run`]}),(0,T.jsxs)(`button`,{type:`button`,className:`ghost`,disabled:!0,"aria-busy":!0,children:[(0,T.jsx)(_,{}),`Older`]})]})}),"repeater/empty":()=>(0,T.jsx)(O,{start:[]}),"repeater/min":()=>(0,T.jsx)(O,{start:[`Target 1`],min:1}),"repeater/between":()=>(0,T.jsx)(O,{start:[`Target 1`,`Target 2`],min:1,max:4}),"repeater/max":()=>(0,T.jsx)(O,{start:[`Target 1`,`Target 2`,`Target 3`,`Target 4`],min:1,max:4}),"repeater/locked":()=>(0,T.jsx)(O,{start:[`Reply`,`Target 1`],locked:(e,t)=>t===0}),"props/controls":()=>(0,T.jsx)(l,{label:`Controls`,onRename:E,onRemove:E,onAdd:E,addLabel:`Add row`,rows:[I,{key:`language`,label:`{language}`,code:!0,control:{type:`text`,value:`English UK`,onChange:E}},{key:`geo`,label:`{geo}…{/geo}`,code:!0,control:{type:`static`,text:`Block`},enabled:{checked:!0,onChange:E}},{key:`image`,label:`Image`,control:{type:`checkbox`,checked:!0,label:`Send`,onChange:E}}]}),"props/required":()=>(0,T.jsx)(l,{label:`Output`,onRemove:E,rows:[I]}),"props/long":()=>(0,T.jsx)(l,{label:`Long`,onRemove:E,rows:[{key:`geo-location`,label:`{geo-location}`,code:!0,control:{type:`text`,value:`Hamilton, Waikato, New Zealand, Southern Hemisphere, Earth`,onChange:E}},{key:`averylongtokennamethatdoesnotbreak`,label:`{averylongtokennamethatdoesnotbreak}`,code:!0,control:{type:`text`,value:``,onChange:E}}]}),"props/widths":()=>(0,T.jsx)(l,{label:`Widths`,rows:[{key:`type`,label:`Type`,required:!0,control:{type:`select`,value:`ollama`,onChange:E,options:[{value:`ollama`,label:`Ollama (Local)`},{value:`anthropic`,label:`Anthropic`}]}},{key:`url`,label:`Address`,control:{type:`text`,value:``,placeholder:`the lab's Ollama`,onChange:E}},{key:`model`,label:`Model`,control:{type:`text`,value:`minicpm-v4.6:latest`,onChange:E}},{key:`seed`,label:`Seed`,control:{type:`text`,value:``,placeholder:`1234`,marker:`default`,onChange:E}},{key:`nPredict`,label:`Reply tokens`,control:{type:`text`,value:``,size:`num`,marker:`server`,onChange:E}},{key:`temperature`,label:`Temperature`,control:{type:`text`,value:`0.2`,onChange:E}},{key:`grammar`,label:`Grammar`,control:{type:`textarea`,value:`root ::= item (", " item)*
|
|
2
|
+
item ::= [a-z ]+`,onChange:E}}]}),"props/secret":()=>(0,T.jsx)(l,{label:`Keys`,rows:[{key:`held`,label:`Key`,control:{type:`secret`,value:`sk-not-a-real-key-0000`,onChange:E}},{key:`empty`,label:`Key`,control:{type:`secret`,value:``,onChange:E}}]}),"props/code":()=>(0,T.jsx)(l,{label:`Debug`,rows:[{key:`endpoint`,label:`Endpoint`,required:!0,control:{type:`code`,text:`https://api.anthropic.com/v1/messages`}},{key:`prompt`,label:`Prompt`,required:!0,control:{type:`static`,text:`(prompt)`}},{key:`model`,label:`model`,control:{type:`code`,text:`claude-sonnet-4-5-20250929`}},{key:`options`,label:`options`,control:{type:`code`,text:`{"seed":1234,"temperature":0}`}},{key:`stream`,label:`stream`,control:{type:`code`,text:`false`}}]}),"table/sortable":()=>(0,T.jsx)(U,{count:4}),"table/paged":()=>(0,T.jsx)(U,{count:35,pageSize:10}),"table/filter":()=>(0,T.jsx)(H,{}),"table/filter-on":()=>(0,T.jsx)(H,{search:`IMG_40`,size:`large`}),"edit/form":()=>(0,T.jsx)(M,{outcome:`Connected`,menu:[{label:`Restore…`,icon:i.restore,onSelect:E},{label:`Apply preset: repeat 1.3`,icon:i.preset,onSelect:E}],sections:[{key:`identity`,rows:N()},{key:`settings`,title:`Settings`,rows:P()},{key:`debug`,title:`Debug`,rows:F(),folded:!0}]}),"edit/plain":()=>(0,T.jsx)(s,{title:`A mapping`,sections:[{key:`one`,rows:[I,{key:`with`,label:`Separator`,control:{type:`text`,value:`, `,onChange:E}}]}],onClose:E}),"edit/long":()=>(0,T.jsx)(M,{menu:[{label:`Restore…`,icon:i.restore,onSelect:E,disabled:!0}],sections:[{key:`identity`,rows:N()},{key:`settings`,title:`Settings`,rows:[...P(),{key:`grammar`,label:`Grammar`,control:{type:`textarea`,value:`root ::= item (", " item)*
|
|
3
|
+
item ::= [a-z ]+`,onChange:E}},{key:`imagePosition`,label:`Image position`,control:{type:`select`,value:`after`,onChange:E,options:[{value:`before`,label:`before the prompt`},{value:`after`,label:`after the prompt`}]}},{key:`cachePrompt`,label:`Cache prompt`,control:{type:`select`,value:`off`,onChange:E,options:[{value:`on`,label:`on`},{value:`off`,label:`off`}]}}]},{key:`debug`,title:`Debug`,rows:F(),folded:!0}]}),"edit/status":()=>(0,T.jsx)(M,{status:`the relay could not reach http://127.0.0.1:11434`,statusBad:!0,sections:[{key:`identity`,rows:N()}]}),"view/tokens":()=>(0,T.jsx)(g,{id:`g`,title:`Token mappings`,level:3,children:(0,T.jsx)(k,{})}),"view/output":()=>(0,T.jsx)(A,{start:{kind:`list`,parse:`csv`,modifiers:[{type:`case`,mode:`LOWER`}]}}),"view/output-text":()=>(0,T.jsx)(A,{start:{kind:`text`,modifiers:[]}}),"view/output-two":()=>(0,T.jsx)(A,{start:{kind:`list`,parse:`csv`,modifiers:[{type:`case`,mode:`TITLE`},{type:`join`,with:` | `}]}}),"view/output-twice":()=>(0,T.jsx)(A,{start:{kind:`list`,parse:`csv`,modifiers:[{type:`case`,mode:`TITLE`},{type:`case`,mode:`LOWER`}]}}),"view/output-none":()=>(0,T.jsx)(A,{start:{kind:`text`,modifiers:[]},format:!1}),"view/output-flow":()=>(0,T.jsx)(A,{start:{kind:`text`,modifiers:[]},readAs:`@body('Ask')?['content']?[0]?['text']`})},B=w.map(e=>({...e,render:z[e.path]})),V=e=>Array.from({length:e},(e,t)=>({name:`IMG_${String(4e3+t*7919%97).padStart(4,`0`)}.jpg`,kb:t*37%900+40}));function H({search:e=``,size:t=`all`}){let[n,r]=(0,y.useState)(e),[i,a]=(0,y.useState)(t),[s,c]=(0,y.useState)(`shoot`),l=V(12),u=l.filter(e=>e.name.toLowerCase().includes(n.trim().toLowerCase())&&(i===`all`||i===`large`==e.kb>=400));return(0,T.jsxs)(g,{id:`files`,title:`Files`,children:[(0,T.jsx)(m,{noun:`files`,search:{label:`Name`,placeholder:`Search names`,value:n,onChange:r},count:{shown:u.length,total:l.length},filters:[{key:`source`,label:`Source`,value:s,neutral:null,onChange:c,options:[{value:`shoot`,label:`Tuesday shoot`},{value:`samples`,label:`Sample library`}]},{key:`size`,label:`Size`,value:i,onChange:a,options:[{value:`all`,label:`All`},{value:`small`,label:`Small`},{value:`large`,label:`Large`}]}]}),u.length?(0,T.jsx)(o,{label:`Files`,rows:u,rowKey:e=>e.name,columns:[{key:`name`,header:`Name`,cell:e=>e.name},{key:`size`,header:`Size`,sort:e=>e.kb,cell:e=>`${e.kb} KB`}]}):(0,T.jsx)(`p`,{className:`note`,children:`No files match these filters.`})]})}function U({count:e,pageSize:t}){let n=V(e);return(0,T.jsx)(g,{id:`files`,title:`Files`,children:(0,T.jsx)(o,{label:`Files`,rows:n,rowKey:e=>e.name,pageSize:t??null,columns:[{key:`name`,header:`Name`,cell:e=>e.name},{key:`size`,header:`Size`,sort:e=>e.kb,cell:e=>`${e.kb} KB`},{key:`menu`,header:``,sort:null,cell:e=>(0,T.jsx)(v,{label:`${e.name} actions`,actions:[{label:`Rename`,icon:i.rename,onSelect:E},{label:`Remove`,icon:i.remove,destructive:!0,onSelect:E}]})}]})})}var W=()=>decodeURIComponent(location.hash.replace(/^#\/?/,``));function G(){let[e,t]=(0,y.useState)(W);(0,y.useEffect)(()=>{let e=()=>t(W());return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]);let n=B.find(t=>t.path===e);return n?(0,T.jsxs)(`main`,{className:`gallery-one`,"data-route":n.path,children:[(0,T.jsxs)(`nav`,{className:`gallery-nav`,children:[(0,T.jsx)(`a`,{href:`#/`,children:`All`}),(0,T.jsx)(`span`,{children:n.title})]}),n.render()]}):(0,T.jsxs)(`main`,{className:`gallery-index`,"data-route":``,children:[(0,T.jsx)(`h1`,{children:`Components`}),(0,T.jsx)(`ul`,{children:B.map(e=>(0,T.jsxs)(`li`,{children:[(0,T.jsx)(`a`,{href:`#/${e.path}`,children:e.title}),` `,(0,T.jsx)(`code`,{children:e.path})]},e.path))})]})}(0,b.createRoot)(document.getElementById(`root`)).render((0,T.jsx)(y.StrictMode,{children:(0,T.jsx)(G,{})}));
|