@enhance-eng/enhance-dev 0.1.29-dev.sha-9c4aaab529d4 → 0.1.30-dev.sha-30ae69fbb6a2

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.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{FailedToExitError as e,parseRouter as t}from"trpc-cli";import{z as n}from"zod";import{createHash as r}from"node:crypto";import{TRPCError as i,initTRPC as a}from"@trpc/server";import{middlewareMarker as o}from"@trpc/server/unstable-core-do-not-import";import{setTimeout as s}from"node:timers/promises";import c from"node:assert/strict";import{Buffer as l}from"node:buffer";import{TRPCClientError as ee}from"@trpc/client";var te=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);const ne=n.strictObject({}),re=n.object({firstAgentWorkAt:n.iso.datetime().nullable()}),ie=n.object({cursor:n.string().nullable().default(null),limit:n.number().int().min(1).max(100).default(20)}),ae=e=>n.object({items:n.array(e),truncated:n.boolean()}),oe=2048,se=n.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),ce=n.object({background:n.string().optional(),documentVersion:n.number().int().positive().optional(),thumbnailId:n.uuid(),url:n.string(),width:n.literal(528),height:n.literal(312),bytes:n.number().int().min(1).max(1048576)}),le=n.object({canvasId:n.uuid(),thumbnailId:n.uuid(),clientReleaseIdentity:n.string().min(1).max(100),attemptedOperation:n.literal(`thumbnail-download`),recoveryOutcome:n.literal(`fallback-shown`)}),u=n.object({recorded:n.literal(!0)}),ue=n.enum([`invite-only`,`link-view`,`link-comment`]),d=n.enum([`owner`,`can-comment`,`can-view`]),f=n.enum([`can-comment`,`can-view`]),de=n.object({read:n.boolean(),comment:n.enum([`yes`,`sign-in`,`no`]),share:n.boolean(),manage:n.boolean()}),p=n.object({id:n.uuid(),title:n.string().min(1),accessState:ue,organisationId:n.uuid().nullable(),sourceUrl:n.string().nullable(),unresolvedCount:n.number().int().min(0),viewerCan:de,createdAt:n.iso.datetime(),lastActivityAt:n.iso.datetime()}),fe=n.object({title:n.string().trim().min(1),organisationId:n.uuid().nullable().default(null),sourceUrl:n.string().nullable().default(null)}),pe=p.extend({version:n.number().int().positive()}),me=n.object({canvasId:n.uuid()}),he=n.union([n.literal(`own`),n.literal(`everything`),n.uuid()]),ge=n.object({collection:he.default(`own`),title:n.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:n.boolean().default(!1),accessState:ue.optional(),scope:n.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:n.boolean().default(!1)}),_e=p.extend({screenCount:n.number().int().min(0),hasRecording:n.boolean()}),ve=ae(n.union([_e.extend({thumbnail:ce}),_e.extend({thumbnail:n.null(),thumbnailFallbackReason:se})])),ye=n.object({canvasId:n.uuid(),title:n.string().trim().min(1)}),be=n.object({canvasId:n.uuid()}),xe=n.object({canvasId:n.uuid(),deletedAt:n.iso.datetime()}),Se=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)])}),Ce=n.object({canvas:p}),we=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)]),title:n.string().trim().min(1).optional()}),Te=n.object({canvas:p}),Ee=n.object({canvasId:n.uuid(),confirmation:n.string().min(1)}),De=n.object({canvasId:n.uuid()}),Oe=n.object({canvasId:n.uuid(),accessState:ue}),ke=n.object({canvas:p,widened:n.boolean()}),Ae=n.object({canvasId:n.uuid()}),je=n.object({lastViewedAt:n.iso.datetime().nullable()}),Me=n.object({canvasId:n.uuid()}),Ne=n.object({canvasId:n.uuid()}),m=n.number(),h=n.number().nonnegative(),Pe=n.object({ratio:h,offset:m.optional()}),Fe=n.object({min:h.optional(),max:h.optional(),minParent:Pe.optional(),maxParent:Pe.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),Ie=n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`fixed`),value:h}).strict(),Fe.extend({mode:n.literal(`hug`)}).strict(),Fe.extend({mode:n.literal(`fill`),offset:m.optional()}).strict()]),Le=n.object({top:h,right:h,bottom:h,left:h}),Re=n.union([n.literal(`auto`),m]),ze=n.object({top:Re,right:Re,bottom:Re,left:Re}),Be=n.object({mode:n.enum([`auto-fill`,`auto-fit`]),minimum:n.number().positive()}),Ve=n.object({x:m,y:m}),He=n.object({direction:n.enum([`row`,`column`]),alignItems:n.enum([`start`,`center`,`end`,`stretch`]),alignContent:n.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:n.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:h,rowGap:h.optional(),columnGap:h.optional(),wrap:n.enum([`nowrap`,`wrap`]).optional(),gridColumns:n.number().int().positive().optional(),gridAutoRepeat:Be.optional(),padding:Le}).strict(),Ue=n.object({rotation:m.optional(),flipHorizontal:n.boolean().optional(),flipVertical:n.boolean().optional(),aspectRatioLocked:n.boolean().optional(),aspectRatio:n.number().positive().optional(),horizontal:Ie.optional(),vertical:Ie.optional(),position:n.enum([`flow`,`absolute`]).optional(),alignSelf:n.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:h.optional(),flexShrink:h.optional(),flexBasis:n.union([n.literal(`auto`),h,Pe]).optional(),flowOffset:Ve.optional(),order:m.int().optional(),margin:ze.partial().optional(),clipContent:n.boolean().optional(),container:He.partial().extend({padding:Le.partial().optional()}).optional()}).strict(),g=m,_=h,v=n.number().min(0).max(1),We=n.string().min(1),Ge=n.object({space:n.enum([`srgb`,`display-p3`]),red:v,green:v,blue:v,alpha:v}),Ke=n.object({id:We,position:v,color:Ge}),qe=n.object({x:v,y:v}),Je=n.number().min(-1).max(1),Ye=n.object({exposure:Je.optional(),contrast:Je.optional(),saturation:Je.optional(),temperature:Je.optional(),tint:Je.optional(),highlights:Je.optional(),shadows:Je.optional()}),Xe=n.tuple([g,g,g,g,g,g]).refine(([e,t,n,r])=>e*r!==t*n,`image transform must be invertible`),Ze=n.object({id:We,visible:n.boolean(),opacity:v}),Qe=n.discriminatedUnion(`kind`,[Ze.extend({kind:n.literal(`solid`),color:Ge}),Ze.extend({kind:n.literal(`linear-gradient`),angle:g,stops:n.array(Ke).min(2)}),Ze.extend({kind:n.literal(`radial-gradient`),center:qe,radius:qe,stops:n.array(Ke).min(2)}),Ze.extend({kind:n.literal(`image`),assetId:n.string().min(1),fit:n.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:g.positive().optional(),tileOrigin:n.enum([`center`,`top-left`]).optional(),rotation:n.union([n.literal(0),n.literal(90),n.literal(180),n.literal(270)]).optional(),crop:n.object({x:v,y:v,width:v,height:v}).optional(),transform:Xe.optional(),adjustments:Ye.optional()}).refine(e=>e.crop===void 0||e.transform===void 0,{message:`image paint cannot have both a crop rectangle and an affine transform`,path:[`transform`]})]),$e=n.object({topLeft:_,topRight:_,bottomRight:_,bottomLeft:_,smoothing:v.optional()}),et=n.object({visible:n.boolean(),width:n.object({top:_,right:_,bottom:_,left:_}),style:n.enum([`solid`,`dashed`,`dotted`]),paint:Qe}),tt=n.object({visible:n.boolean(),width:_,offset:g,style:n.enum([`solid`,`dashed`,`dotted`]),paint:Qe}),nt=n.object({id:We,visible:n.boolean(),kind:n.enum([`outer`,`inner`]),color:Ge,offsetX:g,offsetY:g,blur:_,spread:g}),rt=n.object({id:We,visible:n.boolean()}),it=n.discriminatedUnion(`kind`,[rt.extend({kind:n.literal(`blur`),value:_}),rt.extend({kind:n.literal(`brightness`),value:_}),rt.extend({kind:n.literal(`contrast`),value:_}),rt.extend({kind:n.literal(`grayscale`),value:v}),rt.extend({kind:n.literal(`hue-rotate`),value:g}),rt.extend({kind:n.literal(`invert`),value:v}),rt.extend({kind:n.literal(`saturate`),value:_}),rt.extend({kind:n.literal(`sepia`),value:v})]),at=n.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]);n.object({opacity:v,blendMode:at,fills:n.array(Qe),border:et,outline:tt,radius:$e,shadows:n.array(nt),filters:n.array(it),backdropFilters:n.array(it)});const ot=n.object({opacity:v.optional(),blendMode:at.optional(),fills:n.array(Qe).optional(),border:et.optional(),outline:tt.optional(),radius:$e.optional(),shadows:n.array(nt).optional(),filters:n.array(it).optional(),backdropFilters:n.array(it).optional()}).refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),st=[`opacity`,`blendMode`,`fills`,`border`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],ct=n.enum(st),lt=n.object({opacity:v.optional(),blendMode:at.optional(),fills:n.array(Qe).optional(),border:et.optional(),outline:tt.optional(),radius:$e.optional(),shadows:n.array(nt).optional(),filters:n.array(it).optional(),backdropFilters:n.array(it).optional(),clear:n.array(ct).min(1).max(st.length).optional()}).refine(e=>Object.keys(e).length>0,`appearance patch cannot be empty`).refine(({clear:e,...t})=>e===void 0||e.every(e=>t[e]===void 0),`appearance patch cannot set and clear the same property`),ut=n.number(),dt=n.number().nonnegative(),ft=n.string().regex(/^[\u{20}-\u{7E}]{4}$/u),pt=ft.refine(e=>![`wght`,`opsz`].includes(e)),y=n.object({family:n.string().min(1),fallbackFamilies:n.array(n.string().min(1)),size:dt,weight:n.number().min(1).max(1e3),variations:n.record(pt,ut).optional(),features:n.record(ft,n.number().int().nonnegative().max(65535)).optional(),opticalSize:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`auto`)}),n.object({mode:n.literal(`font-default`)}),n.object({mode:n.literal(`fixed`),value:ut})]).optional(),style:n.enum([`normal`,`italic`,`oblique`]),lineHeight:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`normal`)}),n.object({mode:n.literal(`fixed`),value:dt}),n.object({mode:n.literal(`percent`),value:dt})]),letterSpacing:n.union([ut,n.object({mode:n.literal(`percent`),value:ut})]),align:n.enum([`left`,`center`,`right`,`justify`]),direction:n.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:n.enum([`top`,`middle`,`bottom`]),verticalTrim:n.enum([`none`,`cap-height`]).optional(),transform:n.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:n.object({line:n.enum([`none`,`underline`,`line-through`]),style:n.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:Ge.optional(),thickness:n.union([dt,n.object({mode:n.literal(`percent`),value:dt}),n.object({mode:n.literal(`font-default`)})]).optional(),offset:n.union([ut,n.object({mode:n.literal(`percent`),value:ut})]).optional(),skipInk:n.enum([`auto`,`none`,`all`]).optional()}),stroke:n.object({width:dt,paint:Qe,alignment:n.enum([`inside`,`center`,`outside`]).optional()}).optional(),wrapping:n.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:n.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:dt.optional(),paragraphIndent:dt.optional(),listStyle:n.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:dt.optional(),hangingList:n.boolean().optional(),hangingPunctuation:n.boolean().optional(),truncation:n.object({mode:n.enum([`none`,`ellipsis`]),maxLines:n.number().int().min(1).nullable()}).optional(),insets:n.object({top:ut,right:ut,bottom:ut,left:ut}).optional()}),mt=y.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:n.number().int().min(1).optional(),listStart:n.number().int().min(1).optional()}).strict(),ht=y.partial().strict(),gt=y.keyof().options,_t=ht.extend({featureChanges:n.object({set:y.shape.features,clear:n.array(ft).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),variationChanges:n.object({set:y.shape.variations,clear:n.array(pt).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),clear:n.array(y.keyof()).max(gt.length).optional()}).refine(e=>e.clear?.every(t=>e[t]===void 0)??!0,`a typography property cannot be set and cleared in the same patch`).refine(e=>[`features`,`variations`].every(t=>{let n=e[t===`features`?`featureChanges`:`variationChanges`];return n===void 0||e[t]===void 0&&e.clear?.includes(t)!==!0&&(n.clear?.every(e=>n.set?.[e]===void 0)??!0)}),`font settings cannot be replaced and patched, or set and cleared, together`),vt={"font-family":[`family`,`fallbackFamilies`],"font-size":[`size`],"font-weight":[`weight`],"font-variation-settings":[`weight`,`variations`,`opticalSize`],"font-optical-sizing":[`opticalSize`],"font-feature-settings":[`features`],"font-style":[`style`],"line-height":[`lineHeight`],"letter-spacing":[`letterSpacing`],"text-align":[`align`],direction:[`direction`],"unicode-bidi":[`direction`],"text-indent":[`paragraphIndent`],"hanging-punctuation":[`hangingPunctuation`],"align-content":[`verticalAlign`],"text-box":[`verticalTrim`],"text-box-trim":[`verticalTrim`],"text-box-edge":[`verticalTrim`],"text-transform":[`transform`],"text-decoration":[`decoration`],"text-decoration-line":[`decoration`],"text-decoration-style":[`decoration`],"text-decoration-color":[`decoration`],"text-decoration-thickness":[`decoration`],"text-underline-offset":[`decoration`],"text-decoration-skip-ink":[`decoration`],"-webkit-text-stroke":[`stroke`],"-webkit-text-stroke-width":[`stroke`],"-webkit-text-stroke-color":[`stroke`],"--canvas-text-stroke-alignment":[`stroke`],"white-space":[`wrapping`],"text-wrap-style":[`wrapStyle`],"text-wrap":[`wrapStyle`]},yt=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,bt=/^(?:behavior|-moz-binding)$/iu,xt=n.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!bt.test(e),`unsafe CSS property`),St=n.string().refine(e=>!yt.test(e),`unsafe CSS value`),b=n.object({id:n.string().min(1),property:xt,value:St,enabled:n.boolean()}),Ct=n.object({declarations:n.array(b)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),wt=n.array(b.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),Tt=n.object({set:n.array(b).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:wt.optional(),order:wt.optional(),empty:n.enum([`keep`,`remove`]).optional()}).strict().refine(e=>e.set?.every(t=>e.clear?.includes(t.id)!==!0)??!0,`a declaration cannot be set and cleared in the same patch`),x=n.object({url:n.url(),expiresAt:n.iso.datetime(),headers:n.record(n.string(),n.string())}),Et=n.object({url:n.url(),expiresAt:n.iso.datetime(),bytes:n.number().int().min(0)}),Dt=`/v1/canvas-assets/`,Ot=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],kt=n.object({canvasId:n.uuid(),contentType:n.enum(Ot),bytes:n.number().int().positive()}),At=n.object({assetId:n.uuid(),path:n.string().startsWith(`/v1/canvas-assets/`),upload:x}),jt=(e,t)=>`${Dt}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,Mt=n.tuple([n.uuid(),n.uuid()]),Nt=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=Mt.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},Pt=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`],Ft=n.object({canvasId:n.uuid(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),It=Ft.extend({bytes:n.number().int().positive()}),Lt=It.extend({contentType:n.enum(Pt)}),Rt=n.object({path:n.string().startsWith(`/v1/canvas-assets/`)}),zt=Rt.extend({upload:x}),Bt=(e,t)=>`${Dt}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`,Vt=n.object({canvasId:n.uuid(),sources:n.array(Ft).min(1)}),Ht=n.object({resources:n.array(n.object({source:Ft,path:n.string()}))}),Ut=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let[t,n,r,i]=e.slice(18).split(`/`,4);return n!==`fonts`||i!==void 0?null:Ft.safeParse({canvasId:t,sha256:r}).data??null},Wt=1e3,Gt={image:Ot,font:Pt},Kt=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid()}),qt=n.discriminatedUnion(`kind`,[Kt.extend({kind:n.literal(`image`),contentType:n.enum(Ot),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),Kt.extend({kind:n.literal(`font`),contentType:n.enum(Pt),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)})]),Jt=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`image`),width:n.number().int().positive(),height:n.number().int().positive()}),n.strictObject({kind:n.literal(`font`),family:n.string().min(1),subfamily:n.string(),style:n.enum([`normal`,`italic`,`oblique`]),minimumWeight:n.number().min(1).max(Wt),maximumWeight:n.number().min(1).max(Wt)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]),Yt=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid(),assetId:n.uuid(),kind:n.enum([`image`,`font`]),contentType:n.string(),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u),path:n.string().startsWith(`/v1/canvas-assets/`),state:n.enum([`awaiting_upload`,`ready`]),metadata:Jt.nullable()}).refine(e=>e.state===`ready`==(e.metadata!==null),`Readiness must match verified metadata.`).refine(e=>e.metadata===null||e.metadata.kind===e.kind,`Metadata must describe the reserved asset kind.`).refine(e=>Gt[e.kind].includes(e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?jt(e.canvasId,e.assetId):Bt(e.canvasId,e.sha256)),`The resource path must match its native identity.`),Xt=Yt.safeExtend({upload:x.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`),Zt=new Set([`aspect-ratio`,`-webkit-line-clamp`,`line-clamp`,`flex-grow`,`flex-shrink`,`font-weight`,`opacity`,`order`,`z-index`,`grid-area`,`grid-row`,`grid-column`,`grid-row-start`,`grid-row-end`,`grid-column-start`,`grid-column-end`]),Qt=(e,t)=>typeof t==`number`&&!Zt.has(e.toLowerCase())?`${String(t)}px`:String(t),$t=[`top`,`right`,`bottom`,`left`],en=[`grid-template-rows`,`grid-template-columns`,`grid-template-areas`],tn={gap:[`row-gap`,`column-gap`],"text-wrap":[`text-wrap-mode`,`text-wrap-style`],padding:$t.map(e=>`padding-${e}`),margin:$t.map(e=>`margin-${e}`),flex:[`flex-grow`,`flex-shrink`,`flex-basis`],"flex-flow":[`flex-direction`,`flex-wrap`],"place-content":[`align-content`,`justify-content`],"place-items":[`align-items`,`justify-items`],"place-self":[`align-self`,`justify-self`],"grid-template":en,grid:[...en,`grid-auto-rows`,`grid-auto-columns`,`grid-auto-flow`],"grid-row":[`grid-row-start`,`grid-row-end`],"grid-column":[`grid-column-start`,`grid-column-end`],"grid-area":[`grid-row-start`,`grid-column-start`,`grid-row-end`,`grid-column-end`]},nn=e=>tn[e.toLowerCase()]??[e.toLowerCase()],rn=(e,t)=>{if(e.isEscaped)return{...e,isEscaped:!1};if(t===`\\`)return{...e,isEscaped:!0};if(e.quote!==``)return{...e,quote:e.quote===t?``:e.quote};if([`"`,`'`].includes(t))return{...e,quote:t};let n=[`(`,`[`,`{`].includes(t)?1:[`)`,`]`,`}`].includes(t)?-1:0;return{...e,depth:e.depth+n}},an=(e,t=`space`)=>{let n=[],r=``,i={depth:0,quote:``,isEscaped:!1};for(let a of e){let e=i.depth===0&&i.quote===``&&!i.isEscaped;i=rn(i,a),e&&(t===`space`?/\s/u.test(a):a===t)?((t!==`space`||r!==``)&&n.push(r.trim()),r=``):r+=a}return(t!==`space`||r!==``)&&n.push(r.trim()),n},on=e=>/^(?:--|-?[_a-z\u{80}-\u{FFFF}])[-\w\u{80}-\u{FFFF}]*$/iu.test(e)&&!/^(?:auto|span|initial|unset)$/iu.test(e)?e:`auto`,sn=(e,t,n)=>{let r=an(t,`/`),i=r[0]??t;if(e!==`grid-area`)return r[n]??on(i);let a=r[1]??on(i);return[i,a,r[2]??on(i),r[3]??on(a)][n]??t},cn=(e,t,n)=>{let r=an(n?e:t),i=r.filter(e=>!/^(?:auto-flow|dense)$/iu.test(e)).join(` `),a=`${n?`row`:`column`}${r.some(e=>/^dense$/iu.test(e))?` dense`:``}`;return[n?`none`:e,n?t:`none`,`none`,n&&i!==``?i:`auto`,!n&&i!==``?i:`auto`,a]},ln=(e,t,n)=>{if(/^(?:none|initial|unset)$/iu.test(t))return[`none`,`none`,`none`,`auto`,`auto`,`row`][n]??t;let r=an(t,`/`),i=r[0]??t,a=r[1];if(i===``||a===``||r.length>2)return t;let o=an(i).some(e=>e.toLowerCase()===`auto-flow`),s=a!==void 0&&an(a).some(e=>e.toLowerCase()===`auto-flow`);if(e===`grid`&&a!==void 0&&o!==s)return cn(i,a,o)[n]??t;if(o||s)return t;let c=/["']/u.test(i);return a===void 0&&!c?t:[c?t:i,a??`none`,c?i:`none`,`auto`,`auto`,`row`][n]??t},un=e=>{let t=[],n=`0%`;for(let r of e)/^(?:\d+(?:\.\d*)?|\.\d+)$/u.test(r)&&t.length<2?t.push(r):n=r;return[t[0]??`1`,t[1]??`1`,n]},dn=(e,t,n)=>{if(/(?:var|env)\(|^(?:inherit|revert(?:-layer)?)$/iu.test(t))return t;if(/^grid-(?:area|row|column)$/u.test(e))return sn(e,t,n);if(e===`grid-template`||e===`grid`)return ln(e,t,n);let r=an(t);return e===`text-wrap`?n===0?r.find(e=>/^(?:wrap|nowrap)$/u.test(e))??`wrap`:r.find(e=>/^(?:auto|balance|pretty|stable)$/u.test(e))??`auto`:e===`flex-flow`?n===0?r.find(e=>/^(?:row|column)(?:-reverse)?$/u.test(e))??`row`:r.find(e=>/^(?:nowrap|wrap|wrap-reverse)$/u.test(e))??`nowrap`:e===`flex`?t===`none`?[`0`,`0`,`auto`][n]??t:t===`initial`?[`0`,`1`,`auto`][n]??t:un(r)[n]??t:r[n]??(n===3?r[1]:void 0)??r[0]??t},fn=e=>e.additionalStyles===void 0?{}:Object.fromEntries(e.additionalStyles.declarations.filter(e=>e.enabled).map(e=>[e.property,e.value])),pn=e=>{let t=new Set(e.additionalStyles?.declarations.map(e=>e.property.toLowerCase()));return{...Object.fromEntries(Object.entries(e.styles).filter(([e])=>!t.has(e.toLowerCase()))),...fn(e)}},mn=e=>/!important\s*$/iu.test(String(e)),hn=(e,t)=>{let n=String(e).replace(/\s*!important\s*$/iu,``).trim();return t||n.includes(`(`)?n:n.toLowerCase()},gn=(e,t)=>{let n=null,r=!1,i=Object.entries(pn(e));for(let[e,a]of i){let i=nn(e),o=i.indexOf(t);if(o===-1)continue;let s=mn(a);if(r&&!s)continue;let c=hn(a,/^grid(?:-|$)/iu.test(e));n=i.length===1?c:dn(e.toLowerCase(),c,o),r=s}return n??void 0},_n=(e,t)=>{let n=new Set(Object.entries(pn(e)).filter(([,e])=>mn(e)).flatMap(([e])=>nn(e)));return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,nn(e).some(e=>n.has(e))&&!mn(t)?`${Qt(e,t)} !important`:t]))},vn=(e,t)=>{let n=new Set,r=e;for(;r!==void 0&&!n.has(r.id);){n.add(r.id);let e=gn(r,`writing-mode`);if(e!==void 0&&e!==`inherit`&&e!==`unset`)return e;if(t===void 0)break;let i=t.relationships[r.id]?.parentId;if(i===void 0)break;r=t.nodes[i]}return`horizontal-tb`},yn=(e,t,n)=>{let r=/^(?:vertical|sideways)-/u.test(vn(e,n));return[t===`horizontal`?`width`:`height`,t===`vertical`===r?`inline-size`:`block-size`]},bn=e=>{if(e===void 0)return`freeform`;let t=gn(e,`display`);if(t!==void 0)return/^(?:(?:inline|block)\s+|inline-)?grid$/u.test(t)?`grid`:/^(?:(?:inline|block)\s+|inline-)?flex$/u.test(t)?`flex`:`freeform`;let n=e.layout?.container;return n===void 0?`freeform`:n.gridColumns!==void 0||n.gridAutoRepeat!==void 0?`grid`:`flex`},xn=(e,t)=>{if(e===void 0||bn(e)!==`flex`)return;let n=e.layout?.container?.direction??(t=>gn(e,t))(`flex-direction`)??`row`;if(!/^(?:row|column)(?:-reverse)?$/u.test(n))return;let r=/^(?:vertical|sideways)-/u.test(vn(e,t));return n.startsWith(`column`)===r?`horizontal`:`vertical`},Sn={unversioned:void 0,v1:1,v2:2,v3:3,v4:4,v5:5,v6:6},Cn={[Sn.v1]:`layout`,[Sn.v2]:`layout`,[Sn.v3]:`typography`,[Sn.v4]:`typography`,[Sn.v5]:`typography`,[Sn.v6]:`geometry`},wn=new Set([...Object.values(Sn),7]),Tn=e=>wn.has(e),En=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Dn=e=>{if(!En(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>e!==`gridTrack`)),n=t.container;En(n)&&(t.container=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`materialized`)));for(let e of[`horizontal`,`vertical`]){let n=t[e];En(n)&&n.mode===`hug`&&(t[e]=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`basis`)))}return t},On=e=>{let t=e.version;if(!Tn(t))return null;if(t===7||!En(e.nodes))return e;let n=Object.entries(Cn).find(([e])=>Number(e)===t)?.[1];return n===`geometry`?{...e,version:7}:Object.values(e.nodes).some(e=>En(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:7}:{...e,version:7,nodes:Object.fromEntries(Object.entries(e.nodes).map(([e,t])=>[e,En(t)&&t.layout!==void 0?{...t,layout:Dn(t.layout)}:t]))}},kn=n.number(),An=kn.nonnegative(),jn=n.string().min(1).max(200),Mn=n.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),Nn=n.strictObject({x:kn,y:kn,width:An,height:An}),Pn=n.strictObject({kind:n.literal(`path`),path:Mn.min(1),fillRule:n.enum([`nonzero`,`evenodd`]),viewBox:Nn.extend({width:An.positive(),height:An.positive()})}),Fn=n.enum([`union`,`subtract`,`intersect`,`exclude`]),In=n.strictObject({kind:n.literal(`boolean`),operation:Fn,operandIds:n.array(jn).min(1).refine(e=>new Set(e).size===e.length),result:n.strictObject({path:Mn,fillRule:n.literal(`nonzero`),isEmpty:n.boolean(),bounds:Nn,inputKey:n.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Ln=n.discriminatedUnion(`kind`,[Pn,n.strictObject({kind:n.literal(`mask`),maskId:jn}),In]),Rn=n.literal(7,{error:`This editor uses an unsupported document format. Update the editor before changing this canvas.`});n.object({signature:n.string().regex(/^[a-f0-9]{16}$/u),image:n.string().startsWith(`data:image/jpeg;base64,`),families:n.array(n.string().min(1)).min(1)});const S=n.object({x:n.number(),y:n.number(),width:n.number().nonnegative(),height:n.number().nonnegative()}),zn=n.enum([`start`,`center`,`end`,`stretch`,`scale`]),Bn=n.object({x:zn,y:zn}),Vn=n.enum([`source`,`generated`,`user`]),C=n.looseObject({id:n.string().min(1),label:n.string(),component:n.string().min(1),labelOrigin:Vn.optional(),visible:n.boolean().optional(),locked:n.boolean().optional(),constraints:Bn.optional(),styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Ue.optional(),responsive:n.never().optional(),appearance:ot.optional(),typography:ht.optional(),additionalStyles:Ct.optional(),geometry:Ln.optional(),props:n.record(n.string(),n.unknown()).optional(),box:S.optional()}),Hn=n.object({version:n.literal(7),nodes:n.record(n.string(),C),relationships:n.record(n.string(),n.object({parentId:n.string().min(1),sortKey:n.string().min(1)})),tombstones:n.record(n.string(),n.literal(!0)).default({})}),Un=n.record(n.string(),n.unknown()),Wn=n.preprocess(e=>{let t=Un.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Gn():On(t)},Hn),Gn=()=>({version:7,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Kn=n.string().min(1),qn=n.object({code:n.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:n.string().min(1),temporaryId:Kn.optional()}),Jn=n.object({nodeCount:n.number().int().positive(),sourceNodeCount:n.number().int().positive().optional(),collapsedNodeCount:n.number().int().nonnegative().optional(),collapsedWrapperNodeCount:n.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:n.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:n.number().int().nonnegative().optional(),layoutContainerCount:n.number().int().nonnegative().optional(),removedLeafNodeCount:n.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:n.number().int().nonnegative().optional(),truncatedNodeCount:n.number().int().nonnegative().optional(),addedLayoutNodeCount:n.number().int().nonnegative().optional(),issues:n.array(qn)}),Yn=C.omit({id:!0}).extend({temporaryId:Kn}),Xn=n.object({temporaryId:Kn,parentTemporaryId:Kn,sortKey:n.string().min(1)}),Zn=n.object({version:n.literal(1),rootTemporaryId:Kn,nodes:n.array(Yn).min(1),relationships:n.array(Xn),report:Jn.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),Qn=n.object({canvasId:n.uuid(),documentFormatVersion:Rn,mutationId:n.uuid(),baseVersion:n.number().int().positive(),screenNodeId:n.string().min(1),draft:Zn}),$n=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),rootNodeId:n.string().min(1),idMap:n.record(Kn,n.string().min(1)),insertedNodeIds:n.array(n.string().min(1)),removedNodeIds:n.array(n.string().min(1)),boxes:n.record(n.string().min(1),S),affectedBounds:S}),er=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],tr=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],nr=[`VERSION_CHANGED`,`TARGET_NOT_FOUND`,`TARGET_INVALID`,`OUTPUT_TOO_LARGE`,`READINESS_TIMEOUT`,`SOURCE_FAILED`,`BROWSER_CRASH`,`CAPTURE_FAILED`,`CONVERSION_FAILED`,`PREPARATION_FAILED`,`UPLOAD_FAILED`,`WORKER_UNAVAILABLE`,`CANCELLED`,`EXPIRED`,`INTERNAL`],rr=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`],ir=n.number().int().positive(),ar=n.object({x:n.number(),y:n.number(),width:n.number().positive(),height:n.number().positive()}),w=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`content`)}),n.object({kind:n.literal(`page`),pageId:n.string().min(1)}),n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`bounds`),bounds:ar})]),or=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),sr=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative()}),cr=n.object({recordingId:n.uuid(),atMs:n.number().int().nonnegative(),screenId:n.uuid(),screenNodeId:n.string().min(1),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()}),box:ar,version:n.number().int().positive(),alreadyPresent:n.boolean()}),lr=n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),scope:n.strictObject({pageId:n.string().min(1).optional(),nodeIds:n.array(n.string().min(1))}).optional(),target:w.default({kind:`content`}),sourceState:or.optional(),scale:n.number().positive().default(1),maxOutputPixels:ir.optional(),format:n.literal(`png`).default(`png`)}).refine(e=>e.sourceState===void 0||e.target.kind===`node`,{message:`a source state requires a node render target`,path:[`sourceState`]}),ur=n.enum(er),dr=n.enum(tr),fr=n.enum(nr),pr=n.enum(rr),mr=n.object({code:pr,message:n.string().min(1).max(500),sourceId:n.string().min(1).nullable()}),hr=n.object({reason:fr,phase:ur,message:n.string().min(1).max(500),retryable:n.boolean(),sourceId:n.string().min(1).nullable()}),gr=n.object({phase:ur,durationMs:n.number().int().min(0)}),_r=n.object({canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),target:w,sourceState:sr.optional(),snapshot:cr.optional(),bounds:ar,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive(),contentType:n.literal(`image/png`),bytes:n.number().int().positive(),warnings:n.array(mr),timings:n.array(gr),expiresAt:n.iso.datetime()}),vr=n.object({id:n.uuid(),canvasId:n.uuid(),purpose:n.enum([`inspection`,`snapshot`,`thumbnail`]),phase:ur,requestedVersion:n.number().int().positive(),target:w,sourceState:or.optional(),scale:n.number().positive(),maxOutputPixels:ir.optional(),format:n.literal(`png`),attempt:n.number().int().min(0),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),yr=n.discriminatedUnion(`state`,[vr.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),vr.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),vr.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:_r,failure:n.null()}),vr.extend({state:n.literal(`failed`),result:n.null(),failure:hr}),vr.extend({state:n.literal(`cancelled`),result:n.null(),failure:hr.extend({reason:n.literal(`CANCELLED`)})}),vr.extend({state:n.literal(`expired`),result:n.null(),failure:hr.extend({reason:n.literal(`EXPIRED`)})})]),br=n.object({job:yr,alreadyExists:n.boolean()}),xr=n.object({jobId:n.uuid()}),Sr=n.object({job:yr}),Cr=n.object({jobId:n.uuid()}),wr=n.object({job:yr}),Tr=n.object({jobId:n.uuid()}),Er=n.object({jobId:n.uuid(),download:Et}),Dr=n.strictObject({previewJobId:n.uuid(),scope:n.strictObject({pageId:n.string().min(1).optional(),nodeIds:n.array(n.string().min(1))}),placement:n.strictObject({kind:n.literal(`below-source`)})}),Or=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative(),context:n.strictObject({expectedVersion:n.number().int().positive(),request:Dr}).optional()}),kr=n.object({job:yr,alreadyExists:n.boolean()}),Ar=n.object({rootIds:n.array(n.string().min(1))}),jr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`adjacent`)}),n.object({kind:n.literal(`insert-children`),pageId:n.string().min(1).optional(),targetNodeId:n.string().min(1)}),n.object({kind:n.literal(`replace`),targetNodeId:n.string().min(1)})]),Mr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`screen`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`html`),html:n.string().min(1),label:n.string().min(1),idPrefix:n.string().min(1).regex(/^[\w-]+$/u).optional()})]),Nr=n.object({source:Mr,destination:jr,revisionPolicy:n.enum([`strict`,`rebase`]).optional()}).superRefine((e,t)=>{e.source.kind===`screen`&&e.destination.kind!==`adjacent`&&t.addIssue({code:`custom`,message:`stored screens convert beside their source`,path:[`destination`]}),e.source.kind===`html`&&e.destination.kind===`adjacent`&&t.addIssue({code:`custom`,message:`authored HTML requires an editable destination`,path:[`destination`]})}),Pr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`screen`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`html`),label:n.string().min(1)})]),Fr=n.object({id:n.uuid(),canvasId:n.uuid(),source:Pr,destination:jr,phase:ur,requestedVersion:n.number().int().positive(),attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Ir=n.discriminatedUnion(`state`,[Fr.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),Fr.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),Fr.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:$n.extend({report:Jn}),failure:n.null()}),Fr.extend({state:n.literal(`failed`),result:n.null(),failure:hr}),Fr.extend({state:n.literal(`cancelled`),result:n.null(),failure:hr.extend({reason:n.literal(`CANCELLED`)})}),Fr.extend({state:n.literal(`expired`),result:n.null(),failure:hr.extend({reason:n.literal(`EXPIRED`)})})]),Lr=Nr.and(n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),mutationId:n.uuid().optional(),writeScope:Ar.optional(),scope:lr.shape.scope})).refine(e=>e.scope===void 0&&e.revisionPolicy!==`strict`||e.expectedVersion!==void 0,{message:`scoped or strict conversion requires an expected version`,path:[`expectedVersion`]}),Rr=n.object({job:Ir,alreadyExists:n.boolean()}),zr=n.object({jobId:n.uuid()}),Br=n.object({job:Ir}),Vr=n.object({jobId:n.uuid()}),Hr=n.object({job:Ir});n.discriminatedUnion(`state`,[n.object({state:n.literal(`loading`),jobId:n.uuid()}),n.object({state:n.literal(`ready`),jobId:n.uuid(),loadedVersion:n.number().int().positive(),draft:Zn}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const Ur=n.object({add:n.array(n.object({resourceId:n.string().min(1)}).catchall(n.unknown())),remove:n.array(n.string().min(1))}),T=n.union([n.string(),m]),E=n.union([b.shape.value,m]).nullable().optional(),Wr=n.strictObject({border:E,"border-block":E,"border-block-color":E,"border-block-style":E,"border-block-width":E,"border-block-end":E,"border-block-end-color":E,"border-block-end-style":E,"border-block-end-width":E,"border-block-start":E,"border-block-start-color":E,"border-block-start-style":E,"border-block-start-width":E,"border-bottom":E,"border-bottom-color":E,"border-bottom-style":E,"border-bottom-left-radius":T.optional(),"border-bottom-right-radius":T.optional(),"border-bottom-width":T.optional(),"border-color":n.string().nullable().optional(),"border-image":E,"border-image-source":E,"border-image-slice":E,"border-image-width":E,"border-image-outset":E,"border-image-repeat":E,"border-inline":E,"border-inline-color":E,"border-inline-style":E,"border-inline-width":E,"border-inline-end":E,"border-inline-end-color":E,"border-inline-end-style":E,"border-inline-end-width":E,"border-inline-start":E,"border-inline-start-color":E,"border-inline-start-style":E,"border-inline-start-width":E,"border-left":E,"border-left-color":E,"border-left-style":E,"border-left-width":T.optional(),"border-radius":T.nullable().optional(),"border-right":E,"border-right-color":E,"border-right-style":E,"border-right-width":T.optional(),"border-style":E,"border-top":E,"border-top-color":E,"border-top-style":E,"border-top-left-radius":T.optional(),"border-top-right-radius":T.optional(),"border-top-width":T.optional(),"border-width":T.nullable().optional(),outline:E,"outline-color":E,"outline-style":E,"outline-offset":T.optional(),"outline-width":T.optional()}),Gr=n.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Kr=n.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),qr=b.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Jr=n.union([y.shape.weight,n.enum([`normal`,`bold`,`bolder`,`lighter`]),n.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>y.shape.weight.safeParse(Number(e)).success)]),D={color:qr,"font-family":b.shape.value,"font-size":n.union([h,Gr]),"font-weight":Jr,"font-style":n.enum([`normal`,`italic`,`oblique`]),"letter-spacing":m,"line-height":n.union([n.number().positive(),n.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":n.enum([`left`,`center`,`right`]),"white-space":n.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},Yr=n.strictObject({color:D.color.optional(),"font-family":D[`font-family`].optional(),"font-size":D[`font-size`].optional(),"font-weight":D[`font-weight`].optional(),"font-style":D[`font-style`].optional(),"letter-spacing":D[`letter-spacing`].optional(),"line-height":D[`line-height`].optional(),"text-align":D[`text-align`].optional(),"white-space":D[`white-space`].optional()}),Xr=n.union([b.shape.value,m]).nullable().optional(),Zr=n.strictObject({"text-decoration":Xr,"text-decoration-line":Xr,"text-decoration-style":Xr,"text-decoration-color":Xr,"text-decoration-thickness":Xr,"text-underline-offset":Xr,"text-decoration-skip-ink":Xr,color:D.color.nullable().optional(),"font-family":D[`font-family`].nullable().optional(),"font-size":D[`font-size`].nullable().optional(),"font-weight":D[`font-weight`].nullable().optional(),"font-optical-sizing":n.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":b.shape.value.nullable().optional(),"font-feature-settings":b.shape.value.nullable().optional(),"text-wrap":b.shape.value.nullable().optional(),"text-wrap-mode":b.shape.value.nullable().optional(),"text-wrap-style":b.shape.value.nullable().optional(),"text-box":b.shape.value.nullable().optional(),"text-box-trim":b.shape.value.nullable().optional(),"text-box-edge":b.shape.value.nullable().optional(),"font-style":D[`font-style`].nullable().optional(),"font-stretch":n.union([n.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),n.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":n.union([m,Kr,n.literal(`normal`)]).nullable().optional(),"line-height":D[`line-height`].nullable().optional(),"text-align":D[`text-align`].nullable().optional(),"text-indent":n.union([m,Kr]).nullable().optional(),"white-space":D[`white-space`].nullable().optional(),"word-spacing":n.union([m,Kr,n.literal(`normal`)]).nullable().optional()}),Qr=b.shape.value,O=n.union([n.string(),m]),k=n.union([b.shape.value,m]).nullable().optional(),$r=Zr.extend(Wr.shape).extend({"align-content":k,"align-items":k,"align-self":k,"aspect-ratio":k,"block-size":k,bottom:k,"box-sizing":k,display:k,flex:k,"flex-basis":k,"flex-direction":k,"flex-grow":k,"flex-shrink":k,"flex-wrap":k,height:k,"inline-size":k,inset:k,"inset-block":k,"inset-block-end":k,"inset-block-start":k,"inset-inline":k,"inset-inline-end":k,"inset-inline-start":k,"justify-content":k,left:k,margin:k,"margin-block":k,"margin-block-end":k,"margin-block-start":k,"margin-inline":k,"margin-inline-end":k,"margin-inline-start":k,"max-block-size":k,"max-height":k,"max-inline-size":k,"max-width":k,"min-block-size":k,"min-height":k,"min-inline-size":k,"min-width":k,order:k,padding:k,"padding-block":k,"padding-block-end":k,"padding-block-start":k,"padding-inline":k,"padding-inline-end":k,"padding-inline-start":k,position:k,right:k,top:k,width:k,background:n.string().nullable().optional(),"background-color":n.string().nullable().optional(),"box-shadow":n.string().nullable().optional(),"column-gap":O.optional(),gap:O.optional(),"margin-bottom":O.optional(),"margin-left":O.optional(),"margin-right":O.optional(),"margin-top":O.optional(),opacity:n.union([n.string(),n.number()]).nullable().optional(),overflow:Qr.nullable().optional(),"overflow-x":Qr.nullable().optional(),"overflow-y":Qr.nullable().optional(),"padding-bottom":O.optional(),"padding-left":O.optional(),"padding-right":O.optional(),"padding-top":O.optional(),"row-gap":O.optional(),"stroke-width":O.optional()}),ei=n.union([$r.keyof(),b.shape.property.refine(e=>e.startsWith(`--`))]),ti=$r.catchall(k).refine(e=>Object.keys(e).every(e=>ei.safeParse(e).success)),ni=n.record(n.string(),n.unknown()),ri=n.number().int().positive(),ii=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`retain`),count:ri,attributes:ni.optional()}),n.object({kind:n.literal(`delete`),count:ri}),n.object({kind:n.literal(`insert`),text:n.string().min(1).refine(e=>e.isWellFormed()),attributes:ni.optional()})]),ai=n.object({baseLength:n.number().int().nonnegative(),representation:n.enum([`plain`,`rich`,`links`]).optional(),steps:n.array(ii),endAttributes:ni.optional(),properties:ni.refine(e=>[`text`,`richText`,`links`].every(t=>!Object.hasOwn(e,t))).optional()}).superRefine((e,t)=>{let n=0;for(let t of e.steps)t.kind!==`insert`&&(n+=t.count);n!==e.baseLength&&t.addIssue({code:`custom`,message:`text change must consume its exact base`})}),oi=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),isActive:n.boolean()}),si=n.object({baseVersion:n.number().int().nonnegative(),after:n.array(n.string().min(1)),change:ai}),ci=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),originalChange:ai,inverse:ai,history:oi.optional(),source:si.optional()}),li=n.object({op:n.literal(`editText`),nodeId:n.string().min(1),change:ai,actionId:n.string().min(1).optional(),revision:ci.optional(),history:oi.optional(),source:si.optional()}),ui=y.pick({family:!0,fallbackFamilies:!0,size:!0,weight:!0,style:!0,variations:!0,opticalSize:!0,features:!0,lineHeight:!0,letterSpacing:!0,transform:!0,decoration:!0,paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,hangingList:!0,hangingPunctuation:!0,verticalTrim:!0,wrapStyle:!0}).strict(),di=ui.keyof().options,fi=n.object({id:n.string().min(1),name:n.string().trim().min(1),description:n.string().max(2e3),sortKey:n.string().min(1).optional(),sourceStyleId:n.string().min(1).optional(),sourceCanvasId:n.uuid().optional(),sourceRevision:n.number().int().positive().optional(),typography:ui.extend({listStyle:y.shape.listStyle}).transform(e=>(Reflect.deleteProperty(e,`listStyle`),e))}).strict().refine(e=>e.sourceCanvasId===void 0||e.sourceStyleId!==void 0,{message:`A source canvas belongs to a reference snapshot.`,path:[`sourceCanvasId`]}).refine(e=>e.sourceRevision===void 0||e.sourceCanvasId!==void 0&&e.sourceStyleId!==void 0,{message:`A published revision belongs to a source style and canvas.`,path:[`sourceRevision`]}),pi=n.object({id:fi.shape.id,position:n.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:n.partialRecord(n.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),n.union([n.string().max(1e3),n.number()])).optional()}).strict(),mi=2e3,hi=n.object({title:n.string().trim().min(1).max(200)}).strict(),gi=n.array(fi.shape.id),_i=n.object({canvasId:n.uuid()}),vi=n.object({definition:fi.refine(e=>e.sourceStyleId===void 0),revision:n.number().int().positive(),fontFaces:n.array(n.record(n.string(),n.unknown()))}),yi=n.object({styles:n.array(vi).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)}),bi=_i.extend({revision:n.number().int().positive(),documentVersion:n.number().int().positive(),description:n.string().max(mi),publishedAt:n.iso.datetime(),...yi.shape}),xi=_i.extend({mutationId:n.uuid(),expectedRevision:n.number().int().nonnegative(),documentVersion:n.number().int().positive(),publish:gi,remove:gi,description:n.string().trim().max(mi)}).strict().refine(e=>{let t=[...e.publish,...e.remove];return t.length>0&&new Set(t).size===t.length},{message:`Select each changed style once.`}),Si=n.object({canvasId:n.uuid(),title:n.string().max(200)}),Ci=n.object({search:n.string().trim().max(200).default(``),cursor:Si.nullable().default(null),limit:n.number().int().min(1).max(50).default(20)}),wi=n.object({canvasId:n.uuid(),title:n.string(),organisationId:n.uuid().nullable(),revision:n.number().int().positive(),styleCount:n.number().int().positive(),publishedAt:n.iso.datetime()}),Ti=n.object({items:n.array(wi).max(50),nextCursor:Si.nullable()}),Ei=n.object({parentId:n.string().min(1),sortKey:n.string().min(1)}),Di=n.object({op:n.literal(`insertConvertedSubtree`),destination:jr,sourceNodeId:n.string().min(1).optional(),rootNodeId:n.string().min(1),nodes:n.record(n.string().min(1),C),relationships:n.record(n.string().min(1),Ei)}),A=n.string().min(1),Oi=n.string().min(1),ki=S.extend({width:n.number().positive(),height:n.number().positive()}),Ai=n.object({parentId:A,afterId:A.optional()}),ji=n.object({parentId:A,sortKey:Oi}),Mi=n.object({op:n.literal(`setStyles`),nodeId:A,styles:ti,clear:n.array(ei).min(1).max(Object.keys(ti.shape).length).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),Ni=n.discriminatedUnion(`op`,[Di,n.object({op:n.literal(`insertNode`),node:C,parentage:ji,prototypeSource:n.object({canvasId:n.uuid(),nodeId:A,documentVersion:n.number().int().nonnegative(),versionEntryId:n.uuid().optional()}).optional()}),Ai.extend({op:n.literal(`insertText`),nodeId:A,label:n.string().default(`Text`),text:n.string(),box:ki,styles:Yr.default({})}),Ai.extend({op:n.literal(`insertPrototype`),nodeId:A,label:n.string().default(`Prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),box:ki,canvasPageId:A.optional()}),n.object({op:n.literal(`setPrototypeDeployment`),nodeId:A,prototypeId:n.uuid(),deploymentId:n.uuid()}),li,n.object({op:n.literal(`setText`),nodeId:A,text:n.string()}),n.object({op:n.literal(`setBox`),nodeId:A,box:n.union([S,n.literal(`default`)])}),n.object({op:n.literal(`setLabel`),nodeId:A,label:n.string().trim().min(1),labelOrigin:Vn.nullable().optional()}),n.object({op:n.literal(`setContainerKind`),nodeId:A,component:n.enum([`frame`,`group`])}),n.object({op:n.literal(`setVisibility`),nodeId:A,visible:n.boolean().nullable()}),n.object({op:n.literal(`setLocked`),nodeId:A,locked:n.boolean().nullable()}),n.object({op:n.literal(`setConstraints`),nodeId:A,constraints:Bn}),Mi,n.object({op:n.literal(`setAppearance`),nodeId:A,appearance:lt}),n.object({op:n.literal(`setLayout`),nodeId:A,layout:n.union([Ue,n.literal(`default`)])}),n.object({op:n.literal(`patchTypography`),nodeId:A,typography:_t}),n.object({op:n.literal(`setTypography`),nodeId:A,typography:n.union([ht,n.literal(`default`)])}),n.object({op:n.literal(`patchAdditionalStyles`),nodeId:A,additionalStyles:Tt}),n.object({op:n.literal(`setAdditionalStyles`),nodeId:A,additionalStyles:n.union([Ct,n.literal(`default`)])}),n.object({op:n.literal(`setTextStyleLibrary`),nodeId:n.literal(`root`),sourceCanvasId:n.uuid(),library:hi.nullable()}),n.object({op:n.literal(`patchFontLibrary`),nodeId:n.literal(`root`),fonts:Ur}),n.object({op:n.literal(`setTextStyle`),nodeId:n.literal(`root`),styleId:fi.shape.id,textStyle:fi.nullable(),changedTextNodeIds:n.array(A).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),n.object({op:n.literal(`setGeometry`),nodeId:A,geometry:n.union([Ln,n.literal(`default`)])}),n.object({op:n.literal(`setProps`),nodeId:A,props:n.union([n.record(n.string(),n.unknown()),n.literal(`default`)])}),n.object({op:n.literal(`setParentage`),nodeId:A,parentage:ji}),Ai.extend({op:n.literal(`move`),nodeId:A}),n.object({op:n.literal(`remove`),nodeId:A,removedText:n.record(A,C.pick({props:!0})).optional()})]),Pi=$n.extend({operation:Di,next:n.array(n.string().min(1))}),Fi=n.record(n.string(),n.unknown()),Ii=n.object({canvasId:n.uuid(),afterVersion:n.number().int().positive().optional()}),Li=n.object({screenId:n.uuid(),route:n.string().nullable(),title:n.string().nullable(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()}),atMs:n.number().int().min(0).nullable(),sourceRecordingId:n.uuid().nullable(),assetBundle:n.object({assetBundleId:n.uuid(),sourceUrl:n.string(),assets:n.array(n.object({url:n.string(),contentType:n.string().max(200),path:n.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:n.number().int().min(0)}).nullable(),download:Et.nullable()}),Ri=n.object({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(Ni)}),zi=n.object({mutations:n.array(Ri).optional(),version:n.number().int().min(1),document:Fi,screens:n.array(Li)}),Bi=n.object({canvasId:n.uuid(),baseVersion:n.number().int().min(1),document:Fi.refine(e=>Hn.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:n.array(n.uuid())}),Vi=n.discriminatedUnion(`outcome`,[n.object({outcome:n.literal(`saved`),version:n.number().int().min(1)}),n.object({outcome:n.literal(`conflict`),version:n.number().int().min(1),document:Fi})]),Hi=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Ui=(e,t,n)=>{if(!Hi(e)||typeof e.data!=`string`)return e;let r=n(e.data,t);return r===e.data?e:{...e,data:r}},Wi=(e,t)=>{if(!Hi(e)||!Array.isArray(e.sources))return e;let n=e.sources,r=n.map(n=>Ui(n,e,t));return r.every((e,t)=>e===n[t])?e:{...e,sources:r}},Gi=(e,t)=>{if(!Array.isArray(e?.fontFaces))return e;let n=e.fontFaces,r=n.map(e=>Wi(e,t));return r.every((e,t)=>e===n[t])?e:{...e,fontFaces:r}},Ki=new Set(`alignItems.backgroundColor.borderBottom.borderBottomLeftRadius.borderBottomRightRadius.borderLeft.borderRight.borderTop.borderTopLeftRadius.borderTopRightRadius.boxShadow.boxSizing.color.columnGap.display.flexDirection.fontFamily.fontFeatureSettings.fontOpticalSizing.fontSize.fontStretch.fontStyle.fontVariant.fontVariantCaps.fontVariantLigatures.fontVariantNumeric.fontVariantPosition.fontKerning.fontVariationSettings.fontWeight.justifyContent.letterSpacing.lineHeight.marginBottom.marginLeft.marginRight.marginTop.opacity.paddingBottom.paddingLeft.paddingRight.paddingTop.rowGap.textDecorationColor.textDecorationLine.textDecorationSkipInk.textDecorationStyle.textDecorationThickness.textShadow.textTransform.textUnderlineOffset.verticalAlign.whiteSpace.WebkitTextStrokeColor.WebkitTextStrokeWidth.--canvas-text-stroke-alignment`.split(`.`)),qi=Qe.array().optional(),Ji=mt.pick({paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,wrapStyle:!0}).extend({hangingPunctuation:y.shape.hangingPunctuation,verticalTrim:y.shape.verticalTrim}).strip(),Yi=new Set([`http:`,`https:`,`mailto:`,`tel:`]),Xi=e=>{let t=e.trim();if(t===``)return!1;try{let e=new URL(t,`https://enhance.invalid/`).protocol;return Yi.has(e)}catch{return!1}},Zi=e=>typeof e==`string`&&Xi(e)?e:void 0,Qi=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Object.entries(e);return t.some(([e,t])=>!Ki.has(e)||typeof t!=`string`&&typeof t!=`number`)?null:Object.fromEntries(t)},$i=e=>{let t=Reflect.get(e,`sourcePath`);return{...Object.fromEntries(Object.entries(e).filter(([e])=>![`text`,`href`,`sourcePath`,`styles`,`fills`,`paragraph`,`paragraphSpacing`,`paragraphIndent`,`listSpacing`,`hangingPunctuation`,`verticalTrim`,`wrapStyle`,`soft`,`textStyle`].includes(e))),...typeof t==`string`&&{sourcePath:t}}},ea=e=>{let t=[],n=e.toReversed().map(e=>({value:e,target:t})),r=new Set;for(;n.length>0;){let e=n.pop();if(e===void 0)continue;if(`done`in e){r.delete(e.done);continue}let t=[],i=na(e.value,t);if(i===null)return null;if(e.target.push(i),i.kind!==`span`)continue;let a=e.value;if(typeof a!=`object`||!a||r.has(a))return null;r.add(a),n.push({done:a});let o=Reflect.get(a,`children`);if(!Array.isArray(o))return null;let s=o;for(let e of s.toReversed())n.push({value:e,target:t})}return t},ta=e=>{let t=Reflect.get(e,`soft`);return t!==void 0&&t!==!0?null:{...$i(e),kind:`break`,...t===!0&&{soft:t}}},na=(e,t)=>{if(typeof e!=`object`||!e)return null;let n=Reflect.get(e,`kind`),r=$i(e);if(n===`break`)return ta(e);if(n===`text`){let t=Reflect.get(e,`text`);return typeof t==`string`?{...r,kind:n,text:t}:null}if(n!==`span`)return null;let i=Reflect.get(e,`children`),a=Qi(Reflect.get(e,`styles`)),o=qi.safeParse(Reflect.get(e,`fills`)),s=mt.optional().safeParse(Reflect.get(e,`paragraph`)),c=Ji.safeParse(e),l=pi.optional().safeParse(Reflect.get(e,`textStyle`));if(a===null||!o.success||!s.success||!c.success||!l.success||!Array.isArray(i))return null;let ee=Zi(Reflect.get(e,`href`));return{...r,kind:n,styles:a,children:t,...l.data!==void 0&&{textStyle:l.data},...o.data!==void 0&&{fills:o.data},...s.data!==void 0&&{paragraph:s.data},...Object.fromEntries(Object.entries(c.data).filter(([,e])=>e!==void 0)),...ee!==void 0&&{href:ee}}},ra=e=>e.kind===`text`?e.text:e.soft===!0?`\u2028`:`
2
+ import{FailedToExitError as e,parseRouter as t}from"trpc-cli";import{z as n}from"zod";import{createHash as r}from"node:crypto";import{TRPCError as i,initTRPC as a}from"@trpc/server";import{middlewareMarker as o}from"@trpc/server/unstable-core-do-not-import";import{setTimeout as s}from"node:timers/promises";import c from"node:assert/strict";import{Buffer as l}from"node:buffer";import{TRPCClientError as ee}from"@trpc/client";var te=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);const ne=n.strictObject({}),re=n.object({firstAgentWorkAt:n.iso.datetime().nullable()}),ie=n.object({cursor:n.string().nullable().default(null),limit:n.number().int().min(1).max(100).default(20)}),ae=e=>n.object({items:n.array(e),truncated:n.boolean()}),oe=2048,se=n.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),ce=n.object({background:n.string().optional(),documentVersion:n.number().int().positive().optional(),thumbnailId:n.uuid(),url:n.string(),width:n.literal(528),height:n.literal(312),bytes:n.number().int().min(1).max(1048576)}),le=n.object({canvasId:n.uuid(),thumbnailId:n.uuid(),clientReleaseIdentity:n.string().min(1).max(100),attemptedOperation:n.literal(`thumbnail-download`),recoveryOutcome:n.literal(`fallback-shown`)}),u=n.object({recorded:n.literal(!0)}),ue=n.enum([`invite-only`,`link-view`,`link-comment`]),d=n.enum([`owner`,`can-comment`,`can-view`]),f=n.enum([`can-comment`,`can-view`]),de=n.object({read:n.boolean(),comment:n.enum([`yes`,`sign-in`,`no`]),share:n.boolean(),manage:n.boolean()}),p=n.object({id:n.uuid(),title:n.string().min(1),accessState:ue,organisationId:n.uuid().nullable(),sourceUrl:n.string().nullable(),unresolvedCount:n.number().int().min(0),viewerCan:de,createdAt:n.iso.datetime(),lastActivityAt:n.iso.datetime()}),fe=n.object({title:n.string().trim().min(1),organisationId:n.uuid().nullable().default(null),sourceUrl:n.string().nullable().default(null)}),pe=p.extend({version:n.number().int().positive()}),me=n.object({canvasId:n.uuid()}),he=n.union([n.literal(`own`),n.literal(`everything`),n.uuid()]),ge=n.object({collection:he.default(`own`),title:n.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:n.boolean().default(!1),accessState:ue.optional(),scope:n.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:n.boolean().default(!1)}),_e=p.extend({screenCount:n.number().int().min(0),hasRecording:n.boolean()}),ve=ae(n.union([_e.extend({thumbnail:ce}),_e.extend({thumbnail:n.null(),thumbnailFallbackReason:se})])),ye=n.object({canvasId:n.uuid(),title:n.string().trim().min(1)}),be=n.object({canvasId:n.uuid()}),xe=n.object({canvasId:n.uuid(),deletedAt:n.iso.datetime()}),Se=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)])}),Ce=n.object({canvas:p}),we=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)]),title:n.string().trim().min(1).optional()}),Te=n.object({canvas:p}),Ee=n.object({canvasId:n.uuid(),confirmation:n.string().min(1)}),De=n.object({canvasId:n.uuid()}),Oe=n.object({canvasId:n.uuid(),accessState:ue}),ke=n.object({canvas:p,widened:n.boolean()}),Ae=n.object({canvasId:n.uuid()}),je=n.object({lastViewedAt:n.iso.datetime().nullable()}),Me=n.object({canvasId:n.uuid()}),Ne=n.object({canvasId:n.uuid()}),m=n.number(),h=n.number().nonnegative(),Pe=n.object({ratio:h,offset:m.optional()}),Fe=n.object({min:h.optional(),max:h.optional(),minParent:Pe.optional(),maxParent:Pe.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),Ie=n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`fixed`),value:h}).strict(),Fe.extend({mode:n.literal(`hug`)}).strict(),Fe.extend({mode:n.literal(`fill`),offset:m.optional()}).strict()]),Le=n.object({top:h,right:h,bottom:h,left:h}),Re=n.union([n.literal(`auto`),m]),ze=n.object({top:Re,right:Re,bottom:Re,left:Re}),Be=n.object({mode:n.enum([`auto-fill`,`auto-fit`]),minimum:n.number().positive()}),Ve=n.object({x:m,y:m}),He=n.object({direction:n.enum([`row`,`column`]),alignItems:n.enum([`start`,`center`,`end`,`stretch`]),alignContent:n.enum([`start`,`center`,`end`,`stretch`,`space-between`,`space-around`,`space-evenly`]).optional(),justifyContent:n.enum([`start`,`center`,`end`,`space-between`,`space-around`,`space-evenly`]),gap:h,rowGap:h.optional(),columnGap:h.optional(),wrap:n.enum([`nowrap`,`wrap`]).optional(),gridColumns:n.number().int().positive().optional(),gridAutoRepeat:Be.optional(),padding:Le}).strict(),Ue=n.object({rotation:m.optional(),flipHorizontal:n.boolean().optional(),flipVertical:n.boolean().optional(),aspectRatioLocked:n.boolean().optional(),aspectRatio:n.number().positive().optional(),horizontal:Ie.optional(),vertical:Ie.optional(),position:n.enum([`flow`,`absolute`]).optional(),alignSelf:n.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:h.optional(),flexShrink:h.optional(),flexBasis:n.union([n.literal(`auto`),h,Pe]).optional(),flowOffset:Ve.optional(),order:m.int().optional(),margin:ze.partial().optional(),clipContent:n.boolean().optional(),container:He.partial().extend({padding:Le.partial().optional()}).optional()}).strict(),g=m,_=h,v=n.number().min(0).max(1),We=n.string().min(1),Ge=n.object({space:n.enum([`srgb`,`display-p3`]),red:v,green:v,blue:v,alpha:v}),Ke=n.object({id:We,position:v,color:Ge}),qe=n.object({x:v,y:v}),Je=n.number().min(-1).max(1),Ye=n.object({exposure:Je.optional(),contrast:Je.optional(),saturation:Je.optional(),temperature:Je.optional(),tint:Je.optional(),highlights:Je.optional(),shadows:Je.optional()}),Xe=n.tuple([g,g,g,g,g,g]).refine(([e,t,n,r])=>e*r!==t*n,`image transform must be invertible`),Ze=n.object({id:We,visible:n.boolean(),opacity:v}),Qe=n.discriminatedUnion(`kind`,[Ze.extend({kind:n.literal(`solid`),color:Ge}),Ze.extend({kind:n.literal(`linear-gradient`),angle:g,stops:n.array(Ke).min(2)}),Ze.extend({kind:n.literal(`radial-gradient`),center:qe,radius:qe,stops:n.array(Ke).min(2)}),Ze.extend({kind:n.literal(`image`),assetId:n.string().min(1),fit:n.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:g.positive().optional(),tileOrigin:n.enum([`center`,`top-left`]).optional(),rotation:n.union([n.literal(0),n.literal(90),n.literal(180),n.literal(270)]).optional(),crop:n.object({x:v,y:v,width:v,height:v}).optional(),transform:Xe.optional(),adjustments:Ye.optional()}).refine(e=>e.crop===void 0||e.transform===void 0,{message:`image paint cannot have both a crop rectangle and an affine transform`,path:[`transform`]})]),$e=n.object({topLeft:_,topRight:_,bottomRight:_,bottomLeft:_,smoothing:v.optional()}),et=n.object({visible:n.boolean(),width:n.object({top:_,right:_,bottom:_,left:_}),style:n.enum([`solid`,`dashed`,`dotted`]),paint:Qe}),tt=n.object({visible:n.boolean(),width:_,offset:g,style:n.enum([`solid`,`dashed`,`dotted`]),paint:Qe}),nt=n.object({id:We,visible:n.boolean(),kind:n.enum([`outer`,`inner`]),color:Ge,offsetX:g,offsetY:g,blur:_,spread:g}),rt=n.object({id:We,visible:n.boolean()}),it=n.discriminatedUnion(`kind`,[rt.extend({kind:n.literal(`blur`),value:_}),rt.extend({kind:n.literal(`brightness`),value:_}),rt.extend({kind:n.literal(`contrast`),value:_}),rt.extend({kind:n.literal(`grayscale`),value:v}),rt.extend({kind:n.literal(`hue-rotate`),value:g}),rt.extend({kind:n.literal(`invert`),value:v}),rt.extend({kind:n.literal(`saturate`),value:_}),rt.extend({kind:n.literal(`sepia`),value:v})]),at=n.enum([`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`]);n.object({opacity:v,blendMode:at,fills:n.array(Qe),border:et,outline:tt,radius:$e,shadows:n.array(nt),filters:n.array(it),backdropFilters:n.array(it)});const ot=n.object({opacity:v.optional(),blendMode:at.optional(),fills:n.array(Qe).optional(),border:et.optional(),outline:tt.optional(),radius:$e.optional(),shadows:n.array(nt).optional(),filters:n.array(it).optional(),backdropFilters:n.array(it).optional()}).refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),st=[`opacity`,`blendMode`,`fills`,`border`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],ct=n.enum(st),lt=n.object({opacity:v.optional(),blendMode:at.optional(),fills:n.array(Qe).optional(),border:et.optional(),outline:tt.optional(),radius:$e.optional(),shadows:n.array(nt).optional(),filters:n.array(it).optional(),backdropFilters:n.array(it).optional(),clear:n.array(ct).min(1).max(st.length).optional()}).refine(e=>Object.keys(e).length>0,`appearance patch cannot be empty`).refine(({clear:e,...t})=>e===void 0||e.every(e=>t[e]===void 0),`appearance patch cannot set and clear the same property`),ut=n.number(),dt=n.number().nonnegative(),ft=n.string().regex(/^[\u{20}-\u{7E}]{4}$/u),pt=ft.refine(e=>![`wght`,`opsz`].includes(e)),y=n.object({family:n.string().min(1),fallbackFamilies:n.array(n.string().min(1)),size:dt,weight:n.number().min(1).max(1e3),variations:n.record(pt,ut).optional(),features:n.record(ft,n.number().int().nonnegative().max(65535)).optional(),opticalSize:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`auto`)}),n.object({mode:n.literal(`font-default`)}),n.object({mode:n.literal(`fixed`),value:ut})]).optional(),style:n.enum([`normal`,`italic`,`oblique`]),lineHeight:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`normal`)}),n.object({mode:n.literal(`fixed`),value:dt}),n.object({mode:n.literal(`percent`),value:dt})]),letterSpacing:n.union([ut,n.object({mode:n.literal(`percent`),value:ut})]),align:n.enum([`left`,`center`,`right`,`justify`]),direction:n.enum([`auto`,`ltr`,`rtl`]).optional(),verticalAlign:n.enum([`top`,`middle`,`bottom`]),verticalTrim:n.enum([`none`,`cap-height`]).optional(),transform:n.enum([`none`,`uppercase`,`lowercase`,`capitalize`]),decoration:n.object({line:n.enum([`none`,`underline`,`line-through`]),style:n.enum([`solid`,`double`,`dotted`,`dashed`,`wavy`]),color:Ge.optional(),thickness:n.union([dt,n.object({mode:n.literal(`percent`),value:dt}),n.object({mode:n.literal(`font-default`)})]).optional(),offset:n.union([ut,n.object({mode:n.literal(`percent`),value:ut})]).optional(),skipInk:n.enum([`auto`,`none`,`all`]).optional()}),stroke:n.object({width:dt,paint:Qe,alignment:n.enum([`inside`,`center`,`outside`]).optional()}).optional(),wrapping:n.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:n.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:dt.optional(),paragraphIndent:dt.optional(),listStyle:n.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:dt.optional(),hangingList:n.boolean().optional(),hangingPunctuation:n.boolean().optional(),truncation:n.object({mode:n.enum([`none`,`ellipsis`]),maxLines:n.number().int().min(1).nullable()}).optional(),insets:n.object({top:ut,right:ut,bottom:ut,left:ut}).optional()}),mt=y.pick({align:!0,direction:!0,wrapStyle:!0,paragraphSpacing:!0,paragraphIndent:!0,listStyle:!0,listSpacing:!0,hangingList:!0}).partial().extend({listLevel:n.number().int().min(1).optional(),listStart:n.number().int().min(1).optional()}).strict(),ht=y.partial().strict(),gt=y.keyof().options,_t=ht.extend({featureChanges:n.object({set:y.shape.features,clear:n.array(ft).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),variationChanges:n.object({set:y.shape.variations,clear:n.array(pt).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),clear:n.array(y.keyof()).max(gt.length).optional()}).refine(e=>e.clear?.every(t=>e[t]===void 0)??!0,`a typography property cannot be set and cleared in the same patch`).refine(e=>[`features`,`variations`].every(t=>{let n=e[t===`features`?`featureChanges`:`variationChanges`];return n===void 0||e[t]===void 0&&e.clear?.includes(t)!==!0&&(n.clear?.every(e=>n.set?.[e]===void 0)??!0)}),`font settings cannot be replaced and patched, or set and cleared, together`),vt={"font-family":[`family`,`fallbackFamilies`],"font-size":[`size`],"font-weight":[`weight`],"font-variation-settings":[`weight`,`variations`,`opticalSize`],"font-optical-sizing":[`opticalSize`],"font-feature-settings":[`features`],"font-style":[`style`],"line-height":[`lineHeight`],"letter-spacing":[`letterSpacing`],"text-align":[`align`],direction:[`direction`],"unicode-bidi":[`direction`],"text-indent":[`paragraphIndent`],"hanging-punctuation":[`hangingPunctuation`],"align-content":[`verticalAlign`],"text-box":[`verticalTrim`],"text-box-trim":[`verticalTrim`],"text-box-edge":[`verticalTrim`],"text-transform":[`transform`],"text-decoration":[`decoration`],"text-decoration-line":[`decoration`],"text-decoration-style":[`decoration`],"text-decoration-color":[`decoration`],"text-decoration-thickness":[`decoration`],"text-underline-offset":[`decoration`],"text-decoration-skip-ink":[`decoration`],"-webkit-text-stroke":[`stroke`],"-webkit-text-stroke-width":[`stroke`],"-webkit-text-stroke-color":[`stroke`],"--canvas-text-stroke-alignment":[`stroke`],"white-space":[`wrapping`],"text-wrap-style":[`wrapStyle`],"text-wrap":[`wrapStyle`]},yt=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,bt=/^(?:behavior|-moz-binding)$/iu,xt=n.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!bt.test(e),`unsafe CSS property`),St=n.string().refine(e=>!yt.test(e),`unsafe CSS value`),b=n.object({id:n.string().min(1),property:xt,value:St,enabled:n.boolean()}),Ct=n.object({declarations:n.array(b)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),wt=n.array(b.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),Tt=n.object({set:n.array(b).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:wt.optional(),order:wt.optional(),empty:n.enum([`keep`,`remove`]).optional()}).strict().refine(e=>e.set?.every(t=>e.clear?.includes(t.id)!==!0)??!0,`a declaration cannot be set and cleared in the same patch`),x=n.object({url:n.url(),expiresAt:n.iso.datetime(),headers:n.record(n.string(),n.string())}),Et=n.object({url:n.url(),expiresAt:n.iso.datetime(),bytes:n.number().int().min(0)}),Dt=`/v1/canvas-assets/`,Ot=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],kt=n.object({canvasId:n.uuid(),contentType:n.enum(Ot),bytes:n.number().int().positive()}),At=n.object({assetId:n.uuid(),path:n.string().startsWith(`/v1/canvas-assets/`),upload:x}),jt=(e,t)=>`${Dt}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,Mt=n.tuple([n.uuid(),n.uuid()]),Nt=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=Mt.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},Pt=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`],Ft=n.object({canvasId:n.uuid(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),It=Ft.extend({bytes:n.number().int().positive()}),Lt=It.extend({contentType:n.enum(Pt)}),Rt=n.object({path:n.string().startsWith(`/v1/canvas-assets/`)}),zt=Rt.extend({upload:x}),Bt=(e,t)=>`${Dt}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`,Vt=n.object({canvasId:n.uuid(),sources:n.array(Ft).min(1)}),Ht=n.object({resources:n.array(n.object({source:Ft,path:n.string()}))}),Ut=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let[t,n,r,i]=e.slice(18).split(`/`,4);return n!==`fonts`||i!==void 0?null:Ft.safeParse({canvasId:t,sha256:r}).data??null},Wt=1e3,Gt={image:Ot,font:Pt},Kt=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid()}),qt=n.discriminatedUnion(`kind`,[Kt.extend({kind:n.literal(`image`),contentType:n.enum(Ot),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),Kt.extend({kind:n.literal(`font`),contentType:n.enum(Pt),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)})]),Jt=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`image`),width:n.number().int().positive(),height:n.number().int().positive()}),n.strictObject({kind:n.literal(`font`),family:n.string().min(1),subfamily:n.string(),style:n.enum([`normal`,`italic`,`oblique`]),minimumWeight:n.number().min(1).max(Wt),maximumWeight:n.number().min(1).max(Wt)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]),Yt=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid(),assetId:n.uuid(),kind:n.enum([`image`,`font`]),contentType:n.string(),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u),path:n.string().startsWith(`/v1/canvas-assets/`),state:n.enum([`awaiting_upload`,`ready`]),metadata:Jt.nullable()}).refine(e=>e.state===`ready`==(e.metadata!==null),`Readiness must match verified metadata.`).refine(e=>e.metadata===null||e.metadata.kind===e.kind,`Metadata must describe the reserved asset kind.`).refine(e=>Gt[e.kind].includes(e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?jt(e.canvasId,e.assetId):Bt(e.canvasId,e.sha256)),`The resource path must match its native identity.`),Xt=Yt.safeExtend({upload:x.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`),Zt=new Set([`aspect-ratio`,`-webkit-line-clamp`,`line-clamp`,`flex-grow`,`flex-shrink`,`font-weight`,`opacity`,`order`,`z-index`,`grid-area`,`grid-row`,`grid-column`,`grid-row-start`,`grid-row-end`,`grid-column-start`,`grid-column-end`]),Qt=(e,t)=>typeof t==`number`&&!Zt.has(e.toLowerCase())?`${String(t)}px`:String(t),$t=[`top`,`right`,`bottom`,`left`],en=[`grid-template-rows`,`grid-template-columns`,`grid-template-areas`],tn={gap:[`row-gap`,`column-gap`],"text-wrap":[`text-wrap-mode`,`text-wrap-style`],padding:$t.map(e=>`padding-${e}`),margin:$t.map(e=>`margin-${e}`),flex:[`flex-grow`,`flex-shrink`,`flex-basis`],"flex-flow":[`flex-direction`,`flex-wrap`],"place-content":[`align-content`,`justify-content`],"place-items":[`align-items`,`justify-items`],"place-self":[`align-self`,`justify-self`],"grid-template":en,grid:[...en,`grid-auto-rows`,`grid-auto-columns`,`grid-auto-flow`],"grid-row":[`grid-row-start`,`grid-row-end`],"grid-column":[`grid-column-start`,`grid-column-end`],"grid-area":[`grid-row-start`,`grid-column-start`,`grid-row-end`,`grid-column-end`]},nn=e=>tn[e.toLowerCase()]??[e.toLowerCase()],rn=(e,t)=>{if(e.isEscaped)return{...e,isEscaped:!1};if(t===`\\`)return{...e,isEscaped:!0};if(e.quote!==``)return{...e,quote:e.quote===t?``:e.quote};if([`"`,`'`].includes(t))return{...e,quote:t};let n=[`(`,`[`,`{`].includes(t)?1:[`)`,`]`,`}`].includes(t)?-1:0;return{...e,depth:e.depth+n}},an=(e,t=`space`)=>{let n=[],r=``,i={depth:0,quote:``,isEscaped:!1};for(let a of e){let e=i.depth===0&&i.quote===``&&!i.isEscaped;i=rn(i,a),e&&(t===`space`?/\s/u.test(a):a===t)?((t!==`space`||r!==``)&&n.push(r.trim()),r=``):r+=a}return(t!==`space`||r!==``)&&n.push(r.trim()),n},on=e=>/^(?:--|-?[_a-z\u{80}-\u{FFFF}])[-\w\u{80}-\u{FFFF}]*$/iu.test(e)&&!/^(?:auto|span|initial|unset)$/iu.test(e)?e:`auto`,sn=(e,t,n)=>{let r=an(t,`/`),i=r[0]??t;if(e!==`grid-area`)return r[n]??on(i);let a=r[1]??on(i);return[i,a,r[2]??on(i),r[3]??on(a)][n]??t},cn=(e,t,n)=>{let r=an(n?e:t),i=r.filter(e=>!/^(?:auto-flow|dense)$/iu.test(e)).join(` `),a=`${n?`row`:`column`}${r.some(e=>/^dense$/iu.test(e))?` dense`:``}`;return[n?`none`:e,n?t:`none`,`none`,n&&i!==``?i:`auto`,!n&&i!==``?i:`auto`,a]},ln=(e,t,n)=>{if(/^(?:none|initial|unset)$/iu.test(t))return[`none`,`none`,`none`,`auto`,`auto`,`row`][n]??t;let r=an(t,`/`),i=r[0]??t,a=r[1];if(i===``||a===``||r.length>2)return t;let o=an(i).some(e=>e.toLowerCase()===`auto-flow`),s=a!==void 0&&an(a).some(e=>e.toLowerCase()===`auto-flow`);if(e===`grid`&&a!==void 0&&o!==s)return cn(i,a,o)[n]??t;if(o||s)return t;let c=/["']/u.test(i);return a===void 0&&!c?t:[c?t:i,a??`none`,c?i:`none`,`auto`,`auto`,`row`][n]??t},un=e=>{let t=[],n=`0%`;for(let r of e)/^(?:\d+(?:\.\d*)?|\.\d+)$/u.test(r)&&t.length<2?t.push(r):n=r;return[t[0]??`1`,t[1]??`1`,n]},dn=(e,t,n)=>{if(/(?:var|env)\(|^(?:inherit|revert(?:-layer)?)$/iu.test(t))return t;if(/^grid-(?:area|row|column)$/u.test(e))return sn(e,t,n);if(e===`grid-template`||e===`grid`)return ln(e,t,n);let r=an(t);return e===`text-wrap`?n===0?r.find(e=>/^(?:wrap|nowrap)$/u.test(e))??`wrap`:r.find(e=>/^(?:auto|balance|pretty|stable)$/u.test(e))??`auto`:e===`flex-flow`?n===0?r.find(e=>/^(?:row|column)(?:-reverse)?$/u.test(e))??`row`:r.find(e=>/^(?:nowrap|wrap|wrap-reverse)$/u.test(e))??`nowrap`:e===`flex`?t===`none`?[`0`,`0`,`auto`][n]??t:t===`initial`?[`0`,`1`,`auto`][n]??t:un(r)[n]??t:r[n]??(n===3?r[1]:void 0)??r[0]??t},fn=e=>e.additionalStyles===void 0?{}:Object.fromEntries(e.additionalStyles.declarations.filter(e=>e.enabled).map(e=>[e.property,e.value])),pn=e=>{let t=new Set(e.additionalStyles?.declarations.map(e=>e.property.toLowerCase()));return{...Object.fromEntries(Object.entries(e.styles).filter(([e])=>!t.has(e.toLowerCase()))),...fn(e)}},mn=e=>/!important\s*$/iu.test(String(e)),hn=(e,t)=>{let n=String(e).replace(/\s*!important\s*$/iu,``).trim();return t||n.includes(`(`)?n:n.toLowerCase()},gn=(e,t)=>{let n=null,r=!1,i=Object.entries(pn(e));for(let[e,a]of i){let i=nn(e),o=i.indexOf(t);if(o===-1)continue;let s=mn(a);if(r&&!s)continue;let c=hn(a,/^grid(?:-|$)/iu.test(e));n=i.length===1?c:dn(e.toLowerCase(),c,o),r=s}return n??void 0},_n=(e,t)=>{let n=new Set(Object.entries(pn(e)).filter(([,e])=>mn(e)).flatMap(([e])=>nn(e)));return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,nn(e).some(e=>n.has(e))&&!mn(t)?`${Qt(e,t)} !important`:t]))},vn=(e,t)=>{let n=new Set,r=e;for(;r!==void 0&&!n.has(r.id);){n.add(r.id);let e=gn(r,`writing-mode`);if(e!==void 0&&e!==`inherit`&&e!==`unset`)return e;if(t===void 0)break;let i=t.relationships[r.id]?.parentId;if(i===void 0)break;r=t.nodes[i]}return`horizontal-tb`},yn=(e,t,n)=>{let r=/^(?:vertical|sideways)-/u.test(vn(e,n));return[t===`horizontal`?`width`:`height`,t===`vertical`===r?`inline-size`:`block-size`]},bn=e=>{if(e===void 0)return`freeform`;let t=gn(e,`display`);if(t!==void 0)return/^(?:(?:inline|block)\s+|inline-)?grid$/u.test(t)?`grid`:/^(?:(?:inline|block)\s+|inline-)?flex$/u.test(t)?`flex`:`freeform`;let n=e.layout?.container;return n===void 0?`freeform`:n.gridColumns!==void 0||n.gridAutoRepeat!==void 0?`grid`:`flex`},xn=(e,t)=>{if(e===void 0||bn(e)!==`flex`)return;let n=e.layout?.container?.direction??(t=>gn(e,t))(`flex-direction`)??`row`;if(!/^(?:row|column)(?:-reverse)?$/u.test(n))return;let r=/^(?:vertical|sideways)-/u.test(vn(e,t));return n.startsWith(`column`)===r?`horizontal`:`vertical`},Sn={unversioned:void 0,v1:1,v2:2,v3:3,v4:4,v5:5,v6:6},Cn={[Sn.v1]:`layout`,[Sn.v2]:`layout`,[Sn.v3]:`typography`,[Sn.v4]:`typography`,[Sn.v5]:`typography`,[Sn.v6]:`geometry`},wn=new Set([...Object.values(Sn),7]),Tn=e=>wn.has(e),En=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Dn=e=>{if(!En(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>e!==`gridTrack`)),n=t.container;En(n)&&(t.container=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`materialized`)));for(let e of[`horizontal`,`vertical`]){let n=t[e];En(n)&&n.mode===`hug`&&(t[e]=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`basis`)))}return t},On=e=>{let t=e.version;if(!Tn(t))return null;if(t===7||!En(e.nodes))return e;let n=Object.entries(Cn).find(([e])=>Number(e)===t)?.[1];return n===`geometry`?{...e,version:7}:Object.values(e.nodes).some(e=>En(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:7}:{...e,version:7,nodes:Object.fromEntries(Object.entries(e.nodes).map(([e,t])=>[e,En(t)&&t.layout!==void 0?{...t,layout:Dn(t.layout)}:t]))}},kn=n.number(),An=kn.nonnegative(),jn=n.string().min(1).max(200),Mn=n.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),Nn=n.strictObject({x:kn,y:kn,width:An,height:An}),Pn=n.strictObject({kind:n.literal(`path`),path:Mn.min(1),fillRule:n.enum([`nonzero`,`evenodd`]),viewBox:Nn.extend({width:An.positive(),height:An.positive()})}),Fn=n.enum([`union`,`subtract`,`intersect`,`exclude`]),In=n.strictObject({kind:n.literal(`boolean`),operation:Fn,operandIds:n.array(jn).min(1).refine(e=>new Set(e).size===e.length),result:n.strictObject({path:Mn,fillRule:n.literal(`nonzero`),isEmpty:n.boolean(),bounds:Nn,inputKey:n.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),Ln=n.discriminatedUnion(`kind`,[Pn,n.strictObject({kind:n.literal(`mask`),maskId:jn}),In]),Rn=n.literal(7,{error:`This editor uses an unsupported document format. Update the editor before changing this canvas.`});n.object({signature:n.string().regex(/^[a-f0-9]{16}$/u),image:n.string().startsWith(`data:image/jpeg;base64,`),families:n.array(n.string().min(1)).min(1)});const S=n.object({x:n.number(),y:n.number(),width:n.number().nonnegative(),height:n.number().nonnegative()}),zn=n.enum([`start`,`center`,`end`,`stretch`,`scale`]),Bn=n.object({x:zn,y:zn}),Vn=n.enum([`source`,`generated`,`user`]),C=n.looseObject({id:n.string().min(1),label:n.string(),component:n.string().min(1),labelOrigin:Vn.optional(),visible:n.boolean().optional(),locked:n.boolean().optional(),constraints:Bn.optional(),styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Ue.optional(),responsive:n.never().optional(),appearance:ot.optional(),typography:ht.optional(),additionalStyles:Ct.optional(),geometry:Ln.optional(),props:n.record(n.string(),n.unknown()).optional(),box:S.optional()}),Hn=n.object({version:n.literal(7),nodes:n.record(n.string(),C),relationships:n.record(n.string(),n.object({parentId:n.string().min(1),sortKey:n.string().min(1)})),tombstones:n.record(n.string(),n.literal(!0)).default({})}),Un=n.record(n.string(),n.unknown()),Wn=n.preprocess(e=>{let t=Un.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?Gn():On(t)},Hn),Gn=()=>({version:7,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Kn=n.string().min(1),qn=n.object({code:n.enum([`asset-unavailable`,`content-omitted`,`cross-origin-frame`,`nodes-truncated`,`responsive-behavior-not-editable`,`style-degraded`,`unsupported-surface`]),message:n.string().min(1),temporaryId:Kn.optional()}),Jn=n.object({nodeCount:n.number().int().positive(),sourceNodeCount:n.number().int().positive().optional(),collapsedNodeCount:n.number().int().nonnegative().optional(),collapsedWrapperNodeCount:n.number().int().nonnegative().optional(),collapsedNeutralWrapperNodeCount:n.number().int().nonnegative().optional(),collapsedTransferredWrapperNodeCount:n.number().int().nonnegative().optional(),layoutContainerCount:n.number().int().nonnegative().optional(),removedLeafNodeCount:n.number().int().nonnegative().optional(),retainedSemanticOwnerNodeCount:n.number().int().nonnegative().optional(),truncatedNodeCount:n.number().int().nonnegative().optional(),addedLayoutNodeCount:n.number().int().nonnegative().optional(),issues:n.array(qn)}),Yn=C.omit({id:!0}).extend({temporaryId:Kn}),Xn=n.object({temporaryId:Kn,parentTemporaryId:Kn,sortKey:n.string().min(1)}),Zn=n.object({version:n.literal(1),rootTemporaryId:Kn,nodes:n.array(Yn).min(1),relationships:n.array(Xn),report:Jn.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),Qn=n.object({canvasId:n.uuid(),documentFormatVersion:Rn,mutationId:n.uuid(),baseVersion:n.number().int().positive(),screenNodeId:n.string().min(1),draft:Zn}),$n=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),rootNodeId:n.string().min(1),idMap:n.record(Kn,n.string().min(1)),insertedNodeIds:n.array(n.string().min(1)),removedNodeIds:n.array(n.string().min(1)),boxes:n.record(n.string().min(1),S),affectedBounds:S}),er=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],tr=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],nr=[`VERSION_CHANGED`,`TARGET_NOT_FOUND`,`TARGET_INVALID`,`OUTPUT_TOO_LARGE`,`READINESS_TIMEOUT`,`SOURCE_FAILED`,`BROWSER_CRASH`,`CAPTURE_FAILED`,`CONVERSION_FAILED`,`PREPARATION_FAILED`,`UPLOAD_FAILED`,`WORKER_UNAVAILABLE`,`CANCELLED`,`EXPIRED`,`INTERNAL`],rr=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`],ir=n.number().int().positive(),ar=n.object({x:n.number(),y:n.number(),width:n.number().positive(),height:n.number().positive()}),w=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`content`)}),n.object({kind:n.literal(`page`),pageId:n.string().min(1)}),n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`bounds`),bounds:ar})]),or=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),sr=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative()}),cr=n.object({recordingId:n.uuid(),atMs:n.number().int().nonnegative(),screenId:n.uuid(),screenNodeId:n.string().min(1),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()}),box:ar,version:n.number().int().positive(),alreadyPresent:n.boolean()}),lr=n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),scope:n.strictObject({pageId:n.string().min(1).optional(),nodeIds:n.array(n.string().min(1))}).optional(),target:w.default({kind:`content`}),sourceState:or.optional(),scale:n.number().positive().default(1),maxOutputPixels:ir.optional(),format:n.literal(`png`).default(`png`)}).refine(e=>e.sourceState===void 0||e.target.kind===`node`,{message:`a source state requires a node render target`,path:[`sourceState`]}),ur=n.enum(er),dr=n.enum(tr),fr=n.enum(nr),pr=n.enum(rr),mr=n.object({code:pr,message:n.string().min(1).max(500),sourceId:n.string().min(1).nullable()}),hr=n.object({reason:fr,phase:ur,message:n.string().min(1).max(500),retryable:n.boolean(),sourceId:n.string().min(1).nullable()}),gr=n.object({phase:ur,durationMs:n.number().int().min(0)}),_r=n.object({canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),target:w,sourceState:sr.optional(),snapshot:cr.optional(),bounds:ar,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive(),contentType:n.literal(`image/png`),bytes:n.number().int().positive(),warnings:n.array(mr),timings:n.array(gr),expiresAt:n.iso.datetime()}),vr=n.object({id:n.uuid(),canvasId:n.uuid(),purpose:n.enum([`inspection`,`snapshot`,`thumbnail`]),phase:ur,requestedVersion:n.number().int().positive(),target:w,sourceState:or.optional(),scale:n.number().positive(),maxOutputPixels:ir.optional(),format:n.literal(`png`),attempt:n.number().int().min(0),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),yr=n.discriminatedUnion(`state`,[vr.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),vr.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),vr.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:_r,failure:n.null()}),vr.extend({state:n.literal(`failed`),result:n.null(),failure:hr}),vr.extend({state:n.literal(`cancelled`),result:n.null(),failure:hr.extend({reason:n.literal(`CANCELLED`)})}),vr.extend({state:n.literal(`expired`),result:n.null(),failure:hr.extend({reason:n.literal(`EXPIRED`)})})]),br=n.object({job:yr,alreadyExists:n.boolean()}),xr=n.object({jobId:n.uuid()}),Sr=n.object({job:yr}),Cr=n.object({jobId:n.uuid()}),wr=n.object({job:yr}),Tr=n.object({jobId:n.uuid()}),Er=n.object({jobId:n.uuid(),download:Et}),Dr=n.strictObject({previewJobId:n.uuid(),scope:n.strictObject({pageId:n.string().min(1).optional(),nodeIds:n.array(n.string().min(1))}),placement:n.strictObject({kind:n.literal(`below-source`)})}),Or=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative(),context:n.strictObject({expectedVersion:n.number().int().positive(),request:Dr}).optional()}),kr=n.object({job:yr,alreadyExists:n.boolean()}),Ar=n.object({rootIds:n.array(n.string().min(1))}),jr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`adjacent`)}),n.object({kind:n.literal(`insert-children`),pageId:n.string().min(1).optional(),targetNodeId:n.string().min(1)}),n.object({kind:n.literal(`replace`),targetNodeId:n.string().min(1)})]),Mr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`screen`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`html`),html:n.string().min(1),label:n.string().min(1),idPrefix:n.string().min(1).regex(/^[\w-]+$/u).optional()})]),Nr=n.object({source:Mr,destination:jr,revisionPolicy:n.enum([`strict`,`rebase`]).optional()}).superRefine((e,t)=>{e.source.kind===`screen`&&e.destination.kind!==`adjacent`&&t.addIssue({code:`custom`,message:`stored screens convert beside their source`,path:[`destination`]}),e.source.kind===`html`&&e.destination.kind===`adjacent`&&t.addIssue({code:`custom`,message:`authored HTML requires an editable destination`,path:[`destination`]})}),Pr=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`screen`),nodeId:n.string().min(1)}),n.object({kind:n.literal(`html`),label:n.string().min(1)})]),Fr=n.object({id:n.uuid(),canvasId:n.uuid(),source:Pr,destination:jr,phase:ur,requestedVersion:n.number().int().positive(),attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Ir=n.discriminatedUnion(`state`,[Fr.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),Fr.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),Fr.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:$n.extend({report:Jn}),failure:n.null()}),Fr.extend({state:n.literal(`failed`),result:n.null(),failure:hr}),Fr.extend({state:n.literal(`cancelled`),result:n.null(),failure:hr.extend({reason:n.literal(`CANCELLED`)})}),Fr.extend({state:n.literal(`expired`),result:n.null(),failure:hr.extend({reason:n.literal(`EXPIRED`)})})]),Lr=Nr.and(n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),mutationId:n.uuid().optional(),writeScope:Ar.optional(),scope:lr.shape.scope})).refine(e=>e.scope===void 0&&e.revisionPolicy!==`strict`||e.expectedVersion!==void 0,{message:`scoped or strict conversion requires an expected version`,path:[`expectedVersion`]}),Rr=n.object({job:Ir,alreadyExists:n.boolean()}),zr=n.object({jobId:n.uuid()}),Br=n.object({job:Ir}),Vr=n.object({jobId:n.uuid()}),Hr=n.object({job:Ir});n.discriminatedUnion(`state`,[n.object({state:n.literal(`loading`),jobId:n.uuid()}),n.object({state:n.literal(`ready`),jobId:n.uuid(),loadedVersion:n.number().int().positive(),draft:Zn}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const Ur=n.object({add:n.array(n.object({resourceId:n.string().min(1)}).catchall(n.unknown())),remove:n.array(n.string().min(1))}),T=n.union([n.string(),m]),E=n.union([b.shape.value,m]).nullable().optional(),Wr=n.strictObject({border:E,"border-block":E,"border-block-color":E,"border-block-style":E,"border-block-width":E,"border-block-end":E,"border-block-end-color":E,"border-block-end-style":E,"border-block-end-width":E,"border-block-start":E,"border-block-start-color":E,"border-block-start-style":E,"border-block-start-width":E,"border-bottom":E,"border-bottom-color":E,"border-bottom-style":E,"border-bottom-left-radius":T.optional(),"border-bottom-right-radius":T.optional(),"border-bottom-width":T.optional(),"border-color":n.string().nullable().optional(),"border-image":E,"border-image-source":E,"border-image-slice":E,"border-image-width":E,"border-image-outset":E,"border-image-repeat":E,"border-inline":E,"border-inline-color":E,"border-inline-style":E,"border-inline-width":E,"border-inline-end":E,"border-inline-end-color":E,"border-inline-end-style":E,"border-inline-end-width":E,"border-inline-start":E,"border-inline-start-color":E,"border-inline-start-style":E,"border-inline-start-width":E,"border-left":E,"border-left-color":E,"border-left-style":E,"border-left-width":T.optional(),"border-radius":T.nullable().optional(),"border-right":E,"border-right-color":E,"border-right-style":E,"border-right-width":T.optional(),"border-style":E,"border-top":E,"border-top-color":E,"border-top-style":E,"border-top-left-radius":T.optional(),"border-top-right-radius":T.optional(),"border-top-width":T.optional(),"border-width":T.nullable().optional(),outline:E,"outline-color":E,"outline-style":E,"outline-offset":T.optional(),"outline-width":T.optional()}),Gr=n.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Kr=n.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),qr=b.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Jr=n.union([y.shape.weight,n.enum([`normal`,`bold`,`bolder`,`lighter`]),n.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>y.shape.weight.safeParse(Number(e)).success)]),D={color:qr,"font-family":b.shape.value,"font-size":n.union([h,Gr]),"font-weight":Jr,"font-style":n.enum([`normal`,`italic`,`oblique`]),"letter-spacing":m,"line-height":n.union([n.number().positive(),n.string().regex(/^(?:\d+(?:\.\d+)?(?:px|em|rem|%)?|normal)$/u)]),"text-align":n.enum([`left`,`center`,`right`]),"white-space":n.enum([`normal`,`nowrap`,`pre`,`pre-wrap`,`pre-line`,`break-spaces`])},Yr=n.strictObject({color:D.color.optional(),"font-family":D[`font-family`].optional(),"font-size":D[`font-size`].optional(),"font-weight":D[`font-weight`].optional(),"font-style":D[`font-style`].optional(),"letter-spacing":D[`letter-spacing`].optional(),"line-height":D[`line-height`].optional(),"text-align":D[`text-align`].optional(),"white-space":D[`white-space`].optional()}),Xr=n.union([b.shape.value,m]).nullable().optional(),Zr=n.strictObject({"text-decoration":Xr,"text-decoration-line":Xr,"text-decoration-style":Xr,"text-decoration-color":Xr,"text-decoration-thickness":Xr,"text-underline-offset":Xr,"text-decoration-skip-ink":Xr,color:D.color.nullable().optional(),"font-family":D[`font-family`].nullable().optional(),"font-size":D[`font-size`].nullable().optional(),"font-weight":D[`font-weight`].nullable().optional(),"font-optical-sizing":n.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":b.shape.value.nullable().optional(),"font-feature-settings":b.shape.value.nullable().optional(),"text-wrap":b.shape.value.nullable().optional(),"text-wrap-mode":b.shape.value.nullable().optional(),"text-wrap-style":b.shape.value.nullable().optional(),"text-box":b.shape.value.nullable().optional(),"text-box-trim":b.shape.value.nullable().optional(),"text-box-edge":b.shape.value.nullable().optional(),"font-style":D[`font-style`].nullable().optional(),"font-stretch":n.union([n.enum([`normal`,`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`]),n.string().regex(/^\d+(?:\.\d+)?%$/u)]).nullable().optional(),"letter-spacing":n.union([m,Kr,n.literal(`normal`)]).nullable().optional(),"line-height":D[`line-height`].nullable().optional(),"text-align":D[`text-align`].nullable().optional(),"text-indent":n.union([m,Kr]).nullable().optional(),"white-space":D[`white-space`].nullable().optional(),"word-spacing":n.union([m,Kr,n.literal(`normal`)]).nullable().optional()}),Qr=b.shape.value,O=n.union([n.string(),m]),k=n.union([b.shape.value,m]).nullable().optional(),$r=Zr.extend(Wr.shape).extend({"align-content":k,"align-items":k,"align-self":k,"aspect-ratio":k,"block-size":k,bottom:k,"box-sizing":k,display:k,flex:k,"flex-basis":k,"flex-direction":k,"flex-grow":k,"flex-shrink":k,"flex-wrap":k,height:k,"inline-size":k,inset:k,"inset-block":k,"inset-block-end":k,"inset-block-start":k,"inset-inline":k,"inset-inline-end":k,"inset-inline-start":k,"justify-content":k,left:k,margin:k,"margin-block":k,"margin-block-end":k,"margin-block-start":k,"margin-inline":k,"margin-inline-end":k,"margin-inline-start":k,"max-block-size":k,"max-height":k,"max-inline-size":k,"max-width":k,"min-block-size":k,"min-height":k,"min-inline-size":k,"min-width":k,order:k,padding:k,"padding-block":k,"padding-block-end":k,"padding-block-start":k,"padding-inline":k,"padding-inline-end":k,"padding-inline-start":k,position:k,right:k,top:k,width:k,background:n.string().nullable().optional(),"background-color":n.string().nullable().optional(),"box-shadow":n.string().nullable().optional(),"column-gap":O.optional(),gap:O.optional(),"margin-bottom":O.optional(),"margin-left":O.optional(),"margin-right":O.optional(),"margin-top":O.optional(),opacity:n.union([n.string(),n.number()]).nullable().optional(),overflow:Qr.nullable().optional(),"overflow-x":Qr.nullable().optional(),"overflow-y":Qr.nullable().optional(),"padding-bottom":O.optional(),"padding-left":O.optional(),"padding-right":O.optional(),"padding-top":O.optional(),"row-gap":O.optional(),"stroke-width":O.optional()}),ei=n.union([$r.keyof(),b.shape.property.refine(e=>e.startsWith(`--`))]),ti=$r.catchall(k).refine(e=>Object.keys(e).every(e=>ei.safeParse(e).success)),ni=n.record(n.string(),n.unknown()),ri=n.number().int().positive(),ii=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`retain`),count:ri,attributes:ni.optional()}),n.object({kind:n.literal(`delete`),count:ri}),n.object({kind:n.literal(`insert`),text:n.string().min(1).refine(e=>e.isWellFormed()),attributes:ni.optional()})]),ai=n.object({baseLength:n.number().int().nonnegative(),representation:n.enum([`plain`,`rich`,`links`]).optional(),steps:n.array(ii),endAttributes:ni.optional(),properties:ni.refine(e=>[`text`,`richText`,`links`].every(t=>!Object.hasOwn(e,t))).optional()}).superRefine((e,t)=>{let n=0;for(let t of e.steps)t.kind!==`insert`&&(n+=t.count);n!==e.baseLength&&t.addIssue({code:`custom`,message:`text change must consume its exact base`})}),oi=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),isActive:n.boolean()}),si=n.object({baseVersion:n.number().int().nonnegative(),after:n.array(n.string().min(1)),change:ai}),ci=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),originalChange:ai,inverse:ai,history:oi.optional(),source:si.optional()}),li=n.object({op:n.literal(`editText`),nodeId:n.string().min(1),change:ai,actionId:n.string().min(1).optional(),revision:ci.optional(),history:oi.optional(),source:si.optional()}),ui=y.pick({family:!0,fallbackFamilies:!0,size:!0,weight:!0,style:!0,variations:!0,opticalSize:!0,features:!0,lineHeight:!0,letterSpacing:!0,transform:!0,decoration:!0,paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,hangingList:!0,hangingPunctuation:!0,verticalTrim:!0,wrapStyle:!0}).strict(),di=ui.keyof().options,fi=n.object({id:n.string().min(1),name:n.string().trim().min(1),description:n.string().max(2e3),sortKey:n.string().min(1).optional(),sourceStyleId:n.string().min(1).optional(),sourceCanvasId:n.uuid().optional(),sourceRevision:n.number().int().positive().optional(),typography:ui.extend({listStyle:y.shape.listStyle}).transform(e=>(Reflect.deleteProperty(e,`listStyle`),e))}).strict().refine(e=>e.sourceCanvasId===void 0||e.sourceStyleId!==void 0,{message:`A source canvas belongs to a reference snapshot.`,path:[`sourceCanvasId`]}).refine(e=>e.sourceRevision===void 0||e.sourceCanvasId!==void 0&&e.sourceStyleId!==void 0,{message:`A published revision belongs to a source style and canvas.`,path:[`sourceRevision`]}),pi=n.object({id:fi.shape.id,position:n.enum([`normal`,`subscript`,`superscript`]).optional(),overrides:n.partialRecord(n.enum([`fontWeight`,`fontStyle`,`fontVariationSettings`,`fontOpticalSizing`,`textDecorationLine`,`textDecorationStyle`,`textDecorationColor`,`textDecorationThickness`,`textUnderlineOffset`,`textDecorationSkipInk`]),n.union([n.string().max(1e3),n.number()])).optional()}).strict(),mi=2e3,hi=n.object({title:n.string().trim().min(1).max(200)}).strict(),gi=n.array(fi.shape.id),_i=n.object({canvasId:n.uuid()}),vi=n.object({definition:fi.refine(e=>e.sourceStyleId===void 0),revision:n.number().int().positive(),fontFaces:n.array(n.record(n.string(),n.unknown()))}),yi=n.object({styles:n.array(vi).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)}),bi=_i.extend({revision:n.number().int().positive(),documentVersion:n.number().int().positive(),description:n.string().max(mi),publishedAt:n.iso.datetime(),...yi.shape}),xi=_i.extend({mutationId:n.uuid(),expectedRevision:n.number().int().nonnegative(),documentVersion:n.number().int().positive(),publish:gi,remove:gi,description:n.string().trim().max(mi)}).strict().refine(e=>{let t=[...e.publish,...e.remove];return t.length>0&&new Set(t).size===t.length},{message:`Select each changed style once.`}),Si=n.object({canvasId:n.uuid(),title:n.string().max(200)}),Ci=n.object({search:n.string().trim().max(200).default(``),cursor:Si.nullable().default(null),limit:n.number().int().min(1).max(50).default(20)}),wi=n.object({canvasId:n.uuid(),title:n.string(),organisationId:n.uuid().nullable(),revision:n.number().int().positive(),styleCount:n.number().int().positive(),publishedAt:n.iso.datetime()}),Ti=n.object({items:n.array(wi).max(50),nextCursor:Si.nullable()}),Ei=n.object({parentId:n.string().min(1),sortKey:n.string().min(1)}),Di=n.object({op:n.literal(`insertConvertedSubtree`),destination:jr,sourceNodeId:n.string().min(1).optional(),rootNodeId:n.string().min(1),nodes:n.record(n.string().min(1),C),relationships:n.record(n.string().min(1),Ei)}),A=n.string().min(1),Oi=n.string().min(1),ki=S.extend({width:n.number().positive(),height:n.number().positive()}),Ai=n.object({parentId:A,afterId:A.optional()}),ji=n.object({parentId:A,sortKey:Oi}),Mi=n.object({op:n.literal(`setStyles`),nodeId:A,styles:ti,clear:n.array(ei).min(1).max(Object.keys(ti.shape).length).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),Ni=n.discriminatedUnion(`op`,[Di,n.object({op:n.literal(`insertNode`),node:C,parentage:ji,prototypeSource:n.object({canvasId:n.uuid(),nodeId:A,documentVersion:n.number().int().nonnegative(),versionEntryId:n.uuid().optional()}).optional()}),Ai.extend({op:n.literal(`insertText`),nodeId:A,label:n.string().default(`Text`),text:n.string(),box:ki,styles:Yr.default({})}),Ai.extend({op:n.literal(`insertPrototype`),nodeId:A,label:n.string().default(`Prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),box:ki,canvasPageId:A.optional()}),n.object({op:n.literal(`setPrototypeDeployment`),nodeId:A,prototypeId:n.uuid(),deploymentId:n.uuid()}),li,n.object({op:n.literal(`setText`),nodeId:A,text:n.string()}),n.object({op:n.literal(`setBox`),nodeId:A,box:n.union([S,n.literal(`default`)])}),n.object({op:n.literal(`setLabel`),nodeId:A,label:n.string().trim().min(1),labelOrigin:Vn.nullable().optional()}),n.object({op:n.literal(`setContainerKind`),nodeId:A,component:n.enum([`frame`,`group`])}),n.object({op:n.literal(`setVisibility`),nodeId:A,visible:n.boolean().nullable()}),n.object({op:n.literal(`setLocked`),nodeId:A,locked:n.boolean().nullable()}),n.object({op:n.literal(`setConstraints`),nodeId:A,constraints:Bn.nullable()}),Mi,n.object({op:n.literal(`setAppearance`),nodeId:A,appearance:lt}),n.object({op:n.literal(`setLayout`),nodeId:A,layout:n.union([Ue,n.literal(`default`)])}),n.object({op:n.literal(`patchTypography`),nodeId:A,typography:_t}),n.object({op:n.literal(`setTypography`),nodeId:A,typography:n.union([ht,n.literal(`default`)])}),n.object({op:n.literal(`patchAdditionalStyles`),nodeId:A,additionalStyles:Tt}),n.object({op:n.literal(`setAdditionalStyles`),nodeId:A,additionalStyles:n.union([Ct,n.literal(`default`)])}),n.object({op:n.literal(`setTextStyleLibrary`),nodeId:n.literal(`root`),sourceCanvasId:n.uuid(),library:hi.nullable()}),n.object({op:n.literal(`patchFontLibrary`),nodeId:n.literal(`root`),fonts:Ur}),n.object({op:n.literal(`setTextStyle`),nodeId:n.literal(`root`),styleId:fi.shape.id,textStyle:fi.nullable(),changedTextNodeIds:n.array(A).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),n.object({op:n.literal(`setGeometry`),nodeId:A,geometry:n.union([Ln,n.literal(`default`)])}),n.object({op:n.literal(`setProps`),nodeId:A,props:n.union([n.record(n.string(),n.unknown()),n.literal(`default`)])}),n.object({op:n.literal(`setParentage`),nodeId:A,parentage:ji}),Ai.extend({op:n.literal(`move`),nodeId:A}),n.object({op:n.literal(`remove`),nodeId:A,removedText:n.record(A,C.pick({props:!0})).optional()})]),Pi=$n.extend({operation:Di,next:n.array(n.string().min(1))}),Fi=n.record(n.string(),n.unknown()),Ii=n.object({canvasId:n.uuid(),afterVersion:n.number().int().positive().optional()}),Li=n.object({screenId:n.uuid(),route:n.string().nullable(),title:n.string().nullable(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()}),atMs:n.number().int().min(0).nullable(),sourceRecordingId:n.uuid().nullable(),assetBundle:n.object({assetBundleId:n.uuid(),sourceUrl:n.string(),assets:n.array(n.object({url:n.string(),contentType:n.string().max(200),path:n.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:n.number().int().min(0)}).nullable(),download:Et.nullable()}),Ri=n.object({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(Ni)}),zi=n.object({mutations:n.array(Ri).optional(),version:n.number().int().min(1),document:Fi,screens:n.array(Li)}),Bi=n.object({canvasId:n.uuid(),baseVersion:n.number().int().min(1),document:Fi.refine(e=>Hn.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:n.array(n.uuid())}),Vi=n.discriminatedUnion(`outcome`,[n.object({outcome:n.literal(`saved`),version:n.number().int().min(1)}),n.object({outcome:n.literal(`conflict`),version:n.number().int().min(1),document:Fi})]),Hi=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Ui=(e,t,n)=>{if(!Hi(e)||typeof e.data!=`string`)return e;let r=n(e.data,t);return r===e.data?e:{...e,data:r}},Wi=(e,t)=>{if(!Hi(e)||!Array.isArray(e.sources))return e;let n=e.sources,r=n.map(n=>Ui(n,e,t));return r.every((e,t)=>e===n[t])?e:{...e,sources:r}},Gi=(e,t)=>{if(!Array.isArray(e?.fontFaces))return e;let n=e.fontFaces,r=n.map(e=>Wi(e,t));return r.every((e,t)=>e===n[t])?e:{...e,fontFaces:r}},Ki=new Set(`alignItems.backgroundColor.borderBottom.borderBottomLeftRadius.borderBottomRightRadius.borderLeft.borderRight.borderTop.borderTopLeftRadius.borderTopRightRadius.boxShadow.boxSizing.color.columnGap.display.flexDirection.fontFamily.fontFeatureSettings.fontOpticalSizing.fontSize.fontStretch.fontStyle.fontVariant.fontVariantCaps.fontVariantLigatures.fontVariantNumeric.fontVariantPosition.fontKerning.fontVariationSettings.fontWeight.justifyContent.letterSpacing.lineHeight.marginBottom.marginLeft.marginRight.marginTop.opacity.paddingBottom.paddingLeft.paddingRight.paddingTop.rowGap.textDecorationColor.textDecorationLine.textDecorationSkipInk.textDecorationStyle.textDecorationThickness.textShadow.textTransform.textUnderlineOffset.verticalAlign.whiteSpace.WebkitTextStrokeColor.WebkitTextStrokeWidth.--canvas-text-stroke-alignment`.split(`.`)),qi=Qe.array().optional(),Ji=mt.pick({paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,wrapStyle:!0}).extend({hangingPunctuation:y.shape.hangingPunctuation,verticalTrim:y.shape.verticalTrim}).strip(),Yi=new Set([`http:`,`https:`,`mailto:`,`tel:`]),Xi=e=>{let t=e.trim();if(t===``)return!1;try{let e=new URL(t,`https://enhance.invalid/`).protocol;return Yi.has(e)}catch{return!1}},Zi=e=>typeof e==`string`&&Xi(e)?e:void 0,Qi=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Object.entries(e);return t.some(([e,t])=>!Ki.has(e)||typeof t!=`string`&&typeof t!=`number`)?null:Object.fromEntries(t)},$i=e=>{let t=Reflect.get(e,`sourcePath`);return{...Object.fromEntries(Object.entries(e).filter(([e])=>![`text`,`href`,`sourcePath`,`styles`,`fills`,`paragraph`,`paragraphSpacing`,`paragraphIndent`,`listSpacing`,`hangingPunctuation`,`verticalTrim`,`wrapStyle`,`soft`,`textStyle`].includes(e))),...typeof t==`string`&&{sourcePath:t}}},ea=e=>{let t=[],n=e.toReversed().map(e=>({value:e,target:t})),r=new Set;for(;n.length>0;){let e=n.pop();if(e===void 0)continue;if(`done`in e){r.delete(e.done);continue}let t=[],i=na(e.value,t);if(i===null)return null;if(e.target.push(i),i.kind!==`span`)continue;let a=e.value;if(typeof a!=`object`||!a||r.has(a))return null;r.add(a),n.push({done:a});let o=Reflect.get(a,`children`);if(!Array.isArray(o))return null;let s=o;for(let e of s.toReversed())n.push({value:e,target:t})}return t},ta=e=>{let t=Reflect.get(e,`soft`);return t!==void 0&&t!==!0?null:{...$i(e),kind:`break`,...t===!0&&{soft:t}}},na=(e,t)=>{if(typeof e!=`object`||!e)return null;let n=Reflect.get(e,`kind`),r=$i(e);if(n===`break`)return ta(e);if(n===`text`){let t=Reflect.get(e,`text`);return typeof t==`string`?{...r,kind:n,text:t}:null}if(n!==`span`)return null;let i=Reflect.get(e,`children`),a=Qi(Reflect.get(e,`styles`)),o=qi.safeParse(Reflect.get(e,`fills`)),s=mt.optional().safeParse(Reflect.get(e,`paragraph`)),c=Ji.safeParse(e),l=pi.optional().safeParse(Reflect.get(e,`textStyle`));if(a===null||!o.success||!s.success||!c.success||!l.success||!Array.isArray(i))return null;let ee=Zi(Reflect.get(e,`href`));return{...r,kind:n,styles:a,children:t,...l.data!==void 0&&{textStyle:l.data},...o.data!==void 0&&{fills:o.data},...s.data!==void 0&&{paragraph:s.data},...Object.fromEntries(Object.entries(c.data).filter(([,e])=>e!==void 0)),...ee!==void 0&&{href:ee}}},ra=e=>e.kind===`text`?e.text:e.soft===!0?`\u2028`:`
3
3
  `,ia=e=>{let t=e.toReversed(),n=[];for(;t.length>0;){let e=t.pop();if(e===void 0)break;if(e.kind===`span`)for(let n of e.children.toReversed())t.push(n);else n.push(ra(e))}return n.join(``)},aa=e=>{let t=e.props;if(t===void 0||!Array.isArray(t.richText))return[];let n=ea(t.richText);if(n===null)return[];let r=t.text;return ia(n)===r?n:[]},oa=n.object({start:n.number().int().nonnegative(),end:n.number().int().positive(),href:n.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))}),sa=n.object({text:n.string(),links:n.array(oa).optional()}),ca=(e,t)=>{let n=e.start-t.start;return n===0?e.end-t.end:n},la=e=>sa.safeParse(e.props).data?.text??null,ua=e=>{let t=sa.safeParse(e.props).data;if(t===void 0)return[];let n=t.links;if(n===void 0)return[];let r=n.filter(({start:e,end:n})=>e<n&&n<=t.text.length).toSorted(ca),i=[];for(let e of r)(i.at(-1)?.end??0)<=e.start&&i.push(e);return i},da=n.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),fa=n.object({id:n.string().min(1),label:n.string().max(500),kind:n.string().min(1).max(100),parentId:n.string().min(1).nullable(),childCount:n.number().int().min(0),box:ar.nullable(),propertySections:n.array(da)}),pa=n.object({canvasId:n.uuid()}),ma=n.object({canvasId:n.uuid(),openUrl:n.url(),title:n.string().min(1),version:n.number().int().positive(),nodeCount:n.number().int().min(0),rootChildCount:n.number().int().min(0),bounds:ar.nullable(),kinds:n.record(n.string(),n.number().int().min(0)),next:n.array(n.string().min(1))}),ha=n.object({canvasId:n.uuid()}),ga=n.object({canvasId:n.uuid(),version:n.number().int().positive(),nodes:n.array(fa)}),_a=n.object({canvasId:n.uuid(),nodeId:n.string().min(1)}),va=n.object({canvasId:n.uuid(),version:n.number().int().positive(),node:fa.extend({styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Ue.optional(),appearance:ot.optional(),typography:ht.optional(),additionalStyles:Ct.optional(),props:n.record(n.string(),n.unknown()),children:n.array(n.string().min(1))}),next:n.array(n.string().min(1))}),ya=[[`alignSelf`,`align-self`],[`order`,`order`],[`flexGrow`,`flex-grow`],[`flexShrink`,`flex-shrink`],[`flexBasis`,`flex-basis`],[`aspectRatio`,`aspect-ratio`]],ba=[[`direction`,`flex-direction`],[`wrap`,`flex-wrap`],[`alignItems`,`align-items`],[`alignContent`,`align-content`],[`justifyContent`,`justify-content`],[`rowGap`,`row-gap`],[`columnGap`,`column-gap`]],xa=[`top`,`right`,`bottom`,`left`],Sa=(e,t,n)=>{let r={...e};for(let e of xa)n.has(`${t}-${e}`)&&Reflect.deleteProperty(r,e);return r},Ca=(e,t)=>{let n=new Set([...t].flatMap(e=>nn(e))),r={...e};for(let[e,t]of ya)n.has(t)&&Reflect.deleteProperty(r,e);if(r.margin!==void 0&&(r.margin=Sa(r.margin,`margin`,n)),r.container===void 0)return r;let i={...r.container};(n.has(`row-gap`)||n.has(`column-gap`))&&i.gap!==void 0&&(i.rowGap??=i.gap,i.columnGap??=i.gap,Reflect.deleteProperty(i,`gap`));for(let[e,t]of ba)n.has(t)&&Reflect.deleteProperty(i,e);return i.padding!==void 0&&(i.padding=Sa(i.padding,`padding`,n)),n.has(`grid-template-columns`)&&(Reflect.deleteProperty(i,`gridColumns`),Reflect.deleteProperty(i,`gridAutoRepeat`)),r.container=i,r},wa=(e,t,n)=>{if(e===void 0||e.mode===`fixed`)return e;let r={...e};for(let e of[`min`,`max`])t.every(t=>!n.has(`${e}-${t}`))||(Reflect.deleteProperty(r,e),Reflect.deleteProperty(r,`${e}Parent`));return r},Ta=(e,t,n)=>{let r=new Set([...t].flatMap(e=>nn(e))),i=Ca(e,r);if([`overflow`,`overflow-x`,`overflow-y`].some(e=>r.has(e))&&Reflect.deleteProperty(i,`clipContent`),r.has(`position`)&&Reflect.deleteProperty(i,`position`),r.has(`transform`))for(let e of[`rotation`,`flipHorizontal`,`flipVertical`])Reflect.deleteProperty(i,e);[`inset`,`left`,`right`,`top`,`bottom`].some(e=>r.has(e))&&Reflect.deleteProperty(i,`flowOffset`);for(let e of[`horizontal`,`vertical`]){let t=n[e].some(e=>r.has(e))?void 0:wa(i[e],n[e],r);t===void 0?Reflect.deleteProperty(i,e):i[e]=t}return i},Ea=C.shape.id,Da=S.extend({width:n.number().positive(),height:n.number().positive()}),Oa=n.record(Ea,Ea),ka=n.strictObject({fingerprint:n.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:n.enum([`strict`,`rebase`]),copiedNodeIds:Oa.optional()}),Aa=n.object({canvasId:n.uuid(),mutationId:n.uuid(),documentFormatVersion:Rn,baseVersion:n.number().int().positive(),operations:n.array(Ni).min(1),requestContext:ka.optional(),writeScope:Ar.optional()}),ja=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(Ni),insertedNodeIds:n.array(Ea),changedNodeIds:n.array(Ea),removedNodeIds:n.array(Ea),boxes:n.record(Ea,S),affectedBounds:Da.nullable(),copiedNodeIds:Oa.optional(),next:n.array(n.string().min(1))}),Ma=n.strictObject({canvasId:n.uuid(),mutationId:n.uuid(),fingerprint:ka.shape.fingerprint}),Na=n.discriminatedUnion(`state`,[n.strictObject({state:n.literal(`not-found`)}),n.strictObject({state:n.literal(`committed`),result:ja})]),Pa={nodes:1e3,fields:20,id:200,label:500,value:1e3},Fa=n.object({available:n.boolean(),omittedNodes:n.number().int().nonnegative(),nodes:n.array(n.object({nodeId:n.string().min(1),label:n.string().max(Pa.label),kind:n.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:n.number().int().nonnegative(),fields:n.array(n.object({label:n.string().max(Pa.id),before:n.string().max(Pa.value).nullable(),after:n.string().max(Pa.value).nullable(),truncated:n.boolean()})).max(Pa.fields)})).max(Pa.nodes)}),Ia=`page`,La=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],Ra=[`position`,`layout`,`clip`,...La.filter(e=>e!==`position`&&e!==`layout`)],za=[...La,`vector`],Ba=Object.fromEntries([{objectKind:`prototype`,label:`Prototype`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1,commentAnchor:`node`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`]},{objectKind:`root`,label:`Canvas`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!0,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:Ia,label:`Page`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!1,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:`screen`,label:`Screen`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1,commentAnchor:`screen`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`source`]},{objectKind:`frame`,label:`Frame`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:Ra},{objectKind:`group`,label:`Group`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`blending`,`additionalStyles`,`export`]},{objectKind:`rectangle`,label:`Rectangle`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:La},{objectKind:`image`,label:`Image`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:La},{objectKind:`svg`,label:`SVG`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:za},{objectKind:`recording`,label:`Recording`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!1},capture:{preservesAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:[]},{objectKind:`text`,label:`Text`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`text`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!1},propertySections:[`position`,`layout`,`typography`,`nativeControl`,`textDecoration`,`textStroke`,`blending`,`fill`,`outerShadow`,`filters`,`additionalStyles`,`export`]}].map(e=>[e.objectKind,e])),Va=e=>Ba[e]??null,Ha=e=>Va(e)?.propertySections??[],j=C.shape.id,Ua=n.array(j).min(1),Wa=n.strictObject({x:n.number(),y:n.number()}),Ga=n.strictObject({width:n.number().positive().optional(),height:n.number().positive().optional()}).refine(e=>e.width!==void 0||e.height!==void 0,{message:`Specify width, height, or both.`}),Ka=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`position`),nodeId:j,parentPosition:Wa}),n.strictObject({kind:n.literal(`resize`),nodeId:j,size:Ga}),n.strictObject({kind:n.literal(`relative-position`),nodeId:j,referenceNodeId:j,side:n.enum([`above`,`below`,`left`,`right`]),gap:n.number().nonnegative(),align:n.enum([`start`,`center`,`end`])}),n.strictObject({kind:n.literal(`move`),nodeIds:Ua,targetNodeId:j,position:n.enum([`before`,`inside`,`after`])}),n.strictObject({kind:n.literal(`group`),nodeIds:Ua,label:n.string().min(1).optional()}),n.strictObject({kind:n.literal(`ungroup`),nodeIds:Ua}),n.strictObject({kind:n.literal(`label`),nodeId:j,label:n.string().min(1)}),n.strictObject({kind:n.literal(`visibility`),nodeId:j,visible:n.boolean()}),n.strictObject({kind:n.literal(`lock`),nodeId:j,locked:n.boolean()})]),qa=n.strictObject({kind:n.literal(`arrange`),changes:n.array(Ka).min(1)}),Ja=n.strictObject({kind:n.literal(`duplicate`),nodeIds:Ua,destination:n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`native`)}),n.strictObject({kind:n.literal(`inside`),parentId:j})])}),Ya=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`compile-screens`),sources:n.array(n.strictObject({screenId:n.uuid(),captureId:n.uuid(),label:n.string().min(1)})).min(1)}),qa,Ja,n.strictObject({kind:n.literal(`compile-html`),contextOperations:n.array(Ni).refine(e=>e.every(e=>`nodeId`in e&&![`remove`,`move`,`setParentage`,`insertText`,`insertPrototype`,`insertNode`,`insertConvertedSubtree`].includes(e.op)),`Compilation context may update retained fields only.`),fragments:n.array(n.strictObject({id:j,parentNodeId:j,html:n.string().min(1)})).min(1).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`HTML fragment ids must be unique.`)})]),Xa=n.strictObject({pageId:j.optional(),nodeIds:n.array(j)}),Za=n.strictObject({request:Ya,scope:Xa}),Qa=n.strictObject({operations:n.array(Ni),idMap:n.record(j,j),rootNodeIds:n.array(j)}),$a=Qa.extend({compilations:n.array(n.strictObject({id:j,draft:Zn})).optional()});n.discriminatedUnion(`state`,[n.object({state:n.literal(`loading`),jobId:n.uuid()}),n.object({state:n.literal(`ready`),jobId:n.uuid(),loadedVersion:n.number().int().positive(),plan:$a}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const eo=n.object({id:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),request:Ya,scope:Xa,phase:ur,attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),to=n.discriminatedUnion(`state`,[eo.extend({state:n.enum([`queued`,`running`]),result:n.null(),failure:n.null()}),eo.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Qa.extend({loadedVersion:n.number().int().positive()}),failure:n.null()}),eo.extend({state:n.enum([`failed`,`cancelled`,`expired`]),result:n.null(),failure:hr})]),no=n.strictObject({canvasId:n.uuid(),expectedVersion:n.number().int().positive(),request:Ya,scope:Xa}),ro=n.object({job:to,alreadyExists:n.boolean()}),io=n.object({jobId:n.uuid()}),ao=n.object({job:to}),oo=`x-enhance-agent-client`,so=n.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),co=n.strictObject({path:n.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:so.optional(),version:so.optional()}),lo=co.pick({path:!0}).strip(),uo=n.strictObject({agent_client:n.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:co.shape.path,identity_source:n.enum([`mcp_client_info`,`documented_cli_fallback`,`unavailable`]),auth_method:n.enum([`personal_agent_token`,`mcp_oauth`]),agent_client_version:so.optional()}),fo=e=>{let t=co.safeParse(e);if(t.success)return t.data;let n=lo.safeParse(e);return{path:n.success?n.data.path:`direct_cli`}},po=`enhance3.canvas.v1`,mo=16384,ho=n.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),go=n.object({kind:n.literal(`person`),connectionId:n.uuid(),personId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),avatarUrl:n.string().max(oe).nullable().optional(),colour:ho}),_o=n.object({kind:n.literal(`guest`),connectionId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),colour:ho}),vo=n.discriminatedUnion(`kind`,[go,_o]),yo=n.object({kind:n.literal(`agent`),personId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),tokenLabel:n.string().min(1).max(100),agentAttribution:uo.optional(),colour:ho}),bo=n.discriminatedUnion(`kind`,[go.omit({connectionId:!0,avatarUrl:!0}),yo]),xo=n.object({x:n.number(),y:n.number()}),So=S.extend({width:n.number().positive(),height:n.number().positive()}),Co=n.object({count:n.number().int().positive(),bounds:So.nullable()}),wo=n.object({kind:n.enum([`drag`,`resize`]),baseVersion:n.number().int().positive(),boxes:n.record(n.string().min(1),So).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:Co.optional()}),To=n.object({cursor:xo.nullable().optional(),input:n.enum([`pointer`,`touch`,`keyboard`]).optional(),focused:n.boolean().optional(),selectedNodeIds:n.array(n.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=mo).optional(),selectionSummary:Co.nullable().optional(),visibleWorldBox:So.optional(),gesture:wo.nullable().optional(),cursorChat:n.string().max(140).nullable().optional()}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),Eo=n.object({actor:vo,seq:n.number().int().nonnegative(),cursor:xo.nullable(),input:n.enum([`pointer`,`touch`,`keyboard`]),focused:n.boolean(),selectedNodeIds:n.array(n.string().min(1)).max(100).refine(e=>new TextEncoder().encode(JSON.stringify(e)).byteLength<=mo),selectionSummary:Co.nullable().optional(),visibleWorldBox:So.nullable(),gesture:wo.nullable(),cursorChat:n.string().max(140).nullable().default(null),expiresAt:n.iso.datetime()}),Do=n.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),Oo=n.object({activityId:n.uuid(),canvasId:n.uuid(),actor:yo,phase:Do,nodeIds:n.array(n.string().min(1)).max(100),bounds:So.nullable(),expiresAt:n.iso.datetime()}),ko=n.object({canvasId:n.uuid(),protocols:n.array(n.literal(po)).min(1).max(1)}),Ao=n.object({endpoint:n.url(),ticket:n.string().min(1).max(4096),protocol:n.literal(po),expiresAt:n.iso.datetime()}),jo=n.object({canvasId:n.uuid(),phase:Do,nodeIds:n.array(n.string().min(1)).max(100).default([]),bounds:So.nullable().default(null)}),Mo=n.object({activityId:n.uuid(),expiresAt:n.iso.datetime(),renewAfterMs:n.number().int().positive()}),No=jo.extend({activityId:n.uuid()}),Po=n.object({canvasId:n.uuid(),activityId:n.uuid()}),Fo=n.object({ended:n.literal(!0)}),Io={v:n.literal(1),seq:n.number().int().nonnegative()};n.discriminatedUnion(`type`,[n.object({...Io,type:n.literal(`room.snapshot`),payload:n.object({connectionId:n.uuid(),peers:n.array(Eo),activities:n.array(Oo),documentVersion:n.number().int().positive()})}),n.object({...Io,type:n.literal(`presence.patch`),payload:Eo}),n.object({...Io,type:n.literal(`presence.left`),payload:n.object({connectionId:n.uuid()})}),n.object({...Io,type:n.literal(`agent.activity`),payload:n.object({activityId:n.uuid(),activity:Oo.nullable()})}),n.object({...Io,type:n.literal(`document.committed`),payload:n.object({mutationId:n.uuid(),actor:bo,previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(Ni).min(1)})}),n.object({...Io,type:n.literal(`sync.required`),payload:n.object({version:n.number().int().positive(),reason:n.enum([`gap`,`relay`,`replace`,`history-restored`])})}),n.object({...Io,type:n.literal(`room.ping`),payload:n.object({pingId:n.uuid(),sentAt:n.iso.datetime()})}),n.object({...Io,type:n.literal(`room.error`),payload:n.object({code:n.enum([`auth`,`permission`,`protocol`,`payload`,`rate`,`unavailable`]),message:n.string().min(1).max(200)})})]),n.discriminatedUnion(`type`,[n.object({v:n.literal(1),type:n.literal(`presence.patch`),seq:n.number().int().nonnegative(),payload:To}),n.object({v:n.literal(1),type:n.literal(`selection.chunk`),seq:n.number().int().nonnegative(),payload:n.object({transferId:n.uuid(),offset:n.number().int().nonnegative(),total:n.number().int().positive(),nodeIds:n.array(n.string().min(1)).min(1).max(1e3)})}),n.object({v:n.literal(1),type:n.literal(`selection.unavailable`),seq:n.number().int().nonnegative(),payload:n.object({count:n.number().int().positive()})}),n.object({v:n.literal(1),type:n.literal(`room.pong`),seq:n.number().int().nonnegative(),payload:n.object({pingId:n.uuid()})})]).refine(e=>e.type!==`selection.chunk`||e.payload.offset+e.payload.nodeIds.length<=e.payload.total&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=49152);const Lo=n.uuid(),Ro=C.shape.id,zo=n.array(Ro),Bo=/^\/c\/([^/]+)\/?$/iu,Vo=e=>{let t=e.trim(),n=Lo.safeParse(t);if(n.success)return{ok:!0,value:{canvasId:n.data,nodeIds:[]}};if(!URL.canParse(t))return{ok:!1,reason:`reference`};let r=new URL(t);try{decodeURIComponent(r.search),decodeURIComponent(r.hash)}catch{return{ok:!1,reason:`reference`}}let i=Lo.safeParse(Bo.exec(r.pathname)?.[1]);if(!i.success||![`http:`,`https:`].includes(r.protocol))return{ok:!1,reason:`reference`};let a=r.searchParams.getAll(`page`),o=a[0];if(a.length>1||o!==void 0&&!Ro.safeParse(o).success)return{ok:!1,reason:`page`};let s=new URLSearchParams(r.hash.slice(1));if(s.has(`recording`)||s.has(`version`)||r.searchParams.has(`version`))return{ok:!1,reason:`unsupported`};let c=s.getAll(`prototype`),l=s.getAll(`selection`);if(c.length>1||c.length>0&&l.length>0)return{ok:!1,reason:`selection`};let ee=zo.safeParse(c.length>0?c:l);return ee.success?{ok:!0,value:{canvasId:i.data,...o!==void 0&&{pageId:o},nodeIds:[...new Set(ee.data)]}}:{ok:!1,reason:`selection`}},Ho=(e,t)=>{if(!URL.canParse(e)||![`https:`,`http:`].includes(new URL(e).protocol))return{ok:!1,reason:`reference`};let n=new URL(`/c/${encodeURIComponent(t.canvasId)}`,new URL(e).origin);t.pageId!==void 0&&n.searchParams.set(`page`,t.pageId);let r=new URLSearchParams,i=new Set(t.nodeIds);for(let e of i)r.append(`selection`,e);n.hash=r.toString();let a=Vo(n.href);return a.ok?{ok:!0,url:n.href}:a},Uo=`root`,Wo=`canvas-page-default`,Go=e=>Object.entries(e.relationships).filter(([,e])=>e.parentId===Uo).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):t.sortKey<r.sortKey?-1:1).map(([e])=>e),Ko=e=>{let t=Go(e).filter(t=>e.nodes[t]?.component===Ia);return t.length>0?t:[Wo]},qo=(e,t)=>{let n=new Set,r=t;for(;r!==void 0&&!n.has(r);){n.add(r);let t=e.nodes[r];if(t===void 0||t.component===`page`)return null;let i=e.relationships[r]?.parentId;if(i===Uo){let e=t.props?.canvasPageId;return typeof e==`string`?e:Wo}r=i}return null},Jo=(e,t)=>{let n=new Map;for(let[t,r]of Object.entries(e.relationships)){let e=n.get(r.parentId)??[];e.push(t),n.set(r.parentId,e)}let r=new Set,i=[...t];for(;i.length>0;){let t=i.pop();t===void 0||r.has(t)||e.nodes[t]===void 0||(r.add(t),i.push(...n.get(t)??[]))}return r},Yo=(e,t)=>{let n=Ko(t);if(e.pageId!==void 0&&!n.includes(e.pageId))return{ok:!1,reason:`page`};let r=e.nodeIds.map(e=>qo(t,e));if(r.some(e=>e===null||!n.includes(e)))return{ok:!1,reason:`selection`};if(e.pageId!==void 0&&r.some(t=>t!==e.pageId))return{ok:!1,reason:`inconsistent-page`};if(new Set(r).size>1)return{ok:!1,reason:`mixed-pages`};let i=e.pageId??r[0]??null,a=e.nodeIds.length>0?[...new Set(e.nodeIds)]:Go(t).filter(e=>{let n=qo(t,e);return n!==null&&(i===null||n===i)});return{ok:!0,pageId:i,rootNodeIds:a,nodeIds:Jo(t,a)}},Xo=n.object({jobId:n.uuid()}),Zo=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),target:w,sourceState:or.optional()}),Qo=n.discriminatedUnion(`purpose`,[Zo.extend({purpose:n.literal(`preparation`),preparation:Za,screens:n.array(Li).optional(),sourceState:n.undefined().optional(),scale:n.literal(1),format:n.literal(`json`)}),Zo.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`]),scale:n.number().positive(),maxOutputPixels:ir.optional(),format:n.literal(`png`)}),Zo.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),sourceState:n.undefined().optional(),conversion:Nr,scale:n.literal(1),format:n.literal(`json`)})]);n.object({jobId:n.uuid()}),n.object({jobId:n.uuid()});const $o=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),grantToken:n.string().startsWith(`rgr_`).min(40).max(100),grantCookieName:n.string().min(1).max(100),renderUrl:n.url(),releaseIdentity:n.string().min(1).max(100)});n.discriminatedUnion(`purpose`,[$o.extend({purpose:n.literal(`preparation`),target:w,preparation:Za,sourceState:n.undefined().optional(),scale:n.literal(1)}),$o.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`]),target:w,sourceState:or.optional(),scale:n.number().positive(),maxOutputPixels:ir.optional(),outputKey:n.string().min(1).max(500)}),$o.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1).max(200)}),sourceState:n.undefined().optional(),conversion:Nr,scale:n.literal(1)})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),bounds:ar,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive(),bytes:n.number().int().positive(),storageKey:n.string().min(1).max(500),warnings:n.array(mr),timings:n.array(gr),sourceState:sr.optional(),snapshot:n.object({artifactBytes:n.number().int().positive(),artifactStorageKey:n.string().min(1).max(500),route:n.string().optional(),title:n.string().optional(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()})}).optional()}),n.object({accepted:n.literal(!0)}),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),draft:Zn}),n.object({accepted:n.literal(!0)}),n.object({recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative(),artifact:n.string().min(1),route:n.string().optional(),title:n.string().optional(),viewport:n.object({width:n.number().int().positive(),height:n.number().int().positive()})}),n.object({jobId:n.uuid(),failure:hr}),n.object({accepted:n.literal(!0),willRetry:n.boolean()}),n.object({workerId:n.string().regex(/^[\w.-]+$/u).min(1).max(100),releaseIdentity:n.string().min(1).max(100),timestamp:n.coerce.number().int().nonnegative(),nonce:n.uuid(),mac:n.base64().min(32).max(200)});const es=n.object({total:n.number().int().nonnegative(),loading:n.number().int().nonnegative(),unavailable:n.number().int().nonnegative()}),ts=n.object({jobId:n.uuid(),canvasId:n.uuid().nullable(),requestedVersion:n.number().int().positive().nullable(),loadedVersion:n.number().int().positive().nullable(),phase:ur.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:es,warnings:n.array(mr),timings:n.array(gr),sourceState:sr.optional()}),ns=n.object({selector:n.string().min(1).max(500),contentSelector:n.string().min(1).max(500).optional(),bounds:ar,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive()});n.discriminatedUnion(`state`,[ts.extend({state:n.literal(`loading`),capture:n.null(),failure:n.null()}),ts.extend({state:n.literal(`ready`),phase:n.literal(`target`),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),capture:ns,failure:n.null()}),ts.extend({state:n.literal(`failed`),failure:n.object({reason:fr,message:n.string().min(1).max(500),sourceId:n.string().min(1).max(200).nullable()}),capture:n.null()})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),plan:$a});const rs=n.string().min(1),is=n.object({canvasId:n.uuid()}),as=n.object({canvasId:n.uuid(),status:n.enum([`selected`,`none`,`offline`,`stale`,`updating`,`unsupported`]),documentVersion:n.number().int().positive(),selectionRevision:n.number().int().positive().nullable(),selectionChangedAt:n.iso.datetime().nullable(),selectedNodeIds:n.array(rs),missingNodeIds:n.array(rs),nodes:n.array(fa),contextRootId:rs.nullable(),visibleWorldBox:ar.nullable(),next:n.array(n.string().min(1)).max(12)}),os=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`recording`),recordingId:n.string()})]),ss=n.object({html:n.string().optional(),viewport:n.object({width:n.number(),height:n.number()}),atMs:n.number(),screenId:n.string().nullable().default(null),provenance:os.optional()}),cs=n.object({provenance:os.optional(),report:Jn.optional()}),ls=n.object({recordingId:n.string()}),us=n.object({prototypeId:n.uuid(),deploymentId:n.uuid()});n.object({preparedExperience:n.enum([`agent-connection`,`whisper-prototype`]),ownerPersonId:n.uuid(),resources:n.array(n.string().min(1))});const ds=`$structure`,fs=e=>{let t=[];for(let[n,r]of Object.entries(e))[`kind`,`children`,`text`,`soft`].includes(n)||(n===`styles`||n===`paragraph`?typeof r==`object`&&r&&t.push(...Object.entries(r).map(([e,t])=>[`${n}.${e}`,t])):t.push([n,r]));return Object.fromEntries(t)},ps=e=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==`text`&&e!==`children`)),ms=(e,t)=>{let n={...e,...t};return t.listStyle===`none`&&(Reflect.deleteProperty(n,`listLevel`),Reflect.deleteProperty(n,`listStart`)),n},hs=(e,t,n)=>{let r=e.listStyle??t;if(r!==`bulleted`&&r!==`numbered`)return e;let i=e.listLevel??1,a=Math.max(1,i+n);if(a===i)return e;let o={...e,listLevel:a};return Reflect.deleteProperty(o,`listStart`),o},gs=(e,t)=>{let n=0;return e.map(e=>{let r=n;if(n+=ia(e.children).length,r<=t.start||r>t.end||e.paragraph?.listStart===void 0)return e;let i={...e.paragraph};return Reflect.deleteProperty(i,`listStart`),{...e,paragraph:i}})},_s=e=>{let t=[],n=0;for(let{index:r}of e.matchAll(/\n/gu))t.push({start:n,end:r+1,contentEnd:r}),n=r+1;return t.push({start:n,end:e.length,contentEnd:e.length}),t},vs=(e,t)=>{let n=Math.min(t.anchor,t.focus),r=Math.max(t.anchor,t.focus);return n===r?n>=e.start&&n<=e.contentEnd:n<e.end&&r>e.start},ys=e=>{let t=e.toReversed().map(e=>({node:e})),n=[],r=0;for(;t.length>0;){let e=t.pop();if(e===void 0)break;if(`leave`in e){e.leave.end=r;continue}let i=e.node;if(i.kind!==`span`){r+=i.kind===`text`?i.text.length:1;continue}if(i.paragraph!==void 0){let e={start:r,end:r,formatting:i.paragraph};n.push(e),t.push({leave:e})}for(let e of i.children.toReversed())t.push({node:e})}return n},bs=(e,t)=>{let n=e.filter(e=>e.start===e.end?e.start===t:e.start<=t&&t<e.end);if(n.length===0){let n=e.at(-1);return n?.end===t?n.formatting:{}}let r={};for(let e of n)r={...r,...e.formatting};return r},xs=e=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let t=xs(e.children);if(e.paragraph===void 0)return[{...e,children:t}];let n={...e};return Reflect.deleteProperty(n,`paragraph`),Object.keys(n).filter(e=>![`kind`,`children`,`styles`].includes(e)).length===0&&Object.keys(e.styles).length===0?t:[{...n,children:t}]}),Ss=e=>e.some(e=>e.kind===`span`&&(e.paragraph!==void 0||e.paragraphSpacing!==void 0||e.paragraphIndent!==void 0||e.listSpacing!==void 0||e.wrapStyle!==void 0||Ss(e.children))),Cs=e=>{let t=[[]];for(let n of e){let e=n.kind===`span`?Cs(n.children).map(e=>e.length===0&&n.children.length>0?[]:[{...n,children:e}]):n.kind===`break`?n.soft===!0?[[n]]:[[n],[]]:n.text.split(`
4
4
  `).map((e,t,r)=>{let i=t<r.length-1?`${e}\n`:e;return i===``&&n.text!==``?[]:[{...n,text:i}]});t.at(-1)?.push(...e[0]??[]),t.push(...e.slice(1))}return t},ws=(e,t)=>{let n={cursor:0};return t.map(({start:t})=>{let r=(n.active??[]).filter(e=>e.end>t);for(n.active=r;n.cursor<e.length;){let i=e[n.cursor];if(i===void 0||i.start>t)break;(i.end>t||i.start===t)&&r.push(i),n.cursor+=1}if(r.length===0){let n=e.at(-1);return n?.end===t?n.formatting:{}}let i={};for(let e of r)i={...i,...e.formatting};return i})},Ts=e=>{let t=ia(e),n=ys(e),r=Cs(xs(e)),i=_s(t),a=ws(n,i);return i.map((e,t)=>({kind:`span`,paragraph:a[t]??{},styles:{},children:r[t]??[]}))},Es=(e,t,n)=>{let r=_s(ia(e));return Ts(e).map((e,i)=>{let a=r[i];return a===void 0?e:vs(a,t)?{...e,paragraph:n(e.paragraph??{})}:e})},Ds=(e,t)=>bs(ys(e),t),Os=(e,t,n)=>{if(!Ss(e))return t;let r=ia(t),i=ia(e),a=n.replaces&&n.end===i.length&&n.start<i.length,o=r===``||!a&&r.endsWith(`
5
5
  `)?[{kind:`span`,styles:{},children:[],paragraph:Ds(e,r===``?n.start:i.length)}]:[],s=Ts([...t,...o]);return n.replaces?gs(s,{start:n.start,end:r.length-i.length+n.end}):s},ks={color:`inherit`,textDecorationLine:`underline`,textDecorationThickness:`0.08em`,textUnderlineOffset:`0.14em`},As=new Set(di),js=new Set(Object.entries(vt).flatMap(([e,t])=>t.some(e=>As.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[])),Ms=(e,t,n=!1,r={})=>{if(e===null||r.paragraphSpacing!==void 0||r.paragraphIndent!==void 0||r.listSpacing!==void 0||r.hangingPunctuation!==void 0||r.verticalTrim!==void 0||r.wrapStyle!==void 0)return null;if(n){let n=pi.safeParse({...e,...r.position!==void 0&&{position:r.position},overrides:{...e.overrides,...Object.fromEntries(Object.entries(t).filter(([e])=>(e!==`fontFeatureSettings`||r.position===void 0)&&js.has(e)))}});return n.success?n.data:null}return Object.keys(t).some(e=>js.has(e))?null:e},Ns=e=>({...e.paragraphSpacing!==void 0&&{paragraphSpacing:e.paragraphSpacing},...e.paragraphIndent!==void 0&&{paragraphIndent:e.paragraphIndent},...e.listSpacing!==void 0&&{listSpacing:e.listSpacing},...e.hangingPunctuation!==void 0&&{hangingPunctuation:e.hangingPunctuation},...e.verticalTrim!==void 0&&{verticalTrim:e.verticalTrim},...e.wrapStyle!==void 0&&{wrapStyle:e.wrapStyle}}),Ps=(e,t)=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let n={...e,styles:{...e.styles},children:Ps(e.children,t)};if(t.type===`format`){let e=Object.keys(Ns(t));for(let t of e)Reflect.deleteProperty(n,t);let r=Ms(n.textStyle??null,t.styles,t.shouldOverrideTextStyle,{paragraphSpacing:t.paragraphSpacing,paragraphIndent:t.paragraphIndent,listSpacing:t.listSpacing,hangingPunctuation:t.hangingPunctuation,verticalTrim:t.verticalTrim,wrapStyle:t.wrapStyle,position:t.textStylePosition});r===null?Reflect.deleteProperty(n,`textStyle`):n.textStyle=r}else if(t.type===`text-style`)return Reflect.deleteProperty(n,`textStyle`),[n];if(t.type===`link`)Reflect.deleteProperty(n,`href`);else if(t.type===`paint`)Reflect.deleteProperty(n,`fills`),Reflect.deleteProperty(n.styles,`color`);else for(let e of Object.keys(t.styles))Reflect.deleteProperty(n.styles,e);let r=Object.keys(n).filter(e=>![`kind`,`children`,`styles`].includes(e));return Object.keys(n.styles).length===0&&r.length===0?n.children:[n]}),Fs=(e,t)=>e.map(e=>e.kind===`span`?e.children.some(e=>e.kind===`span`)?{...e,children:Fs(e.children,t)}:{...e,styles:{...e.styles,...t}}:{kind:`span`,styles:t,children:[e]}),Is=(e,t)=>{let n=Ps(e,t);if(t.type===`text-style`)return t.binding===null?n:[{kind:`span`,styles:{},textStyle:t.binding,children:n}];if(t.type===`format`){let e=t.styles.textDecorationLine===void 0?[{kind:`span`,styles:t.styles,children:n}]:Fs(n,t.styles),r=Ns(t);return Object.keys(r).length===0?e:[{kind:`span`,styles:{},...r,children:e}]}return t.type===`link`?t.href===null?n:[{kind:`span`,styles:ks,href:t.href,children:n}]:t.fills===null?n:[{kind:`span`,styles:{},fills:t.fills,children:n}]},Ls={},Rs=()=>Ls.current??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),zs=e=>new Set([0,e.length,...Array.from(Rs().segment(e),({index:e})=>e)]),Bs=(e,t)=>{let n=zs(e);return t.start<=t.end&&n.has(t.start)&&n.has(t.end)},Vs=e=>e.kind===`text`?e.text.length:e.kind===`break`?1:ia(e.children).length,Hs=(e,t,n)=>{let r=0;return e.flatMap(e=>{let i=Vs(e),a=Math.max(0,t-r),o=Math.min(i,n-r);return r+=i,a>=o?[]:a===0&&o===i?[e]:e.kind===`span`?[{...e,children:Hs(e.children,a,o)}]:e.kind===`text`?[{...e,text:e.text.slice(a,o)}]:[e]})},Us=e=>JSON.stringify(Object.fromEntries(Object.entries(e).filter(([e])=>![`children`,`text`].includes(e)))),Ws=e=>e.kind===`span`&&e.paragraph!==void 0&&ia(e.children).endsWith(`
package/dist/main.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{$ as e,$t as t,An as n,At as r,Ct as i,Dt as a,Et as o,Ft as s,Gn as c,It as l,Mt as u,Nt as d,O as ee,Ot as f,Pt as te,Qn as ne,Rt as re,Sn as ie,St as ae,Tt as oe,Un as p,Wn as se,Zt as ce,_ as le,_r as ue,a as m,ar as h,cr as de,ct as fe,d as g,en as pe,f as me,g as _,ht as he,i as ge,jn as _e,kt as v,l as ve,lr as ye,m as be,n as xe,or as y,ot as Se,p as Ce,r as we,rr as Te,rt as Ee,sr as De,t as Oe,u as ke}from"./cli-output-identity.lib-Clk0Ntms.mjs";import{_ as Ae,c as je,f as b,g as Me,h as x,i as Ne,l as Pe,m as Fe,n as Ie,o as Le,p as Re,r as ze,s as Be,t as Ve,u as He,v as Ue,y as We}from"./mutation-key.adapter-DkRqnLsn.mjs";import{t as Ge}from"./capability-inventory.mapper-B_GMS9z3.mjs";import S from"node:process";import{Command as Ke}from"commander";import{createCli as qe,parseRouter as Je}from"trpc-cli";import{z as C}from"zod";import{hostname as Ye,tmpdir as Xe}from"node:os";import{createInterface as Ze}from"node:readline";import{chmodSync as Qe,existsSync as $e,lstatSync as et,mkdirSync as tt,readFileSync as nt,readdirSync as rt,statSync as it,unlinkSync as at,writeFileSync as w}from"node:fs";import T from"node:path";import{createHash as E,randomUUID as D}from"node:crypto";import{setTimeout as ot}from"node:timers/promises";import{mkdir as st,readFile as O,rename as ct,stat as lt,writeFile as ut}from"node:fs/promises";import{channel as dt}from"node:diagnostics_channel";import{proxify as ft}from"trpc-cli/dist/proxify.js";const pt=1e6,mt=e=>Math.round(e*255*pt)/pt,ht=(e,t=1)=>{let n=e.alpha*t;if(e.space===`srgb`){let t=[e.red,e.green,e.blue].map(e=>String(mt(e))).join(` `);return n===1?`rgb(${t})`:`rgb(${t} / ${String(n)})`}let r=`${String(e.red)} ${String(e.green)} ${String(e.blue)}`;return`color(${e.space} ${r} / ${String(n)})`},gt=e=>e===void 0?{}:{...e!==`auto`&&{direction:e},"unicode-bidi":e===`auto`?`plaintext`:`isolate`},_t=/^-?[_a-z][-\w]*$/iu,vt=/^var\(--[-\w]+\)$/iu,yt=e=>_t.test(e)||vt.test(e)?e:JSON.stringify(e),bt=e=>[...new Set([e.family,...e.family===`Inter`?[`Inter Variable`]:[],...e.family===`JetBrains Mono`?[`JetBrains Mono Variable`]:[],...e.fallbackFamilies])].map(e=>yt(e)).join(`, `),xt=e=>Object.entries({...e.variations,...e.weight!==void 0&&{wght:e.weight},...e.opticalSize?.mode===`fixed`&&{opsz:e.opticalSize.value}}).toSorted(([e],[t])=>e.localeCompare(t,`en`,{caseFirst:`upper`})).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `),St=e=>{let t=Object.entries(e??{}).toSorted(([e],[t])=>e.localeCompare(t,`en`)).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `);return t===``?`normal`:t},Ct=e=>e.mode===`normal`?`normal`:e.mode===`percent`?String(e.value/100):e.value;function wt(e){return{...e.lineHeight!==void 0&&{"line-height":Ct(e.lineHeight)},...e.letterSpacing!==void 0&&{"letter-spacing":typeof e.letterSpacing==`number`?e.letterSpacing:`${String(e.letterSpacing.value/100)}em`}}}const Tt=e=>e===void 0?`auto`:typeof e==`number`?e:e.mode===`font-default`?`from-font`:`${String(e.value)}%`,Et=e=>({"text-decoration-line":e.line,"text-decoration-style":e.style,"text-decoration-color":e.color===void 0?`currentColor`:ht(e.color),"text-decoration-thickness":Tt(e.thickness),"text-underline-offset":Tt(e.offset),"text-decoration-skip-ink":e.skipInk??`auto`}),Dt=e=>`${JSON.stringify(e)}\n`,Ot=e=>{if(e<1)throw RangeError(`a chunk has to be able to hold at least one character`);let t=``,n=[],r=!1,i=!1,a=()=>{let e={body:t,continues:r,eventCount:n.length-+!!r,firstEventMs:n.length===0?0:Math.min(...n),lastEventMs:n.length===0?0:Math.max(...n)};return r=!t.endsWith(`
2
+ import{$ as e,$t as t,An as n,At as r,Ct as i,Dt as a,Et as o,Ft as s,Gn as c,It as l,Mt as u,Nt as d,O as ee,Ot as f,Pt as te,Qn as ne,Rt as re,Sn as ie,St as ae,Tt as oe,Un as p,Wn as se,Zt as ce,_ as le,_r as ue,a as m,ar as h,cr as de,ct as fe,d as g,en as pe,f as me,g as _,ht as he,i as ge,jn as _e,kt as v,l as ve,lr as ye,m as be,n as xe,or as y,ot as Se,p as Ce,r as we,rr as Te,rt as Ee,sr as De,t as Oe,u as ke}from"./cli-output-identity.lib-D-2-fZ2B.mjs";import{_ as Ae,c as je,f as b,g as Me,h as x,i as Ne,l as Pe,m as Fe,n as Ie,o as Le,p as Re,r as ze,s as Be,t as Ve,u as He,v as Ue,y as We}from"./mutation-key.adapter-DF_ByWNx.mjs";import{t as Ge}from"./capability-inventory.mapper-B_GMS9z3.mjs";import S from"node:process";import{Command as Ke}from"commander";import{createCli as qe,parseRouter as Je}from"trpc-cli";import{z as C}from"zod";import{hostname as Ye,tmpdir as Xe}from"node:os";import{createInterface as Ze}from"node:readline";import{chmodSync as Qe,existsSync as $e,lstatSync as et,mkdirSync as tt,readFileSync as nt,readdirSync as rt,statSync as it,unlinkSync as at,writeFileSync as w}from"node:fs";import T from"node:path";import{createHash as E,randomUUID as D}from"node:crypto";import{setTimeout as ot}from"node:timers/promises";import{mkdir as st,readFile as O,rename as ct,stat as lt,writeFile as ut}from"node:fs/promises";import{channel as dt}from"node:diagnostics_channel";import{proxify as ft}from"trpc-cli/dist/proxify.js";const pt=1e6,mt=e=>Math.round(e*255*pt)/pt,ht=(e,t=1)=>{let n=e.alpha*t;if(e.space===`srgb`){let t=[e.red,e.green,e.blue].map(e=>String(mt(e))).join(` `);return n===1?`rgb(${t})`:`rgb(${t} / ${String(n)})`}let r=`${String(e.red)} ${String(e.green)} ${String(e.blue)}`;return`color(${e.space} ${r} / ${String(n)})`},gt=e=>e===void 0?{}:{...e!==`auto`&&{direction:e},"unicode-bidi":e===`auto`?`plaintext`:`isolate`},_t=/^-?[_a-z][-\w]*$/iu,vt=/^var\(--[-\w]+\)$/iu,yt=e=>_t.test(e)||vt.test(e)?e:JSON.stringify(e),bt=e=>[...new Set([e.family,...e.family===`Inter`?[`Inter Variable`]:[],...e.family===`JetBrains Mono`?[`JetBrains Mono Variable`]:[],...e.fallbackFamilies])].map(e=>yt(e)).join(`, `),xt=e=>Object.entries({...e.variations,...e.weight!==void 0&&{wght:e.weight},...e.opticalSize?.mode===`fixed`&&{opsz:e.opticalSize.value}}).toSorted(([e],[t])=>e.localeCompare(t,`en`,{caseFirst:`upper`})).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `),St=e=>{let t=Object.entries(e??{}).toSorted(([e],[t])=>e.localeCompare(t,`en`)).map(([e,t])=>`${JSON.stringify(e)} ${String(t)}`).join(`, `);return t===``?`normal`:t},Ct=e=>e.mode===`normal`?`normal`:e.mode===`percent`?String(e.value/100):e.value;function wt(e){return{...e.lineHeight!==void 0&&{"line-height":Ct(e.lineHeight)},...e.letterSpacing!==void 0&&{"letter-spacing":typeof e.letterSpacing==`number`?e.letterSpacing:`${String(e.letterSpacing.value/100)}em`}}}const Tt=e=>e===void 0?`auto`:typeof e==`number`?e:e.mode===`font-default`?`from-font`:`${String(e.value)}%`,Et=e=>({"text-decoration-line":e.line,"text-decoration-style":e.style,"text-decoration-color":e.color===void 0?`currentColor`:ht(e.color),"text-decoration-thickness":Tt(e.thickness),"text-underline-offset":Tt(e.offset),"text-decoration-skip-ink":e.skipInk??`auto`}),Dt=e=>`${JSON.stringify(e)}\n`,Ot=e=>{if(e<1)throw RangeError(`a chunk has to be able to hold at least one character`);let t=``,n=[],r=!1,i=!1,a=()=>{let e={body:t,continues:r,eventCount:n.length-+!!r,firstEventMs:n.length===0?0:Math.min(...n),lastEventMs:n.length===0?0:Math.max(...n)};return r=!t.endsWith(`
3
3
  `),t=``,n=r?[n.at(-1)??0]:[],e};return{pending:()=>t.length,add:r=>{let o=[],s=Dt(r.event);for(n.push(r.atMs),i=!0;t.length+s.length>=e;){let n=e-t.length;t+=s.slice(0,n),s=s.slice(n),o.push(a())}return t+=s,o},drain:()=>!i||t.length>0?[a()]:[]}},kt=(e,t)=>{let n=Ot(t);return[...e.flatMap(e=>n.add(e)),...n.drain()]},At=[`recording.start`,`recording.appendChunk`,`recording.complete`],jt=e=>async t=>{let n=re.parse(await e.mutate(At[0],{sourceUrl:t.sourceUrl,viewport:t.viewport,pageTitle:t.pageTitle,audio:null})),r=n.upload;try{let i=kt(t.entries,8388608);for(let[t,a]of i.entries()){let i=new TextEncoder().encode(a.body),o=await e.upload({url:r.url,headers:r.headers,body:i});r=s.parse(await e.mutate(At[1],{recordingId:n.recordingId,index:t,firstEventMs:a.firstEventMs,lastEventMs:a.lastEventMs,eventCount:a.eventCount,continues:a.continues,bytes:i.byteLength,etag:o})).upload}let a=Math.max(0,...t.entries.map(e=>e.atMs));return l.parse(await e.mutate(At[2],{recordingId:n.recordingId,durationMs:a,viewport:t.viewport,sourceUrl:t.sourceUrl,interrupted:!1,...t.canvasId!==void 0&&{canvasId:t.canvasId},audioChunkCount:0,hasRecoverableBytes:!1}))}catch{throw new v(`Recording ${n.recordingId} began, but not every chunk was committed.`,`Run 'enhance recording discard --recording-id ${n.recordingId}' to remove the incomplete attempt before retrying the fixture.`)}},Mt=[`screen.create`,`screen.complete`],Nt=e=>async t=>{let n=te.parse(await e.mutate(Mt[0],{clientToken:t.clientToken,provenance:t.provenance,route:t.route,pageTitle:t.pageTitle,viewport:t.viewport,bytes:t.body.byteLength}));try{let r=await e.upload({url:n.upload.url,headers:n.upload.headers,body:t.body}),i=d.parse(await e.mutate(Mt[1],{screenId:n.screenId,etag:r}));return{screenId:i.screenId,route:t.route,title:t.pageTitle,viewport:t.viewport,atMs:t.provenance?.atMs??null,sourceRecordingId:t.provenance?.sourceRecordingId??null,assetBundle:null,download:null,storedBytes:i.storedBytes}}catch{throw new v(`Screen ${n.screenId} was reserved, but its upload did not complete.`,`Retry 'enhance fixture screen' with the same --client-token ${t.clientToken}.`)}},k=[`organisation.create`,`canvas.create`,`screen.create`,`screen.complete`,`canvas.document.get`,`canvas.document.save`],Pt=(e,n)=>async r=>{let i=ce.parse(await e.mutate(k[0],{name:r.organisationName})).organisation,a=ue.parse(await e.mutate(k[1],{title:r.canvasTitle,organisationId:i.id,sourceUrl:null}));try{let o=[];for(let e of r.screens)o.push(await n(e));let s=p.parse(await e.query(k[4],{canvasId:a.id})),c=t();for(let[e,t]of o.entries())c=pe(c,{id:`fixture-screen-${String(e+1)}`,label:`Fixture screen ${String(e+1)}`,screenId:t.screenId,viewport:r.screens[e]?.viewport??{width:1440,height:900},at:{x:48+e*48,y:48+e*48}});let l=se.parse(await e.mutate(k[5],{canvasId:a.id,baseVersion:s.version,document:c,screenIds:o.map(e=>e.screenId)}));if(l.outcome===`conflict`)throw new v(`World canvas ${a.id} was created, but another writer changed its document.`,`Read 'enhance canvas document get --canvas-id ${a.id}' before adding the screens.`);return{organisationId:i.id,canvasId:a.id,screenIds:o.map(e=>e.screenId),documentVersion:l.version}}catch(e){throw e instanceof v?e:new v(`Organisation ${i.id} and canvas ${a.id} exist, but the world is incomplete.`,`Inspect 'enhance canvas get --canvas-id ${a.id}' before retrying any missing steps.`)}},Ft=async(e,t)=>{if(e!==void 0&&e!==``)return e.trim();if(S.stdin.isTTY)throw new r(`BAD_REQUEST`,`A token is required and interactive prompting is disabled.`,`Pass '--token <token>' or pipe one line to '${t}'.`);let n=Ze({input:S.stdin,crlfDelay:1/0});for await(let e of n){n.close();let t=e.trim();if(t!==``)return t;break}throw new r(`BAD_REQUEST`,`A token is required.`,`Pass '--token <token>' or pipe one line to '${t}'.`)},It=async e=>{if(e!==void 0)return e.trim();if(S.stdin.isTTY)return null;let t=Ze({input:S.stdin,crlfDelay:1/0});for await(let e of t){t.close();let n=e.trim();return n===``?null:n}return null},Lt=(e,t,n)=>{let r=e.command(`auth`).description(`Store and inspect the agent credential.`);r.command(`login`).description(`Authenticate in a browser, then store a revocable agent credential.`).option(`--token <token>`,`Use an existing agent token instead of browser authentication.`).option(`--no-open`,`Print the authorization URL without opening the browser.`).action(async e=>{let r=await It(e.token);if(r!==null){n.result(await t.loginWithToken(r));return}n.result(await t.loginWithBrowser({label:`CLI on ${Ye()}`.slice(0,120),openBrowser:e.open,onReady:e=>{n.result({status:`waiting_for_browser`,url:e})}}))}),r.command(`status`).description(`Resolve the stored token to its person, label, and expiry.`).action(async()=>{n.result(await t.status())}),r.command(`logout`).description(`Delete the local credential file; this does not revoke the server token.`).action(async()=>{n.result(await t.logout())})},Rt=C.coerce.number().int().positive(),zt=C.coerce.number().positive(),Bt=C.uuid(),Vt=C.union([C.string(),C.number(),C.null()]),Ht=C.record(C.string(),Vt),Ut=C.array(C.object({nodeId:C.string().min(1).max(200),textContent:C.string()})).min(1),Wt=C.array(C.object({nodeId:C.string().min(1).max(200),name:C.string()})).min(1),Gt=C.array(C.object({nodeIds:C.array(C.string().min(1).max(200)).min(1),styles:Ht})).min(1),Kt=C.array(C.object({id:C.string().min(1).max(200),parentId:C.string().min(1).max(200).optional()})).min(1),qt=C.array(C.union([C.object({nodeId:C.string().min(1).max(200),before:C.string().min(1).max(200)}),C.object({nodeId:C.string().min(1).max(200),after:C.string().min(1).max(200)}),C.object({nodeId:C.string().min(1).max(200),parentId:C.string().min(1).max(200),index:C.number().int().nonnegative().optional()})])).min(1),Jt=C.array(C.string().min(1).max(200)).min(1),Yt=C.coerce.number().int().min(0),Xt=C.uuid().nullable(),A=(e,t,n)=>{let i=e.safeParse(t);if(i.success)return i.data;throw new r(`BAD_REQUEST`,`${n} is invalid.`,`Run the command with --help.`)},j=e=>A(Rt,e,`--base-version`),M=(e,t,n)=>{let i=Xt.safeParse(t??null);if(!i.success)throw new r(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying the exact same command.`);e.mutationKey.select(i.data,n)},Zt=(e,t)=>e.mutationKey.current(`canvas.applyOperations`,{purpose:t}),Qt=async(e,t,n,r)=>{M(e,t.clientToken,!1);let i=f(t.canvas),o=j(t.baseVersion);return a(i)&&Fe(i,await x(e,i.canvasId,o),r),Me(e.remote).execute({canvasId:i.canvasId,mutationId:Zt(e,n),baseVersion:o,operations:[...r]})},N=async(e,t,n,r)=>{M(e,t.clientToken,!1);let i=f(t.canvas);return Re(e.remote).execute({...i,baseVersion:j(t.baseVersion),mutationId:Zt(e,`canvas.edit`),edits:n,...r!==void 0&&{idPrefix:r}})},P=(e,t)=>{if(!e.startsWith(`@`))return e;let n=e.slice(1);if(n===``)throw new r(`BAD_REQUEST`,`${t} @ must name a file.`,`Pass ${t} @/absolute/path/to/file or an inline value.`);let i=T.resolve(n);try{if(!it(i).isFile())throw Error(`not a regular file`);return nt(i,`utf8`)}catch{throw new r(`BAD_REQUEST`,`Could not read the file at ${i}.`,`Use a readable regular UTF-8 file.`)}},$t=C.array(c).min(1),en=e=>{try{return JSON.parse(P(e,`--operations`))}catch(e){throw e instanceof r?e:new r(`BAD_REQUEST`,`--operations must be one valid JSON array.`,`Pass inline JSON or @/absolute/path/layout.json; run 'enhance canvas apply --help' for examples.`)}},tn=e=>{let t=en(e),n=$t.safeParse(t);if(!n.success){let e=n.error.issues[0];throw new r(`BAD_REQUEST`,`The canvas operation batch is invalid${e===void 0||e.path.length===0?``:` at ${e.path.join(`.`)}`}.`,`Correct the named operation; run 'enhance canvas apply --help' for the supported vocabulary.`)}return n.data},nn=C.coerce.number().int().positive(),rn=e=>{let t=nn.safeParse(e);if(t.success)return t.data;throw new r(`BAD_REQUEST`,`--base-version is invalid.`,`Run 'enhance canvas apply --help'.`)},an=(e,t)=>{let n=C.uuid().nullable().safeParse(t??null);if(!n.success)throw new r(`BAD_REQUEST`,`--client-token must be a UUID.`,`Mint one UUID and reuse it only when retrying this exact operation batch.`);return e.mutationKey.select(n.data,!1),e.mutationKey.current(`canvas.applyOperations`,{})},on=(e,t)=>{e.command(`apply`).description(`Apply an atomic canvas edit batch and return its affected bounds.`).summary(`Apply edits and return affected bounds.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact version returned by canvas inspect or tree.`).requiredOption(`--operations <json-or-@path>`,`JSON operation array inline, or @path to a JSON file.`).option(`--client-token <uuid>`,`Stable UUID to reuse only when retrying this exact batch.`).addHelpText(`after`,[``,`Supported operations: insertNode, insertText, insertPrototype, setText, editText, setBox, setLabel, setVisibility, setLocked, setConstraints, setStyles, setAppearance, setLayout, patchTypography, setTypography, patchAdditionalStyles, setAdditionalStyles, setProps, setParentage, move, remove.`,`Use editText for revision-aware character or range changes. setText replaces the whole text and is rejected if it conflicts with a newer text edit.`,`Example:`,` enhance canvas apply --canvas <url-or-id> --base-version 3 --operations '[{"op":"insertText","nodeId":"txt_summary","parentId":"root","text":"Checkout needs an address.","box":{"x":120,"y":594,"width":720,"height":80},"styles":{"font-size":24}}]'`].join(`
4
4
  `)).action(async e=>{an(t,e.clientToken);let n=f(e.canvas),r=rn(e.baseVersion),i=tn(e.operations);a(n)&&Fe(n,await x(t,n.canvasId,r),i);let o=await t.invocation.invoke({capability:b(t.catalog(),`canvas.apply`),arguments:{canvasId:n.canvasId,baseVersion:r,operations:[...i]},clientToken:e.clientToken??null});t.output.result(o)})},sn=e=>{try{return JSON.parse(e)}catch{return}},cn=e=>{if(e===void 0)return null;let t=ne.safeParse(sn(e));if(t.success)return t.data;throw new r(`BAD_REQUEST`,`--bounds must be a positive world rectangle.`,`Pass JSON with x, y, width and height.`)},ln=e=>e===void 0?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e!==``).slice(0,100),un=(e,t)=>{e.command(`begin`).description(`Start visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--phase <phase>`,`reading, writing, creating, deleting, or rendering.`).option(`--node-ids <ids>`,`Comma-separated stable node ids.`).option(`--bounds <json>`,`Optional world rectangle for not-yet-created content.`).action(async e=>{let i=_e.safeParse(e.phase);if(!i.success)throw new r(`BAD_REQUEST`,`--phase is invalid.`,`Use reading, writing, creating, deleting, or rendering.`);let a=o(e.canvas),s=n.parse(await t.remote.mutate(`canvas.realtime.activity.begin`,{canvasId:a,phase:i.data,nodeIds:ln(e.nodeIds),bounds:cn(e.bounds)}));t.output.result({...s,next:[`enhance canvas work update --canvas ${a} --activity-id ${s.activityId} --phase ${i.data}`,`enhance canvas finish-working-on-nodes --canvas ${a} --activity-id ${s.activityId}`]})})},dn=(e,t)=>{e.command(`update`).description(`Move visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--activity-id <uuid>`,`Lease id returned by work begin.`).requiredOption(`--phase <phase>`,`Current agent phase.`).option(`--node-ids <ids>`,`Comma-separated current stable node ids.`).option(`--bounds <json>`,`Optional current world rectangle.`).action(async e=>{t.output.result(n.parse(await t.remote.mutate(`canvas.realtime.activity.renew`,{canvasId:o(e.canvas),activityId:Bt.parse(e.activityId),phase:_e.parse(e.phase),nodeIds:ln(e.nodeIds),bounds:cn(e.bounds)})))})},fn=(e,t)=>{e.command(`finish-working-on-nodes`).description(`End visible agent activity.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID.`).requiredOption(`--activity-id <uuid>`,`Lease id returned by canvas work begin.`).action(async e=>{if(!await Ae(t.remote).finish(o(e.canvas),Bt.parse(e.activityId)))throw new r(`NOT_FOUND`,`The activity could not be finished.`,`It may already have expired; run canvas work begin for new work.`);t.output.result({ended:!0,activityId:e.activityId})})},pn=(e,t)=>{let n=e.command(`work`).description(`Manage visible agent activity.`);un(n,t),dn(n,t),fn(e,t)},F=(e,t,n)=>{let i=(()=>{try{return JSON.parse(P(e,n))}catch(e){throw e instanceof r?e:new r(`BAD_REQUEST`,`${n} must be valid JSON.`,`Pass inline JSON or @/absolute/path/to/input.json; run the command with --help.`)}})(),a=t.safeParse(i);if(a.success)return a.data;let o=a.error.issues[0];throw new r(`BAD_REQUEST`,`${n} is invalid${o===void 0||o.path.length===0?``:` at ${o.path.join(`.`)}`}.`,o?.message??`Correct the JSON shape and retry.`)},mn=(e,t)=>{e.command(`set-text-content`).description(`Set Text node values.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeId,textContent} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=F(e.updates,Ut,`--updates`).map(e=>({kind:`set_text`,nodeId:e.nodeId,text:e.textContent}));t.output.result(await N(t,e,n))})},hn=(e,t)=>{e.command(`rename-nodes`).description(`Rename layers.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeId,name} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=F(e.updates,Wt,`--updates`).map(e=>({kind:`rename`,nodeId:e.nodeId,name:e.name}));t.output.result(await N(t,e,n))})},gn=(e,t)=>{e.command(`delete-nodes`).description(`Delete node subtrees.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--node-ids <json-or-@path>`,`JSON array of stable node ids.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=F(e.nodeIds,Jt,`--node-ids`);t.output.result(await Qt(t,e,`delete-nodes`,n.map(e=>({op:`remove`,nodeId:e}))))})},_n=(e,t)=>{e.command(`update-styles`).description(`Update visual and layout styles.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID to edit.`).requiredOption(`--base-version <integer>`,`Exact current canvas version.`).requiredOption(`--updates <json-or-@path>`,`Array of {nodeIds,styles} updates.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).action(async e=>{let n=F(e.updates,Gt,`--updates`);t.output.result(await N(t,e,n.map(e=>({kind:`set_styles`,...e}))))})},vn=(e,t)=>{e.command(`edit`).description(`Apply an atomic canvas edit batch.`).requiredOption(`--canvas <url-or-id>`,`Canvas or selection URL, or canvas UUID.`).requiredOption(`--base-version <integer>`,`Canvas version to edit; use the previous write result to continue.`).requiredOption(`--edits <json-or-@path>`,`Array of edits with kind set_text, set_styles, rename, duplicate or move.`).option(`--client-token <uuid>`,`Stable UUID for retrying this exact batch.`).addHelpText(`after`,`
5
5
  Edit shapes (combine related edits in one array):
@@ -22,4 +22,4 @@ For transcript-led selection, inspect nearby --at-ms renders and reject transiti
22
22
  Preview first: canvas render --node-id rec_<recording-uuid> --at-ms <integer>, then inspect its PNG. This command persists the accepted moment.
23
23
  `).action(async e=>{let n=C.uuid().nullable().safeParse(e.clientToken??null),i=C.uuid().safeParse(e.recordingId);if(!n.success||!i.success)throw new r(`BAD_REQUEST`,`The recording id or client token is not a UUID.`,"Use the recording id from `recording list`; mint one client token per accepted moment.");t.output.result(await t.invocation.invoke({capability:b(t.catalog(),`recording.snapshot`),arguments:{canvasId:o(e.canvas),recordingId:i.data,atMs:ha(e.atMs,`--at-ms`,!1),timeoutMs:ha(e.timeoutMs,`--timeout-ms`,!0)},clientToken:n.data}))})},_a=(e,t,n)=>{if(e!==`canvas.document.save`||typeof n!=`object`||!n||!(`outcome`in n)||n.outcome!==`conflict`)return n;throw new r(`CONFLICT`,`The canvas document changed before this save landed.`,`Run 'enhance canvas document get --canvas-id ${typeof t==`object`&&t&&`canvasId`in t&&typeof t.canvasId==`string`?t.canvasId:`<canvas-id>`}', merge your change into that document, then retry with its version.`)},va=(e,t)=>ft(e,e=>({[e]:{query:async n=>t.query(e,n),mutate:async n=>_a(e,n,await t.mutate(e,n))}})),ya=(e,t)=>{let n=e.commands.find(e=>e.name()===`transcript`);if(n===void 0)throw TypeError(`the API router did not supply transcript commands`);n.command(`get`).description(`Read timestamped speech cues as candidate moments; render and inspect candidate PNGs before snapshotting.`).requiredOption(`--canvas <url-or-id>`,`Canvas URL or UUID containing the recording.`).requiredOption(`--recording-id <uuid>`,`Recording UUID returned by recording list.`).action(async e=>{let n=C.uuid().safeParse(e.recordingId);if(!n.success)throw new r(`BAD_REQUEST`,`--recording-id must be a UUID.`,"Use the recording id returned by `enhance recording list`.");t.output.result(await t.invocation.invoke({capability:b(t.catalog(),`transcript.read`),arguments:{canvasId:o(e.canvas),recordingId:n.data},clientToken:null}))})},ba={jsonInput:`auto`,prompts:!1,logger:`ndjson`,errorMapping:`stable-exit-codes`},xa=e=>{let t=e.state;return{logger:e.output.logger,prompts:ba.prompts,process:Mi(),formatError:e=>{let n=m(e,t.pendingParserMessage);return t.exitCode=ge(n,!1,e),t.pendingParserMessage=null,JSON.stringify(n)}}},Sa=e=>typeof e==`object`&&e&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):null,Ca=e=>{let t=Sa(e),n=t===null?void 0:t.description;return typeof n==`string`&&n!==``?n:null},wa=e=>({descriptions:new Map(e.flatMap(([e,t])=>{let n=Ca(t.meta);return n===null?[]:[[e,n]]})),mutationPaths:new Set(e.flatMap(([e,t])=>t.type===`mutation`?[e]:[]))}),Ta=()=>{let e=null;return()=>(e??=me(),e)},Ea=(e,t,n)=>{let r=Nt(t.remote),i=Be({remote:t.remote,mutationKey:t.mutationKey,configDirectory:t.configDirectory,now:()=>new Date,progress:t.output.result});Lt(e,We(t.credentials,t.remote,Le(t.remote)),t.output),Qi(e,i,n,t.output),ki(e,t),ua(e,{invocation:i,catalog:n,output:t.output}),$i(e,{version:t.version,credentials:t.credentials,remote:t.remote,output:t.output}),la(e,{screen:r,recording:jt(t.remote),world:Pt(t.remote,r)},t.output),Zi(e,t.output,n),Ur(e,{remote:t.remote,mutationKey:t.mutationKey,invocation:i,catalog:n,output:t.output,configDirectory:t.configDirectory,now:()=>new Date}),ga(e,{invocation:i,catalog:n,output:t.output}),ma(e,i,n,t.output),ya(e,{invocation:i,catalog:n,output:t.output})},Da=e=>{let t=Je({router:Ce()}),n=Ta(),{descriptions:r,mutationPaths:i}=wa(t),a=qe({router:va(t,e.remote),name:e.commandName,version:e.version,description:`Operate Enhance as the authenticated person.`,jsonInput:ba.jsonInput}),o=xa(e),s=a.buildProgram(o);if(!(s instanceof Ke))throw TypeError(`trpc-cli did not return a Commander program`);Ji(s),Ea(s,e,n),Wi(s,{descriptions:r,mutationPaths:i,mutationKey:e.mutationKey,output:e.output}),s.description(`Operate Enhance as the authenticated person.`);let c=e.state;return{program:s,run:async()=>{try{await a.run(o,s)}catch(t){if(!(t instanceof g))throw t;if(t.requestedCode!==0&&c.pendingParserMessage!==null){let n=m(t,c.pendingParserMessage);c.exitCode=ge(n,!0),c.pendingParserMessage=null,e.output.failure(n)}throw t}}}},Oa=e=>S.exit(e),ka=36e5,Q=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Aa=e=>{if(Array.isArray(e))return e.map(e=>JSON.stringify(e));if(!Q(e)||!Array.isArray(e.items)||`nextCursor`in e)return[JSON.stringify(e)];let t=e.items;if(t.length===0)return[JSON.stringify(e)];let n=e.truncated===!0;return t.map(e=>JSON.stringify(Q(e)?{...e,truncated:n}:{value:e,truncated:n}))},ja=e=>{let t=`${e.join(`
24
24
  `)}\n`;if(!(t.length>25e3||e.some(e=>e.length>2e3))){S.stdout.write(t);return}let n=E(`sha256`).update(t).digest(`hex`).slice(0,16),r=T.join(Xe(),`enhance-${n}.ndjson`);w(r,t,{mode:384}),S.stdout.write(`${JSON.stringify({path:r,characters:t.length,records:e.length})}\n`)},Ma=e=>{try{let t=new URL(e),n=new Set;for(let e of t.searchParams.keys())n.add(e.toLowerCase());return n.has(`x-amz-signature`)||n.has(`x-amz-credential`)||n.has(`x-amz-algorithm`)}catch{return!1}},Na=e=>typeof e==`string`?Ma(e):Array.isArray(e)?e.some(e=>Na(e)):Q(e)?Object.values(e).some(e=>Na(e)):!1,Pa=e=>{tt(e,{recursive:!0,mode:448}),Qe(e,448)},Fa=e=>{if(!$e(e))return;let t=Date.now()-ka,n=rt(e,{withFileTypes:!0});for(let r of n){if(!r.isFile()||!r.name.startsWith(`result-`))continue;let n=T.join(e,r.name);et(n).mtimeMs<t&&at(n)}},$=e=>({...e,sensitive:!0,cleanup:`unlink-after-use`,deleteAfter:new Date(Date.now()+ka).toISOString()}),Ia=(e,t)=>{let n=Aa(e),r=`${n.join(`
25
- `)}\n`;Pa(t);let i=T.join(t,`result-${D()}.ndjson`);w(i,r,{mode:384,flag:`wx`}),S.stdout.write(`${JSON.stringify($({path:i,characters:r.length,records:n.length,reason:`signed-url`}))}\n`)},La=e=>Q(e)?typeof e.token==`string`?{field:`token`,value:e.token}:typeof e.acceptToken==`string`?{field:`acceptToken`,value:e.acceptToken}:null:null,Ra=(e,t,n)=>{let r=`${t.value}\n`;Pa(n);let i=T.join(n,`result-${D()}.token`);w(i,r,{mode:384,flag:`wx`});let a=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t.field));S.stdout.write(`${JSON.stringify({...a,secret:$({path:i,field:t.field,characters:r.length})})}\n`)},za=e=>e.includes(`Usage:`)||e.includes(`Options:`)||e.includes(`Commands:`),Ba=u.omit({fields:!0}).extend({remediation:C.string(),fields:C.array(C.object({path:C.string(),message:C.string()})).optional()}),Va=e=>{try{let t=JSON.parse(e),n=Ba.safeParse(t);return n.success?{code:n.data.code,message:n.data.message,remediation:n.data.remediation,...n.data.fields!==void 0&&{fields:n.data.fields}}:null}catch{return null}},Ha=(e,t)=>{if(typeof e==`string`&&za(e)){S.stdout.write(e);return}let n=La(e);if(n!==null&&Q(e)){Ra(e,n,t);return}if(Na(e)){Ia(e,t);return}let r=we(e);if(r!==null){let e=null;if(r.detail!==null){Pa(t);let n=T.join(t,`result-${D()}.ndjson`),i=`${JSON.stringify(r.detail)}\n`;w(n,i,{mode:384,flag:`wx`}),e=$({path:n,characters:i.length,records:1})}S.stdout.write(`${JSON.stringify({...r.value,...e!==null&&{detail:e}})}\n`);return}ja(Aa(e))},Ua=e=>{S.stderr.write(`${JSON.stringify(e)}\n`)},Wa=(e,t,n=`enhance`)=>{let r=e,i=T.join(t,`sensitive`);return Fa(i),{result:e=>{Ha(xe(e,n),i)},failure:e=>{Ua(Oe(e,n))},logger:{info:(...e)=>{Ha(xe(e.length===1?e[0]:e,n),i)},error:(...e)=>{let t=String(xe(e.map(String).join(``),n)),i=Va(t);i===null?r.pendingParserMessage=t:Ua(i)}}}};(async()=>{let e=Ne(),t={exitCode:1,pendingParserMessage:null},n=Wa(t,e.configDirectory,e.commandName),r=ze(e.configDirectory),i=Ve(),a=Ie(e.apiUrl,r,i),o=Da({apiUrl:e.apiUrl,version:`0.1.29-dev.sha-9c4aaab529d4`,credentials:r,remote:a,mutationKey:i,output:n,state:t,configDirectory:e.configDirectory,commandName:e.commandName});try{await o.run()}catch(e){e instanceof g&&Oa(e.requestedCode===0?0:t.exitCode),n.failure(m(e,null)),Oa(1)}})().catch(e=>{S.stderr.write(`${e instanceof Error?e.message:`CLI startup failed.`}\n`),S.exitCode=1});export{};
25
+ `)}\n`;Pa(t);let i=T.join(t,`result-${D()}.ndjson`);w(i,r,{mode:384,flag:`wx`}),S.stdout.write(`${JSON.stringify($({path:i,characters:r.length,records:n.length,reason:`signed-url`}))}\n`)},La=e=>Q(e)?typeof e.token==`string`?{field:`token`,value:e.token}:typeof e.acceptToken==`string`?{field:`acceptToken`,value:e.acceptToken}:null:null,Ra=(e,t,n)=>{let r=`${t.value}\n`;Pa(n);let i=T.join(n,`result-${D()}.token`);w(i,r,{mode:384,flag:`wx`});let a=Object.fromEntries(Object.entries(e).filter(([e])=>e!==t.field));S.stdout.write(`${JSON.stringify({...a,secret:$({path:i,field:t.field,characters:r.length})})}\n`)},za=e=>e.includes(`Usage:`)||e.includes(`Options:`)||e.includes(`Commands:`),Ba=u.omit({fields:!0}).extend({remediation:C.string(),fields:C.array(C.object({path:C.string(),message:C.string()})).optional()}),Va=e=>{try{let t=JSON.parse(e),n=Ba.safeParse(t);return n.success?{code:n.data.code,message:n.data.message,remediation:n.data.remediation,...n.data.fields!==void 0&&{fields:n.data.fields}}:null}catch{return null}},Ha=(e,t)=>{if(typeof e==`string`&&za(e)){S.stdout.write(e);return}let n=La(e);if(n!==null&&Q(e)){Ra(e,n,t);return}if(Na(e)){Ia(e,t);return}let r=we(e);if(r!==null){let e=null;if(r.detail!==null){Pa(t);let n=T.join(t,`result-${D()}.ndjson`),i=`${JSON.stringify(r.detail)}\n`;w(n,i,{mode:384,flag:`wx`}),e=$({path:n,characters:i.length,records:1})}S.stdout.write(`${JSON.stringify({...r.value,...e!==null&&{detail:e}})}\n`);return}ja(Aa(e))},Ua=e=>{S.stderr.write(`${JSON.stringify(e)}\n`)},Wa=(e,t,n=`enhance`)=>{let r=e,i=T.join(t,`sensitive`);return Fa(i),{result:e=>{Ha(xe(e,n),i)},failure:e=>{Ua(Oe(e,n))},logger:{info:(...e)=>{Ha(xe(e.length===1?e[0]:e,n),i)},error:(...e)=>{let t=String(xe(e.map(String).join(``),n)),i=Va(t);i===null?r.pendingParserMessage=t:Ua(i)}}}};(async()=>{let e=Ne(),t={exitCode:1,pendingParserMessage:null},n=Wa(t,e.configDirectory,e.commandName),r=ze(e.configDirectory),i=Ve(),a=Ie(e.apiUrl,r,i),o=Da({apiUrl:e.apiUrl,version:`0.1.30-dev.sha-30ae69fbb6a2`,credentials:r,remote:a,mutationKey:i,output:n,state:t,configDirectory:e.configDirectory,commandName:e.commandName});try{await o.run()}catch(e){e instanceof g&&Oa(e.requestedCode===0?0:t.exitCode),n.failure(m(e,null)),Oa(1)}})().catch(e=>{S.stderr.write(`${e instanceof Error?e.message:`CLI startup failed.`}\n`),S.exitCode=1});export{};