@uibot/creation-kit 0.3.0 → 0.5.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.
@@ -0,0 +1,17 @@
1
+ import{e}from"./index-wsse4x6x.js";var t=1;var Me=/^[a-z][a-z0-9-]{0,39}$/;function He(g,ce,ae,C){if(ce.has(ae))throw Error(`Duplicate creation ${g} "${ae}" (plugin ${C})`);ce.add(ae)}function m(g){let ce=new Set,ae=new Map,C=new Map,se=new Set,we=[],pe=new Map;for(let le of g){if(le.kitApi!==t)throw Error(`Creation plugin "${le.id}" targets kit API ${String(le.kitApi)}, expected ${t}`);He("plugin",ce,le.id,le.id);for(let de of le.kinds??[]){if(!Me.test(de.kind))throw Error(`Invalid creation kind "${de.kind}" (plugin ${le.id})`);if(ae.has(de.kind))throw Error(`Duplicate creation kind "${de.kind}" (plugin ${le.id})`);ae.set(de.kind,de)}for(let de of le.editors??[]){let Ce=`${de.id}:${de.format}`;if(C.has(Ce))throw Error(`Duplicate creation editor "${Ce}" (plugin ${le.id})`);C.set(Ce,de)}for(let de of le.views??[])He("view",se,de.id,le.id),we.push(de);for(let de of le.projectAssets??[]){if(pe.has(de.slot))throw Error(`Duplicate creation asset slot "${de.slot}" (plugin ${le.id})`);pe.set(de.slot,de)}}let fe=[...ae.values()].sort((le,de)=>(le.order??100)-(de.order??100)||le.kind.localeCompare(de.kind));return{plugins:g,taskKind:(le)=>le?ae.get(le):void 0,taskKinds:()=>[...fe],kindOptions(le,de,Ce){let ke=le.map((be)=>({value:be.artifactKind,label:Ce?.(be)??be.title,disabled:!be.enabled})),ye=new Set(ke.map((be)=>be.value));for(let be of fe){if(ye.has(be.kind)){console.error(`Creation workbench kind "${be.kind}" shadows a server domain and is hidden`);continue}ke.push({value:be.kind,label:be.label[de]})}return ke},label:(le,de,Ce)=>ae.get(le)?.label[de]??Ce??le,editor:(le,de)=>le?C.get(`${le}:${de}`):void 0,views:(le)=>we.filter((de)=>de.match(le)),projectAssets:()=>[...pe.values()],projectAsset:(le)=>pe.get(le),parseRouteSearch(le){let de=typeof le.kind==="string"&&Me.test(le.kind)?le.kind:void 0,Ce={};for(let ke of fe){if(!ke.parseSearch)continue;Object.assign(Ce,ke.parseSearch(le))}return{...de?{kind:de}:{},extra:Ce}}}}import{createContext as nt,useContext as rt}from"react";import{jsx as it}from"react/jsx-runtime";var Je=nt(null);function b(g){return it(Je.Provider,{value:g.transport,children:g.children})}function y(){let g=rt(Je);if(!g)throw Error("useCreationTransport requires a CreationTransportProvider");return g}import{clsx as at}from"clsx";import{twMerge as st}from"tailwind-merge";function x(...g){return st(at(g))}function P(g){if(!(g instanceof Error))return;let{status:ce}=g;return typeof ce==="number"?ce:void 0}import{createContext as ct,useContext as lt}from"react";import{jsx as dt}from"react/jsx-runtime";var We=ct("en");function n(g){return dt(We.Provider,{value:g.locale,children:g.children})}function v(){return lt(We)}import{createContext as pt,useContext as ut}from"react";import{jsx as Ye}from"react/jsx-runtime";var Ge=pt(null);function r(g){return Ye(Ge.Provider,{value:g.primitives,children:g.children})}function gt(){let g=ut(Ge);if(!g)throw Error("Creation UI primitives require a CreationUiProvider");return g}function ge(g,ce){let ae=(C)=>{let se=g(gt());return Ye(se,{...C})};return ae.displayName=ce,ae}var k=ge((g)=>g.Button,"Button"),h=ge((g)=>g.Badge,"Badge"),T=ge((g)=>g.Label,"Label"),w=ge((g)=>g.Input,"Input"),S=ge((g)=>g.Textarea,"Textarea"),R=ge((g)=>g.Checkbox,"Checkbox"),I=ge((g)=>g.Collapsible,"Collapsible"),j=ge((g)=>g.CollapsibleTrigger,"CollapsibleTrigger"),D=ge((g)=>g.CollapsibleContent,"CollapsibleContent"),A=ge((g)=>g.ScrollArea,"ScrollArea"),E=ge((g)=>g.ScrollBar,"ScrollBar"),L=ge((g)=>g.Select,"Select"),N=ge((g)=>g.SelectTrigger,"SelectTrigger"),U=ge((g)=>g.SelectValue,"SelectValue"),O=ge((g)=>g.SelectContent,"SelectContent"),q=ge((g)=>g.SelectItem,"SelectItem"),F=ge((g)=>g.Tabs,"Tabs"),K=ge((g)=>g.TabsList,"TabsList"),B=ge((g)=>g.TabsTrigger,"TabsTrigger"),V=ge((g)=>g.TabsContent,"TabsContent"),z=ge((g)=>g.Tooltip,"Tooltip"),M=ge((g)=>g.TooltipProvider,"TooltipProvider"),_=ge((g)=>g.TooltipTrigger,"TooltipTrigger"),H=ge((g)=>g.TooltipContent,"TooltipContent"),J=ge((g)=>g.Popover,"Popover"),G=ge((g)=>g.PopoverTrigger,"PopoverTrigger"),W=ge((g)=>g.PopoverContent,"PopoverContent"),Y=ge((g)=>g.Dialog,"Dialog"),X=ge((g)=>g.DialogTrigger,"DialogTrigger"),Z=ge((g)=>g.DialogContent,"DialogContent"),Q=ge((g)=>g.DialogHeader,"DialogHeader"),ee=ge((g)=>g.DialogFooter,"DialogFooter"),te=ge((g)=>g.DialogTitle,"DialogTitle"),oe=ge((g)=>g.DialogDescription,"DialogDescription"),ne=ge((g)=>g.Prompt,"Prompt");var ze=/<(\/?)section\b[^>]*>/gi;function De(g,ce){let ae=new RegExp(`\\b${ce}(?:\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s>]+)))?`,"i").exec(g);if(!ae)return;return ae[1]??ae[2]??ae[3]??""}function ft(g){if(De(g,"data-slide")!==void 0)return!0;return/\bslide\b/i.test(De(g,"class")??"")}function Oe(g,ce){return g.exec(ce)?.[1]??""}function mt(g){return g.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'")}function Xe(g){return mt(g.replace(/<[^>]+>/g," ")).replace(/\s+/g," ").trim()}function Ze(g){let ce=[];ze.lastIndex=0;let ae=0,C=-1;for(let se=ze.exec(g);se;se=ze.exec(g)){if(se[1]==="/"){if(ae===0)continue;if(ae-=1,ae===0&&C>=0)ce.push(g.slice(C,se.index+se[0].length)),C=-1;continue}if(ae===0){if(!ft(se[0]))continue;C=se.index}ae+=1}return ce}function c(g){return Boolean(g)&&Ze(g).length>0}var Ct=/<aside\b([^>]*)>([\s\S]*?)<\/aside>/i;function bt(g){let ce="";return{slide:g.replace(Ct,(C,se,we)=>{if(!(De(`<aside ${se}>`,"data-notes")!==void 0||/\bnotes\b/i.test(De(`<aside ${se}>`,"class")??"")))return C;return ce=Xe(we),""}),notes:ce}}function l(g){let ce=Ze(g);if(ce.length===0)return{isDeck:!1,slides:[],head:"",bodyClass:"",bodyStyle:"",title:"deck"};let ae=Oe(/<head\b[^>]*>([\s\S]*?)<\/head>/i,g),C=`<body ${Oe(/<body\b([^>]*)>/i,g)}>`,se=De(C,"class")??"",we=De(C,"style")??"",pe=Xe(Oe(/<title\b[^>]*>([\s\S]*?)<\/title>/i,ae))||"deck",fe=new Set;return{isDeck:!0,slides:ce.map((de,Ce)=>{let ke=Oe(/(<section\b[^>]*>)/i,de),ye=De(ke,"data-slide")||De(ke,"data-slide-id")||String(Ce+1),be=fe.has(ye)?`${ye}-${Ce+1}`:ye;fe.add(be);let he=Oe(/background(?:-color)?\s*:\s*([^;"']+)/i,De(ke,"style")??"").trim()||void 0,{slide:Te,notes:me}=bt(de);return{html:`<!DOCTYPE html><html><head>${ae}
2
+ <style>
3
+ html, body { margin:0; padding:0; }
4
+ body { display:flex; align-items:center; justify-content:center; min-height:100vh; }
5
+ .slide, [data-slide] { transform-origin: center center !important; }
6
+ </style></head><body class="${se}" style="${we}">${Te}</body></html>`,notes:me,id:be,...he?{bg:he}:{}}}),head:ae,bodyClass:se,bodyStyle:we,title:pe}}function f(g){return`<!DOCTYPE html><html><head>
7
+ <style>
8
+ @page { size: 1280px 720px; margin: 0; }
9
+ html, body { margin:0; padding:0; }
10
+ .page { width: 1280px; height: 720px; overflow: hidden; page-break-after: always; }
11
+ .page:last-child { page-break-after: auto; }
12
+ .page iframe.slide { display:block; width:100%; height:100%; border:0; }
13
+ </style></head><body>
14
+ ${Array.from({length:g},(ae,C)=>`<div class="page"><iframe class="slide" data-slide-index="${C}" sandbox="allow-scripts"></iframe></div>`).join(`
15
+ `)}
16
+ <script>window.onload=()=>setTimeout(()=>window.print(),300)</script>
17
+ </body></html>`}function d(g,ce=(ae,C)=>window.open(ae,C)){let ae=ce("","_blank");if(!ae)return!1;ae.opener=null,ae.document.write(f(g.slides.length)),ae.document.close();let C=ae.document.querySelectorAll("iframe.slide");return g.slides.forEach((se,we)=>{let pe=C[we];if(pe)pe.srcdoc=se.html}),!0}import{ChevronLeft as yt,ChevronRight as xt,FileDown as kt,Maximize2 as vt,StickyNote as Tt}from"lucide-react";import{useEffect as Qe,useMemo as ht,useRef as Pt,useState as Be}from"react";import{jsx as Se,jsxs as Ee}from"react/jsx-runtime";var wt={empty:"No slides found (each slide must be a <section data-slide>).",prev:"Previous slide",next:"Next slide",notes:"Notes",notesTitle:"Speaker notes (N)",notesHeading:"Speaker notes",present:"Present",presentTitle:"Full screen (F)",pdfTitle:"Print to PDF",blocked:"The popup was blocked. Allow popups for this site and try again.",page:"Slide"},St={empty:"未检测到幻灯片(每页需为 <section data-slide>)。",prev:"上一页",next:"下一页",notes:"备注",notesTitle:"演讲者备注(N)",notesHeading:"演讲者备注",present:"放映",presentTitle:"全屏放映(F)",pdfTitle:"打印为 PDF",blocked:"弹窗被拦截,请允许本站弹出窗口后重试。",page:"第"},Rt={en:wt,zh:St},Ve="inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs";function i({content:g,locale:ce,active:ae}){let C=Rt[ce],se=ht(()=>l(g),[g]),[we,pe]=Be(0),[fe,le]=Be(!1),[de,Ce]=Be(""),ke=Pt(null),ye=se.slides.length,be=Math.min(we,Math.max(0,ye-1)),he=se.slides[be];if(Qe(()=>pe(0),[g]),Qe(()=>{if(!ae||ye===0)return;let Te=(me)=>{let Ae=me.target;if(Ae&&(Ae.tagName==="INPUT"||Ae.tagName==="TEXTAREA"||Ae.isContentEditable))return;if(me.key==="ArrowRight"||me.key==="PageDown"||me.key===" ")me.preventDefault(),pe((ve)=>Math.min(ve+1,ye-1));else if(me.key==="ArrowLeft"||me.key==="PageUp")me.preventDefault(),pe((ve)=>Math.max(ve-1,0));else if(me.key==="Home")pe(0);else if(me.key==="End")pe(ye-1);else if(me.key.toLowerCase()==="n")le((ve)=>!ve);else if(me.key.toLowerCase()==="f")if(document.fullscreenElement)document.exitFullscreen();else ke.current?.requestFullscreen?.()};return window.addEventListener("keydown",Te),()=>window.removeEventListener("keydown",Te)},[ae,ye]),!he)return Se("div",{className:"flex h-full items-center justify-center p-6 text-sm text-muted-foreground",children:C.empty});return Ee("div",{ref:ke,className:"flex h-full min-h-72 flex-col bg-muted/30",children:[Ee("div",{className:"relative min-h-0 flex-1",children:[Se("iframe",{title:`slide-${he.id}`,srcDoc:he.html,sandbox:"allow-scripts",className:"h-full w-full border-0 bg-white"},he.id),Se("button",{type:"button",onClick:()=>pe((Te)=>Math.max(Te-1,0)),disabled:be===0,className:"absolute left-2 top-1/2 -translate-y-1/2 rounded-full border bg-background/80 p-1.5 shadow backdrop-blur disabled:opacity-30","aria-label":C.prev,children:Se(yt,{className:"size-4"})}),Se("button",{type:"button",onClick:()=>pe((Te)=>Math.min(Te+1,ye-1)),disabled:be===ye-1,className:"absolute right-2 top-1/2 -translate-y-1/2 rounded-full border bg-background/80 p-1.5 shadow backdrop-blur disabled:opacity-30","aria-label":C.next,children:Se(xt,{className:"size-4"})}),Ee("div",{className:"absolute bottom-2 left-1/2 -translate-x-1/2 rounded-full bg-foreground/80 px-2.5 py-0.5 text-xs tabular-nums text-background",children:[be+1," / ",ye]}),fe&&he.notes&&Ee("div",{className:"absolute inset-x-3 bottom-10 max-h-[40%] overflow-y-auto rounded-md border bg-background/95 p-3 text-sm shadow-lg",children:[Se("div",{className:"mb-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground",children:C.notesHeading}),he.notes]})]}),de&&Se("p",{role:"status",className:"border-t bg-background px-3 py-1 text-xs text-destructive",children:de}),Ee("div",{className:"flex items-center gap-2 border-t bg-background px-3 py-2",children:[Se("div",{className:"flex min-w-0 flex-1 gap-1.5 overflow-x-auto",children:se.slides.map((Te,me)=>Se("button",{type:"button",onClick:()=>pe(me),"aria-label":`${C.page} ${me+1}`,"aria-current":me===be?"true":void 0,...Te.bg?{style:{background:Te.bg}}:{},className:`flex size-7 shrink-0 items-center justify-center rounded border text-[11px] tabular-nums ${me===be?"border-primary ring-2 ring-primary/30":"text-muted-foreground hover:border-foreground/30"}`,children:me+1},Te.id))}),Ee("button",{type:"button",onClick:()=>le((Te)=>!Te),className:`${Ve} ${fe?"border-primary bg-primary/10 text-primary":"text-muted-foreground hover:bg-accent"}`,title:C.notesTitle,children:[Se(Tt,{className:"size-3.5"}),C.notes]}),Ee("button",{type:"button",onClick:()=>{if(!document.fullscreenElement)ke.current?.requestFullscreen?.()},className:`${Ve} text-muted-foreground hover:bg-accent`,title:C.presentTitle,children:[Se(vt,{className:"size-3.5"}),C.present]}),Ee("button",{type:"button",onClick:()=>Ce(d(se)?"":C.blocked),className:`${Ve} text-muted-foreground hover:bg-accent`,title:C.pdfTitle,children:[Se(kt,{className:"size-3.5"}),"PDF"]})]})]})}var re={id:"presentation-deck",version:"1.0.0",kitApi:t,views:[{id:"slides",label:{zh:"幻灯片",en:"Slides"},match:(g)=>g.artifactKind==="presentation"&&g.format==="html"&&c(g.content),View:i}]};var It=["queued","running","interrupted","completed","failed","cancelled","conflict"];function a(g){if(!g||typeof g!=="object"||Array.isArray(g))return"unknown";if(typeof g.status!=="string"||!It.includes(g.status))return"unknown";if(g.error?.code==="inference-outcome-unknown")return"unknown";let ce=g.modelRequests;if(ce!==void 0){if(!Array.isArray(ce))return"unknown";for(let ae of ce){if(!ae||typeof ae!=="object"||Array.isArray(ae))return"unknown";let C=ae;if(typeof C.requestId!=="string"||!C.requestId||C.purpose!=="generation"&&C.purpose!=="requirement-review"||typeof C.dispatchedAt!=="string"||!C.dispatchedAt||C.dispatched!==void 0&&typeof C.dispatched!=="boolean"||typeof C.outcome!=="string"||!["pending","completed","failed","unknown"].includes(C.outcome))return"unknown";if(C.outcome==="unknown")return"unknown";if(C.outcome==="pending"&&!["queued","running","interrupted"].includes(g.status))return"unknown"}}return g.status}function o(g=[]){if(!Array.isArray(g))return[g];return g.filter((ce)=>["queued","running","interrupted","unknown"].includes(a(ce)))}var Dt={zh:{noRecord:"尚未读到原请求记录;不会重新发送。",unknown:"原请求结果未知;不会重新发送。",settled:"原请求结果已确认。",running:"原请求仍在进行中。",storageFailed:"未发送生成请求:无法保存原请求核对记录。",rejected:"生成请求未被接受;请检查当前版本和生成能力后重新发起。",noLocks:"未发送生成请求:当前浏览器无法锁定项目生成操作。",lockFailed:"未能取得项目生成锁;请稍后核对原请求状态。",readFailed:"状态读取失败;保留原请求并稍后只读核对。",unreadable:"无法读取原请求核对记录;生成已禁用。"},en:{noRecord:"The original request is not recorded yet; it will not be sent again.",unknown:"The original request's outcome is unknown; it will not be sent again.",settled:"The original request's outcome is confirmed.",running:"The original request is still in progress.",storageFailed:"Not sent: the request record could not be saved.",rejected:"The request was not accepted; check the current version and generation, then try again.",noLocks:"Not sent: this browser cannot lock project generation.",lockFailed:"Could not take the project generation lock; check the original request later.",readFailed:"Reading the status failed; the original request is kept for a later check.",unreadable:"The request record cannot be read; generation is disabled."}},u=Object.freeze({pending:!0,sending:!1,checking:!1,writingBlocked:!0,canReconcile:!1,message:""});function At(g){return g instanceof e&&(g.status===422&&["invalid-input","invalid-format","unknown-domain"].includes(g.code)||g.status===409&&["revision-conflict","format-conflict","domain-disabled","brand-conflict"].includes(g.code)||g.status===503&&g.code==="model-unavailable")}function Le(g,ce,ae){if(!g)return{ok:!1,pending:null};try{let C=g.getItem(ce);if(C===null)return{ok:!0,pending:null};let se=JSON.parse(C);if(!se||se.version!==1||se.projectId!==ae||typeof se.requestId!=="string"||!se.requestId||typeof se.kind!=="string"||!se.kind||!["new","rewrite"].includes(se.mode))return{ok:!1,pending:null};if(se.mode==="rewrite"&&(typeof se.artifactId!=="string"||!se.artifactId||typeof se.expectedRevisionId!=="string"||!se.expectedRevisionId))return{ok:!1,pending:null};if(se.reference&&(typeof se.reference.artifactId!=="string"||!se.reference.artifactId||typeof se.reference.revisionId!=="string"||!se.reference.revisionId))return{ok:!1,pending:null};return{ok:!0,pending:se}}catch{return{ok:!1,pending:null}}}function p(g){let ce=Dt[g.locale??"en"],ae=g.storageKey,C=g.project.id,se=g.authority??(()=>""),we=g.newRequestId??(()=>crypto.randomUUID()),pe=g.project,fe=Le(g.storage,ae,C),le=!1,de=!1,Ce="",ke=!0,ye=!1,be=!1,he=0,Te=new Set,me=Ae();function Ae(){let ue=o(pe.runs);return{pending:!fe.ok||!!fe.pending||ue.length>0||le,sending:le,checking:de,writingBlocked:le||!!fe.pending||ue.length>0,canReconcile:fe.ok&&(!!fe.pending||ue.some((xe)=>!!xe?.requestId)),message:!fe.ok?ce.unreadable:Ce}}function ve(){let ue=Ae();if(JSON.stringify(ue)===JSON.stringify(me))return;let xe=ue.writingBlocked!==me.writingBlocked;if(me=ue,xe)g.onWritingBlocked?.(ue.writingBlocked);for(let Pe of Te)Pe()}function $e(ue){if(JSON.stringify(ue)===JSON.stringify(fe))return;fe=ue,ve()}function Ne(ue,xe){return ke&&ue===he&&se()===xe}function et(ue){let xe=Le(g.storage,ae,C);if(xe.ok&&xe.pending?.requestId===ue){try{g.storage?.removeItem(ae)}catch{}$e(Le(g.storage,ae,C)),g.broadcast?.()}}function Ke(ue,xe,Pe,Ue){if(!Ne(Ue,Pe))return;let Ie=ue.runs?.find((Fe)=>Fe?.requestId===xe);if(!Ie){Ce=ce.noRecord,ve();return}let je=a(Ie),Re=["completed","failed","cancelled","conflict"].includes(je);if(Re){try{g.storage?.removeItem(ae)}catch{}$e(Le(g.storage,ae,C)),g.broadcast?.()}Ce=je==="unknown"?ce.unknown:Re?ce.settled:ce.running,pe=ue,ve(),g.onProject?.(ue,je==="completed"?Ie.artifactId:void 0)}async function tt(ue){if(me.pending||ye)return;let xe=Le(g.storage,ae,C);if(!xe.ok||xe.pending||o(pe.runs).length){$e(xe);return}let Pe=we(),Ue={version:1,projectId:C,requestId:Pe,kind:ue.kind,mode:ue.artifactId?"rewrite":"new",...ue.artifactId?{artifactId:ue.artifactId,expectedRevisionId:ue.expectedRevisionId}:{},...ue.reference?{reference:ue.reference}:{}};try{let Re=JSON.stringify(Ue);if(g.storage?.setItem(ae,Re),!g.storage||g.storage.getItem(ae)!==Re)throw Error("storage-readback")}catch{fe=Le(g.storage,ae,C),Ce=ce.storageFailed,ve();return}ye=!0,le=!0,fe={ok:!0,pending:Ue},ve(),g.broadcast?.();let Ie=he,je=se();try{let Re=await g.client.startRun(C,{...ue,requestId:Pe});Ke(Re,Pe,je,Ie)}catch(Re){if(!Ne(Ie,je))return;let Fe=At(Re);if(Re instanceof e&&Re.status===404&&Re.code==="not-found")try{let qe=await g.client.getProject(C);if(!Ne(Ie,je))return;if(qe.id===C){if(qe.runs?.some((ot)=>ot?.requestId===Pe)){Ke(qe,Pe,je,Ie);return}pe=qe,g.onProject?.(qe),Fe=!0}}catch{}if(Fe)et(Pe),Ce=ce.rejected;else Ce=ce.unknown;ve()}finally{if(ye=!1,ke&&Ie===he)le=!1,ve()}}return{getState:()=>me,subscribe(ue){return Te.add(ue),()=>Te.delete(ue)},setProject(ue){if(ue.id!==C)return;pe=ue,ve()},refresh(){$e(Le(g.storage,ae,C))},async start(ue){if(me.pending||ye||be)return;if(!g.locks){Ce=ce.noLocks,ve();return}let xe=he,Pe=se();be=!0;try{await g.locks.request(ae,async()=>{if(!Ne(xe,Pe))return;await tt(ue)})}catch{if(Ne(xe,Pe))Ce=ce.lockFailed,ve()}finally{be=!1}},async reconcile(){if(ye||de||!fe.ok)return;let ue=fe.pending?.requestId??o(pe.runs).find((Ue)=>!!Ue?.requestId)?.requestId;if(!ue)return;let xe=he,Pe=se();ye=!0,de=!0,ve();try{Ke(await g.client.getProject(C),ue,Pe,xe)}catch{if(Ne(xe,Pe))Ce=ce.readFailed,ve()}finally{if(ye=!1,ke&&xe===he)de=!1,ve()}},activate(){ke=!0},deactivate(){ke=!1,he+=1,le=!1,de=!1,ve()}}}import{useEffect as _e,useLayoutEffect as jt,useMemo as Et,useRef as Lt,useSyncExternalStore as Nt}from"react";var s="uibot:creation-run-changed",Ut=typeof window>"u"?_e:jt;function qt(){try{return typeof window>"u"?void 0:window.localStorage}catch{return}}function Ot(){let g=typeof navigator>"u"?void 0:navigator.locks;return g?.request?g:void 0}function ie(g){let ce=Lt(g);ce.current=g;let{storageKey:ae}=g,C=g.project.id,se=Et(()=>p({client:{startRun:(pe,fe)=>ce.current.client.startRun(pe,fe),getProject:(pe,fe)=>ce.current.client.getProject(pe,fe)},project:g.project,storageKey:ae,storage:g.storage??qt(),locks:g.locks??Ot(),authority:()=>ce.current.authority?.()??"",broadcast:()=>{if(typeof window<"u")window.dispatchEvent(new Event(s))},...g.locale?{locale:g.locale}:{},onProject:(pe,fe)=>ce.current.onProject(pe,fe),onWritingBlocked:(pe)=>ce.current.onPending?.(pe)}),[ae,C]);_e(()=>{if(se.activate(),typeof window>"u")return()=>se.deactivate();let pe=()=>se.refresh();return window.addEventListener(s,pe),window.addEventListener("storage",pe),pe(),()=>{window.removeEventListener(s,pe),window.removeEventListener("storage",pe),se.deactivate()}},[se]),Ut(()=>{se.setProject(g.project)},[se,g.project]);let we=Nt(se.subscribe,se.getState,()=>u);return _e(()=>{ce.current.onPending?.(se.getState().writingBlocked)},[se]),{...we,start:se.start,reconcile:se.reconcile}}export{t,m,b,y,x,P,n,v,r,k,h,T,w,S,R,I,j,D,A,E,L,N,U,O,q,F,K,B,V,z,M,_,H,J,G,W,Y,X,Z,Q,ee,te,oe,ne,c,l,f,d,i,re,a,o,u,p,s,ie};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{t,m,b,y,x,P,n,v,r,k,h,T,w,S,R,I,j,D,A,E,L,N,U,O,q,F,K,B,V,z,M,_,H,J,G,W,Y,X,Z,Q,ee,te,oe,ne,c,l,f,d,i,re,a,o,u,p,s,ie}from"./index-env5rwnc.js";import{e,g,C}from"./index-wsse4x6x.js";export{h as Badge,k as Button,t as CREATION_KIT_API,s as CREATION_RUN_CHANGED_EVENT,u as CREATION_RUN_SERVER_STATE,R as Checkbox,I as Collapsible,D as CollapsibleContent,j as CollapsibleTrigger,e as CreationApiError,n as CreationLocaleProvider,b as CreationTransportProvider,r as CreationUiProvider,i as DeckViewer,Y as Dialog,Z as DialogContent,oe as DialogDescription,ee as DialogFooter,Q as DialogHeader,te as DialogTitle,X as DialogTrigger,w as Input,T as Label,J as Popover,W as PopoverContent,G as PopoverTrigger,ne as Prompt,A as ScrollArea,E as ScrollBar,L as Select,O as SelectContent,q as SelectItem,N as SelectTrigger,U as SelectValue,F as Tabs,V as TabsContent,K as TabsList,B as TabsTrigger,S as Textarea,z as Tooltip,H as TooltipContent,M as TooltipProvider,_ as TooltipTrigger,f as buildPrintShellHtml,x as cn,C as createCreationClient,m as createCreationKindRegistry,p as createCreationRunController,P as creationErrorStatus,g as creationProjectPath,a as creationRunStatus,c as isDeck,l as parseDeck,re as presentationDeckPlugin,d as printDeckToPdf,o as unresolvedCreationRuns,v as useCreationLocale,ie as useCreationRun,y as useCreationTransport};
1
+ import{t,m,b,y,x,P,n,v,r,k,h,T,w,S,R,I,j,D,A,E,L,N,U,O,q,F,K,B,V,z,M,_,H,J,G,W,Y,X,Z,Q,ee,te,oe,ne,c,l,f,d,i,re,a,o,u,p,s,ie}from"./index-rep1qesa.js";import{e,g,C}from"./index-wsse4x6x.js";export{h as Badge,k as Button,t as CREATION_KIT_API,s as CREATION_RUN_CHANGED_EVENT,u as CREATION_RUN_SERVER_STATE,R as Checkbox,I as Collapsible,D as CollapsibleContent,j as CollapsibleTrigger,e as CreationApiError,n as CreationLocaleProvider,b as CreationTransportProvider,r as CreationUiProvider,i as DeckViewer,Y as Dialog,Z as DialogContent,oe as DialogDescription,ee as DialogFooter,Q as DialogHeader,te as DialogTitle,X as DialogTrigger,w as Input,T as Label,J as Popover,W as PopoverContent,G as PopoverTrigger,ne as Prompt,A as ScrollArea,E as ScrollBar,L as Select,O as SelectContent,q as SelectItem,N as SelectTrigger,U as SelectValue,F as Tabs,V as TabsContent,K as TabsList,B as TabsTrigger,S as Textarea,z as Tooltip,H as TooltipContent,M as TooltipProvider,_ as TooltipTrigger,f as buildPrintShellHtml,x as cn,C as createCreationClient,m as createCreationKindRegistry,p as createCreationRunController,P as creationErrorStatus,g as creationProjectPath,a as creationRunStatus,c as isDeck,l as parseDeck,re as presentationDeckPlugin,d as printDeckToPdf,o as unresolvedCreationRuns,v as useCreationLocale,ie as useCreationRun,y as useCreationTransport};
package/dist/testing.js CHANGED
@@ -1 +1 @@
1
- import{n,r}from"./index-env5rwnc.js";import"./index-wsse4x6x.js";import{createElement as d}from"react";import{jsx as s}from"react/jsx-runtime";var g={Button:"button",Input:"input",Label:"label",Textarea:"textarea",DialogTitle:"h2",DialogDescription:"p"},u=new Set(["asChild","viewportProps","showCloseButton","sideOffset","align","side"]);function C(){let e=new Map;return new Proxy({},{get(v,i){let t=e.get(i);if(!t){let c=g[i]??"div";t=(l)=>{let o={};for(let[a,p]of Object.entries(l))if(!u.has(a))o[a]=p;return d(c,o)},t.displayName=i,e.set(i,t)}return t}})}function m(e){return s(r,{primitives:C(),children:s(n,{locale:e.locale??"en",children:e.children})})}export{m as PlainKitProviders,C as createPlainUi};
1
+ import{n,r}from"./index-rep1qesa.js";import"./index-wsse4x6x.js";import{createElement as d}from"react";import{jsx as s}from"react/jsx-runtime";var g={Button:"button",Input:"input",Label:"label",Textarea:"textarea",DialogTitle:"h2",DialogDescription:"p"},u=new Set(["asChild","viewportProps","showCloseButton","sideOffset","align","side"]);function C(){let e=new Map;return new Proxy({},{get(v,i){let t=e.get(i);if(!t){let c=g[i]??"div";t=(l)=>{let o={};for(let[a,p]of Object.entries(l))if(!u.has(a))o[a]=p;return d(c,o)},t.displayName=i,e.set(i,t)}return t}})}function m(e){return s(r,{primitives:C(),children:s(n,{locale:e.locale??"en",children:e.children})})}export{m as PlainKitProviders,C as createPlainUi};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uibot/creation-kit",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,8 +39,8 @@
39
39
  "react-dom": "^19"
40
40
  },
41
41
  "dependencies": {
42
- "@uibot/contracts": "^0.3.0",
43
- "@uibot/ai-chat": "^0.3.0",
42
+ "@uibot/contracts": "^0.5.0",
43
+ "@uibot/ai-chat": "^0.5.0",
44
44
  "lucide-react": "^1.56.0",
45
45
  "clsx": "^2.1.1",
46
46
  "tailwind-merge": "^3.7.0"
@@ -1,17 +0,0 @@
1
- import{e}from"./index-wsse4x6x.js";var t=1;var Me=/^[a-z][a-z0-9-]{0,39}$/;function He(g,ce,ae,C){if(ce.has(ae))throw Error(`Duplicate creation ${g} "${ae}" (plugin ${C})`);ce.add(ae)}function m(g){let ce=new Set,ae=new Map,C=new Map,se=new Set,we=[],pe=new Map;for(let le of g){if(le.kitApi!==t)throw Error(`Creation plugin "${le.id}" targets kit API ${String(le.kitApi)}, expected ${t}`);He("plugin",ce,le.id,le.id);for(let de of le.kinds??[]){if(!Me.test(de.kind))throw Error(`Invalid creation kind "${de.kind}" (plugin ${le.id})`);if(ae.has(de.kind))throw Error(`Duplicate creation kind "${de.kind}" (plugin ${le.id})`);ae.set(de.kind,de)}for(let de of le.editors??[]){let Ce=`${de.id}:${de.format}`;if(C.has(Ce))throw Error(`Duplicate creation editor "${Ce}" (plugin ${le.id})`);C.set(Ce,de)}for(let de of le.views??[])He("view",se,de.id,le.id),we.push(de);for(let de of le.projectAssets??[]){if(pe.has(de.slot))throw Error(`Duplicate creation asset slot "${de.slot}" (plugin ${le.id})`);pe.set(de.slot,de)}}let fe=[...ae.values()].sort((le,de)=>(le.order??100)-(de.order??100)||le.kind.localeCompare(de.kind));return{plugins:g,taskKind:(le)=>le?ae.get(le):void 0,taskKinds:()=>[...fe],kindOptions(le,de,Ce){let ye=le.map((be)=>({value:be.artifactKind,label:Ce?.(be)??be.title,disabled:!be.enabled})),xe=new Set(ye.map((be)=>be.value));for(let be of fe){if(xe.has(be.kind)){console.error(`Creation workbench kind "${be.kind}" shadows a server domain and is hidden`);continue}ye.push({value:be.kind,label:be.label[de]})}return ye},label:(le,de,Ce)=>ae.get(le)?.label[de]??Ce??le,editor:(le,de)=>le?C.get(`${le}:${de}`):void 0,views:(le)=>we.filter((de)=>de.match(le)),projectAssets:()=>[...pe.values()],projectAsset:(le)=>pe.get(le),parseRouteSearch(le){let de=typeof le.kind==="string"&&Me.test(le.kind)?le.kind:void 0,Ce={};for(let ye of fe){if(!ye.parseSearch)continue;Object.assign(Ce,ye.parseSearch(le))}return{...de?{kind:de}:{},extra:Ce}}}}import{createContext as nt,useContext as rt}from"react";import{jsx as it}from"react/jsx-runtime";var Je=nt(null);function b(g){return it(Je.Provider,{value:g.transport,children:g.children})}function y(){let g=rt(Je);if(!g)throw Error("useCreationTransport requires a CreationTransportProvider");return g}import{clsx as at}from"clsx";import{twMerge as st}from"tailwind-merge";function x(...g){return st(at(g))}function P(g){if(!(g instanceof Error))return;let{status:ce}=g;return typeof ce==="number"?ce:void 0}import{createContext as ct,useContext as lt}from"react";import{jsx as dt}from"react/jsx-runtime";var We=ct("en");function n(g){return dt(We.Provider,{value:g.locale,children:g.children})}function v(){return lt(We)}import{createContext as pt,useContext as ut}from"react";import{jsx as Ye}from"react/jsx-runtime";var Ge=pt(null);function r(g){return Ye(Ge.Provider,{value:g.primitives,children:g.children})}function gt(){let g=ut(Ge);if(!g)throw Error("Creation UI primitives require a CreationUiProvider");return g}function ge(g,ce){let ae=(C)=>{let se=g(gt());return Ye(se,{...C})};return ae.displayName=ce,ae}var k=ge((g)=>g.Button,"Button"),h=ge((g)=>g.Badge,"Badge"),T=ge((g)=>g.Label,"Label"),w=ge((g)=>g.Input,"Input"),S=ge((g)=>g.Textarea,"Textarea"),R=ge((g)=>g.Checkbox,"Checkbox"),I=ge((g)=>g.Collapsible,"Collapsible"),j=ge((g)=>g.CollapsibleTrigger,"CollapsibleTrigger"),D=ge((g)=>g.CollapsibleContent,"CollapsibleContent"),A=ge((g)=>g.ScrollArea,"ScrollArea"),E=ge((g)=>g.ScrollBar,"ScrollBar"),L=ge((g)=>g.Select,"Select"),N=ge((g)=>g.SelectTrigger,"SelectTrigger"),U=ge((g)=>g.SelectValue,"SelectValue"),O=ge((g)=>g.SelectContent,"SelectContent"),q=ge((g)=>g.SelectItem,"SelectItem"),F=ge((g)=>g.Tabs,"Tabs"),K=ge((g)=>g.TabsList,"TabsList"),B=ge((g)=>g.TabsTrigger,"TabsTrigger"),V=ge((g)=>g.TabsContent,"TabsContent"),z=ge((g)=>g.Tooltip,"Tooltip"),M=ge((g)=>g.TooltipProvider,"TooltipProvider"),_=ge((g)=>g.TooltipTrigger,"TooltipTrigger"),H=ge((g)=>g.TooltipContent,"TooltipContent"),J=ge((g)=>g.Popover,"Popover"),G=ge((g)=>g.PopoverTrigger,"PopoverTrigger"),W=ge((g)=>g.PopoverContent,"PopoverContent"),Y=ge((g)=>g.Dialog,"Dialog"),X=ge((g)=>g.DialogTrigger,"DialogTrigger"),Z=ge((g)=>g.DialogContent,"DialogContent"),Q=ge((g)=>g.DialogHeader,"DialogHeader"),ee=ge((g)=>g.DialogFooter,"DialogFooter"),te=ge((g)=>g.DialogTitle,"DialogTitle"),oe=ge((g)=>g.DialogDescription,"DialogDescription"),ne=ge((g)=>g.Prompt,"Prompt");var ze=/<(\/?)section\b[^>]*>/gi;function Ie(g,ce){let ae=new RegExp(`\\b${ce}(?:\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s>]+)))?`,"i").exec(g);if(!ae)return;return ae[1]??ae[2]??ae[3]??""}function ft(g){if(Ie(g,"data-slide")!==void 0)return!0;return/\bslide\b/i.test(Ie(g,"class")??"")}function Oe(g,ce){return g.exec(ce)?.[1]??""}function mt(g){return g.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'")}function Xe(g){return mt(g.replace(/<[^>]+>/g," ")).replace(/\s+/g," ").trim()}function Ze(g){let ce=[];ze.lastIndex=0;let ae=0,C=-1;for(let se=ze.exec(g);se;se=ze.exec(g)){if(se[1]==="/"){if(ae===0)continue;if(ae-=1,ae===0&&C>=0)ce.push(g.slice(C,se.index+se[0].length)),C=-1;continue}if(ae===0){if(!ft(se[0]))continue;C=se.index}ae+=1}return ce}function c(g){return Boolean(g)&&Ze(g).length>0}var Ct=/<aside\b([^>]*)>([\s\S]*?)<\/aside>/i;function bt(g){let ce="";return{slide:g.replace(Ct,(C,se,we)=>{if(!(Ie(`<aside ${se}>`,"data-notes")!==void 0||/\bnotes\b/i.test(Ie(`<aside ${se}>`,"class")??"")))return C;return ce=Xe(we),""}),notes:ce}}function l(g){let ce=Ze(g);if(ce.length===0)return{isDeck:!1,slides:[],head:"",bodyClass:"",bodyStyle:"",title:"deck"};let ae=Oe(/<head\b[^>]*>([\s\S]*?)<\/head>/i,g),C=`<body ${Oe(/<body\b([^>]*)>/i,g)}>`,se=Ie(C,"class")??"",we=Ie(C,"style")??"",pe=Xe(Oe(/<title\b[^>]*>([\s\S]*?)<\/title>/i,ae))||"deck",fe=new Set;return{isDeck:!0,slides:ce.map((de,Ce)=>{let ye=Oe(/(<section\b[^>]*>)/i,de),xe=Ie(ye,"data-slide")||Ie(ye,"data-slide-id")||String(Ce+1),be=fe.has(xe)?`${xe}-${Ce+1}`:xe;fe.add(be);let he=Oe(/background(?:-color)?\s*:\s*([^;"']+)/i,Ie(ye,"style")??"").trim()||void 0,{slide:Te,notes:me}=bt(de);return{html:`<!DOCTYPE html><html><head>${ae}
2
- <style>
3
- html, body { margin:0; padding:0; }
4
- body { display:flex; align-items:center; justify-content:center; min-height:100vh; }
5
- .slide, [data-slide] { transform-origin: center center !important; }
6
- </style></head><body class="${se}" style="${we}">${Te}</body></html>`,notes:me,id:be,...he?{bg:he}:{}}}),head:ae,bodyClass:se,bodyStyle:we,title:pe}}function f(g){return`<!DOCTYPE html><html><head>
7
- <style>
8
- @page { size: 1280px 720px; margin: 0; }
9
- html, body { margin:0; padding:0; }
10
- .page { width: 1280px; height: 720px; overflow: hidden; page-break-after: always; }
11
- .page:last-child { page-break-after: auto; }
12
- .page iframe.slide { display:block; width:100%; height:100%; border:0; }
13
- </style></head><body>
14
- ${Array.from({length:g},(ae,C)=>`<div class="page"><iframe class="slide" data-slide-index="${C}" sandbox="allow-scripts"></iframe></div>`).join(`
15
- `)}
16
- <script>window.onload=()=>setTimeout(()=>window.print(),300)</script>
17
- </body></html>`}function d(g,ce=(ae,C)=>window.open(ae,C)){let ae=ce("","_blank");if(!ae)return!1;ae.opener=null,ae.document.write(f(g.slides.length)),ae.document.close();let C=ae.document.querySelectorAll("iframe.slide");return g.slides.forEach((se,we)=>{let pe=C[we];if(pe)pe.srcdoc=se.html}),!0}import{ChevronLeft as xt,ChevronRight as yt,FileDown as kt,Maximize2 as vt,StickyNote as Tt}from"lucide-react";import{useEffect as Qe,useMemo as ht,useRef as Pt,useState as Be}from"react";import{jsx as Se,jsxs as Ee}from"react/jsx-runtime";var wt={empty:"No slides found (each slide must be a <section data-slide>).",prev:"Previous slide",next:"Next slide",notes:"Notes",notesTitle:"Speaker notes (N)",notesHeading:"Speaker notes",present:"Present",presentTitle:"Full screen (F)",pdfTitle:"Print to PDF",blocked:"The popup was blocked. Allow popups for this site and try again.",page:"Slide"},St={empty:"未检测到幻灯片(每页需为 <section data-slide>)。",prev:"上一页",next:"下一页",notes:"备注",notesTitle:"演讲者备注(N)",notesHeading:"演讲者备注",present:"放映",presentTitle:"全屏放映(F)",pdfTitle:"打印为 PDF",blocked:"弹窗被拦截,请允许本站弹出窗口后重试。",page:"第"},Rt={en:wt,zh:St},Ve="inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs";function i({content:g,locale:ce,active:ae}){let C=Rt[ce],se=ht(()=>l(g),[g]),[we,pe]=Be(0),[fe,le]=Be(!1),[de,Ce]=Be(""),ye=Pt(null),xe=se.slides.length,be=Math.min(we,Math.max(0,xe-1)),he=se.slides[be];if(Qe(()=>pe(0),[g]),Qe(()=>{if(!ae||xe===0)return;let Te=(me)=>{let Ae=me.target;if(Ae&&(Ae.tagName==="INPUT"||Ae.tagName==="TEXTAREA"||Ae.isContentEditable))return;if(me.key==="ArrowRight"||me.key==="PageDown"||me.key===" ")me.preventDefault(),pe((ke)=>Math.min(ke+1,xe-1));else if(me.key==="ArrowLeft"||me.key==="PageUp")me.preventDefault(),pe((ke)=>Math.max(ke-1,0));else if(me.key==="Home")pe(0);else if(me.key==="End")pe(xe-1);else if(me.key.toLowerCase()==="n")le((ke)=>!ke);else if(me.key.toLowerCase()==="f")if(document.fullscreenElement)document.exitFullscreen();else ye.current?.requestFullscreen?.()};return window.addEventListener("keydown",Te),()=>window.removeEventListener("keydown",Te)},[ae,xe]),!he)return Se("div",{className:"flex h-full items-center justify-center p-6 text-sm text-muted-foreground",children:C.empty});return Ee("div",{ref:ye,className:"flex h-full min-h-72 flex-col bg-muted/30",children:[Ee("div",{className:"relative min-h-0 flex-1",children:[Se("iframe",{title:`slide-${he.id}`,srcDoc:he.html,sandbox:"allow-scripts",className:"h-full w-full border-0 bg-white"},he.id),Se("button",{type:"button",onClick:()=>pe((Te)=>Math.max(Te-1,0)),disabled:be===0,className:"absolute left-2 top-1/2 -translate-y-1/2 rounded-full border bg-background/80 p-1.5 shadow backdrop-blur disabled:opacity-30","aria-label":C.prev,children:Se(xt,{className:"size-4"})}),Se("button",{type:"button",onClick:()=>pe((Te)=>Math.min(Te+1,xe-1)),disabled:be===xe-1,className:"absolute right-2 top-1/2 -translate-y-1/2 rounded-full border bg-background/80 p-1.5 shadow backdrop-blur disabled:opacity-30","aria-label":C.next,children:Se(yt,{className:"size-4"})}),Ee("div",{className:"absolute bottom-2 left-1/2 -translate-x-1/2 rounded-full bg-foreground/80 px-2.5 py-0.5 text-xs tabular-nums text-background",children:[be+1," / ",xe]}),fe&&he.notes&&Ee("div",{className:"absolute inset-x-3 bottom-10 max-h-[40%] overflow-y-auto rounded-md border bg-background/95 p-3 text-sm shadow-lg",children:[Se("div",{className:"mb-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground",children:C.notesHeading}),he.notes]})]}),de&&Se("p",{role:"status",className:"border-t bg-background px-3 py-1 text-xs text-destructive",children:de}),Ee("div",{className:"flex items-center gap-2 border-t bg-background px-3 py-2",children:[Se("div",{className:"flex min-w-0 flex-1 gap-1.5 overflow-x-auto",children:se.slides.map((Te,me)=>Se("button",{type:"button",onClick:()=>pe(me),"aria-label":`${C.page} ${me+1}`,"aria-current":me===be?"true":void 0,...Te.bg?{style:{background:Te.bg}}:{},className:`flex size-7 shrink-0 items-center justify-center rounded border text-[11px] tabular-nums ${me===be?"border-primary ring-2 ring-primary/30":"text-muted-foreground hover:border-foreground/30"}`,children:me+1},Te.id))}),Ee("button",{type:"button",onClick:()=>le((Te)=>!Te),className:`${Ve} ${fe?"border-primary bg-primary/10 text-primary":"text-muted-foreground hover:bg-accent"}`,title:C.notesTitle,children:[Se(Tt,{className:"size-3.5"}),C.notes]}),Ee("button",{type:"button",onClick:()=>{if(!document.fullscreenElement)ye.current?.requestFullscreen?.()},className:`${Ve} text-muted-foreground hover:bg-accent`,title:C.presentTitle,children:[Se(vt,{className:"size-3.5"}),C.present]}),Ee("button",{type:"button",onClick:()=>Ce(d(se)?"":C.blocked),className:`${Ve} text-muted-foreground hover:bg-accent`,title:C.pdfTitle,children:[Se(kt,{className:"size-3.5"}),"PDF"]})]})]})}var re={id:"presentation-deck",version:"1.0.0",kitApi:t,views:[{id:"slides",label:{zh:"幻灯片",en:"Slides"},match:(g)=>g.artifactKind==="presentation"&&g.format==="html"&&c(g.content),View:i}]};var Dt=["queued","running","interrupted","completed","failed","cancelled","conflict"];function a(g){if(typeof g.status!=="string"||!Dt.includes(g.status))return"unknown";if(g.error?.code==="inference-outcome-unknown")return"unknown";let ce=g.modelRequests;if(ce!==void 0){if(!Array.isArray(ce))return"unknown";for(let ae of ce){if(!ae||typeof ae!=="object"||Array.isArray(ae))return"unknown";let C=ae;if(typeof C.requestId!=="string"||!C.requestId||C.purpose!=="generation"&&C.purpose!=="requirement-review"||typeof C.dispatchedAt!=="string"||!C.dispatchedAt||C.dispatched!==void 0&&typeof C.dispatched!=="boolean"||typeof C.outcome!=="string"||!["pending","completed","failed","unknown"].includes(C.outcome))return"unknown";if(C.outcome==="unknown")return"unknown";if(C.outcome==="pending"&&!["queued","running","interrupted"].includes(g.status))return"unknown"}}return g.status}function o(g=[]){return g.filter((ce)=>["queued","running","interrupted","unknown"].includes(a(ce)))}var It={zh:{noRecord:"尚未读到原请求记录;不会重新发送。",unknown:"原请求结果未知;不会重新发送。",settled:"原请求结果已确认。",running:"原请求仍在进行中。",storageFailed:"未发送生成请求:无法保存原请求核对记录。",rejected:"生成请求未被接受;请检查当前版本和生成能力后重新发起。",noLocks:"未发送生成请求:当前浏览器无法锁定项目生成操作。",lockFailed:"未能取得项目生成锁;请稍后核对原请求状态。",readFailed:"状态读取失败;保留原请求并稍后只读核对。",unreadable:"无法读取原请求核对记录;生成已禁用。"},en:{noRecord:"The original request is not recorded yet; it will not be sent again.",unknown:"The original request's outcome is unknown; it will not be sent again.",settled:"The original request's outcome is confirmed.",running:"The original request is still in progress.",storageFailed:"Not sent: the request record could not be saved.",rejected:"The request was not accepted; check the current version and generation, then try again.",noLocks:"Not sent: this browser cannot lock project generation.",lockFailed:"Could not take the project generation lock; check the original request later.",readFailed:"Reading the status failed; the original request is kept for a later check.",unreadable:"The request record cannot be read; generation is disabled."}},u=Object.freeze({pending:!0,sending:!1,checking:!1,writingBlocked:!0,canReconcile:!1,message:""});function At(g){return g instanceof e&&(g.status===422&&["invalid-input","invalid-format","unknown-domain"].includes(g.code)||g.status===409&&["revision-conflict","format-conflict","domain-disabled","brand-conflict"].includes(g.code)||g.status===503&&g.code==="model-unavailable")}function Le(g,ce,ae){if(!g)return{ok:!1,pending:null};try{let C=g.getItem(ce);if(C===null)return{ok:!0,pending:null};let se=JSON.parse(C);if(!se||se.version!==1||se.projectId!==ae||typeof se.requestId!=="string"||!se.requestId||typeof se.kind!=="string"||!se.kind||!["new","rewrite"].includes(se.mode))return{ok:!1,pending:null};if(se.mode==="rewrite"&&(typeof se.artifactId!=="string"||!se.artifactId||typeof se.expectedRevisionId!=="string"||!se.expectedRevisionId))return{ok:!1,pending:null};if(se.reference&&(typeof se.reference.artifactId!=="string"||!se.reference.artifactId||typeof se.reference.revisionId!=="string"||!se.reference.revisionId))return{ok:!1,pending:null};return{ok:!0,pending:se}}catch{return{ok:!1,pending:null}}}function p(g){let ce=It[g.locale??"en"],ae=g.storageKey,C=g.project.id,se=g.authority??(()=>""),we=g.newRequestId??(()=>crypto.randomUUID()),pe=g.project,fe=Le(g.storage,ae,C),le=!1,de=!1,Ce="",ye=!0,xe=!1,be=!1,he=0,Te=new Set,me=Ae();function Ae(){let ue=o(pe.runs);return{pending:!fe.ok||!!fe.pending||ue.length>0||le,sending:le,checking:de,writingBlocked:le||!!fe.pending||ue.length>0,canReconcile:fe.ok&&(!!fe.pending||ue.length>0),message:!fe.ok?ce.unreadable:Ce}}function ke(){let ue=Ae();if(JSON.stringify(ue)===JSON.stringify(me))return;let ve=ue.writingBlocked!==me.writingBlocked;if(me=ue,ve)g.onWritingBlocked?.(ue.writingBlocked);for(let Pe of Te)Pe()}function qe(ue){if(JSON.stringify(ue)===JSON.stringify(fe))return;fe=ue,ke()}function Ne(ue,ve){return ye&&ue===he&&se()===ve}function et(ue){let ve=Le(g.storage,ae,C);if(ve.ok&&ve.pending?.requestId===ue){try{g.storage?.removeItem(ae)}catch{}qe(Le(g.storage,ae,C)),g.broadcast?.()}}function Ke(ue,ve,Pe,$e){if(!Ne($e,Pe))return;let De=ue.runs?.find((Fe)=>Fe.requestId===ve);if(!De){Ce=ce.noRecord,ke();return}let je=a(De),Re=["completed","failed","cancelled","conflict"].includes(je);if(Re){try{g.storage?.removeItem(ae)}catch{}qe(Le(g.storage,ae,C)),g.broadcast?.()}Ce=je==="unknown"?ce.unknown:Re?ce.settled:ce.running,pe=ue,ke(),g.onProject?.(ue,je==="completed"?De.artifactId:void 0)}async function tt(ue){if(me.pending||xe)return;let ve=Le(g.storage,ae,C);if(!ve.ok||ve.pending||o(pe.runs).length){qe(ve);return}let Pe=we(),$e={version:1,projectId:C,requestId:Pe,kind:ue.kind,mode:ue.artifactId?"rewrite":"new",...ue.artifactId?{artifactId:ue.artifactId,expectedRevisionId:ue.expectedRevisionId}:{},...ue.reference?{reference:ue.reference}:{}};try{let Re=JSON.stringify($e);if(g.storage?.setItem(ae,Re),!g.storage||g.storage.getItem(ae)!==Re)throw Error("storage-readback")}catch{fe=Le(g.storage,ae,C),Ce=ce.storageFailed,ke();return}xe=!0,le=!0,fe={ok:!0,pending:$e},ke(),g.broadcast?.();let De=he,je=se();try{let Re=await g.client.startRun(C,{...ue,requestId:Pe});Ke(Re,Pe,je,De)}catch(Re){if(!Ne(De,je))return;let Fe=At(Re);if(Re instanceof e&&Re.status===404&&Re.code==="not-found")try{let Ue=await g.client.getProject(C);if(!Ne(De,je))return;if(Ue.id===C){if(Ue.runs?.some((ot)=>ot.requestId===Pe)){Ke(Ue,Pe,je,De);return}pe=Ue,g.onProject?.(Ue),Fe=!0}}catch{}if(Fe)et(Pe),Ce=ce.rejected;else Ce=ce.unknown;ke()}finally{if(xe=!1,ye&&De===he)le=!1,ke()}}return{getState:()=>me,subscribe(ue){return Te.add(ue),()=>Te.delete(ue)},setProject(ue){if(ue.id!==C)return;pe=ue,ke()},refresh(){qe(Le(g.storage,ae,C))},async start(ue){if(me.pending||xe||be)return;if(!g.locks){Ce=ce.noLocks,ke();return}let ve=he,Pe=se();be=!0;try{await g.locks.request(ae,async()=>{if(!Ne(ve,Pe))return;await tt(ue)})}catch{if(Ne(ve,Pe))Ce=ce.lockFailed,ke()}finally{be=!1}},async reconcile(){if(xe||de||!fe.ok)return;let ue=fe.pending?.requestId??o(pe.runs)[0]?.requestId;if(!ue)return;let ve=he,Pe=se();xe=!0,de=!0,ke();try{Ke(await g.client.getProject(C),ue,Pe,ve)}catch{if(Ne(ve,Pe))Ce=ce.readFailed,ke()}finally{if(xe=!1,ye&&ve===he)de=!1,ke()}},activate(){ye=!0},deactivate(){ye=!1,he+=1,le=!1,de=!1,ke()}}}import{useEffect as _e,useLayoutEffect as jt,useMemo as Et,useRef as Lt,useSyncExternalStore as Nt}from"react";var s="uibot:creation-run-changed",Ut=typeof window>"u"?_e:jt;function Ot(){try{return typeof window>"u"?void 0:window.localStorage}catch{return}}function qt(){let g=typeof navigator>"u"?void 0:navigator.locks;return g?.request?g:void 0}function ie(g){let ce=Lt(g);ce.current=g;let{storageKey:ae}=g,C=g.project.id,se=Et(()=>p({client:{startRun:(pe,fe)=>ce.current.client.startRun(pe,fe),getProject:(pe,fe)=>ce.current.client.getProject(pe,fe)},project:g.project,storageKey:ae,storage:g.storage??Ot(),locks:g.locks??qt(),authority:()=>ce.current.authority?.()??"",broadcast:()=>{if(typeof window<"u")window.dispatchEvent(new Event(s))},...g.locale?{locale:g.locale}:{},onProject:(pe,fe)=>ce.current.onProject(pe,fe),onWritingBlocked:(pe)=>ce.current.onPending?.(pe)}),[ae,C]);_e(()=>{if(se.activate(),typeof window>"u")return()=>se.deactivate();let pe=()=>se.refresh();return window.addEventListener(s,pe),window.addEventListener("storage",pe),pe(),()=>{window.removeEventListener(s,pe),window.removeEventListener("storage",pe),se.deactivate()}},[se]),Ut(()=>{se.setProject(g.project)},[se,g.project]);let we=Nt(se.subscribe,se.getState,()=>u);return _e(()=>{ce.current.onPending?.(se.getState().writingBlocked)},[se]),{...we,start:se.start,reconcile:se.reconcile}}export{t,m,b,y,x,P,n,v,r,k,h,T,w,S,R,I,j,D,A,E,L,N,U,O,q,F,K,B,V,z,M,_,H,J,G,W,Y,X,Z,Q,ee,te,oe,ne,c,l,f,d,i,re,a,o,u,p,s,ie};