@enhance-eng/enhance-dev 0.1.40-dev.sha-b30ef1934c0a → 0.1.41-dev.sha-23cfdcf4e363

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,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import{FailedToExitError as e,parseRouter as t}from"trpc-cli";import{z as n}from"zod";import{z as r}from"zod/mini";import{createHash as i}from"node:crypto";import{TRPCError as a,initTRPC as o}from"@trpc/server";import{middlewareMarker as s}from"@trpc/server/unstable-core-do-not-import";import{setTimeout as c}from"node:timers/promises";import l from"node:assert/strict";import{TRPCClientError as u}from"@trpc/client";import{Buffer as ee}from"node:buffer";var te=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);const d={unversioned:void 0,v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8,v9:9,v10:10,v11:11,v12:12,v13:13},ne={[d.v1]:`layout`,[d.v2]:`layout`,[d.v3]:`typography`,[d.v4]:`typography`,[d.v5]:`typography`,[d.v6]:`geometry`,[d.v7]:`geometry`,[d.v8]:`geometry`,[d.v9]:`geometry`,[d.v10]:`geometry`,[d.v11]:`css`,[d.v12]:`text-shadow-blend`,[d.v13]:`format-number`},re=[`appearance-unsupported-component`,`styles-unsupported-component`,`text-shadow-blend-unsupported`,`recording-aspect-not-preserved`],f=e=>typeof e==`object`&&!!e&&!Array.isArray(e),ie=e=>Array.isArray(e)?e:void 0,ae=(e,...t)=>Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e))),oe=e=>`${e}~mask`,se={alpha:`alpha`,luminance:`luminance`,vector:`outline`},ce=e=>{if(!f(e)||!f(e.compositing))return;let t=e.compositing.mask;return typeof t==`string`?se[t]:void 0},p=e=>f(e)?ae(e,`blendMode`,`blendSource`):e,m=e=>f(e)&&`paint`in e?{...ae(e,`paint`,`alignment`),paints:[e.paint]}:e,le=e=>{if(!f(e)||!f(e.progression))return e;let t=e.progression.startValue,n=e.value;return{...ae(e,`progression`),value:typeof t==`number`&&typeof n==`number`?Math.max(t,n):n}},ue=e=>f(e)&&e.kind===`image`?ae(e,`adjustments`):e,de=e=>ie(e)?.filter(e=>!f(e)||e.kind!==`inner`).map(e=>f(e)?{...e,spread:0}:e)??e,fe=e=>{if(!f(e))return e;let t={...e,paint:p(e.paint)};return e.alignment===`inside`?{...t,alignment:`center`}:t},pe=e=>{if(!f(e)||e.kind!==`span`)return e;let t=ae(e,`decorationBlendMode`),n=ie(e.fills);n!==void 0&&(t.fills=n.map(e=>p(e))),f(e.stroke)&&(t.stroke=fe(e.stroke));let r=ie(e.children);return r!==void 0&&(t.children=r.map(e=>pe(e))),t},me=(e,t)=>{let n=ie(t.fills);if(n===void 0)return;let[r]=n,i=f(r)?r.blendMode:void 0;typeof i==`string`&&n.length===1&&(e.blendMode??`normal`)===`normal`&&(t.blendMode=i),t.fills=n.map(e=>p(e))},he=(e,t)=>{let n={...e};`border`in e&&(n.border=m(e.border)),`outline`in e&&(n.outline=m(e.outline));let r=ie(e.fills);r!==void 0&&(n.fills=r.map(e=>ue(e)));let i=ie(e.filters);return i!==void 0&&(n.filters=i.map(e=>le(e))),t?(`shadows`in e&&(n.shadows=de(e.shadows)),me(e,n),n):n},ge=e=>{let t=e.props;if(!f(t)||!f(t.paintFallback))return{...e};let n=t.paintFallback.mask;if(n===void 0)return{...e};let r=ae(t.paintFallback,`mask`),i=Object.keys(r).length===0?ae(t,`paintFallback`):{...t,paintFallback:r},a=e.styles,o=ae(e,`props`);return f(n)&&f(a)&&(o.styles=Object.fromEntries(Object.entries(a).filter(([e,t])=>n[e]!==t))),Object.keys(i).length>0&&(o.props=i),o},_e=e=>{let t=e.compositing;return f(t)?t.groupMode===void 0?t.paintSemantics===`web`&&(e.component===`frame`||e.component===`group`):t.groupMode===`isolated`:!1},ve=e=>{let t={...e};return`stroke`in e&&(t.stroke=fe(e.stroke)),f(e.decoration)&&(t.decoration=ae(e.decoration,`blendMode`)),t},ye=e=>{if(!f(e))return e;let t=ae(ge(e),`compositing`);_e(e)&&f(t.styles)&&(t.styles={...t.styles,isolation:`isolate`});let n=e.component===`text`;if(f(e.appearance)&&(t.appearance=he(e.appearance,n)),!n)return t;f(e.typography)&&(t.typography=ve(e.typography));let r=t.props,i=f(r)?ie(r.richText):void 0;return i!==void 0&&f(r)&&(t.props={...r,richText:i.map(e=>pe(e))}),t},be=e=>f(e)&&typeof e.sortKey==`string`?e.sortKey:``,xe=e=>{let t=new Map;for(let[n,r]of Object.entries(e)){if(!f(r)||typeof r.parentId!=`string`)continue;let e=t.get(r.parentId);e===void 0?t.set(r.parentId,[n]):e.push(n)}let n=t=>be(e[t]),r=(e,t)=>n(e)<n(t)?-1:Number(n(e)>n(t));for(let e of t.values())e.sort(r);return t},Se=(e,t,n)=>({id:e,label:`Mask`,labelOrigin:`generated`,component:`group`,styles:{},geometry:{kind:`mask`,maskId:t,mode:n}}),Ce=(e,t,n,r)=>{let i=``;for(let a of t){let t=ce(e[a]);t!==void 0&&(i=oe(a),n[i]=Se(i,a,t),r[i]=r[a]);let o=r[a];i!==``&&f(o)&&(r[a]={...o,parentId:i})}},we=(e,t,n)=>{for(let[r,i]of xe(n)){let a=i.filter(t=>ce(e[t])!==void 0),[o]=i,s=t[r],c=ce(e[o]);c!==void 0&&a.length===1&&f(s)&&s.component===`group`&&s.geometry===void 0?t[r]={...s,geometry:{kind:`mask`,maskId:o,mode:c}}:Ce(e,i,t,n)}},Te=e=>{let t=e.nodes;if(!f(t))return e;let n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,ye(t)]));if(!f(e.relationships))return{...e,nodes:n};let r={...e.relationships};return we(t,n,r),{...e,nodes:n,relationships:r}},Ee=e=>typeof e==`object`&&!!e&&!Array.isArray(e),De=e=>Array.isArray(e),Oe=e=>{if(!Ee(e))return e;let t={...e};return Reflect.deleteProperty(t,`blendMode`),Reflect.deleteProperty(t,`blendSource`),t},ke=e=>{if(!Ee(e)||e.component!==`text`||!Ee(e.appearance))return e;let t=e.appearance.shadows;return De(t)?{...e,appearance:{...e.appearance,shadows:t.map(e=>Oe(e))}}:e},Ae=e=>{let t=e.nodes;return Ee(t)?{...e,nodes:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,ke(t)]))}:e},je=new Set([...Object.values(d),14]),Me=e=>je.has(e),Ne=new Set([`format-number`,`text-shadow-blend`,`css`,`geometry`]),Pe=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Fe=e=>{if(!Pe(e))return e;let t=Object.fromEntries(Object.entries(e).filter(([e])=>e!==`gridTrack`)),n=t.container;Pe(n)&&(t.container=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`materialized`)));for(let e of[`horizontal`,`vertical`]){let n=t[e];Pe(n)&&n.mode===`hug`&&(t[e]=Object.fromEntries(Object.entries(n).filter(([e])=>e!==`basis`)))}return t},Ie=e=>{let t=e.version;if(!Me(t))return null;if(t===14||!Pe(e.nodes))return e;let n=Object.entries(ne).find(([e])=>Number(e)===t)?.[1];return Ne.has(n)?{...e,version:14}:Object.values(e.nodes).some(e=>Pe(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:14}:{...e,version:14,nodes:Object.fromEntries(Object.entries(e.nodes).map(([e,t])=>[e,Pe(t)&&t.layout!==void 0?{...t,layout:Fe(t.layout)}:t]))}},Le=e=>{let t=Ie(e);return t===null||t===e||e.version===d.v13?t:Ae(e.version===d.v12?t:Te(t))},Re=n.strictObject({}),ze=n.object({firstAgentWorkAt:n.iso.datetime().nullable()}),Be=n.object({cursor:n.string().nullable().default(null),limit:n.number().int().min(1).max(100).default(20)}),Ve=e=>n.object({items:n.array(e),truncated:n.boolean()}),He=2048,Ue=n.enum([`never-captured`,`capture-pending`,`extension-unavailable`,`capture-failed`,`source-mismatch`,`upload-incomplete`,`blob-missing`,`image-load-failed`,`unsupported-legacy-state`]),We=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)}),Ge=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`)}),Ke=n.object({recorded:n.literal(!0)}),qe=n.enum([`invite-only`,`link-view`,`link-comment`,`link-edit`]),Je=n.enum([`owner`,`can-edit`,`can-comment`,`can-view`]),Ye=n.enum([`can-edit`,`can-comment`,`can-view`]),Xe=n.object({read:n.boolean(),comment:n.enum([`yes`,`sign-in`,`no`]),edit:n.enum([`yes`,`sign-in`,`no`]).default(`no`),grants:n.array(n.object({source:n.enum([`direct`,`team`,`link`]),accessLevel:Je})).default([]),grantableAccessLevels:n.array(Ye).default([]),share:n.boolean(),manage:n.boolean(),readHistory:n.boolean().default(!1)}),h=n.object({id:n.uuid(),title:n.string().min(1),accessState:qe,organisationId:n.uuid().nullable(),sourceUrl:n.string().nullable(),unresolvedCount:n.number().int().min(0),viewerCan:Xe,createdAt:n.iso.datetime(),lastActivityAt:n.iso.datetime()}),Ze=n.object({title:n.string().trim().min(1),organisationId:n.uuid().nullable().default(null),sourceUrl:n.string().nullable().default(null)}),Qe=h.extend({version:n.number().int().positive()}),$e=n.object({canvasId:n.uuid()}),et=n.union([n.literal(`own`),n.literal(`everything`),n.uuid()]),tt=n.object({collection:et.default(`own`),title:n.string().trim().min(1).optional().describe(`Title text to match before returning canvas ids.`),deleted:n.boolean().default(!1),accessState:qe.optional(),scope:n.enum([`all`,`mine`,`shared`]).default(`all`),hasUnresolved:n.boolean().default(!1)}),nt=h.extend({screenCount:n.number().int().min(0),hasRecording:n.boolean(),lastViewedAt:n.iso.datetime().nullable()}),rt=Ve(n.union([nt.extend({thumbnail:We}),nt.extend({thumbnail:n.null(),thumbnailFallbackReason:Ue})])),it=n.object({canvasId:n.uuid(),title:n.string().trim().min(1)}),at=n.object({canvasId:n.uuid()}),ot=n.object({canvasId:n.uuid(),deletedAt:n.iso.datetime()}),st=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)])}),ct=n.object({canvas:h}),lt=n.object({canvasId:n.uuid(),organisationId:n.union([n.uuid(),n.literal(`personal`)]),title:n.string().trim().min(1).optional()}),ut=n.object({canvas:h}),dt=n.object({canvasId:n.uuid(),sourceCanvasId:n.uuid().optional(),organisationId:n.union([n.uuid(),n.literal(`personal`)]),title:n.string().trim().min(1),document:n.record(n.string(),n.unknown()),screenIds:n.array(n.uuid())}),ft=n.object({canvas:h,document:n.record(n.string(),n.unknown())}),pt=n.object({canvasId:n.uuid(),confirmation:n.string().min(1)}),mt=n.object({canvasId:n.uuid()}),ht=n.object({canvasId:n.uuid(),accessState:qe}),gt=n.object({canvas:h,widened:n.boolean()}),_t=n.object({canvasId:n.uuid()}),vt=n.object({lastViewedAt:n.iso.datetime().nullable()}),yt=n.object({canvasId:n.uuid()}),bt=n.object({canvasId:n.uuid()}),xt=/javascript|vbscript|data\s*:\s*text\/html|expression\s*\(|@import/iu,St=n.string().refine(e=>!xt.test(e),`unsafe CSS value`),g=n.number(),_=n.number().nonnegative(),v=g,Ct=_,y=n.number().min(0).max(1),wt=n.string().min(1),Tt=n.object({space:n.enum([`srgb`,`display-p3`]),red:y,green:y,blue:y,alpha:y,definitionId:wt.optional()}),Et=n.object({id:wt,position:y,color:Tt}),Dt=n.object({id:wt,visible:n.boolean()}),Ot=Dt.extend({kind:n.literal(`blur`),value:Ct,parameter:n.enum([`radius`,`standard-deviation`]).optional()}),kt=[Dt.extend({kind:n.literal(`brightness`),value:Ct}),Dt.extend({kind:n.literal(`contrast`),value:Ct}),Dt.extend({kind:n.literal(`grayscale`),value:y}),Dt.extend({kind:n.literal(`hue-rotate`),value:v}),Dt.extend({kind:n.literal(`invert`),value:y}),Dt.extend({kind:n.literal(`saturate`),value:Ct}),Dt.extend({kind:n.literal(`sepia`),value:y})],At=n.discriminatedUnion(`kind`,[Ot,...kt]),jt=n.discriminatedUnion(`kind`,[Ot.extend({progression:n.object({startValue:Ct,start:n.object({x:v,y:v}),end:n.object({x:v,y:v})}).optional()}),...kt]),Mt=n.tuple([v,v,v,v,v,v]).refine(([e,t,n,r])=>e*r!==t*n,`paint transform must be invertible`),Nt=[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`plus-lighter`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],Pt=n.enum(Nt),Ft=n.object({kind:n.literal(`figma`),originalMode:n.string(),mappedMode:Pt,sourceGuid:n.string().optional(),path:n.array(n.string())}),It=n.object({id:wt,blendMode:Pt.optional(),blendSource:Ft.optional(),visible:n.boolean(),opacity:y}),Lt=n.discriminatedUnion(`kind`,[It.extend({kind:n.literal(`solid`),color:Tt}),It.extend({kind:n.literal(`linear-gradient`),angle:v,transform:Mt.optional(),stops:n.array(Et).min(2)}),It.extend({kind:n.literal(`radial-gradient`),center:n.object({x:v,y:v}),radius:n.object({x:Ct,y:Ct}),transform:Mt.optional(),stops:n.array(Et).min(2)}),It.extend({kind:n.literal(`angular-gradient`),transform:Mt,stops:n.array(Et).min(2)}),It.extend({kind:n.literal(`diamond-gradient`),transform:Mt,stops:n.array(Et).min(2)}),It.extend({kind:n.literal(`image`),assetId:n.string().min(1),fit:n.enum([`fill`,`cover`,`fit`,`crop`,`tile`]),tileScale:v.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:y,y,width:y,height:y}).optional(),transform:Mt.optional(),filters:n.array(At).optional(),naturalSize:n.object({width:v.positive(),height:v.positive()}).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`]})]),Rt=n.intersection(Lt,n.object({alternatives:n.partialRecord(n.enum([`solid`,`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`,`image`]),Lt).optional(),recentGradient:n.enum([`linear-gradient`,`radial-gradient`,`angular-gradient`,`diamond-gradient`]).optional()})),zt=n.object({id:wt,name:n.string().trim().min(1),value:n.union([Tt.omit({definitionId:!0}),n.object({definitionId:wt})]),source:n.object({kind:n.literal(`figma`),key:wt,modeId:wt.optional()}).optional()}),Bt=n.object({op:n.literal(`setArtworkColor`),nodeId:n.literal(`root`),colorId:n.string().min(1),definition:zt.nullable()}).refine(e=>e.definition===null||e.definition.id===e.colorId,`colour identity must match`),Vt=n.object({ratio:_,offset:g.optional()}),Ht=n.object({min:_.optional(),max:_.optional(),minParent:Vt.optional(),maxParent:Vt.optional()}).refine(({min:e,max:t})=>e===void 0||t===void 0||e<=t,`size minimum cannot exceed maximum`),Ut=n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`fixed`),value:_}).strict(),Ht.extend({mode:n.literal(`hug`),implicitExtent:_.optional()}).strict(),Ht.extend({mode:n.literal(`fill`),offset:g.optional()}).strict()]),Wt=n.object({top:_,right:_,bottom:_,left:_}),Gt=n.union([n.literal(`auto`),g]),Kt=n.object({top:Gt,right:Gt,bottom:Gt,left:Gt}),qt=n.object({mode:n.enum([`auto-fill`,`auto-fit`]),minimum:n.number().positive()}),Jt=n.object({x:g,y:g}),Yt=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:g,rowGap:g.optional(),columnGap:g.optional(),crossGapMode:n.literal(`auto`).optional(),wrap:n.enum([`nowrap`,`wrap`]).optional(),gridColumns:n.number().int().positive().optional(),gridAutoRepeat:qt.optional(),padding:Wt}).strict(),Xt=n.object({button:n.literal(!0).optional(),overflowClip:n.literal(!0).optional(),lineAboveBorderBottom:g.optional()}).strict(),Zt=n.object({rotation:g.optional(),flipHorizontal:n.boolean().optional(),flipVertical:n.boolean().optional(),aspectRatioLocked:n.boolean().optional(),aspectRatio:n.number().positive().optional(),horizontal:Ut.optional(),vertical:Ut.optional(),position:n.enum([`flow`,`absolute`]).optional(),retainedIgnore:n.literal(!0).optional(),gridParticipation:n.literal(`unassigned`).optional(),gridEmptyPlacement:n.literal(`manual`).optional(),gridAutoTrackPolicy:n.object({rows:n.literal(`extend-last`).optional(),columns:n.literal(`extend-last`).optional()}).strict().optional(),retainedFlexSpacing:n.object({gap:n.union([g,St.min(1)]),counterGap:n.union([g,St.min(1)]),crossGapMode:n.literal(`auto`).optional()}).strict().optional(),alignSelf:n.enum([`auto`,`start`,`center`,`end`,`stretch`]).optional(),flexGrow:_.optional(),flexShrink:_.optional(),flexBasis:n.union([n.literal(`auto`),_,Vt]).optional(),flowOffset:Jt.optional(),order:g.int().optional(),margin:Kt.partial().optional(),clipContent:n.boolean().optional(),baselineSource:Xt.optional(),container:Yt.partial().extend({padding:Wt.partial().optional()}).optional()}).strict(),Qt=g,$t=_,en=n.number().min(0).max(1),tn=n.string().min(1),nn=n.object({topLeft:$t,topRight:$t,bottomRight:$t,bottomLeft:$t,smoothing:en.optional()}),rn=n.array($t).min(1),an=n.enum([`none`,`round`,`square`]),on=n.object({visible:n.boolean(),layoutInclusion:n.enum([`always`,`visible`,`none`]).optional(),width:n.object({top:$t,right:$t,bottom:$t,left:$t}),style:n.enum([`solid`,`dashed`,`dotted`]),paints:n.array(Rt),dashPattern:rn.optional(),dashCap:an.optional(),dashOrigin:n.literal(`css`).optional(),alignment:n.enum([`inside`,`center`,`outside`]).optional()}),sn=on.pick({width:!0,style:!0,layoutInclusion:!0}),cn=n.object({visible:n.boolean(),width:$t,offset:Qt,style:n.enum([`solid`,`dashed`,`dotted`]),paints:n.array(Rt),dashPattern:rn.optional(),dashCap:an.optional()}),ln=n.object({id:tn,visible:n.boolean(),kind:n.enum([`outer`,`inner`]),color:Tt,offsetX:Qt,offsetY:Qt,blur:$t,spread:Qt,blendMode:Pt.optional(),blendSource:Ft.optional(),isShownBehindNode:n.boolean().optional()}),un=n.object({opacity:en,blendMode:Pt,fills:n.array(Rt),border:on,retainedBorder:sn.optional(),outline:cn,radius:nn,shadows:n.array(ln),filters:n.array(At),backdropFilters:n.array(jt)}),dn=un.partial().refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),fn=[`opacity`,`blendMode`,`fills`,`border`,`retainedBorder`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],pn=n.enum(fn),mn=un.partial().extend({clear:n.array(pn).min(1).max(fn.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`),hn=n.number(),gn=n.number().nonnegative(),_n=n.string().regex(/^[\u{20}-\u{7E}]{4}$/u),vn=_n.refine(e=>![`wght`,`opsz`].includes(e)),b=n.object({family:n.string().min(1),fallbackFamilies:n.array(n.string().min(1)),size:gn,weight:n.number().min(1).max(1e3),variations:n.record(vn,hn).optional(),features:n.record(_n,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:hn})]).optional(),style:n.enum([`normal`,`italic`,`oblique`]),lineHeight:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`normal`)}),n.object({mode:n.literal(`fixed`),value:gn}),n.object({mode:n.literal(`percent`),value:gn})]),letterSpacing:n.union([hn,n.object({mode:n.literal(`percent`),value:hn})]),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:Tt.optional(),blendMode:Pt.optional(),thickness:n.union([gn,n.object({mode:n.literal(`percent`),value:gn}),n.object({mode:n.literal(`font-default`)})]).optional(),offset:n.union([hn,n.object({mode:n.literal(`percent`),value:hn})]).optional(),skipInk:n.enum([`auto`,`none`,`all`]).optional()}),stroke:n.object({width:gn,paint:Rt,alignment:n.enum([`center`,`outside`]).optional()}).optional(),wrapping:n.enum([`wrap`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]),wrapStyle:n.enum([`auto`,`pretty`,`balance`]).optional(),paragraphSpacing:gn.optional(),paragraphIndent:gn.optional(),listStyle:n.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:gn.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:hn,right:hn,bottom:hn,left:hn}).optional()}),yn=b.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(),bn=b.partial().strict(),xn=b.keyof().options,Sn=bn.extend({featureChanges:n.object({set:b.shape.features,clear:n.array(_n).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),variationChanges:n.object({set:b.shape.variations,clear:n.array(vn).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),clear:n.array(b.keyof()).max(xn.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`),Cn={"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`],"paint-order":[`stroke`],"white-space":[`wrapping`],"text-wrap-style":[`wrapStyle`],"text-wrap":[`wrapStyle`]},wn=/^(?:behavior|-moz-binding)$/iu,Tn=n.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!wn.test(e),`unsafe CSS property`),x=n.object({id:n.string().min(1),property:Tn,value:St,enabled:n.boolean()}),En=n.object({declarations:n.array(x)}).refine(({declarations:e})=>new Set(e.map(e=>e.id)).size===e.length,`additional style ids must be unique`),Dn=n.array(x.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),On=n.object({set:n.array(x).refine(e=>new Set(e.map(e=>e.id)).size===e.length,`declaration ids must be unique`).optional(),clear:Dn.optional(),order:Dn.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`),kn=new Set([`#`,`%`,`/`,`:`,`<`,`>`,`?`,`@`,`[`,`\\`,`]`,`^`,`|`]),An=e=>{if(e.hostname.startsWith(`[`))return!0;let t=decodeURIComponent(e.hostname);for(let e of t){let t=e.codePointAt(0)??0;if(t===127||t<=32||kn.has(e))return!1}return t!==``},jn=new Set([`http:`,`https:`,`mailto:`,`tel:`]),Mn=e=>{let t=e.trim();if(t===``)return!1;try{let e=new URL(t,`https://enhance.invalid/`);return jn.has(e.protocol)&&(![`http:`,`https:`].includes(e.protocol)||An(e))}catch{return!1}},Nn=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.overflowWrap.paddingBottom.paddingLeft.paddingRight.paddingTop.rowGap.textDecorationColor.textDecorationLine.textDecorationSkipInk.textDecorationStyle.textDecorationThickness.textRendering.textShadow.textTransform.textUnderlineOffset.verticalAlign.whiteSpace.wordBreak.wordSpacing.WebkitFontSmoothing.WebkitTextFillColor.WebkitTextStrokeColor.WebkitTextStrokeWidth.--canvas-text-stroke-alignment`.split(`.`)),Pn=b.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}).extend({decoration:b.shape.decoration.omit({blendMode:!0})}).strict(),Fn=Pn.keyof().options,In=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:Pn.extend({listStyle:b.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`]}),Ln=n.object({id:In.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(),Rn=Rt.array().optional();n.object({fills:Rn});const zn=yn.pick({paragraphSpacing:!0,paragraphIndent:!0,listSpacing:!0,wrapStyle:!0}).extend({hangingPunctuation:b.shape.hangingPunctuation,verticalTrim:b.shape.verticalTrim,stroke:b.shape.stroke.nullable(),decorationBlendMode:b.shape.decoration.shape.blendMode,backgroundBlendMode:Pt.optional()}).strip(),Bn=e=>typeof e==`string`&&Mn(e)?e:void 0,Vn=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Object.entries(e);return t.some(([e,t])=>!Nn.has(e)||typeof t!=`string`&&typeof t!=`number`)?null:Object.fromEntries(t)},Hn=e=>{let t=Reflect.get(e,`sourcePath`);return{...Object.fromEntries(Object.entries(e).filter(([e])=>![`text`,`href`,`sourcePath`,`styles`,`fills`,`stroke`,`decorationBlendMode`,`backgroundBlendMode`,`paragraph`,`paragraphSpacing`,`paragraphIndent`,`listSpacing`,`hangingPunctuation`,`verticalTrim`,`wrapStyle`,`soft`,`textStyle`].includes(e))),...typeof t==`string`&&{sourcePath:t}}},Un=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=Gn(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},Wn=e=>{let t=Reflect.get(e,`soft`);return t!==void 0&&t!==!0?null:{...Hn(e),kind:`break`,...t===!0&&{soft:t}}},Gn=(e,t)=>{if(typeof e!=`object`||!e)return null;let n=Reflect.get(e,`kind`),r=Hn(e);if(n===`break`)return Wn(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=Vn(Reflect.get(e,`styles`)),o=Rn.safeParse(Reflect.get(e,`fills`)),s=yn.optional().safeParse(Reflect.get(e,`paragraph`)),c=zn.safeParse(e),l=Ln.optional().safeParse(Reflect.get(e,`textStyle`));if(a===null||!o.success||!s.success||!c.success||!l.success||!Array.isArray(i))return null;let u=Bn(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)),...u!==void 0&&{href:u}}},Kn=e=>e.kind===`text`?e.text:e.soft===!0?`\u2028`:`
3
- `,S=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(Kn(e))}return n.join(``)},qn=e=>{let t=e.props;if(t===void 0||!Array.isArray(t.richText))return[];let n=Un(t.richText);if(n===null)return[];let r=t.text;return S(n)===r?n:[]},Jn=e=>{let t=[...qn(e)];for(;t.length>0;){let e=t.pop();if(e?.kind===`span`){if(e.fills!==void 0)return!0;for(let n of e.children)t.push(n)}}return!1},Yn=e=>{let t=new Set,n=(e,r)=>{for(let i of e)i.kind===`span`?n(i.children,i.href??r):t.add(r)};return n(e),t.size===1?[...t][0]??null:null},Xn=e=>[...Object.keys(e.styles),...e.stroke===void 0?[]:[`WebkitTextStrokeWidth`,`WebkitTextStrokeColor`,`--canvas-text-stroke-alignment`]],C=n.object({url:n.url(),expiresAt:n.iso.datetime(),headers:n.record(n.string(),n.string())}),Zn=n.object({url:n.url(),expiresAt:n.iso.datetime(),bytes:n.number().int().min(0)}),Qn=`/v1/canvas-assets/`,$n=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],er=n.string().regex(/^image\/[a-z0-9.+-]+$/u),tr=n.object({canvasId:n.uuid(),contentType:n.enum($n),bytes:n.number().int().positive()}),nr=n.object({assetId:n.uuid(),path:n.string().startsWith(`/v1/canvas-assets/`),upload:C}),rr=(e,t)=>`${Qn}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,ir=n.tuple([n.uuid(),n.uuid()]),ar=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=ir.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},or=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],sr=n.object({canvasId:n.uuid(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),cr=sr.extend({bytes:n.number().int().positive()}),lr=cr.extend({contentType:n.enum(or)}),ur=n.object({path:n.string().startsWith(`/v1/canvas-assets/`)}),dr=ur.extend({upload:C}),fr=(e,t)=>`${Qn}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`,pr=n.object({canvasId:n.uuid(),sources:n.array(sr).min(1)}),mr=n.object({resources:n.array(n.object({source:sr,path:n.string()}))}),hr=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:sr.safeParse({canvasId:t,sha256:r}).data??null},gr=1e3,_r=new Set(or),vr=(e,t)=>e===`image`?er.safeParse(t).success:_r.has(t),yr=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid()}),br=n.discriminatedUnion(`kind`,[yr.extend({kind:n.literal(`image`),contentType:n.enum($n),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),yr.extend({kind:n.literal(`font`),contentType:n.enum(or),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)})]),xr=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(gr),maximumWeight:n.number().min(1).max(gr)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]),Sr=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:xr.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=>vr(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?rr(e.canvasId,e.assetId):fr(e.canvasId,e.sha256)),`The resource path must match its native identity.`),Cr=Sr.safeExtend({upload:C.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`),wr=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`]),Tr=(e,t)=>typeof t==`number`&&!wr.has(e.toLowerCase())?`${String(t)}px`:String(t),Er=[`top`,`right`,`bottom`,`left`],Dr=[`grid-template-rows`,`grid-template-columns`,`grid-template-areas`],Or={gap:[`row-gap`,`column-gap`],"text-wrap":[`text-wrap-mode`,`text-wrap-style`],padding:Er.map(e=>`padding-${e}`),margin:Er.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":Dr,grid:[...Dr,`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`]},kr=e=>Or[e.toLowerCase()]??[e.toLowerCase()],Ar=(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}},jr=(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=Ar(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},Mr=e=>/^(?:--|-?[_a-z\u{80}-\u{FFFF}])[-\w\u{80}-\u{FFFF}]*$/iu.test(e)&&!/^(?:auto|span|initial|unset)$/iu.test(e)?e:`auto`,Nr=(e,t,n)=>{let r=jr(t,`/`),i=r[0]??t;if(e!==`grid-area`)return r[n]??Mr(i);let a=r[1]??Mr(i);return[i,a,r[2]??Mr(i),r[3]??Mr(a)][n]??t},Pr=(e,t,n)=>{let r=jr(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]},Fr=(e,t,n)=>{if(/^(?:none|initial|unset)$/iu.test(t))return[`none`,`none`,`none`,`auto`,`auto`,`row`][n]??t;let r=jr(t,`/`),i=r[0]??t,a=r[1];if(i===``||a===``||r.length>2)return t;let o=jr(i).some(e=>e.toLowerCase()===`auto-flow`),s=a!==void 0&&jr(a).some(e=>e.toLowerCase()===`auto-flow`);if(e===`grid`&&a!==void 0&&o!==s)return Pr(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},Ir=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]},Lr=(e,t,n)=>{if(/(?:var|env)\(|^(?:inherit|revert(?:-layer)?)$/iu.test(t))return t;if(/^grid-(?:area|row|column)$/u.test(e))return Nr(e,t,n);if(e===`grid-template`||e===`grid`)return Fr(e,t,n);let r=jr(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:Ir(r)[n]??t:r[n]??(n===3?r[1]:void 0)??r[0]??t},Rr=e=>e.additionalStyles===void 0?{}:Object.fromEntries(e.additionalStyles.declarations.filter(e=>e.enabled).map(e=>[e.property,e.value])),zr=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()))),...Rr(e)}},Br=e=>/!important\s*$/iu.test(String(e)),Vr=(e,t)=>{let n=String(e).replace(/\s*!important\s*$/iu,``).trim();return t||n.includes(`(`)?n:n.toLowerCase()},Hr=(e,t)=>{let n=null,r=!1,i=Object.entries(zr(e));for(let[e,a]of i){let i=kr(e),o=i.indexOf(t);if(o===-1)continue;let s=Br(a);if(r&&!s)continue;let c=Vr(a,/^grid(?:-|$)/iu.test(e));n=i.length===1?c:Lr(e.toLowerCase(),c,o),r=s}return n??void 0},Ur=new WeakMap,Wr=(e,t)=>{let n=Ur.get(e.styles),r=n!==void 0&&n.additionalStyles===e.additionalStyles?n:{additionalStyles:e.additionalStyles,values:new Map};if(r!==n&&Ur.set(e.styles,r),r.values.has(t))return r.values.get(t);let i=Hr(e,t);return r.values.set(t,i),i},Gr=(e,t)=>{let n=new Set(Object.entries(zr(e)).filter(([,e])=>Br(e)).flatMap(([e])=>kr(e)));return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,kr(e).some(e=>n.has(e))&&!Br(t)?`${Tr(e,t)} !important`:t]))},Kr=(e,t)=>{let n=new Set,r=e;for(;r!==void 0&&!n.has(r.id);){n.add(r.id);let e=Wr(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`},qr=(e,t,n)=>{let r=/^(?:vertical|sideways)-/u.test(Kr(e,n));return[t===`horizontal`?`width`:`height`,t===`vertical`===r?`inline-size`:`block-size`]},Jr=e=>{if(e===void 0)return`freeform`;let t=Wr(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`},Yr=(e,t)=>{if(e===void 0||Jr(e)!==`flex`)return;let n=e.layout?.container?.direction??(t=>Wr(e,t))(`flex-direction`)??`row`;if(!/^(?:row|column)(?:-reverse)?$/u.test(n))return;let r=/^(?:vertical|sideways)-/u.test(Kr(e,t));return n.startsWith(`column`)===r?`horizontal`:`vertical`},Xr=n.enum([`png`,`jpeg`]),Zr=n.number().positive(),Qr=n.strictObject({format:Xr.optional(),scale:Zr.optional()}),$r=n.strictObject({format:Xr.nullable().optional(),scale:Zr.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),ei=n.number(),ti=ei.nonnegative(),ni=n.string().min(1).max(200),ri=n.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),ii=n.strictObject({x:ei,y:ei,width:ti,height:ti}),ai=n.strictObject({kind:n.literal(`path`),path:ri.min(1),fillRule:n.enum([`nonzero`,`evenodd`]),viewBox:ii.extend({width:ti.positive(),height:ti.positive()})}),oi=n.strictObject({kind:n.literal(`polygon`),count:n.number().int().min(3),innerRatio:n.number().min(0).max(1).optional(),cornerRadius:ti,cornerSmoothing:n.number().min(0).max(1)}),si=n.enum([`union`,`subtract`,`intersect`,`exclude`]),ci=n.strictObject({kind:n.literal(`boolean`),operation:si,operandIds:n.array(ni).min(1).refine(e=>new Set(e).size===e.length),result:n.strictObject({path:ri,fillRule:n.literal(`nonzero`),isEmpty:n.boolean(),bounds:ii,inputKey:n.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),li=n.discriminatedUnion(`kind`,[ai,oi,n.strictObject({kind:n.literal(`mask`),maskId:ni,mode:n.enum([`alpha`,`luminance`,`outline`]).optional()}),ci]),ui=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,di=n.literal(14,{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().refine(e=>e.startsWith(`data:image/jpeg;base64,`)||ar(e)!==null),families:n.array(n.string().min(1)).min(1)});const w=n.object({x:n.number(),y:n.number(),width:n.number().nonnegative(),height:n.number().nonnegative()}),fi=n.enum([`start`,`center`,`end`,`stretch`,`scale`]),pi=n.object({x:fi,y:fi}),mi=n.enum([`source`,`generated`,`content`,`user`]),T=n.looseObject({id:n.string().min(1),label:n.string(),component:n.string().min(1),labelOrigin:mi.optional(),visible:n.boolean().optional(),locked:n.boolean().optional(),constraints:pi.optional(),styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Zt.optional(),responsive:n.never().optional(),appearance:dn.optional(),exportSettings:Qr.optional(),typography:bn.optional(),additionalStyles:En.optional(),geometry:li.optional(),compositing:n.never({error:ui}).optional(),props:n.record(n.string(),n.unknown()).optional(),box:w.optional()}),hi=n.object({version:n.literal(14),nodes:n.record(n.string(),T),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({})}),gi=n.record(n.string(),n.unknown()),_i=n.preprocess(e=>{let t=gi.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?vi():Le(t)},hi),vi=()=>({version:14,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),yi=n.string().min(1),bi=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:yi.optional()}),xi=n.enum([`text-stroke-inside`,`text-stroke-outside-translucent`,`text-stroke-paints`,`text-inner-shadow`,`text-shadow-spread`,`text-shadow-blend`,`text-background-blur`,`progressive-layer-blur`,`progressive-background-blur`,`blend-plus-darker`,`blend-linear-burn`,`image-exposure`,`image-contrast`,`image-saturation`,`image-temperature`,`image-tint`,`image-highlights`,`image-shadows`,`effect-noise`,`effect-texture`,`effect-glass`]),Si=n.object({nodeCount:n.number().int().positive(),unsupportedFeatures:n.array(n.object({feature:xi,count:n.number().int().positive()})).optional(),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(bi)}),Ci=T.omit({id:!0}).extend({temporaryId:yi}),wi=n.object({temporaryId:yi,parentTemporaryId:yi,sortKey:n.string().min(1)}),Ti=n.object({version:n.literal(1),rootTemporaryId:yi,nodes:n.array(Ci).min(1),relationships:n.array(wi),report:Si.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),Ei=n.object({canvasId:n.uuid(),documentFormatVersion:di,mutationId:n.uuid(),baseVersion:n.number().int().positive(),screenNodeId:n.string().min(1),draft:Ti}),Di=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(yi,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),w),affectedBounds:w}),Oi=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],ki=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],Ai=[`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`],ji=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],Mi=n.number().int().positive(),Ni=n.object({x:n.number(),y:n.number(),width:n.number().positive(),height:n.number().positive()}),E=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:Ni})]),Pi=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),Fi=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative()}),Ii=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:Ni,version:n.number().int().positive(),alreadyPresent:n.boolean()}),Li=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:E.default({kind:`content`}),sourceState:Pi.optional(),scale:n.number().positive().default(1),maxOutputPixels:Mi.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`]}),Ri=n.enum(Oi),zi=n.enum(ki),Bi=n.enum(Ai),Vi=n.enum(ji),Hi=n.object({code:Vi,message:n.string().min(1).max(500),sourceId:n.string().min(1).nullable()}),Ui=n.object({reason:Bi,phase:Ri,message:n.string().min(1).max(500),retryable:n.boolean(),sourceId:n.string().min(1).nullable()}),Wi=n.object({phase:Ri,durationMs:n.number().int().min(0)}),Gi=n.object({canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),target:E,sourceState:Fi.optional(),snapshot:Ii.optional(),bounds:Ni,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(Hi),timings:n.array(Wi),expiresAt:n.iso.datetime()}),Ki=n.object({id:n.uuid(),canvasId:n.uuid(),purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:Ri,requestedVersion:n.number().int().positive(),target:E,sourceState:Pi.optional(),scale:n.number().positive(),maxOutputPixels:Mi.optional(),format:n.literal(`png`),attempt:n.number().int().min(0),lastFailure:Ui.optional(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),qi=n.discriminatedUnion(`state`,[Ki.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),Ki.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),Ki.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Gi,failure:n.null()}),Ki.extend({state:n.literal(`failed`),result:n.null(),failure:Ui}),Ki.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ui.extend({reason:n.literal(`CANCELLED`)})}),Ki.extend({state:n.literal(`expired`),result:n.null(),failure:Ui.extend({reason:n.literal(`EXPIRED`)})})]),Ji=n.object({job:qi,alreadyExists:n.boolean()}),Yi=n.object({jobId:n.uuid()}),Xi=Yi.extend({waitMs:n.number().int().min(0).max(1e4).optional()}),Zi=n.object({job:qi}),Qi=n.object({jobId:n.uuid()}),$i=n.object({job:qi}),ea=n.discriminatedUnion(`status`,[n.object({status:n.literal(`available`),version:n.number().int().positive(),format:n.literal(`enhance-scene-json`),code:n.string(),prototypes:n.array(n.object({nodeId:n.string(),prototypeId:n.uuid(),deploymentId:n.uuid(),capability:n.literal(`canvas.read`),canvasPath:n.string(),input:n.object({canvasRef:n.uuid(),view:n.literal(`source`),nodeId:n.string()}),guidance:n.string()})),guidance:n.string()}),n.object({status:n.literal(`unavailable`),guidance:n.string()})]),ta=n.object({canvasId:n.uuid(),nodeId:n.string().min(1),expectedVersion:n.number().int().positive(),scale:n.number().positive()}),na=n.object({jobId:n.uuid()}),ra=n.object({jobId:n.uuid(),download:Zn,source:ea.optional()}),ia=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`)})}),aa=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative(),context:n.strictObject({expectedVersion:n.number().int().positive(),request:ia}).optional()}),oa=n.object({job:qi,alreadyExists:n.boolean()}),sa=n.object({rootIds:n.array(n.string().min(1))}),ca=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)})]),la=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()})]),ua=n.object({source:la,destination:ca,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`]})}),da=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)})]),fa=n.object({id:n.uuid(),canvasId:n.uuid(),source:da,destination:ca,phase:Ri,requestedVersion:n.number().int().positive(),attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),pa=n.discriminatedUnion(`state`,[fa.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),fa.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),fa.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Di.extend({report:Si}),failure:n.null()}),fa.extend({state:n.literal(`failed`),result:n.null(),failure:Ui}),fa.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ui.extend({reason:n.literal(`CANCELLED`)})}),fa.extend({state:n.literal(`expired`),result:n.null(),failure:Ui.extend({reason:n.literal(`EXPIRED`)})})]),ma=ua.and(n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),mutationId:n.uuid().optional(),writeScope:sa.optional(),scope:Li.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`]}),ha=n.object({job:pa,alreadyExists:n.boolean()}),ga=n.object({jobId:n.uuid()}),_a=n.object({job:pa}),va=n.object({jobId:n.uuid()}),ya=n.object({job:pa});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:Ti}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const ba=n.object({add:n.array(n.object({resourceId:n.string().min(1)}).catchall(n.unknown())),remove:n.array(n.string().min(1))}),xa=n.union([n.string(),g]),D=n.union([x.shape.value,g]).nullable().optional(),Sa=n.strictObject({border:D,"border-block":D,"border-block-color":D,"border-block-style":D,"border-block-width":D,"border-block-end":D,"border-block-end-color":D,"border-block-end-style":D,"border-block-end-width":D,"border-block-start":D,"border-block-start-color":D,"border-block-start-style":D,"border-block-start-width":D,"border-bottom":D,"border-bottom-color":D,"border-bottom-style":D,"border-bottom-left-radius":xa.optional(),"border-bottom-right-radius":xa.optional(),"border-bottom-width":xa.optional(),"border-color":n.string().nullable().optional(),"border-image":D,"border-image-source":D,"border-image-slice":D,"border-image-width":D,"border-image-outset":D,"border-image-repeat":D,"border-inline":D,"border-inline-color":D,"border-inline-style":D,"border-inline-width":D,"border-inline-end":D,"border-inline-end-color":D,"border-inline-end-style":D,"border-inline-end-width":D,"border-inline-start":D,"border-inline-start-color":D,"border-inline-start-style":D,"border-inline-start-width":D,"border-left":D,"border-left-color":D,"border-left-style":D,"border-left-width":xa.optional(),"border-radius":xa.nullable().optional(),"border-right":D,"border-right-color":D,"border-right-style":D,"border-right-width":xa.optional(),"border-style":D,"border-top":D,"border-top-color":D,"border-top-style":D,"border-top-left-radius":xa.optional(),"border-top-right-radius":xa.optional(),"border-top-width":xa.optional(),"border-width":xa.nullable().optional(),outline:D,"outline-color":D,"outline-style":D,"outline-offset":xa.optional(),"outline-width":xa.optional()}),Ca=n.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),wa=n.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),Ta=x.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Ea=n.union([b.shape.weight,n.enum([`normal`,`bold`,`bolder`,`lighter`]),n.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>b.shape.weight.safeParse(Number(e)).success)]),O={color:Ta,"font-family":x.shape.value,"font-size":n.union([_,Ca]),"font-weight":Ea,"font-style":n.enum([`normal`,`italic`,`oblique`]),"letter-spacing":g,"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`])},Da=n.strictObject({color:O.color.optional(),"font-family":O[`font-family`].optional(),"font-size":O[`font-size`].optional(),"font-weight":O[`font-weight`].optional(),"font-style":O[`font-style`].optional(),"letter-spacing":O[`letter-spacing`].optional(),"line-height":O[`line-height`].optional(),"text-align":O[`text-align`].optional(),"white-space":O[`white-space`].optional()}),Oa=n.union([x.shape.value,g]).nullable().optional(),ka=n.strictObject({"text-decoration":Oa,"text-decoration-line":Oa,"text-decoration-style":Oa,"text-decoration-color":Oa,"text-decoration-thickness":Oa,"text-underline-offset":Oa,"text-decoration-skip-ink":Oa,color:O.color.nullable().optional(),"font-family":O[`font-family`].nullable().optional(),"font-size":O[`font-size`].nullable().optional(),"font-weight":O[`font-weight`].nullable().optional(),"font-optical-sizing":n.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":x.shape.value.nullable().optional(),"font-feature-settings":x.shape.value.nullable().optional(),"text-wrap":x.shape.value.nullable().optional(),"text-wrap-mode":x.shape.value.nullable().optional(),"text-wrap-style":x.shape.value.nullable().optional(),"text-box":x.shape.value.nullable().optional(),"text-box-trim":x.shape.value.nullable().optional(),"text-box-edge":x.shape.value.nullable().optional(),"font-style":O[`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([g,wa,n.literal(`normal`)]).nullable().optional(),"line-height":O[`line-height`].nullable().optional(),"text-align":O[`text-align`].nullable().optional(),"text-indent":n.union([g,wa]).nullable().optional(),"white-space":O[`white-space`].nullable().optional(),"word-spacing":n.union([g,wa,n.literal(`normal`)]).nullable().optional()}),Aa=x.shape.value,ja=n.union([n.string(),g]),k=n.union([x.shape.value,g]).nullable().optional(),Ma=ka.extend(Sa.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,grid:k,"grid-template":k,"grid-template-columns":k,"grid-template-rows":k,"grid-template-areas":k,"grid-auto-columns":k,"grid-auto-rows":k,"grid-auto-flow":k,"grid-row":k,"grid-column":k,"grid-area":k,"grid-row-start":k,"grid-row-end":k,"grid-column-start":k,"grid-column-end":k,"justify-items":k,"justify-self":k,"place-items":k,"place-self":k,"place-content":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,isolation: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(),"background-image":k,"background-size":k,"background-position":k,"background-repeat":k,"background-origin":k,"background-blend-mode":k,"box-shadow":n.string().nullable().optional(),"column-gap":ja.optional(),gap:ja.optional(),"margin-bottom":ja.optional(),"margin-left":ja.optional(),"margin-right":ja.optional(),"margin-top":ja.optional(),opacity:n.union([n.string(),n.number()]).nullable().optional(),overflow:Aa.nullable().optional(),"overflow-x":Aa.nullable().optional(),"overflow-y":Aa.nullable().optional(),"padding-bottom":ja.optional(),"padding-left":ja.optional(),"padding-right":ja.optional(),"padding-top":ja.optional(),"row-gap":ja.optional(),"stroke-width":ja.optional()}),Na=n.union([Ma.keyof(),x.shape.property.refine(e=>e.startsWith(`--`))]),Pa=Ma.catchall(k).refine(e=>Object.keys(e).every(e=>Na.safeParse(e).success)),Fa=n.record(n.string(),n.unknown()),Ia=n.number().int().positive(),La=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`retain`),count:Ia,attributes:Fa.optional(),shouldPreserveParagraph:n.boolean().optional()}),n.object({kind:n.literal(`delete`),count:Ia}),n.object({kind:n.literal(`insert`),text:n.string().min(1).refine(e=>e.isWellFormed()),attributes:Fa.optional(),shouldPreserveParagraph:n.boolean().optional()})]),Ra=n.object({baseLength:n.number().int().nonnegative(),representation:n.enum([`plain`,`rich`,`links`]).optional(),steps:n.array(La),endAttributes:Fa.optional(),properties:Fa.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`})}),za=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),isActive:n.boolean()}),Ba=n.object({baseVersion:n.number().int().nonnegative(),after:n.array(n.string().min(1)),change:Ra}),Va=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),originalChange:Ra,inverse:Ra,history:za.optional(),source:Ba.optional()}),Ha=n.object({op:n.literal(`editText`),nodeId:n.string().min(1),change:Ra,actionId:n.string().min(1).optional(),revision:Va.optional(),history:za.optional(),source:Ba.optional()}),Ua=2e3,Wa=n.object({title:n.string().trim().min(1).max(200)}).strict(),Ga=n.array(In.shape.id),Ka=n.object({canvasId:n.uuid()}),qa=n.object({definition:In.refine(e=>e.sourceStyleId===void 0),revision:n.number().int().positive(),fontFaces:n.array(n.record(n.string(),n.unknown()))}),Ja=n.object({styles:n.array(qa).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)}),Ya=Ka.extend({revision:n.number().int().positive(),documentVersion:n.number().int().positive(),description:n.string().max(Ua),publishedAt:n.iso.datetime(),...Ja.shape}),Xa=Ka.extend({mutationId:n.uuid(),expectedRevision:n.number().int().nonnegative(),documentVersion:n.number().int().positive(),publish:Ga,remove:Ga,description:n.string().trim().max(Ua)}).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.`}),Za=n.object({canvasId:n.uuid(),title:n.string().max(200)}),Qa=n.object({search:n.string().trim().max(200).default(``),cursor:Za.nullable().default(null),limit:n.number().int().min(1).max(50).default(20)}),$a=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()}),eo=n.object({items:n.array($a).max(50),nextCursor:Za.nullable()}),to=n.object({parentId:n.string().min(1),sortKey:n.string().min(1)}),no=n.object({op:n.literal(`insertConvertedSubtree`),destination:ca,sourceNodeId:n.string().min(1).optional(),rootNodeId:n.string().min(1),nodes:n.record(n.string().min(1),T),relationships:n.record(n.string().min(1),to)}),A=n.string().min(1),ro=w.extend({width:n.number().positive(),height:n.number().positive()}),io=n.object({parentId:A,afterId:A.optional()}),ao=to,oo=n.object({op:n.literal(`setStyles`),nodeId:A,styles:Pa,clear:n.array(Na).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),so=n.discriminatedUnion(`op`,[no,n.object({op:n.literal(`insertNode`),node:T,parentage:ao,prototypeSource:n.object({canvasId:n.uuid(),nodeId:A,documentVersion:n.number().int().nonnegative(),versionEntryId:n.uuid().optional()}).optional(),screenSource:n.object({canvasId:n.uuid()}).optional(),pageCopyBase:n.string().refine(e=>e.trim()!==``).optional()}),io.extend({op:n.literal(`insertText`),nodeId:A,label:n.string().default(`Text`),text:n.string(),box:ro,styles:Da.default({})}),io.extend({op:n.literal(`insertPrototype`),nodeId:A,label:n.string().default(`Prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),box:ro,canvasPageId:A.optional()}),n.object({op:n.literal(`setPrototypeDeployment`),nodeId:A,prototypeId:n.uuid(),deploymentId:n.uuid(),expected:n.object({prototypeId:n.uuid(),deploymentId:n.uuid()}).optional()}),Ha,n.object({op:n.literal(`setText`),nodeId:A,text:n.string()}),n.object({op:n.literal(`setBox`),nodeId:A,box:n.union([w,n.literal(`default`)])}),n.object({op:n.literal(`setLabel`),nodeId:A,label:n.string().trim().min(1),labelOrigin:mi.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:pi.nullable()}),oo,n.object({op:n.literal(`patchExportSettings`),nodeId:A,exportSettings:$r}),n.object({op:n.literal(`setAppearance`),nodeId:A,appearance:mn}),n.object({op:n.literal(`setLayout`),nodeId:A,layout:n.union([Zt,n.literal(`default`)]),fields:n.array(Zt.keyof()).optional()}),n.object({op:n.literal(`patchTypography`),nodeId:A,typography:Sn}),n.object({op:n.literal(`setTypography`),nodeId:A,typography:n.union([bn,n.literal(`default`)])}),n.object({op:n.literal(`patchAdditionalStyles`),nodeId:A,additionalStyles:On}),n.object({op:n.literal(`setAdditionalStyles`),nodeId:A,additionalStyles:n.union([En,n.literal(`default`)])}),Bt,n.object({op:n.literal(`setTextStyleLibrary`),nodeId:n.literal(`root`),sourceCanvasId:n.uuid(),library:Wa.nullable()}),n.object({op:n.literal(`patchFontLibrary`),nodeId:n.literal(`root`),fonts:ba}),n.object({op:n.literal(`setTextStyle`),nodeId:n.literal(`root`),styleId:In.shape.id,textStyle:In.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([li,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:ao}),io.extend({op:n.literal(`move`),nodeId:A}),n.object({op:n.literal(`remove`),nodeId:A,removedText:n.record(A,T.pick({props:!0})).optional()})]),co=so.options.map(e=>e.shape.op.value),lo=n.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:ui,input:e}),n.NEVER),so),uo=Di.extend({operation:no,next:n.array(n.string().min(1))}),fo=n.record(n.string(),n.unknown()),po=n.object({canvasId:n.uuid(),afterVersion:n.number().int().positive().optional()}),mo=n.object({screenId:n.uuid(),clientToken: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(),path:n.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:n.number().int().min(0)}).nullable(),download:Zn.nullable()}),ho=n.object({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(lo)}),go=n.object({mutations:n.array(ho).optional(),version:n.number().int().min(1),restoreFenceVersion:n.number().int().positive().optional(),document:fo.optional(),screens:n.array(mo)}),_o=go.extend({document:fo}),vo=n.object({canvasId:n.uuid(),baseVersion:n.number().int().min(1),document:fo.refine(e=>hi.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:n.array(n.uuid())}),yo=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:fo})]),bo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),xo=(e,t,n)=>{if(!bo(e)||typeof e.data!=`string`)return e;let r=n(e.data,t);return r===e.data?e:{...e,data:r}},So=(e,t)=>{if(!bo(e)||!Array.isArray(e.sources))return e;let n=e.sources,r=n.map(n=>xo(n,e,t));return r.every((e,t)=>e===n[t])?e:{...e,sources:r}},Co=(e,t)=>{if(!Array.isArray(e?.fontFaces))return e;let n=e.fontFaces,r=n.map(e=>So(e,t));return r.every((e,t)=>e===n[t])?e:{...e,fontFaces:r}},wo=n.object({start:n.number().int().nonnegative(),end:n.number().int().positive(),href:n.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))}),To=n.object({text:n.string(),links:n.array(wo).optional()}),Eo=(e,t)=>{let n=e.start-t.start;return n===0?e.end-t.end:n},Do=e=>To.safeParse(e.props).data?.text??null,Oo=e=>{let t=To.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(Eo),i=[];for(let e of r)(i.at(-1)?.end??0)<=e.start&&i.push(e);return i},ko=n.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),Ao=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:Ni.nullable(),propertySections:n.array(ko)}),jo=n.object({canvasId:n.uuid()}),Mo=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:Ni.nullable(),kinds:n.record(n.string(),n.number().int().min(0)),next:n.array(n.string().min(1))}),No=n.object({canvasId:n.uuid()}),Po=n.object({canvasId:n.uuid(),version:n.number().int().positive(),nodes:n.array(Ao)}),Fo=n.object({canvasId:n.uuid(),nodeId:n.string().min(1)}),Io=n.object({canvasId:n.uuid(),version:n.number().int().positive(),node:Ao.extend({styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Zt.optional(),appearance:dn.optional(),geometry:li.optional(),typography:bn.optional(),additionalStyles:En.optional(),props:n.record(n.string(),n.unknown()),children:n.array(n.string().min(1))}),next:n.array(n.string().min(1))}),Lo=[[`alignSelf`,`align-self`],[`order`,`order`],[`flexGrow`,`flex-grow`],[`flexShrink`,`flex-shrink`],[`flexBasis`,`flex-basis`],[`aspectRatio`,`aspect-ratio`]],Ro=[[`direction`,`flex-direction`],[`wrap`,`flex-wrap`],[`alignItems`,`align-items`],[`alignContent`,`align-content`],[`justifyContent`,`justify-content`],[`rowGap`,`row-gap`],[`columnGap`,`column-gap`]],zo=[`top`,`right`,`bottom`,`left`],Bo=(e,t,n)=>{let r={...e};for(let e of zo)n.has(`${t}-${e}`)&&Reflect.deleteProperty(r,e);return r},Vo=(e,t)=>{let n={...e};if((t.has(`display`)||t.has(`grid-auto-flow`))&&Reflect.deleteProperty(n,`gridEmptyPlacement`),n.gridAutoTrackPolicy===void 0)return n;let r={...n.gridAutoTrackPolicy};for(let e of[`columns`,`rows`])(t.has(`display`)||t.has(`grid-auto-${e}`)||t.has(`grid-template-${e}`))&&Reflect.deleteProperty(r,e);return Object.keys(r).length===0?Reflect.deleteProperty(n,`gridAutoTrackPolicy`):n.gridAutoTrackPolicy=r,n},Ho=(e,t)=>{let n=new Set([...t].flatMap(e=>kr(e))),r=Vo(e,n);for(let[e,t]of Lo)n.has(t)&&Reflect.deleteProperty(r,e);if(r.margin!==void 0&&(r.margin=Bo(r.margin,`margin`,n)),r.container===void 0)return r;let i={...r.container},a=i.direction===`column`?`column-gap`:`row-gap`;(n.has(a)||n.has(`display`))&&Reflect.deleteProperty(i,`crossGapMode`),(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 Ro)n.has(t)&&Reflect.deleteProperty(i,e);return i.padding!==void 0&&(i.padding=Bo(i.padding,`padding`,n)),n.has(`grid-template-columns`)&&(Reflect.deleteProperty(i,`gridColumns`),Reflect.deleteProperty(i,`gridAutoRepeat`)),r.container=i,r},Uo=(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},Wo=(e,t,n)=>{let r=new Set([...t].flatMap(e=>kr(e))),i=Ho(e,r);if(r.has(`display`)&&Reflect.deleteProperty(i,`retainedFlexSpacing`),[`overflow`,`overflow-x`,`overflow-y`].some(e=>r.has(e))&&Reflect.deleteProperty(i,`clipContent`),r.has(`position`)&&(Reflect.deleteProperty(i,`position`),Reflect.deleteProperty(i,`retainedIgnore`),Reflect.deleteProperty(i,`gridParticipation`)),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:Uo(i[e],n[e],r);t===void 0?Reflect.deleteProperty(i,e):i[e]=t}return i},Go=T.shape.id,Ko=w.extend({width:n.number().positive(),height:n.number().positive()}),qo=n.record(Go,Go),Jo=n.strictObject({fingerprint:n.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:n.enum([`strict`,`rebase`]),copiedNodeIds:qo.optional()}),Yo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),documentFormatVersion:di,baseVersion:n.number().int().positive(),operations:n.array(lo).min(1),requestContext:Jo.optional(),writeScope:sa.optional()}),Xo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(lo),insertedNodeIds:n.array(Go),changedNodeIds:n.array(Go),removedNodeIds:n.array(Go),boxes:n.record(Go,w),affectedBounds:Ko.nullable(),copiedNodeIds:qo.optional(),next:n.array(n.string().min(1))}),Zo=n.strictObject({canvasId:n.uuid(),mutationId:n.uuid(),fingerprint:Jo.shape.fingerprint}),Qo=n.discriminatedUnion(`state`,[n.strictObject({state:n.literal(`not-found`)}),n.strictObject({state:n.literal(`committed`),result:Xo})]),$o={nodes:1e3,fields:20,id:200,label:500,value:1e3},es=n.object({available:n.boolean(),omittedNodes:n.number().int().nonnegative(),nodes:n.array(n.object({nodeId:n.string().min(1),label:n.string().max($o.label),kind:n.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:n.number().int().nonnegative(),fields:n.array(n.object({label:n.string().max($o.id),before:n.string().max($o.value).nullable(),after:n.string().max($o.value).nullable(),truncated:n.boolean()})).max($o.fields)})).max($o.nodes)}),ts=`page`,ns=`frame`,rs=`group`,is=`rectangle`,as=`image`,os=`text`,ss=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],cs=[`position`,`layout`,`clip`,...ss.filter(e=>e!==`position`&&e!==`layout`)],ls=[...ss,`vector`],us=Object.fromEntries([{objectKind:`prototype`,label:`Prototype`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`cornerRadius`,`blending`,`outline`,`outerShadow`,`innerShadow`,`filters`]},{objectKind:`root`,label:`Canvas`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!0,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:ts,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:ns,label:`Frame`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:cs},{objectKind:rs,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`,`filters`,`additionalStyles`,`export`]},{objectKind:is,label:`Rectangle`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ss},{objectKind:as,label:`Image`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:ss},{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:ls},{objectKind:`boolean`,label:`Boolean`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ls},{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:os,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])),ds=e=>us[e]??null,fs=e=>ds(e)?.propertySections??[],j=T.shape.id,ps=n.array(j).min(1),ms=n.strictObject({x:n.number(),y:n.number()}),hs=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.`}),gs=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`position`),nodeId:j,parentPosition:ms}),n.strictObject({kind:n.literal(`resize`),nodeId:j,size:hs}),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:ps,targetNodeId:j,position:n.enum([`before`,`inside`,`after`])}),n.strictObject({kind:n.literal(`group`),nodeIds:ps,label:n.string().min(1).optional()}),n.strictObject({kind:n.literal(`ungroup`),nodeIds:ps}),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()})]),_s=n.strictObject({kind:n.literal(`arrange`),changes:n.array(gs).min(1)}),vs=n.strictObject({kind:n.literal(`duplicate`),nodeIds:ps,destination:n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`native`)}),n.strictObject({kind:n.literal(`inside`),parentId:j})])}),ys=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)}),_s,vs,n.strictObject({kind:n.literal(`compile-html`),contextOperations:n.array(lo).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.`)})]),bs=n.strictObject({pageId:j.optional(),nodeIds:n.array(j)}),xs=n.strictObject({request:ys,scope:bs}),Ss=n.strictObject({operations:n.array(lo),idMap:n.record(j,j),rootNodeIds:n.array(j)}),Cs=Ss.extend({compilations:n.array(n.strictObject({id:j,draft:Ti,warnings:n.array(Hi).optional()})).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:Cs}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1),reason:n.enum([`SOURCE_FAILED`,`PREPARATION_FAILED`]).optional(),retryable:n.boolean().optional()})]);const ws=n.object({id:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),request:ys,scope:bs,phase:Ri,attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Ts=n.discriminatedUnion(`state`,[ws.extend({state:n.enum([`queued`,`running`]),result:n.null(),failure:n.null()}),ws.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Ss.extend({loadedVersion:n.number().int().positive()}),failure:n.null()}),ws.extend({state:n.enum([`failed`,`cancelled`,`expired`]),result:n.null(),failure:Ui})]),Es=n.strictObject({canvasId:n.uuid(),expectedVersion:n.number().int().positive(),request:ys,scope:bs}),Ds=n.object({job:Ts,alreadyExists:n.boolean()}),Os=n.object({jobId:n.uuid()}),ks=n.object({job:Ts}),As=`x-enhance-agent-client`,js=n.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Ms=n.strictObject({path:n.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:js.optional(),version:js.optional()}),Ns=Ms.pick({path:!0}).strip(),Ps=n.strictObject({agent_client:n.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Ms.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:js.optional()}),Fs=e=>{let t=Ms.safeParse(e);if(t.success)return t.data;let n=Ns.safeParse(e);return{path:n.success?n.data.path:`direct_cli`}},Is=n.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),Ls=n.string().regex(/^[0-9a-f]{32}$/),Rs=n.object({viewKey:Ls.optional(),admissionOrder:n.number().int().nonnegative().optional(),followColour:Is.optional()}),zs=n.object({pageId:n.string().min(1).nullable().optional(),followingViewKey:Ls.nullable().optional()}),Bs=`enhance3.canvas.v1`,Vs=16384,Hs=n.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),Us=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(He).nullable().optional(),colour:Hs}),Ws=Us.extend(Rs.shape),Gs=n.object({kind:n.literal(`guest`),connectionId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),colour:Hs,...Rs.shape}),Ks=n.discriminatedUnion(`kind`,[Ws,Gs]),qs=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:Ps.optional(),colour:Hs}),Js=n.discriminatedUnion(`kind`,[Us.omit({connectionId:!0,avatarUrl:!0}),qs]),Ys=n.object({x:n.number(),y:n.number()}),Xs=w.extend({width:n.number().positive(),height:n.number().positive()}),Zs=n.object({count:n.number().int().positive(),bounds:Xs.nullable()}),Qs=n.object({kind:n.enum([`drag`,`resize`]),baseVersion:n.number().int().positive(),boxes:n.record(n.string().min(1),Xs).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:Zs.optional()}),$s=n.object({cursor:Ys.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<=Vs).optional(),selectionSummary:Zs.nullable().optional(),visibleWorldBox:Xs.optional(),gesture:Qs.nullable().optional(),cursorChat:n.string().max(140).nullable().optional(),...zs.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),ec=n.object({actor:Ks,seq:n.number().int().nonnegative(),cursor:Ys.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<=Vs),selectionSummary:Zs.nullable().optional(),visibleWorldBox:Xs.nullable(),gesture:Qs.nullable(),cursorChat:n.string().max(140).nullable().default(null),...zs.shape,followOrder:n.number().int().nonnegative().optional(),expiresAt:n.iso.datetime()}),tc=n.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),nc=n.object({activityId:n.uuid(),canvasId:n.uuid(),actor:qs,phase:tc,nodeIds:n.array(n.string().min(1)).max(100),bounds:Xs.nullable(),expiresAt:n.iso.datetime()}),rc=n.object({canvasId:n.uuid(),phase:tc,nodeIds:n.array(n.string().min(1)).max(100).default([]),bounds:Xs.nullable().default(null)}),ic=n.object({activityId:n.uuid(),expiresAt:n.iso.datetime(),renewAfterMs:n.number().int().positive()}),ac=rc.extend({activityId:n.uuid()}),oc=n.object({canvasId:n.uuid(),activityId:n.uuid()}),sc=n.object({ended:n.literal(!0)}),cc={v:n.literal(1),seq:n.number().int().nonnegative()};n.discriminatedUnion(`type`,[n.object({...cc,type:n.literal(`access.changed`),payload:n.object({})}),n.object({...cc,type:n.literal(`comments.changed`),payload:n.object({threadId:n.uuid()})}),n.object({...cc,type:n.literal(`resources.changed`),payload:n.object({})}),n.object({...cc,type:n.literal(`room.snapshot`),payload:n.object({connectionId:n.uuid(),viewKey:Rs.shape.viewKey,peers:n.array(ec),activities:n.array(nc),documentVersion:n.number().int().positive()})}),n.object({...cc,type:n.literal(`presence.patch`),payload:ec}),n.object({...cc,type:n.literal(`presence.left`),payload:n.object({connectionId:n.uuid()})}),n.object({...cc,type:n.literal(`agent.activity`),payload:n.object({activityId:n.uuid(),activity:nc.nullable()})}),n.object({...cc,type:n.literal(`document.committed`),payload:n.object({mutationId:n.uuid(),actor:Js,previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(lo).min(1)})}),n.object({...cc,type:n.literal(`sync.required`),payload:n.object({version:n.number().int().positive(),reason:n.enum([`gap`,`relay`,`replace`,`history-restored`])})}),n.object({...cc,type:n.literal(`room.ping`),payload:n.object({pingId:n.uuid(),sentAt:n.iso.datetime()})}),n.object({...cc,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:$s}),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 lc=n.object({canvasId:n.uuid(),protocols:n.array(n.literal(Bs)).min(1).max(1),viewId:n.uuid().optional()}),uc=n.object({endpoint:n.url(),ticket:n.string().min(1).max(4096),protocol:n.literal(Bs),expiresAt:n.iso.datetime()}),dc=n.uuid(),fc=T.shape.id,pc=n.array(fc),mc=/^\/c\/([^/]+)\/?$/iu,hc=e=>{let t=e.trim(),n=dc.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=dc.safeParse(mc.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&&!fc.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 u=pc.safeParse(c.length>0?c:l);return u.success?{ok:!0,value:{canvasId:i.data,...o!==void 0&&{pageId:o},nodeIds:[...new Set(u.data)]}}:{ok:!1,reason:`selection`}},gc=(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=hc(n.href);return a.ok?{ok:!0,url:n.href}:a},_c=`root`,vc=`canvas-page-default`,yc=e=>Object.entries(e.relationships).filter(([,e])=>e.parentId===_c).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):t.sortKey<r.sortKey?-1:1).map(([e])=>e),bc=e=>{let t=yc(e).filter(t=>e.nodes[t]?.component===ts);return t.length>0?t:[vc]},xc=(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===_c){let e=t.props?.canvasPageId;return typeof e==`string`?e:vc}r=i}return null},Sc=(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},Cc=(e,t)=>{let n=bc(t);if(e.pageId!==void 0&&!n.includes(e.pageId))return{ok:!1,reason:`page`};let r=e.nodeIds.map(e=>xc(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)]:yc(t).filter(e=>{let n=xc(t,e);return n!==null&&(i===null||n===i)});return{ok:!0,pageId:i,rootNodeIds:a,nodeIds:Sc(t,a)}},wc=n.object({jobId:n.uuid()}),Tc=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),target:E,sourceState:Pi.optional()}),Ec=n.discriminatedUnion(`purpose`,[Tc.extend({purpose:n.literal(`preparation`),preparation:xs,screens:n.array(mo).optional(),attempts:n.strictObject({counted:n.number().int().nonnegative(),limit:n.number().int().positive()}).optional(),deadlineAt:n.iso.datetime().optional(),sourceState:n.undefined().optional(),scale:n.literal(1),format:n.literal(`json`)}),Tc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:n.number().positive(),maxOutputPixels:Mi.optional(),format:n.literal(`png`)}),Tc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),sourceState:n.undefined().optional(),conversion:ua,scale:n.literal(1),format:n.literal(`json`)})]);n.object({jobId:n.uuid()}),n.object({jobId:n.uuid()});const Dc=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(),deadlineAt:n.iso.datetime().optional(),releaseIdentity:n.string().min(1).max(100)});n.discriminatedUnion(`purpose`,[Dc.extend({purpose:n.literal(`preparation`),target:E,preparation:xs,sourceState:n.undefined().optional(),scale:n.literal(1)}),Dc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:E,sourceState:Pi.optional(),scale:n.number().positive(),maxOutputPixels:Mi.optional(),outputKey:n.string().min(1).max(500)}),Dc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1).max(200)}),sourceState:n.undefined().optional(),conversion:ua,scale:n.literal(1)})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),bounds:Ni,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(Hi),timings:n.array(Wi),sourceState:Fi.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:Ti}),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:Ui}),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 Oc=n.object({total:n.number().int().nonnegative(),loading:n.number().int().nonnegative(),unavailable:n.number().int().nonnegative()}),kc=n.object({jobId:n.uuid(),canvasId:n.uuid().nullable(),requestedVersion:n.number().int().positive().nullable(),loadedVersion:n.number().int().positive().nullable(),phase:Ri.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:Oc,warnings:n.array(Hi),timings:n.array(Wi),sourceState:Fi.optional()}),Ac=n.object({selector:n.string().min(1).max(500),contentSelector:n.string().min(1).max(500).optional(),expectsPaint:n.boolean().optional(),bounds:Ni,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive()});n.discriminatedUnion(`state`,[kc.extend({state:n.literal(`loading`),capture:n.null(),failure:n.null()}),kc.extend({state:n.literal(`ready`),phase:n.literal(`target`),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),capture:Ac,failure:n.null()}),kc.extend({state:n.literal(`failed`),failure:n.object({reason:Bi,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:Cs});const jc=n.string().min(1),Mc=n.object({canvasId:n.uuid()}),Nc=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(jc),missingNodeIds:n.array(jc),nodes:n.array(Ao),contextRootId:jc.nullable(),visibleWorldBox:Ni.nullable(),next:n.array(n.string().min(1)).max(12)}),Pc=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`recording`),recordingId:n.string()})]),Fc=n.object({html:n.string().optional(),viewport:n.object({width:n.number(),height:n.number()}),atMs:n.number(),screenId:n.string().nullable().default(null),sourceNodeId:n.string().optional(),provenance:Pc.optional()}),Ic=n.object({provenance:Pc.optional(),report:Si.optional()}),Lc=n.object({recordingId:n.string()}),Rc=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 zc=`$structure`,Bc=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)},Vc=e=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==`text`&&e!==`children`)),Hc=(e,t)=>{let n={...e,...t};return t.listStyle===`none`&&(Reflect.deleteProperty(n,`listLevel`),Reflect.deleteProperty(n,`listStart`)),n},Uc=(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},Wc=(e,t)=>{let n=0;return e.map(e=>{let r=n;if(n+=S(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}})},Gc=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},Kc=(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},qc=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},Jc=(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},Yc=e=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let t=Yc(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}]}),Xc=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||Xc(e.children))),Zc=e=>{let t=[[]];for(let n of e){let e=n.kind===`span`?Zc(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(`
3
+ `,S=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(Kn(e))}return n.join(``)},qn=e=>{let t=e.props;if(t===void 0||!Array.isArray(t.richText))return[];let n=Un(t.richText);if(n===null)return[];let r=t.text;return S(n)===r?n:[]},Jn=e=>{let t=[...qn(e)];for(;t.length>0;){let e=t.pop();if(e?.kind===`span`){if(e.fills!==void 0)return!0;for(let n of e.children)t.push(n)}}return!1},Yn=e=>{let t=new Set,n=(e,r)=>{for(let i of e)i.kind===`span`?n(i.children,i.href??r):t.add(r)};return n(e),t.size===1?[...t][0]??null:null},Xn=e=>[...Object.keys(e.styles),...e.stroke===void 0?[]:[`WebkitTextStrokeWidth`,`WebkitTextStrokeColor`,`--canvas-text-stroke-alignment`]],C=n.object({url:n.url(),expiresAt:n.iso.datetime(),headers:n.record(n.string(),n.string())}),Zn=n.object({url:n.url(),expiresAt:n.iso.datetime(),bytes:n.number().int().min(0)}),Qn=`/v1/canvas-assets/`,$n=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],er=n.string().regex(/^image\/[a-z0-9.+-]+$/u),tr=n.object({canvasId:n.uuid(),contentType:n.enum($n),bytes:n.number().int().positive()}),nr=n.object({assetId:n.uuid(),path:n.string().startsWith(`/v1/canvas-assets/`),upload:C}),rr=(e,t)=>`${Qn}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,ir=n.tuple([n.uuid(),n.uuid()]),ar=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=ir.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},or=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],sr=n.object({canvasId:n.uuid(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),cr=sr.extend({bytes:n.number().int().positive()}),lr=cr.extend({contentType:n.enum(or)}),ur=n.object({path:n.string().startsWith(`/v1/canvas-assets/`)}),dr=ur.extend({upload:C}),fr=(e,t)=>`${Qn}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`,pr=n.object({canvasId:n.uuid(),sources:n.array(sr).min(1)}),mr=n.object({resources:n.array(n.object({source:sr,path:n.string()}))}),hr=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:sr.safeParse({canvasId:t,sha256:r}).data??null},gr=1e3,_r=new Set(or),vr=(e,t)=>e===`image`?er.safeParse(t).success:_r.has(t),yr=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid()}),br=n.discriminatedUnion(`kind`,[yr.extend({kind:n.literal(`image`),contentType:n.enum($n),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),yr.extend({kind:n.literal(`font`),contentType:n.enum(or),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)})]),xr=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(gr),maximumWeight:n.number().min(1).max(gr)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]),Sr=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:xr.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=>vr(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?rr(e.canvasId,e.assetId):fr(e.canvasId,e.sha256)),`The resource path must match its native identity.`),Cr=Sr.safeExtend({upload:C.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`),wr=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`]),Tr=(e,t)=>typeof t==`number`&&!wr.has(e.toLowerCase())?`${String(t)}px`:String(t),Er=[`top`,`right`,`bottom`,`left`],Dr=[`grid-template-rows`,`grid-template-columns`,`grid-template-areas`],Or={gap:[`row-gap`,`column-gap`],"text-wrap":[`text-wrap-mode`,`text-wrap-style`],padding:Er.map(e=>`padding-${e}`),margin:Er.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":Dr,grid:[...Dr,`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`]},kr=e=>Or[e.toLowerCase()]??[e.toLowerCase()],Ar=(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}},jr=(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=Ar(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},Mr=e=>/^(?:--|-?[_a-z\u{80}-\u{FFFF}])[-\w\u{80}-\u{FFFF}]*$/iu.test(e)&&!/^(?:auto|span|initial|unset)$/iu.test(e)?e:`auto`,Nr=(e,t,n)=>{let r=jr(t,`/`),i=r[0]??t;if(e!==`grid-area`)return r[n]??Mr(i);let a=r[1]??Mr(i);return[i,a,r[2]??Mr(i),r[3]??Mr(a)][n]??t},Pr=(e,t,n)=>{let r=jr(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]},Fr=(e,t,n)=>{if(/^(?:none|initial|unset)$/iu.test(t))return[`none`,`none`,`none`,`auto`,`auto`,`row`][n]??t;let r=jr(t,`/`),i=r[0]??t,a=r[1];if(i===``||a===``||r.length>2)return t;let o=jr(i).some(e=>e.toLowerCase()===`auto-flow`),s=a!==void 0&&jr(a).some(e=>e.toLowerCase()===`auto-flow`);if(e===`grid`&&a!==void 0&&o!==s)return Pr(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},Ir=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]},Lr=(e,t,n)=>{if(/(?:var|env)\(|^(?:inherit|revert(?:-layer)?)$/iu.test(t))return t;if(/^grid-(?:area|row|column)$/u.test(e))return Nr(e,t,n);if(e===`grid-template`||e===`grid`)return Fr(e,t,n);let r=jr(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:Ir(r)[n]??t:r[n]??(n===3?r[1]:void 0)??r[0]??t},Rr=e=>e.additionalStyles===void 0?{}:Object.fromEntries(e.additionalStyles.declarations.filter(e=>e.enabled).map(e=>[e.property,e.value])),zr=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()))),...Rr(e)}},Br=e=>/!important\s*$/iu.test(String(e)),Vr=(e,t)=>{let n=String(e).replace(/\s*!important\s*$/iu,``).trim();return t||n.includes(`(`)?n:n.toLowerCase()},Hr=(e,t)=>{let n=null,r=!1,i=Object.entries(zr(e));for(let[e,a]of i){let i=kr(e),o=i.indexOf(t);if(o===-1)continue;let s=Br(a);if(r&&!s)continue;let c=Vr(a,/^grid(?:-|$)/iu.test(e));n=i.length===1?c:Lr(e.toLowerCase(),c,o),r=s}return n??void 0},Ur=new WeakMap,Wr=(e,t)=>{let n=Ur.get(e.styles),r=n!==void 0&&n.additionalStyles===e.additionalStyles?n:{additionalStyles:e.additionalStyles,values:new Map};if(r!==n&&Ur.set(e.styles,r),r.values.has(t))return r.values.get(t);let i=Hr(e,t);return r.values.set(t,i),i},Gr=(e,t)=>{let n=new Set(Object.entries(zr(e)).filter(([,e])=>Br(e)).flatMap(([e])=>kr(e)));return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,kr(e).some(e=>n.has(e))&&!Br(t)?`${Tr(e,t)} !important`:t]))},Kr=(e,t)=>{let n=new Set,r=e;for(;r!==void 0&&!n.has(r.id);){n.add(r.id);let e=Wr(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`},qr=(e,t,n)=>{let r=/^(?:vertical|sideways)-/u.test(Kr(e,n));return[t===`horizontal`?`width`:`height`,t===`vertical`===r?`inline-size`:`block-size`]},Jr=e=>{if(e===void 0)return`freeform`;let t=Wr(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`},Yr=(e,t)=>{if(e===void 0||Jr(e)!==`flex`)return;let n=e.layout?.container?.direction??(t=>Wr(e,t))(`flex-direction`)??`row`;if(!/^(?:row|column)(?:-reverse)?$/u.test(n))return;let r=/^(?:vertical|sideways)-/u.test(Kr(e,t));return n.startsWith(`column`)===r?`horizontal`:`vertical`},Xr=n.enum([`png`,`jpeg`]),Zr=n.number().positive(),Qr=n.strictObject({format:Xr.optional(),scale:Zr.optional()}),$r=n.strictObject({format:Xr.nullable().optional(),scale:Zr.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),ei=n.number(),ti=ei.nonnegative(),ni=n.string().min(1).max(200),ri=n.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),ii=n.strictObject({x:ei,y:ei,width:ti,height:ti}),ai=n.strictObject({kind:n.literal(`path`),path:ri.min(1),fillRule:n.enum([`nonzero`,`evenodd`]),viewBox:ii.extend({width:ti.positive(),height:ti.positive()})}),oi=n.strictObject({kind:n.literal(`polygon`),count:n.number().int().min(3),innerRatio:n.number().min(0).max(1).optional(),cornerRadius:ti,cornerSmoothing:n.number().min(0).max(1)}),si=n.enum([`union`,`subtract`,`intersect`,`exclude`]),ci=n.strictObject({kind:n.literal(`boolean`),operation:si,operandIds:n.array(ni).min(1).refine(e=>new Set(e).size===e.length),result:n.strictObject({path:ri,fillRule:n.literal(`nonzero`),isEmpty:n.boolean(),bounds:ii,inputKey:n.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),li=n.discriminatedUnion(`kind`,[ai,oi,n.strictObject({kind:n.literal(`mask`),maskId:ni,mode:n.enum([`alpha`,`luminance`,`outline`]).optional()}),ci]),ui=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,di=n.literal(14,{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().refine(e=>e.startsWith(`data:image/jpeg;base64,`)||ar(e)!==null),families:n.array(n.string().min(1)).min(1)});const w=n.object({x:n.number(),y:n.number(),width:n.number().nonnegative(),height:n.number().nonnegative()}),fi=n.enum([`start`,`center`,`end`,`stretch`,`scale`]),pi=n.object({x:fi,y:fi}),mi=n.enum([`source`,`generated`,`content`,`user`]),T=n.looseObject({id:n.string().min(1),label:n.string(),component:n.string().min(1),labelOrigin:mi.optional(),visible:n.boolean().optional(),locked:n.boolean().optional(),constraints:pi.optional(),styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Zt.optional(),responsive:n.never().optional(),appearance:dn.optional(),exportSettings:Qr.optional(),typography:bn.optional(),additionalStyles:En.optional(),geometry:li.optional(),compositing:n.never({error:ui}).optional(),props:n.record(n.string(),n.unknown()).optional(),box:w.optional()}),hi=n.object({version:n.literal(14),nodes:n.record(n.string(),T),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({})}),gi=n.record(n.string(),n.unknown()),_i=n.preprocess(e=>{let t=gi.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?vi():Le(t)},hi),vi=()=>({version:14,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),yi=n.string().min(1),bi=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:yi.optional()}),xi=n.enum([`text-stroke-inside`,`text-stroke-outside-translucent`,`text-stroke-paints`,`text-inner-shadow`,`text-shadow-spread`,`text-shadow-blend`,`text-background-blur`,`progressive-layer-blur`,`progressive-background-blur`,`blend-plus-darker`,`blend-linear-burn`,`image-exposure`,`image-contrast`,`image-saturation`,`image-temperature`,`image-tint`,`image-highlights`,`image-shadows`,`effect-noise`,`effect-texture`,`effect-glass`]),Si=n.object({nodeCount:n.number().int().positive(),unsupportedFeatures:n.array(n.object({feature:xi,count:n.number().int().positive()})).optional(),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(bi)}),Ci=T.omit({id:!0}).extend({temporaryId:yi}),wi=n.object({temporaryId:yi,parentTemporaryId:yi,sortKey:n.string().min(1)}),Ti=n.object({version:n.literal(1),rootTemporaryId:yi,nodes:n.array(Ci).min(1),relationships:n.array(wi),report:Si.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),Ei=n.object({canvasId:n.uuid(),documentFormatVersion:di,mutationId:n.uuid(),baseVersion:n.number().int().positive(),screenNodeId:n.string().min(1),draft:Ti}),Di=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(yi,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),w),affectedBounds:w}),Oi=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],ki=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],Ai=[`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`],ji=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],Mi=n.number().int().positive(),Ni=n.object({x:n.number(),y:n.number(),width:n.number().positive(),height:n.number().positive()}),E=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:Ni})]),Pi=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),Fi=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative()}),Ii=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:Ni,version:n.number().int().positive(),alreadyPresent:n.boolean()}),Li=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:E.default({kind:`content`}),sourceState:Pi.optional(),scale:n.number().positive().default(1),maxOutputPixels:Mi.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`]}),Ri=n.enum(Oi),zi=n.enum(ki),Bi=n.enum(Ai),Vi=n.enum(ji),Hi=n.object({code:Vi,message:n.string().min(1).max(500),sourceId:n.string().min(1).nullable()}),Ui=n.object({reason:Bi,phase:Ri,message:n.string().min(1).max(500),retryable:n.boolean(),sourceId:n.string().min(1).nullable()}),Wi=n.object({phase:Ri,durationMs:n.number().int().min(0)}),Gi=n.object({canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),target:E,sourceState:Fi.optional(),snapshot:Ii.optional(),bounds:Ni,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(Hi),timings:n.array(Wi),expiresAt:n.iso.datetime()}),Ki=n.object({id:n.uuid(),canvasId:n.uuid(),purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:Ri,requestedVersion:n.number().int().positive(),target:E,sourceState:Pi.optional(),scale:n.number().positive(),maxOutputPixels:Mi.optional(),format:n.literal(`png`),attempt:n.number().int().min(0),lastFailure:Ui.optional(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),qi=n.discriminatedUnion(`state`,[Ki.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),Ki.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),Ki.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Gi,failure:n.null()}),Ki.extend({state:n.literal(`failed`),result:n.null(),failure:Ui}),Ki.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ui.extend({reason:n.literal(`CANCELLED`)})}),Ki.extend({state:n.literal(`expired`),result:n.null(),failure:Ui.extend({reason:n.literal(`EXPIRED`)})})]),Ji=n.object({job:qi,alreadyExists:n.boolean()}),Yi=n.object({jobId:n.uuid()}),Xi=Yi.extend({waitMs:n.number().int().min(0).max(1e4).optional()}),Zi=n.object({job:qi}),Qi=n.object({jobId:n.uuid()}),$i=n.object({job:qi}),ea=n.discriminatedUnion(`status`,[n.object({status:n.literal(`available`),version:n.number().int().positive(),format:n.literal(`enhance-scene-json`),code:n.string(),prototypes:n.array(n.object({nodeId:n.string(),prototypeId:n.uuid(),deploymentId:n.uuid(),capability:n.literal(`canvas.read`),canvasPath:n.string(),input:n.object({canvasRef:n.uuid(),view:n.literal(`source`),nodeId:n.string()}),guidance:n.string()})),guidance:n.string()}),n.object({status:n.literal(`unavailable`),guidance:n.string()})]),ta=n.object({canvasId:n.uuid(),nodeId:n.string().min(1),expectedVersion:n.number().int().positive(),scale:n.number().positive()}),na=n.object({jobId:n.uuid()}),ra=n.object({jobId:n.uuid(),download:Zn,source:ea.optional()}),ia=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`)})}),aa=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative(),context:n.strictObject({expectedVersion:n.number().int().positive(),request:ia}).optional()}),oa=n.object({job:qi,alreadyExists:n.boolean()}),sa=n.object({rootIds:n.array(n.string().min(1))}),ca=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)})]),la=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()})]),ua=n.object({source:la,destination:ca,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`]})}),da=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)})]),fa=n.object({id:n.uuid(),canvasId:n.uuid(),source:da,destination:ca,phase:Ri,requestedVersion:n.number().int().positive(),attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),pa=n.discriminatedUnion(`state`,[fa.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),fa.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),fa.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Di.extend({report:Si}),failure:n.null()}),fa.extend({state:n.literal(`failed`),result:n.null(),failure:Ui}),fa.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ui.extend({reason:n.literal(`CANCELLED`)})}),fa.extend({state:n.literal(`expired`),result:n.null(),failure:Ui.extend({reason:n.literal(`EXPIRED`)})})]),ma=ua.and(n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),mutationId:n.uuid().optional(),writeScope:sa.optional(),scope:Li.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`]}),ha=n.object({job:pa,alreadyExists:n.boolean()}),ga=n.object({jobId:n.uuid()}),_a=n.object({job:pa}),va=n.object({jobId:n.uuid()}),ya=n.object({job:pa});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:Ti}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const ba=n.object({add:n.array(n.object({resourceId:n.string().min(1)}).catchall(n.unknown())),remove:n.array(n.string().min(1))}),xa=n.union([n.string(),g]),D=n.union([x.shape.value,g]).nullable().optional(),Sa=n.strictObject({border:D,"border-block":D,"border-block-color":D,"border-block-style":D,"border-block-width":D,"border-block-end":D,"border-block-end-color":D,"border-block-end-style":D,"border-block-end-width":D,"border-block-start":D,"border-block-start-color":D,"border-block-start-style":D,"border-block-start-width":D,"border-bottom":D,"border-bottom-color":D,"border-bottom-style":D,"border-bottom-left-radius":xa.optional(),"border-bottom-right-radius":xa.optional(),"border-bottom-width":xa.optional(),"border-color":n.string().nullable().optional(),"border-image":D,"border-image-source":D,"border-image-slice":D,"border-image-width":D,"border-image-outset":D,"border-image-repeat":D,"border-inline":D,"border-inline-color":D,"border-inline-style":D,"border-inline-width":D,"border-inline-end":D,"border-inline-end-color":D,"border-inline-end-style":D,"border-inline-end-width":D,"border-inline-start":D,"border-inline-start-color":D,"border-inline-start-style":D,"border-inline-start-width":D,"border-left":D,"border-left-color":D,"border-left-style":D,"border-left-width":xa.optional(),"border-radius":xa.nullable().optional(),"border-right":D,"border-right-color":D,"border-right-style":D,"border-right-width":xa.optional(),"border-style":D,"border-top":D,"border-top-color":D,"border-top-style":D,"border-top-left-radius":xa.optional(),"border-top-right-radius":xa.optional(),"border-top-width":xa.optional(),"border-width":xa.nullable().optional(),outline:D,"outline-color":D,"outline-style":D,"outline-offset":xa.optional(),"outline-width":xa.optional()}),Ca=n.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),wa=n.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),Ta=x.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),Ea=n.union([b.shape.weight,n.enum([`normal`,`bold`,`bolder`,`lighter`]),n.string().regex(/^\d+(?:\.\d+)?$/u).refine(e=>b.shape.weight.safeParse(Number(e)).success)]),O={color:Ta,"font-family":x.shape.value,"font-size":n.union([_,Ca]),"font-weight":Ea,"font-style":n.enum([`normal`,`italic`,`oblique`]),"letter-spacing":g,"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`])},Da=n.strictObject({color:O.color.optional(),"font-family":O[`font-family`].optional(),"font-size":O[`font-size`].optional(),"font-weight":O[`font-weight`].optional(),"font-style":O[`font-style`].optional(),"letter-spacing":O[`letter-spacing`].optional(),"line-height":O[`line-height`].optional(),"text-align":O[`text-align`].optional(),"white-space":O[`white-space`].optional()}),Oa=n.union([x.shape.value,g]).nullable().optional(),ka=n.strictObject({"text-decoration":Oa,"text-decoration-line":Oa,"text-decoration-style":Oa,"text-decoration-color":Oa,"text-decoration-thickness":Oa,"text-underline-offset":Oa,"text-decoration-skip-ink":Oa,color:O.color.nullable().optional(),"font-family":O[`font-family`].nullable().optional(),"font-size":O[`font-size`].nullable().optional(),"font-weight":O[`font-weight`].nullable().optional(),"font-optical-sizing":n.enum([`auto`,`none`]).nullable().optional(),"font-variation-settings":x.shape.value.nullable().optional(),"font-feature-settings":x.shape.value.nullable().optional(),"text-wrap":x.shape.value.nullable().optional(),"text-wrap-mode":x.shape.value.nullable().optional(),"text-wrap-style":x.shape.value.nullable().optional(),"text-box":x.shape.value.nullable().optional(),"text-box-trim":x.shape.value.nullable().optional(),"text-box-edge":x.shape.value.nullable().optional(),"font-style":O[`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([g,wa,n.literal(`normal`)]).nullable().optional(),"line-height":O[`line-height`].nullable().optional(),"text-align":O[`text-align`].nullable().optional(),"text-indent":n.union([g,wa]).nullable().optional(),"white-space":O[`white-space`].nullable().optional(),"word-spacing":n.union([g,wa,n.literal(`normal`)]).nullable().optional()}),Aa=x.shape.value,ja=n.union([n.string(),g]),k=n.union([x.shape.value,g]).nullable().optional(),Ma=ka.extend(Sa.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,grid:k,"grid-template":k,"grid-template-columns":k,"grid-template-rows":k,"grid-template-areas":k,"grid-auto-columns":k,"grid-auto-rows":k,"grid-auto-flow":k,"grid-row":k,"grid-column":k,"grid-area":k,"grid-row-start":k,"grid-row-end":k,"grid-column-start":k,"grid-column-end":k,"justify-items":k,"justify-self":k,"place-items":k,"place-self":k,"place-content":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,isolation: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(),"background-image":k,"background-size":k,"background-position":k,"background-repeat":k,"background-origin":k,"background-blend-mode":k,"box-shadow":n.string().nullable().optional(),"column-gap":ja.optional(),gap:ja.optional(),"margin-bottom":ja.optional(),"margin-left":ja.optional(),"margin-right":ja.optional(),"margin-top":ja.optional(),opacity:n.union([n.string(),n.number()]).nullable().optional(),overflow:Aa.nullable().optional(),"overflow-x":Aa.nullable().optional(),"overflow-y":Aa.nullable().optional(),"padding-bottom":ja.optional(),"padding-left":ja.optional(),"padding-right":ja.optional(),"padding-top":ja.optional(),"row-gap":ja.optional(),"stroke-width":ja.optional()}),Na=n.union([Ma.keyof(),x.shape.property.refine(e=>e.startsWith(`--`))]),Pa=Ma.catchall(k).refine(e=>Object.keys(e).every(e=>Na.safeParse(e).success)),Fa=n.record(n.string(),n.unknown()),Ia=n.number().int().positive(),La=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`retain`),count:Ia,attributes:Fa.optional(),shouldPreserveParagraph:n.boolean().optional()}),n.object({kind:n.literal(`delete`),count:Ia}),n.object({kind:n.literal(`insert`),text:n.string().min(1).refine(e=>e.isWellFormed()),attributes:Fa.optional(),shouldPreserveParagraph:n.boolean().optional()})]),Ra=n.object({baseLength:n.number().int().nonnegative(),representation:n.enum([`plain`,`rich`,`links`]).optional(),steps:n.array(La),endAttributes:Fa.optional(),properties:Fa.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`})}),za=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),isActive:n.boolean()}),Ba=n.object({baseVersion:n.number().int().nonnegative(),after:n.array(n.string().min(1)),change:Ra}),Va=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),originalChange:Ra,inverse:Ra,history:za.optional(),source:Ba.optional()}),Ha=n.object({op:n.literal(`editText`),nodeId:n.string().min(1),change:Ra,actionId:n.string().min(1).optional(),revision:Va.optional(),history:za.optional(),source:Ba.optional()}),Ua=2e3,Wa=n.object({title:n.string().trim().min(1).max(200)}).strict(),Ga=n.array(In.shape.id),Ka=n.object({canvasId:n.uuid()}),qa=n.object({definition:In.refine(e=>e.sourceStyleId===void 0),revision:n.number().int().positive(),fontFaces:n.array(n.record(n.string(),n.unknown()))}),Ja=n.object({styles:n.array(qa).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)}),Ya=Ka.extend({revision:n.number().int().positive(),documentVersion:n.number().int().positive(),description:n.string().max(Ua),publishedAt:n.iso.datetime(),...Ja.shape}),Xa=Ka.extend({mutationId:n.uuid(),expectedRevision:n.number().int().nonnegative(),documentVersion:n.number().int().positive(),publish:Ga,remove:Ga,description:n.string().trim().max(Ua)}).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.`}),Za=n.object({canvasId:n.uuid(),title:n.string().max(200)}),Qa=n.object({search:n.string().trim().max(200).default(``),cursor:Za.nullable().default(null),limit:n.number().int().min(1).max(50).default(20)}),$a=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()}),eo=n.object({items:n.array($a).max(50),nextCursor:Za.nullable()}),to=n.object({parentId:n.string().min(1),sortKey:n.string().min(1)}),no=n.object({op:n.literal(`insertConvertedSubtree`),destination:ca,sourceNodeId:n.string().min(1).optional(),rootNodeId:n.string().min(1),nodes:n.record(n.string().min(1),T),relationships:n.record(n.string().min(1),to)}),A=n.string().min(1),ro=w.extend({width:n.number().positive(),height:n.number().positive()}),io=n.object({parentId:A,afterId:A.optional()}),ao=to,oo=n.object({op:n.literal(`setStyles`),nodeId:A,styles:Pa,clear:n.array(Na).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),so=n.discriminatedUnion(`op`,[no,n.object({op:n.literal(`insertNode`),node:T,parentage:ao,prototypeSource:n.object({canvasId:n.uuid(),nodeId:A,documentVersion:n.number().int().nonnegative(),versionEntryId:n.uuid().optional()}).optional(),screenSource:n.object({canvasId:n.uuid()}).optional(),pageCopyBase:n.string().refine(e=>e.trim()!==``).optional()}),io.extend({op:n.literal(`insertText`),nodeId:A,label:n.string().default(`Text`),text:n.string(),box:ro,styles:Da.default({})}),io.extend({op:n.literal(`insertPrototype`),nodeId:A,label:n.string().default(`Prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),box:ro,canvasPageId:A.optional()}),n.object({op:n.literal(`setPrototypeDeployment`),nodeId:A,prototypeId:n.uuid(),deploymentId:n.uuid(),expected:n.object({prototypeId:n.uuid(),deploymentId:n.uuid()}).optional()}),Ha,n.object({op:n.literal(`setText`),nodeId:A,text:n.string()}),n.object({op:n.literal(`setBox`),nodeId:A,box:n.union([w,n.literal(`default`)])}),n.object({op:n.literal(`setLabel`),nodeId:A,label:n.string().trim().min(1),labelOrigin:mi.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:pi.nullable()}),oo,n.object({op:n.literal(`patchExportSettings`),nodeId:A,exportSettings:$r}),n.object({op:n.literal(`setAppearance`),nodeId:A,appearance:mn}),n.object({op:n.literal(`setLayout`),nodeId:A,layout:n.union([Zt,n.literal(`default`)]),fields:n.array(Zt.keyof()).optional()}),n.object({op:n.literal(`patchTypography`),nodeId:A,typography:Sn}),n.object({op:n.literal(`setTypography`),nodeId:A,typography:n.union([bn,n.literal(`default`)])}),n.object({op:n.literal(`patchAdditionalStyles`),nodeId:A,additionalStyles:On}),n.object({op:n.literal(`setAdditionalStyles`),nodeId:A,additionalStyles:n.union([En,n.literal(`default`)])}),Bt,n.object({op:n.literal(`setTextStyleLibrary`),nodeId:n.literal(`root`),sourceCanvasId:n.uuid(),library:Wa.nullable()}),n.object({op:n.literal(`patchFontLibrary`),nodeId:n.literal(`root`),fonts:ba}),n.object({op:n.literal(`setTextStyle`),nodeId:n.literal(`root`),styleId:In.shape.id,textStyle:In.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([li,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:ao}),io.extend({op:n.literal(`move`),nodeId:A}),n.object({op:n.literal(`remove`),nodeId:A,removedText:n.record(A,T.pick({props:!0})).optional()})]),co=so.options.map(e=>e.shape.op.value),lo=n.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:ui,input:e}),n.NEVER),so),uo=Di.extend({operation:no,next:n.array(n.string().min(1))}),fo=n.record(n.string(),n.unknown()),po=n.object({canvasId:n.uuid(),afterVersion:n.number().int().positive().optional()}),mo=n.object({screenId:n.uuid(),clientToken: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(),path:n.string().startsWith(`/v1/recording-assets/`)})),missingAssetCount:n.number().int().min(0)}).nullable(),download:Zn.nullable()}),ho=n.object({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(lo)}),go=n.object({mutations:n.array(ho).optional(),version:n.number().int().min(1),restoreFenceVersion:n.number().int().positive().optional(),document:fo.optional(),screens:n.array(mo)}),_o=go.extend({document:fo}),vo=n.object({canvasId:n.uuid(),baseVersion:n.number().int().min(1),document:fo.refine(e=>hi.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:n.array(n.uuid())}),yo=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:fo})]),bo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),xo=(e,t,n)=>{if(!bo(e)||typeof e.data!=`string`)return e;let r=n(e.data,t);return r===e.data?e:{...e,data:r}},So=(e,t)=>{if(!bo(e)||!Array.isArray(e.sources))return e;let n=e.sources,r=n.map(n=>xo(n,e,t));return r.every((e,t)=>e===n[t])?e:{...e,sources:r}},Co=(e,t)=>{if(!Array.isArray(e?.fontFaces))return e;let n=e.fontFaces,r=n.map(e=>So(e,t));return r.every((e,t)=>e===n[t])?e:{...e,fontFaces:r}},wo=n.object({start:n.number().int().nonnegative(),end:n.number().int().positive(),href:n.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))}),To=n.object({text:n.string(),links:n.array(wo).optional()}),Eo=(e,t)=>{let n=e.start-t.start;return n===0?e.end-t.end:n},Do=e=>To.safeParse(e.props).data?.text??null,Oo=e=>{let t=To.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(Eo),i=[];for(let e of r)(i.at(-1)?.end??0)<=e.start&&i.push(e);return i},ko=n.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),Ao=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:Ni.nullable(),propertySections:n.array(ko)}),jo=n.object({canvasId:n.uuid()}),Mo=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:Ni.nullable(),kinds:n.record(n.string(),n.number().int().min(0)),next:n.array(n.string().min(1))}),No=n.object({canvasId:n.uuid()}),Po=n.object({canvasId:n.uuid(),version:n.number().int().positive(),nodes:n.array(Ao)}),Fo=n.object({canvasId:n.uuid(),nodeId:n.string().min(1)}),Io=n.object({canvasId:n.uuid(),version:n.number().int().positive(),node:Ao.extend({styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:Zt.optional(),appearance:dn.optional(),geometry:li.optional(),typography:bn.optional(),additionalStyles:En.optional(),props:n.record(n.string(),n.unknown()),children:n.array(n.string().min(1))}),next:n.array(n.string().min(1))}),Lo=[[`alignSelf`,`align-self`],[`order`,`order`],[`flexGrow`,`flex-grow`],[`flexShrink`,`flex-shrink`],[`flexBasis`,`flex-basis`],[`aspectRatio`,`aspect-ratio`]],Ro=[[`direction`,`flex-direction`],[`wrap`,`flex-wrap`],[`alignItems`,`align-items`],[`alignContent`,`align-content`],[`justifyContent`,`justify-content`],[`rowGap`,`row-gap`],[`columnGap`,`column-gap`]],zo=[`top`,`right`,`bottom`,`left`],Bo=(e,t,n)=>{let r={...e};for(let e of zo)n.has(`${t}-${e}`)&&Reflect.deleteProperty(r,e);return r},Vo=(e,t)=>{let n={...e};if((t.has(`display`)||t.has(`grid-auto-flow`))&&Reflect.deleteProperty(n,`gridEmptyPlacement`),n.gridAutoTrackPolicy===void 0)return n;let r={...n.gridAutoTrackPolicy};for(let e of[`columns`,`rows`])(t.has(`display`)||t.has(`grid-auto-${e}`)||t.has(`grid-template-${e}`))&&Reflect.deleteProperty(r,e);return Object.keys(r).length===0?Reflect.deleteProperty(n,`gridAutoTrackPolicy`):n.gridAutoTrackPolicy=r,n},Ho=(e,t)=>{let n=new Set([...t].flatMap(e=>kr(e))),r=Vo(e,n);for(let[e,t]of Lo)n.has(t)&&Reflect.deleteProperty(r,e);if(r.margin!==void 0&&(r.margin=Bo(r.margin,`margin`,n)),r.container===void 0)return r;let i={...r.container},a=i.direction===`column`?`column-gap`:`row-gap`;(n.has(a)||n.has(`display`))&&Reflect.deleteProperty(i,`crossGapMode`),(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 Ro)n.has(t)&&Reflect.deleteProperty(i,e);return i.padding!==void 0&&(i.padding=Bo(i.padding,`padding`,n)),n.has(`grid-template-columns`)&&(Reflect.deleteProperty(i,`gridColumns`),Reflect.deleteProperty(i,`gridAutoRepeat`)),r.container=i,r},Uo=(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},Wo=(e,t,n)=>{let r=new Set([...t].flatMap(e=>kr(e))),i=Ho(e,r);if(r.has(`display`)&&Reflect.deleteProperty(i,`retainedFlexSpacing`),[`overflow`,`overflow-x`,`overflow-y`].some(e=>r.has(e))&&Reflect.deleteProperty(i,`clipContent`),r.has(`position`)&&(Reflect.deleteProperty(i,`position`),Reflect.deleteProperty(i,`retainedIgnore`),Reflect.deleteProperty(i,`gridParticipation`)),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:Uo(i[e],n[e],r);t===void 0?Reflect.deleteProperty(i,e):i[e]=t}return i},Go=T.shape.id,Ko=w.extend({width:n.number().positive(),height:n.number().positive()}),qo=n.record(Go,Go),Jo=n.strictObject({fingerprint:n.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:n.enum([`strict`,`rebase`]),copiedNodeIds:qo.optional()}),Yo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),documentFormatVersion:di,baseVersion:n.number().int().positive(),operations:n.array(lo).min(1),requestContext:Jo.optional(),writeScope:sa.optional()}),Xo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(lo),insertedNodeIds:n.array(Go),changedNodeIds:n.array(Go),removedNodeIds:n.array(Go),boxes:n.record(Go,w),affectedBounds:Ko.nullable(),copiedNodeIds:qo.optional(),next:n.array(n.string().min(1))}),Zo=n.strictObject({canvasId:n.uuid(),mutationId:n.uuid(),fingerprint:Jo.shape.fingerprint}),Qo=n.discriminatedUnion(`state`,[n.strictObject({state:n.literal(`not-found`)}),n.strictObject({state:n.literal(`committed`),result:Xo})]),$o={nodes:1e3,fields:20,id:200,label:500,value:1e3},es=n.object({available:n.boolean(),omittedNodes:n.number().int().nonnegative(),nodes:n.array(n.object({nodeId:n.string().min(1),label:n.string().max($o.label),kind:n.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:n.number().int().nonnegative(),fields:n.array(n.object({label:n.string().max($o.id),before:n.string().max($o.value).nullable(),after:n.string().max($o.value).nullable(),truncated:n.boolean()})).max($o.fields)})).max($o.nodes)}),ts=`page`,ns=`frame`,rs=`group`,is=`rectangle`,as=`image`,os=`text`,ss=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],cs=[`position`,`layout`,`clip`,...ss.filter(e=>e!==`position`&&e!==`layout`)],ls=[...ss,`vector`],us=Object.fromEntries([{objectKind:`prototype`,label:`Prototype`,category:`import`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},capture:{preservesHtmlCssAssets:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:[`position`,`layout`,`cornerRadius`,`blending`,`outline`,`outerShadow`,`innerShadow`,`filters`]},{objectKind:`root`,label:`Canvas`,category:`container`,capabilities:{canSelect:!1,canContainChildren:!0,canEditProperties:!1},selectionBehavior:{hitTarget:`children`},propertySections:[]},{objectKind:ts,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:ns,label:`Frame`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:cs},{objectKind:rs,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`,`filters`,`additionalStyles`,`export`]},{objectKind:is,label:`Rectangle`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ss},{objectKind:as,label:`Image`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:ss},{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:ls},{objectKind:`boolean`,label:`Boolean`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},capture:{preservesVectorData:!0},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ls},{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:os,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])),ds=e=>us[e]??null,fs=e=>ds(e)?.propertySections??[],j=T.shape.id,ps=n.array(j).min(1),ms=n.strictObject({x:n.number(),y:n.number()}),hs=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.`}),gs=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`position`),nodeId:j,parentPosition:ms}),n.strictObject({kind:n.literal(`resize`),nodeId:j,size:hs}),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:ps,targetNodeId:j,position:n.enum([`before`,`inside`,`after`])}),n.strictObject({kind:n.literal(`group`),nodeIds:ps,label:n.string().min(1).optional()}),n.strictObject({kind:n.literal(`ungroup`),nodeIds:ps}),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()})]),_s=n.strictObject({kind:n.literal(`arrange`),changes:n.array(gs).min(1)}),vs=n.strictObject({kind:n.literal(`duplicate`),nodeIds:ps,destination:n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`native`)}),n.strictObject({kind:n.literal(`inside`),parentId:j})])}),ys=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)}),_s,vs,n.strictObject({kind:n.literal(`compile-html`),contextOperations:n.array(lo).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.`)})]),bs=n.strictObject({pageId:j.optional(),nodeIds:n.array(j)}),xs=n.strictObject({request:ys,scope:bs}),Ss=n.strictObject({operations:n.array(lo),idMap:n.record(j,j),rootNodeIds:n.array(j)}),Cs=Ss.extend({compilations:n.array(n.strictObject({id:j,draft:Ti,warnings:n.array(Hi).optional()})).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:Cs}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1),reason:n.enum([`SOURCE_FAILED`,`PREPARATION_FAILED`]).optional(),retryable:n.boolean().optional()})]);const ws=n.object({id:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),request:ys,scope:bs,phase:Ri,attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Ts=n.discriminatedUnion(`state`,[ws.extend({state:n.enum([`queued`,`running`]),result:n.null(),failure:n.null()}),ws.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Ss.extend({loadedVersion:n.number().int().positive()}),failure:n.null()}),ws.extend({state:n.enum([`failed`,`cancelled`,`expired`]),result:n.null(),failure:Ui})]),Es=n.strictObject({canvasId:n.uuid(),expectedVersion:n.number().int().positive(),request:ys,scope:bs}),Ds=n.object({job:Ts,alreadyExists:n.boolean()}),Os=n.object({jobId:n.uuid()}),ks=n.object({job:Ts}),As=`x-enhance-agent-client`,js=n.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Ms=n.strictObject({path:n.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:js.optional(),version:js.optional()}),Ns=Ms.pick({path:!0}).strip(),Ps=n.strictObject({agent_client:n.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Ms.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:js.optional()}),Fs=e=>{let t=Ms.safeParse(e);if(t.success)return t.data;let n=Ns.safeParse(e);return{path:n.success?n.data.path:`direct_cli`}},Is=n.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),Ls=n.string().regex(/^[0-9a-f]{32}$/),Rs=n.object({viewKey:Ls.optional(),admissionOrder:n.number().int().nonnegative().optional(),followColour:Is.optional()}),zs=n.object({pageId:n.string().min(1).nullable().optional(),followingViewKey:Ls.nullable().optional()}),Bs=`enhance3.canvas.v1`,Vs=16384,Hs=n.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),Us=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(He).nullable().optional(),colour:Hs}),Ws=Us.extend(Rs.shape),Gs=n.object({kind:n.literal(`guest`),connectionId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),colour:Hs,...Rs.shape}),Ks=n.discriminatedUnion(`kind`,[Ws,Gs]),qs=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:Ps.optional(),colour:Hs}),Js=n.discriminatedUnion(`kind`,[Us.omit({connectionId:!0,avatarUrl:!0}),qs]),Ys=n.object({x:n.number(),y:n.number()}),Xs=w.extend({width:n.number().positive(),height:n.number().positive()}),Zs=n.object({count:n.number().int().positive(),bounds:Xs.nullable()}),Qs=n.object({kind:n.enum([`drag`,`resize`]),baseVersion:n.number().int().positive(),boxes:n.record(n.string().min(1),Xs).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:Zs.optional()}),$s=n.object({cursor:Ys.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<=Vs).optional(),selectionSummary:Zs.nullable().optional(),visibleWorldBox:Xs.optional(),gesture:Qs.nullable().optional(),cursorChat:n.string().max(140).nullable().optional(),...zs.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),ec=n.object({actor:Ks,seq:n.number().int().nonnegative(),cursor:Ys.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<=Vs),selectionSummary:Zs.nullable().optional(),visibleWorldBox:Xs.nullable(),gesture:Qs.nullable(),cursorChat:n.string().max(140).nullable().default(null),...zs.shape,followOrder:n.number().int().nonnegative().optional(),expiresAt:n.iso.datetime()}),tc=n.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),nc=n.object({activityId:n.uuid(),canvasId:n.uuid(),actor:qs,phase:tc,nodeIds:n.array(n.string().min(1)).max(100),bounds:Xs.nullable(),expiresAt:n.iso.datetime()}),rc=n.object({canvasId:n.uuid(),phase:tc,nodeIds:n.array(n.string().min(1)).max(100).default([]),bounds:Xs.nullable().default(null)}),ic=n.object({activityId:n.uuid(),expiresAt:n.iso.datetime(),renewAfterMs:n.number().int().positive()}),ac=rc.extend({activityId:n.uuid()}),oc=n.object({canvasId:n.uuid(),activityId:n.uuid()}),sc=n.object({ended:n.literal(!0)}),cc={v:n.literal(1),seq:n.number().int().nonnegative()};n.discriminatedUnion(`type`,[n.object({...cc,type:n.literal(`access.changed`),payload:n.object({})}),n.object({...cc,type:n.literal(`comments.changed`),payload:n.object({threadId:n.uuid()})}),n.object({...cc,type:n.literal(`resources.changed`),payload:n.object({})}),n.object({...cc,type:n.literal(`room.snapshot`),payload:n.object({connectionId:n.uuid(),viewKey:Rs.shape.viewKey,peers:n.array(ec),activities:n.array(nc),documentVersion:n.number().int().positive()})}),n.object({...cc,type:n.literal(`presence.patch`),payload:ec}),n.object({...cc,type:n.literal(`presence.left`),payload:n.object({connectionId:n.uuid()})}),n.object({...cc,type:n.literal(`agent.activity`),payload:n.object({activityId:n.uuid(),activity:nc.nullable()})}),n.object({...cc,type:n.literal(`document.committed`),payload:n.object({mutationId:n.uuid(),actor:Js,previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(lo).min(1)})}),n.object({...cc,type:n.literal(`sync.required`),payload:n.object({version:n.number().int().positive(),reason:n.enum([`gap`,`relay`,`replace`,`history-restored`])})}),n.object({...cc,type:n.literal(`room.ping`),payload:n.object({pingId:n.uuid(),sentAt:n.iso.datetime()})}),n.object({...cc,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:$s}),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 lc=n.object({canvasId:n.uuid(),protocols:n.array(n.literal(Bs)).min(1).max(1),viewId:n.uuid().optional()}),uc=n.object({endpoint:n.url(),ticket:n.string().min(1).max(4096),protocol:n.literal(Bs),expiresAt:n.iso.datetime()}),dc=n.uuid(),fc=T.shape.id,pc=n.array(fc),mc=/^\/c\/([^/]+)\/?$/iu,hc=e=>{let t=e.trim(),n=dc.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=dc.safeParse(mc.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&&!fc.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 u=pc.safeParse(c.length>0?c:l);return u.success?{ok:!0,value:{canvasId:i.data,...o!==void 0&&{pageId:o},nodeIds:[...new Set(u.data)]}}:{ok:!1,reason:`selection`}},gc=(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=hc(n.href);return a.ok?{ok:!0,url:n.href}:a},_c=`root`,vc=`canvas-page-default`,yc=e=>Object.entries(e.relationships).filter(([,e])=>e.parentId===_c).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):t.sortKey<r.sortKey?-1:1).map(([e])=>e),bc=e=>{let t=yc(e).filter(t=>e.nodes[t]?.component===ts);return t.length>0?t:[vc]},xc=(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===_c){let e=t.props?.canvasPageId;return typeof e==`string`?e:vc}r=i}return null},Sc=(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},Cc=(e,t)=>{let n=bc(t);if(e.pageId!==void 0&&!n.includes(e.pageId))return{ok:!1,reason:`page`};let r=e.nodeIds.map(e=>xc(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)]:yc(t).filter(e=>{let n=xc(t,e);return n!==null&&(i===null||n===i)});return{ok:!0,pageId:i,rootNodeIds:a,nodeIds:Sc(t,a)}},wc=n.object({jobId:n.uuid()}),Tc=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),target:E,sourceState:Pi.optional()}),Ec=n.discriminatedUnion(`purpose`,[Tc.extend({purpose:n.literal(`preparation`),preparation:xs,screens:n.array(mo).optional(),attempts:n.strictObject({counted:n.number().int().nonnegative(),limit:n.number().int().positive()}).optional(),deadlineAt:n.iso.datetime().optional(),sourceState:n.undefined().optional(),scale:n.literal(1),format:n.literal(`json`)}),Tc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:n.number().positive(),maxOutputPixels:Mi.optional(),format:n.literal(`png`)}),Tc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),sourceState:n.undefined().optional(),conversion:ua,scale:n.literal(1),format:n.literal(`json`)})]);n.object({jobId:n.uuid()}),n.object({jobId:n.uuid()});const Dc=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(),deadlineAt:n.iso.datetime().optional(),releaseIdentity:n.string().min(1).max(100)});n.discriminatedUnion(`purpose`,[Dc.extend({purpose:n.literal(`preparation`),target:E,preparation:xs,sourceState:n.undefined().optional(),scale:n.literal(1)}),Dc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:E,sourceState:Pi.optional(),scale:n.number().positive(),maxOutputPixels:Mi.optional(),outputKey:n.string().min(1).max(500)}),Dc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1).max(200)}),sourceState:n.undefined().optional(),conversion:ua,scale:n.literal(1)})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),bounds:Ni,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(Hi),timings:n.array(Wi),sourceState:Fi.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:Ti}),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:Ui}),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 Oc=n.object({total:n.number().int().nonnegative(),loading:n.number().int().nonnegative(),unavailable:n.number().int().nonnegative()}),kc=n.object({jobId:n.uuid(),canvasId:n.uuid().nullable(),requestedVersion:n.number().int().positive().nullable(),loadedVersion:n.number().int().positive().nullable(),phase:Ri.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:Oc,warnings:n.array(Hi),timings:n.array(Wi),sourceState:Fi.optional()}),Ac=n.object({selector:n.string().min(1).max(500),contentSelector:n.string().min(1).max(500).optional(),expectsPaint:n.boolean().optional(),bounds:Ni,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive()});n.discriminatedUnion(`state`,[kc.extend({state:n.literal(`loading`),capture:n.null(),failure:n.null()}),kc.extend({state:n.literal(`ready`),phase:n.literal(`target`),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),capture:Ac,failure:n.null()}),kc.extend({state:n.literal(`failed`),failure:n.object({reason:Bi,message:n.string().min(1).max(500),sourceId:n.string().min(1).max(200).nullable(),overtaken:n.boolean().optional()}),capture:n.null()})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),plan:Cs});const jc=n.string().min(1),Mc=n.object({canvasId:n.uuid()}),Nc=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(jc),missingNodeIds:n.array(jc),nodes:n.array(Ao),contextRootId:jc.nullable(),visibleWorldBox:Ni.nullable(),next:n.array(n.string().min(1)).max(12)}),Pc=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`recording`),recordingId:n.string()})]),Fc=n.object({html:n.string().optional(),viewport:n.object({width:n.number(),height:n.number()}),atMs:n.number(),screenId:n.string().nullable().default(null),sourceNodeId:n.string().optional(),provenance:Pc.optional()}),Ic=n.object({provenance:Pc.optional(),report:Si.optional()}),Lc=n.object({recordingId:n.string()}),Rc=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 zc=`$structure`,Bc=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)},Vc=e=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==`text`&&e!==`children`)),Hc=(e,t)=>{let n={...e,...t};return t.listStyle===`none`&&(Reflect.deleteProperty(n,`listLevel`),Reflect.deleteProperty(n,`listStart`)),n},Uc=(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},Wc=(e,t)=>{let n=0;return e.map(e=>{let r=n;if(n+=S(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}})},Gc=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},Kc=(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},qc=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},Jc=(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},Yc=e=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let t=Yc(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}]}),Xc=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||Xc(e.children))),Zc=e=>{let t=[[]];for(let n of e){let e=n.kind===`span`?Zc(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},Qc=(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})},$c=e=>{let t=S(e),n=qc(e),r=Zc(Yc(e)),i=Gc(t),a=Qc(n,i);return i.map((e,t)=>({kind:`span`,paragraph:a[t]??{},styles:{},children:r[t]??[]}))},el=(e,t,n)=>{let r=Gc(S(e));return $c(e).map((e,i)=>{let a=r[i];return a===void 0?e:Kc(a,t)?{...e,paragraph:n(e.paragraph??{})}:e})},tl=(e,t)=>Jc(qc(e),t),nl=(e,t,n)=>{if(!Xc(e))return t;let r=S(t),i=S(e),a=n.replaces&&n.end===i.length&&n.start<i.length,o=r===``||!a&&r.endsWith(`
5
5
  `)?[{kind:`span`,styles:{},children:[],paragraph:tl(e,r===``?n.start:i.length)}]:[],s=$c([...t,...o]);return n.replaces?Wc(s,{start:n.start,end:r.length-i.length+n.end}):s},rl={color:`inherit`,textDecorationLine:`underline`,textDecorationThickness:`0.08em`,textUnderlineOffset:`0.14em`},il=new Set(Fn),al=new Set(Object.entries(Cn).flatMap(([e,t])=>t.some(e=>il.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[])),ol=(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(Object.keys(t).every(e=>!al.has(e))&&(r.position===void 0||r.position===e.position))return e;if(n){let n=Ln.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)&&al.has(e)))}});return n.success?n.data:null}return Object.keys(t).some(e=>al.has(e))?null:e},sl=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},...e.stroke!==void 0&&{stroke:e.stroke},...e.decorationBlendMode!==void 0&&{decorationBlendMode:e.decorationBlendMode},...e.backgroundBlendMode!==void 0&&{backgroundBlendMode:e.backgroundBlendMode}}),cl=e=>{if(e.href!==void 0)for(let[t,n]of Object.entries(rl))e.styles[t]===n&&Reflect.deleteProperty(e.styles,t);Reflect.deleteProperty(e,`href`)},ll=(e,t)=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let n={...e,styles:{...e.styles},children:ll(e.children,t)};if(t.type===`format`){let e=Object.keys(sl(t));for(let t of e)Reflect.deleteProperty(n,t);let r=ol(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`)cl(n);else if(t.type===`paint`)Reflect.deleteProperty(n,`fills`),Reflect.deleteProperty(n.styles,`color`);else for(let e of Xn(t))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]}),ul=(e,t)=>e.map(e=>e.kind===`span`?e.href!==void 0||e.children.some(e=>e.kind===`span`)?{...e,children:ul(e.children,t)}:{...e,styles:{...e.styles,...t}}:{kind:`span`,styles:t,children:[e]}),dl=(e,t)=>{let n=Yn(e);if(t.href!==null&&t.href===n)return e;let r=ll(e,t);return t.href===null?r:[{kind:`span`,styles:rl,href:t.href,children:r}]},fl=(e,t)=>{if(t.type===`link`)return dl(e,t);let n=ll(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&&t.styles.lineHeight===void 0?[{kind:`span`,styles:t.styles,children:n}]:ul(n,t.styles),r=sl(t);return Object.keys(r).length===0?e:[{kind:`span`,styles:{},...r,children:e}]}return t.fills===null?n:[{kind:`span`,styles:{},fills:t.fills,children:n}]},pl={},ml=()=>pl.current??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),hl=e=>new Set([0,e.length,...Array.from(ml().segment(e),({index:e})=>e)]),gl=(e,t)=>{let n=hl(e);return t.start<=t.end&&n.has(t.start)&&n.has(t.end)},_l=(e,t)=>{let n=new Set([0]),r=0;for(let t of e)r+=t.length,n.add(r);return t.start<=t.end&&n.has(t.start)&&n.has(t.end)},vl=e=>e.kind===`text`?e.text.length:e.kind===`break`?1:S(e.children).length,yl=(e,t,n)=>{let r=0;return e.flatMap(e=>{let i=vl(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:yl(e.children,a,o)}]:e.kind===`text`?[{...e,text:e.text.slice(a,o)}]:[e]})},bl=e=>JSON.stringify(Object.fromEntries(Object.entries(e).filter(([e])=>![`children`,`text`].includes(e))),(e,t)=>typeof t==`object`&&t&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).toSorted(([e],[t])=>e.localeCompare(t,`en`))):t),xl=e=>e.kind===`span`&&e.paragraph!==void 0&&S(e.children).endsWith(`
6
6
  `),Sl=e=>{let t=[];for(let n of e){let e=t.at(-1);if(e!==void 0&&!xl(e)&&bl(e)===bl(n)){if(e.kind===`text`&&n.kind===`text`){t[t.length-1]={...e,text:e.text+n.text};continue}if(e.kind===`span`&&n.kind===`span`){t[t.length-1]={...e,children:Sl([...e.children,...n.children])};continue}}t.push(n)}return t},Cl=(e,t)=>e.split(/([\n\u{2028}])/u).flatMap(e=>e===`