@enhance-eng/enhance-dev 0.1.41-dev.sha-16708314d448 → 0.1.41-dev.sha-4a76a9fc808c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cli-output-identity.lib-DqtHQ0LE.mjs → cli-output-identity.lib-CfGYbAfN.mjs} +1 -1
- package/dist/main.mjs +5 -5
- package/dist/mcp-main.mjs +2 -2
- package/dist/{mcp-server.adapter-CKlwKz-w.mjs → mcp-server.adapter-AYEN3tEQ.mjs} +1 -1
- package/dist/mcp.mjs +1 -1
- package/dist/{mutation-key.adapter-DMx2N3NB.mjs → mutation-key.adapter-A347POmF.mjs} +1 -1
- package/package.json +1 -1
|
@@ -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,v14:14},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`,[d.v14]:`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),15]),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===15||!Pe(e.nodes))return e;let n=Object.entries(ne).find(([e])=>Number(e)===t)?.[1];return Ne.has(n)?{...e,version:15}:Object.values(e.nodes).some(e=>Pe(e)&&e.geometry!==void 0)?null:n===`typography`?{...e,version:15}:{...e,version:15,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||e.version===d.v14?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({top:_.optional(),right:_.optional(),bottom:_.optional(),left:_.optional()}).strict(),Qt=n.object({ratio:g,offset:g.optional()}).strict(),$t=n.object({x:Qt.optional(),y:Qt.optional()}).strict(),en=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(),positionParent:$t.optional(),order:g.int().optional(),margin:Kt.partial().optional(),clipContent:n.boolean().optional(),baselineSource:Xt.optional(),scrollbarGutter:Zt.optional(),container:Yt.partial().extend({padding:Wt.partial().optional()}).optional()}).strict(),tn=g,nn=_,rn=n.number().min(0).max(1),an=n.string().min(1),on=n.object({topLeft:nn,topRight:nn,bottomRight:nn,bottomLeft:nn,smoothing:rn.optional()}),sn=n.array(nn).min(1),cn=n.enum([`none`,`round`,`square`]),ln=n.object({visible:n.boolean(),layoutInclusion:n.enum([`always`,`visible`,`none`]).optional(),width:n.object({top:nn,right:nn,bottom:nn,left:nn}),style:n.enum([`solid`,`dashed`,`dotted`]),paints:n.array(Rt),dashPattern:sn.optional(),dashCap:cn.optional(),dashOrigin:n.literal(`css`).optional(),alignment:n.enum([`inside`,`center`,`outside`]).optional()}),un=ln.pick({width:!0,style:!0,layoutInclusion:!0}),dn=n.object({visible:n.boolean(),width:nn,offset:tn,style:n.enum([`solid`,`dashed`,`dotted`]),paints:n.array(Rt),dashPattern:sn.optional(),dashCap:cn.optional()}),fn=n.object({id:an,visible:n.boolean(),kind:n.enum([`outer`,`inner`]),color:Tt,offsetX:tn,offsetY:tn,blur:nn,spread:tn,blendMode:Pt.optional(),blendSource:Ft.optional(),isShownBehindNode:n.boolean().optional()}),pn=n.object({opacity:rn,blendMode:Pt,fills:n.array(Rt),border:ln,retainedBorder:un.optional(),outline:dn,radius:on,shadows:n.array(fn),filters:n.array(At),backdropFilters:n.array(jt)}),mn=pn.partial().refine(e=>Object.keys(e).length>0,`appearance values cannot be empty`),hn=[`opacity`,`blendMode`,`fills`,`border`,`retainedBorder`,`outline`,`radius`,`shadows`,`filters`,`backdropFilters`],gn=n.enum(hn),_n=pn.partial().extend({clear:n.array(gn).min(1).max(hn.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`),vn=n.number(),yn=n.number().nonnegative(),bn=n.string().regex(/^[\u{20}-\u{7E}]{4}$/u),xn=bn.refine(e=>![`wght`,`opsz`].includes(e)),b=n.object({family:n.string().min(1),fallbackFamilies:n.array(n.string().min(1)),size:yn,weight:n.number().min(1).max(1e3),variations:n.record(xn,vn).optional(),features:n.record(bn,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:vn})]).optional(),style:n.enum([`normal`,`italic`,`oblique`]),lineHeight:n.discriminatedUnion(`mode`,[n.object({mode:n.literal(`normal`)}),n.object({mode:n.literal(`fixed`),value:yn}),n.object({mode:n.literal(`percent`),value:yn})]),letterSpacing:n.union([vn,n.object({mode:n.literal(`percent`),value:vn})]),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([yn,n.object({mode:n.literal(`percent`),value:yn}),n.object({mode:n.literal(`font-default`)})]).optional(),offset:n.union([vn,n.object({mode:n.literal(`percent`),value:vn})]).optional(),skipInk:n.enum([`auto`,`none`,`all`]).optional()}),stroke:n.object({width:yn,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:yn.optional(),paragraphIndent:yn.optional(),listStyle:n.enum([`none`,`bulleted`,`numbered`]).optional(),listSpacing:yn.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:vn,right:vn,bottom:vn,left:vn}).optional()}),Sn=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(),Cn=b.partial().strict(),wn=b.keyof().options,Tn=Cn.extend({featureChanges:n.object({set:b.shape.features,clear:n.array(bn).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),variationChanges:n.object({set:b.shape.variations,clear:n.array(xn).optional(),removeIfEmpty:n.boolean().optional()}).strict().optional(),clear:n.array(b.keyof()).max(wn.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`),En={"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`]},Dn=/^(?:behavior|-moz-binding)$/iu,On=n.string().min(1).regex(/^(?:--[\w-]+|-(?:webkit|moz|ms|o)-[a-z][a-z\d-]*|[a-z][a-z\d-]*)$/iu).refine(e=>!Dn.test(e),`unsafe CSS property`),x=n.object({id:n.string().min(1),property:On,value:St,enabled:n.boolean()}),kn=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`),An=n.array(x.shape.id).refine(e=>new Set(e).size===e.length,`declaration ids must be unique`),jn=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:An.optional(),order:An.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`),Mn=new Set([`#`,`%`,`/`,`:`,`<`,`>`,`?`,`@`,`[`,`\\`,`]`,`^`,`|`]),Nn=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||Mn.has(e))return!1}return t!==``},Pn=new Set([`http:`,`https:`,`mailto:`,`tel:`]),Fn=e=>{let t=e.trim();if(t===``)return!1;try{let e=new URL(t,`https://enhance.invalid/`);return Pn.has(e.protocol)&&(![`http:`,`https:`].includes(e.protocol)||Nn(e))}catch{return!1}},In=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(`.`)),Ln=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(),Rn=Ln.keyof().options,zn=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:Ln.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`]}),Bn=n.object({id:zn.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(),Vn=Rt.array().optional();n.object({fills:Vn});const Hn=Sn.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(),Un=e=>typeof e==`string`&&Fn(e)?e:void 0,Wn=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Object.entries(e);return t.some(([e,t])=>!In.has(e)||typeof t!=`string`&&typeof t!=`number`)?null:Object.fromEntries(t)},Gn=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}}},Kn=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=Jn(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},qn=e=>{let t=Reflect.get(e,`soft`);return t!==void 0&&t!==!0?null:{...Gn(e),kind:`break`,...t===!0&&{soft:t}}},Jn=(e,t)=>{if(typeof e!=`object`||!e)return null;let n=Reflect.get(e,`kind`),r=Gn(e);if(n===`break`)return qn(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=Wn(Reflect.get(e,`styles`)),o=Vn.safeParse(Reflect.get(e,`fills`)),s=Sn.optional().safeParse(Reflect.get(e,`paragraph`)),c=Hn.safeParse(e),l=Bn.optional().safeParse(Reflect.get(e,`textStyle`));if(a===null||!o.success||!s.success||!c.success||!l.success||!Array.isArray(i))return null;let u=Un(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}}},Yn=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(Yn(e))}return n.join(``)},Xn=e=>{let t=e.props;if(t===void 0||!Array.isArray(t.richText))return[];let n=Kn(t.richText);if(n===null)return[];let r=t.text;return S(n)===r?n:[]},Zn=e=>{let t=[...Xn(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},Qn=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},$n=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())}),er=n.object({url:n.url(),expiresAt:n.iso.datetime(),bytes:n.number().int().min(0)}),tr=`/v1/canvas-assets/`,nr=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],rr=n.string().regex(/^image\/[a-z0-9.+-]+$/u),ir=n.object({canvasId:n.uuid(),contentType:n.enum(nr),bytes:n.number().int().positive()}),ar=n.object({assetId:n.uuid(),path:n.string().startsWith(`/v1/canvas-assets/`),upload:C}),or=(e,t)=>`${tr}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,sr=n.tuple([n.uuid(),n.uuid()]),cr=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=sr.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},lr=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],ur=n.object({canvasId:n.uuid(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),dr=ur.extend({bytes:n.number().int().positive()}),fr=dr.extend({contentType:n.enum(lr)}),pr=n.object({path:n.string().startsWith(`/v1/canvas-assets/`)}),mr=pr.extend({upload:C}),hr=(e,t)=>`${tr}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`,gr=n.object({canvasId:n.uuid(),sources:n.array(ur).min(1)}),_r=n.object({resources:n.array(n.object({source:ur,path:n.string()}))}),vr=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:ur.safeParse({canvasId:t,sha256:r}).data??null},yr=1e3,br=new Set(lr),xr=(e,t)=>e===`image`?rr.safeParse(t).success:br.has(t),Sr=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid()}),Cr=n.discriminatedUnion(`kind`,[Sr.extend({kind:n.literal(`image`),contentType:n.enum(nr),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),Sr.extend({kind:n.literal(`font`),contentType:n.enum(lr),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)})]),wr=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(yr),maximumWeight:n.number().min(1).max(yr)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]),Tr=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:wr.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=>xr(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?or(e.canvasId,e.assetId):hr(e.canvasId,e.sha256)),`The resource path must match its native identity.`),Er=Tr.safeExtend({upload:C.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`),Dr=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`]),Or=(e,t)=>typeof t==`number`&&!Dr.has(e.toLowerCase())?`${String(t)}px`:String(t),kr=[`top`,`right`,`bottom`,`left`],Ar=[`grid-template-rows`,`grid-template-columns`,`grid-template-areas`],jr={gap:[`row-gap`,`column-gap`],"text-wrap":[`text-wrap-mode`,`text-wrap-style`],padding:kr.map(e=>`padding-${e}`),margin:kr.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":Ar,grid:[...Ar,`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`]},Mr=e=>jr[e.toLowerCase()]??[e.toLowerCase()],Nr=(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}},Pr=(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=Nr(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},Fr=e=>/^(?:--|-?[_a-z\u{80}-\u{FFFF}])[-\w\u{80}-\u{FFFF}]*$/iu.test(e)&&!/^(?:auto|span|initial|unset)$/iu.test(e)?e:`auto`,Ir=(e,t,n)=>{let r=Pr(t,`/`),i=r[0]??t;if(e!==`grid-area`)return r[n]??Fr(i);let a=r[1]??Fr(i);return[i,a,r[2]??Fr(i),r[3]??Fr(a)][n]??t},Lr=(e,t,n)=>{let r=Pr(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]},Rr=(e,t,n)=>{if(/^(?:none|initial|unset)$/iu.test(t))return[`none`,`none`,`none`,`auto`,`auto`,`row`][n]??t;let r=Pr(t,`/`),i=r[0]??t,a=r[1];if(i===``||a===``||r.length>2)return t;let o=Pr(i).some(e=>e.toLowerCase()===`auto-flow`),s=a!==void 0&&Pr(a).some(e=>e.toLowerCase()===`auto-flow`);if(e===`grid`&&a!==void 0&&o!==s)return Lr(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},zr=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]},Br=(e,t,n)=>{if(/(?:var|env)\(|^(?:inherit|revert(?:-layer)?)$/iu.test(t))return t;if(/^grid-(?:area|row|column)$/u.test(e))return Ir(e,t,n);if(e===`grid-template`||e===`grid`)return Rr(e,t,n);let r=Pr(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:zr(r)[n]??t:r[n]??(n===3?r[1]:void 0)??r[0]??t},Vr=e=>e.additionalStyles===void 0?{}:Object.fromEntries(e.additionalStyles.declarations.filter(e=>e.enabled).map(e=>[e.property,e.value])),Hr=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()))),...Vr(e)}},Ur=e=>/!important\s*$/iu.test(String(e)),Wr=(e,t)=>{let n=String(e).replace(/\s*!important\s*$/iu,``).trim();return t||n.includes(`(`)?n:n.toLowerCase()},Gr=(e,t)=>{let n=null,r=!1,i=Object.entries(Hr(e));for(let[e,a]of i){let i=Mr(e),o=i.indexOf(t);if(o===-1)continue;let s=Ur(a);if(r&&!s)continue;let c=Wr(a,/^grid(?:-|$)/iu.test(e));n=i.length===1?c:Br(e.toLowerCase(),c,o),r=s}return n??void 0},Kr=new WeakMap,qr=(e,t)=>{let n=Kr.get(e.styles),r=n!==void 0&&n.additionalStyles===e.additionalStyles?n:{additionalStyles:e.additionalStyles,values:new Map};if(r!==n&&Kr.set(e.styles,r),r.values.has(t))return r.values.get(t);let i=Gr(e,t);return r.values.set(t,i),i},Jr=(e,t)=>{let n=new Set(Object.entries(Hr(e)).filter(([,e])=>Ur(e)).flatMap(([e])=>Mr(e)));return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,Mr(e).some(e=>n.has(e))&&!Ur(t)?`${Or(e,t)} !important`:t]))},Yr=(e,t)=>{let n=new Set,r=e;for(;r!==void 0&&!n.has(r.id);){n.add(r.id);let e=qr(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`},Xr=(e,t,n)=>{let r=/^(?:vertical|sideways)-/u.test(Yr(e,n));return[t===`horizontal`?`width`:`height`,t===`vertical`===r?`inline-size`:`block-size`]},Zr=e=>{if(e===void 0)return`freeform`;let t=qr(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`},Qr=(e,t)=>{if(e===void 0||Zr(e)!==`flex`)return;let n=e.layout?.container?.direction??(t=>qr(e,t))(`flex-direction`)??`row`;if(!/^(?:row|column)(?:-reverse)?$/u.test(n))return;let r=/^(?:vertical|sideways)-/u.test(Yr(e,t));return n.startsWith(`column`)===r?`horizontal`:`vertical`},$r=n.enum([`png`,`jpeg`]),ei=n.number().positive(),ti=n.strictObject({format:$r.optional(),scale:ei.optional()}),ni=n.strictObject({format:$r.nullable().optional(),scale:ei.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),ri=n.number(),ii=ri.nonnegative(),ai=n.string().min(1).max(200),oi=n.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),si=n.strictObject({x:ri,y:ri,width:ii,height:ii}),ci=n.strictObject({kind:n.literal(`path`),path:oi.min(1),fillRule:n.enum([`nonzero`,`evenodd`]),viewBox:si.extend({width:ii.positive(),height:ii.positive()})}),li=n.strictObject({kind:n.literal(`polygon`),count:n.number().int().min(3),innerRatio:n.number().min(0).max(1).optional(),cornerRadius:ii,cornerSmoothing:n.number().min(0).max(1)}),ui=n.enum([`union`,`subtract`,`intersect`,`exclude`]),di=n.strictObject({kind:n.literal(`boolean`),operation:ui,operandIds:n.array(ai).min(1).refine(e=>new Set(e).size===e.length),result:n.strictObject({path:oi,fillRule:n.literal(`nonzero`),isEmpty:n.boolean(),bounds:si,inputKey:n.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),fi=n.discriminatedUnion(`kind`,[ci,li,n.strictObject({kind:n.literal(`mask`),maskId:ai,mode:n.enum([`alpha`,`luminance`,`outline`]).optional()}),di]),pi=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,mi=n.literal(15,{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,`)||cr(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()}),hi=n.enum([`start`,`center`,`end`,`stretch`,`scale`]),gi=n.object({x:hi,y:hi}),_i=n.enum([`source`,`generated`,`content`,`user`]),T=n.looseObject({id:n.string().min(1),label:n.string(),component:n.string().min(1),labelOrigin:_i.optional(),visible:n.boolean().optional(),locked:n.boolean().optional(),constraints:gi.optional(),styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:en.optional(),responsive:n.never().optional(),appearance:mn.optional(),exportSettings:ti.optional(),typography:Cn.optional(),additionalStyles:kn.optional(),geometry:fi.optional(),compositing:n.never({error:pi}).optional(),props:n.record(n.string(),n.unknown()).optional(),box:w.optional()}),vi=n.object({version:n.literal(15),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({})}),yi=n.record(n.string(),n.unknown()),bi=n.preprocess(e=>{let t=yi.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?xi():Le(t)},vi),xi=()=>({version:15,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Si=n.string().min(1),Ci=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:Si.optional()}),wi=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`]),Ti=n.object({nodeCount:n.number().int().positive(),unsupportedFeatures:n.array(n.object({feature:wi,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(Ci)}),Ei=T.omit({id:!0}).extend({temporaryId:Si}),Di=n.object({temporaryId:Si,parentTemporaryId:Si,sortKey:n.string().min(1)}),Oi=n.object({version:n.literal(1),rootTemporaryId:Si,nodes:n.array(Ei).min(1),relationships:n.array(Di),report:Ti.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),ki=n.object({canvasId:n.uuid(),documentFormatVersion:mi,mutationId:n.uuid(),baseVersion:n.number().int().positive(),screenNodeId:n.string().min(1),draft:Oi}),Ai=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(Si,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}),ji=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],Mi=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],Ni=[`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`],Pi=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],Fi=n.number().int().positive(),Ii=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:Ii})]),Li=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),Ri=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative()}),zi=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:Ii,version:n.number().int().positive(),alreadyPresent:n.boolean()}),Bi=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:Li.optional(),scale:n.number().positive().default(1),maxOutputPixels:Fi.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`]}),Vi=n.enum(ji),Hi=n.enum(Mi),Ui=n.enum(Ni),Wi=n.enum(Pi),Gi=n.object({code:Wi,message:n.string().min(1).max(500),sourceId:n.string().min(1).nullable()}),Ki=n.object({reason:Ui,phase:Vi,message:n.string().min(1).max(500),retryable:n.boolean(),sourceId:n.string().min(1).nullable()}),qi=n.object({phase:Vi,durationMs:n.number().int().min(0)}),Ji=n.object({canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),target:E,sourceState:Ri.optional(),snapshot:zi.optional(),bounds:Ii,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(Gi),timings:n.array(qi),expiresAt:n.iso.datetime()}),Yi=n.object({id:n.uuid(),canvasId:n.uuid(),purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:Vi,requestedVersion:n.number().int().positive(),target:E,sourceState:Li.optional(),scale:n.number().positive(),maxOutputPixels:Fi.optional(),format:n.literal(`png`),attempt:n.number().int().min(0),lastFailure:Ki.optional(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Xi=n.discriminatedUnion(`state`,[Yi.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),Yi.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),Yi.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Ji,failure:n.null()}),Yi.extend({state:n.literal(`failed`),result:n.null(),failure:Ki}),Yi.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ki.extend({reason:n.literal(`CANCELLED`)})}),Yi.extend({state:n.literal(`expired`),result:n.null(),failure:Ki.extend({reason:n.literal(`EXPIRED`)})})]),Zi=n.object({job:Xi,alreadyExists:n.boolean()}),Qi=n.object({jobId:n.uuid()}),$i=Qi.extend({waitMs:n.number().int().min(0).max(1e4).optional()}),ea=n.object({job:Xi}),ta=n.object({jobId:n.uuid()}),na=n.object({job:Xi}),ra=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()})]),ia=n.object({canvasId:n.uuid(),nodeId:n.string().min(1),expectedVersion:n.number().int().positive(),scale:n.number().positive()}),aa=n.object({jobId:n.uuid()}),oa=n.object({jobId:n.uuid(),download:er,source:ra.optional()}),sa=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`)})}),ca=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative(),context:n.strictObject({expectedVersion:n.number().int().positive(),request:sa}).optional()}),la=n.object({job:Xi,alreadyExists:n.boolean()}),ua=n.object({rootIds:n.array(n.string().min(1))}),da=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)})]),fa=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()})]),pa=n.object({source:fa,destination:da,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`]})}),ma=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)})]),ha=n.object({id:n.uuid(),canvasId:n.uuid(),source:ma,destination:da,phase:Vi,requestedVersion:n.number().int().positive(),attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),ga=n.discriminatedUnion(`state`,[ha.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),ha.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),ha.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Ai.extend({report:Ti}),failure:n.null()}),ha.extend({state:n.literal(`failed`),result:n.null(),failure:Ki}),ha.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ki.extend({reason:n.literal(`CANCELLED`)})}),ha.extend({state:n.literal(`expired`),result:n.null(),failure:Ki.extend({reason:n.literal(`EXPIRED`)})})]),_a=pa.and(n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),mutationId:n.uuid().optional(),writeScope:ua.optional(),scope:Bi.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`]}),va=n.object({job:ga,alreadyExists:n.boolean()}),ya=n.object({jobId:n.uuid()}),ba=n.object({job:ga}),xa=n.object({jobId:n.uuid()}),Sa=n.object({job:ga});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:Oi}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const Ca=n.object({add:n.array(n.object({resourceId:n.string().min(1)}).catchall(n.unknown())),remove:n.array(n.string().min(1))}),wa=n.union([n.string(),g]),D=n.union([x.shape.value,g]).nullable().optional(),Ta=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":wa.optional(),"border-bottom-right-radius":wa.optional(),"border-bottom-width":wa.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":wa.optional(),"border-radius":wa.nullable().optional(),"border-right":D,"border-right-color":D,"border-right-style":D,"border-right-width":wa.optional(),"border-style":D,"border-top":D,"border-top-color":D,"border-top-style":D,"border-top-left-radius":wa.optional(),"border-top-right-radius":wa.optional(),"border-top-width":wa.optional(),"border-width":wa.nullable().optional(),outline:D,"outline-color":D,"outline-style":D,"outline-offset":wa.optional(),"outline-width":wa.optional()}),Ea=n.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Da=n.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),Oa=x.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),ka=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:Oa,"font-family":x.shape.value,"font-size":n.union([_,Ea]),"font-weight":ka,"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`])},Aa=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()}),ja=n.union([x.shape.value,g]).nullable().optional(),Ma=n.strictObject({"text-decoration":ja,"text-decoration-line":ja,"text-decoration-style":ja,"text-decoration-color":ja,"text-decoration-thickness":ja,"text-underline-offset":ja,"text-decoration-skip-ink":ja,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,Da,n.literal(`normal`)]).nullable().optional(),"line-height":O[`line-height`].nullable().optional(),"text-align":O[`text-align`].nullable().optional(),"text-indent":n.union([g,Da]).nullable().optional(),"white-space":O[`white-space`].nullable().optional(),"word-spacing":n.union([g,Da,n.literal(`normal`)]).nullable().optional()}),Na=x.shape.value,k=n.union([n.string(),g]),A=n.union([x.shape.value,g]).nullable().optional(),Pa=Ma.extend(Ta.shape).extend({"align-content":A,"align-items":A,"align-self":A,"aspect-ratio":A,"block-size":A,bottom:A,"box-sizing":A,display:A,flex:A,"flex-basis":A,"flex-direction":A,"flex-grow":A,"flex-shrink":A,"flex-wrap":A,grid:A,"grid-template":A,"grid-template-columns":A,"grid-template-rows":A,"grid-template-areas":A,"grid-auto-columns":A,"grid-auto-rows":A,"grid-auto-flow":A,"grid-row":A,"grid-column":A,"grid-area":A,"grid-row-start":A,"grid-row-end":A,"grid-column-start":A,"grid-column-end":A,"justify-items":A,"justify-self":A,"place-items":A,"place-self":A,"place-content":A,height:A,"inline-size":A,inset:A,"inset-block":A,"inset-block-end":A,"inset-block-start":A,"inset-inline":A,"inset-inline-end":A,"inset-inline-start":A,isolation:A,"justify-content":A,left:A,margin:A,"margin-block":A,"margin-block-end":A,"margin-block-start":A,"margin-inline":A,"margin-inline-end":A,"margin-inline-start":A,"max-block-size":A,"max-height":A,"max-inline-size":A,"max-width":A,"min-block-size":A,"min-height":A,"min-inline-size":A,"min-width":A,order:A,padding:A,"padding-block":A,"padding-block-end":A,"padding-block-start":A,"padding-inline":A,"padding-inline-end":A,"padding-inline-start":A,position:A,right:A,top:A,width:A,background:n.string().nullable().optional(),"background-color":n.string().nullable().optional(),"background-image":A,"background-size":A,"background-position":A,"background-repeat":A,"background-origin":A,"background-blend-mode":A,"box-shadow":n.string().nullable().optional(),"column-gap":k.optional(),gap:k.optional(),"margin-bottom":k.optional(),"margin-left":k.optional(),"margin-right":k.optional(),"margin-top":k.optional(),opacity:n.union([n.string(),n.number()]).nullable().optional(),overflow:Na.nullable().optional(),"overflow-x":Na.nullable().optional(),"overflow-y":Na.nullable().optional(),"padding-bottom":k.optional(),"padding-left":k.optional(),"padding-right":k.optional(),"padding-top":k.optional(),"row-gap":k.optional(),"stroke-width":k.optional()}),Fa=n.union([Pa.keyof(),x.shape.property.refine(e=>e.startsWith(`--`))]),Ia=Pa.catchall(A).refine(e=>Object.keys(e).every(e=>Fa.safeParse(e).success)),La=n.record(n.string(),n.unknown()),Ra=n.number().int().positive(),za=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`retain`),count:Ra,attributes:La.optional(),shouldPreserveParagraph:n.boolean().optional()}),n.object({kind:n.literal(`delete`),count:Ra}),n.object({kind:n.literal(`insert`),text:n.string().min(1).refine(e=>e.isWellFormed()),attributes:La.optional(),shouldPreserveParagraph:n.boolean().optional()})]),Ba=n.object({baseLength:n.number().int().nonnegative(),representation:n.enum([`plain`,`rich`,`links`]).optional(),steps:n.array(za),endAttributes:La.optional(),properties:La.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`})}),Va=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),isActive:n.boolean()}),Ha=n.object({baseVersion:n.number().int().nonnegative(),after:n.array(n.string().min(1)),change:Ba}),Ua=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),originalChange:Ba,inverse:Ba,history:Va.optional(),source:Ha.optional()}),Wa=n.object({op:n.literal(`editText`),nodeId:n.string().min(1),change:Ba,actionId:n.string().min(1).optional(),revision:Ua.optional(),history:Va.optional(),source:Ha.optional()}),Ga=2e3,Ka=n.object({title:n.string().trim().min(1).max(200)}).strict(),qa=n.array(zn.shape.id),Ja=n.object({canvasId:n.uuid()}),Ya=n.object({definition:zn.refine(e=>e.sourceStyleId===void 0),revision:n.number().int().positive(),fontFaces:n.array(n.record(n.string(),n.unknown()))}),Xa=n.object({styles:n.array(Ya).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)}),Za=Ja.extend({revision:n.number().int().positive(),documentVersion:n.number().int().positive(),description:n.string().max(Ga),publishedAt:n.iso.datetime(),...Xa.shape}),Qa=Ja.extend({mutationId:n.uuid(),expectedRevision:n.number().int().nonnegative(),documentVersion:n.number().int().positive(),publish:qa,remove:qa,description:n.string().trim().max(Ga)}).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.`}),$a=n.object({canvasId:n.uuid(),title:n.string().max(200)}),eo=n.object({search:n.string().trim().max(200).default(``),cursor:$a.nullable().default(null),limit:n.number().int().min(1).max(50).default(20)}),to=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()}),no=n.object({items:n.array(to).max(50),nextCursor:$a.nullable()}),ro=n.object({parentId:n.string().min(1),sortKey:n.string().min(1)}),io=n.object({op:n.literal(`insertConvertedSubtree`),destination:da,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),ro)}),j=n.string().min(1),ao=w.extend({width:n.number().positive(),height:n.number().positive()}),oo=n.object({parentId:j,afterId:j.optional()}),so=ro,co=n.object({op:n.literal(`setStyles`),nodeId:j,styles:Ia,clear:n.array(Fa).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),lo=n.discriminatedUnion(`op`,[io,n.object({op:n.literal(`insertNode`),node:T,parentage:so,prototypeSource:n.object({canvasId:n.uuid(),nodeId:j,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()}),oo.extend({op:n.literal(`insertText`),nodeId:j,label:n.string().default(`Text`),text:n.string(),box:ao,styles:Aa.default({})}),oo.extend({op:n.literal(`insertPrototype`),nodeId:j,label:n.string().default(`Prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),box:ao,canvasPageId:j.optional()}),n.object({op:n.literal(`setPrototypeDeployment`),nodeId:j,prototypeId:n.uuid(),deploymentId:n.uuid(),expected:n.object({prototypeId:n.uuid(),deploymentId:n.uuid()}).optional()}),Wa,n.object({op:n.literal(`setText`),nodeId:j,text:n.string()}),n.object({op:n.literal(`setBox`),nodeId:j,box:n.union([w,n.literal(`default`)])}),n.object({op:n.literal(`setLabel`),nodeId:j,label:n.string().trim().min(1),labelOrigin:_i.nullable().optional()}),n.object({op:n.literal(`setContainerKind`),nodeId:j,component:n.enum([`frame`,`group`])}),n.object({op:n.literal(`setVisibility`),nodeId:j,visible:n.boolean().nullable()}),n.object({op:n.literal(`setLocked`),nodeId:j,locked:n.boolean().nullable()}),n.object({op:n.literal(`setConstraints`),nodeId:j,constraints:gi.nullable()}),co,n.object({op:n.literal(`patchExportSettings`),nodeId:j,exportSettings:ni}),n.object({op:n.literal(`setAppearance`),nodeId:j,appearance:_n}),n.object({op:n.literal(`setLayout`),nodeId:j,layout:n.union([en,n.literal(`default`)]),fields:n.array(en.keyof()).optional()}),n.object({op:n.literal(`patchTypography`),nodeId:j,typography:Tn}),n.object({op:n.literal(`setTypography`),nodeId:j,typography:n.union([Cn,n.literal(`default`)])}),n.object({op:n.literal(`patchAdditionalStyles`),nodeId:j,additionalStyles:jn}),n.object({op:n.literal(`setAdditionalStyles`),nodeId:j,additionalStyles:n.union([kn,n.literal(`default`)])}),Bt,n.object({op:n.literal(`setTextStyleLibrary`),nodeId:n.literal(`root`),sourceCanvasId:n.uuid(),library:Ka.nullable()}),n.object({op:n.literal(`patchFontLibrary`),nodeId:n.literal(`root`),fonts:Ca}),n.object({op:n.literal(`setTextStyle`),nodeId:n.literal(`root`),styleId:zn.shape.id,textStyle:zn.nullable(),changedTextNodeIds:n.array(j).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),n.object({op:n.literal(`setGeometry`),nodeId:j,geometry:n.union([fi,n.literal(`default`)])}),n.object({op:n.literal(`setProps`),nodeId:j,props:n.union([n.record(n.string(),n.unknown()),n.literal(`default`)])}),n.object({op:n.literal(`setParentage`),nodeId:j,parentage:so}),oo.extend({op:n.literal(`move`),nodeId:j}),n.object({op:n.literal(`remove`),nodeId:j,removedText:n.record(j,T.pick({props:!0})).optional()})]),uo=lo.options.map(e=>e.shape.op.value),fo=n.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:pi,input:e}),n.NEVER),lo),po=Ai.extend({operation:io,next:n.array(n.string().min(1))}),mo=n.record(n.string(),n.unknown()),ho=n.object({canvasId:n.uuid(),afterVersion:n.number().int().positive().optional()}),go=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:er.nullable()}),_o=n.object({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(fo)}),vo=n.object({mutations:n.array(_o).optional(),version:n.number().int().min(1),restoreFenceVersion:n.number().int().positive().optional(),document:mo.optional(),screens:n.array(go)}),yo=vo.extend({document:mo}),bo=n.object({canvasId:n.uuid(),baseVersion:n.number().int().min(1),document:mo.refine(e=>vi.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:n.array(n.uuid())}),xo=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:mo})]),So=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Co=(e,t,n)=>{if(!So(e)||typeof e.data!=`string`)return e;let r=n(e.data,t);return r===e.data?e:{...e,data:r}},wo=(e,t)=>{if(!So(e)||!Array.isArray(e.sources))return e;let n=e.sources,r=n.map(n=>Co(n,e,t));return r.every((e,t)=>e===n[t])?e:{...e,sources:r}},To=(e,t)=>{if(!Array.isArray(e?.fontFaces))return e;let n=e.fontFaces,r=n.map(e=>wo(e,t));return r.every((e,t)=>e===n[t])?e:{...e,fontFaces:r}},Eo=n.object({start:n.number().int().nonnegative(),end:n.number().int().positive(),href:n.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))}),Do=n.object({text:n.string(),links:n.array(Eo).optional()}),Oo=(e,t)=>{let n=e.start-t.start;return n===0?e.end-t.end:n},ko=e=>Do.safeParse(e.props).data?.text??null,Ao=e=>{let t=Do.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(Oo),i=[];for(let e of r)(i.at(-1)?.end??0)<=e.start&&i.push(e);return i},jo=n.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),Mo=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:Ii.nullable(),propertySections:n.array(jo)}),No=n.object({canvasId:n.uuid()}),Po=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:Ii.nullable(),kinds:n.record(n.string(),n.number().int().min(0)),next:n.array(n.string().min(1))}),Fo=n.object({canvasId:n.uuid()}),Io=n.object({canvasId:n.uuid(),version:n.number().int().positive(),nodes:n.array(Mo)}),Lo=n.object({canvasId:n.uuid(),nodeId:n.string().min(1)}),Ro=n.object({canvasId:n.uuid(),version:n.number().int().positive(),node:Mo.extend({styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:en.optional(),appearance:mn.optional(),geometry:fi.optional(),typography:Cn.optional(),additionalStyles:kn.optional(),props:n.record(n.string(),n.unknown()),children:n.array(n.string().min(1))}),next:n.array(n.string().min(1))}),zo=[[`alignSelf`,`align-self`],[`order`,`order`],[`flexGrow`,`flex-grow`],[`flexShrink`,`flex-shrink`],[`flexBasis`,`flex-basis`],[`aspectRatio`,`aspect-ratio`]],Bo=[[`direction`,`flex-direction`],[`wrap`,`flex-wrap`],[`alignItems`,`align-items`],[`alignContent`,`align-content`],[`justifyContent`,`justify-content`],[`rowGap`,`row-gap`],[`columnGap`,`column-gap`]],Vo=[`top`,`right`,`bottom`,`left`],Ho=(e,t,n)=>{let r={...e};for(let e of Vo)n.has(`${t}-${e}`)&&Reflect.deleteProperty(r,e);return r},Uo=(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},Wo=(e,t)=>{let n=new Set([...t].flatMap(e=>Mr(e))),r=Uo(e,n);for(let[e,t]of zo)n.has(t)&&Reflect.deleteProperty(r,e);if(r.margin!==void 0&&(r.margin=Ho(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 Bo)n.has(t)&&Reflect.deleteProperty(i,e);return i.padding!==void 0&&(i.padding=Ho(i.padding,`padding`,n)),n.has(`grid-template-columns`)&&(Reflect.deleteProperty(i,`gridColumns`),Reflect.deleteProperty(i,`gridAutoRepeat`)),r.container=i,r},Go=(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},Ko=(e,t,n)=>{let r=new Set([...t].flatMap(e=>Mr(e))),i=Wo(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:Go(i[e],n[e],r);t===void 0?Reflect.deleteProperty(i,e):i[e]=t}return i},qo=T.shape.id,Jo=w.extend({width:n.number().positive(),height:n.number().positive()}),Yo=n.record(qo,qo),Xo=n.strictObject({fingerprint:n.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:n.enum([`strict`,`rebase`]),copiedNodeIds:Yo.optional()}),Zo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),documentFormatVersion:mi,baseVersion:n.number().int().positive(),operations:n.array(fo).min(1),requestContext:Xo.optional(),writeScope:ua.optional()}),Qo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(fo),insertedNodeIds:n.array(qo),changedNodeIds:n.array(qo),removedNodeIds:n.array(qo),boxes:n.record(qo,w),affectedBounds:Jo.nullable(),copiedNodeIds:Yo.optional(),next:n.array(n.string().min(1))}),$o=n.strictObject({canvasId:n.uuid(),mutationId:n.uuid(),fingerprint:Xo.shape.fingerprint}),es=n.discriminatedUnion(`state`,[n.strictObject({state:n.literal(`not-found`)}),n.strictObject({state:n.literal(`committed`),result:Qo})]),ts={nodes:1e3,fields:20,id:200,label:500,value:1e3},ns=n.object({available:n.boolean(),omittedNodes:n.number().int().nonnegative(),nodes:n.array(n.object({nodeId:n.string().min(1),label:n.string().max(ts.label),kind:n.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:n.number().int().nonnegative(),fields:n.array(n.object({label:n.string().max(ts.id),before:n.string().max(ts.value).nullable(),after:n.string().max(ts.value).nullable(),truncated:n.boolean()})).max(ts.fields)})).max(ts.nodes)}),rs=`page`,is=`frame`,as=`group`,os=`rectangle`,ss=`image`,cs=`text`,ls=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],us=[`position`,`layout`,`clip`,...ls.filter(e=>e!==`position`&&e!==`layout`)],ds=[...ls,`vector`],fs=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:rs,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:is,label:`Frame`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:us},{objectKind:as,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:os,label:`Rectangle`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ls},{objectKind:ss,label:`Image`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:ls},{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:ds},{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:ds},{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:cs,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])),ps=e=>fs[e]??null,ms=e=>ps(e)?.propertySections??[],M=T.shape.id,hs=n.array(M).min(1),gs=n.strictObject({x:n.number(),y:n.number()}),_s=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.`}),vs=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`position`),nodeId:M,parentPosition:gs}),n.strictObject({kind:n.literal(`resize`),nodeId:M,size:_s}),n.strictObject({kind:n.literal(`relative-position`),nodeId:M,referenceNodeId:M,side:n.enum([`above`,`below`,`left`,`right`]),gap:n.number().nonnegative(),align:n.enum([`start`,`center`,`end`])}),n.strictObject({kind:n.literal(`move`),nodeIds:hs,targetNodeId:M,position:n.enum([`before`,`inside`,`after`])}),n.strictObject({kind:n.literal(`group`),nodeIds:hs,label:n.string().min(1).optional()}),n.strictObject({kind:n.literal(`ungroup`),nodeIds:hs}),n.strictObject({kind:n.literal(`label`),nodeId:M,label:n.string().min(1)}),n.strictObject({kind:n.literal(`visibility`),nodeId:M,visible:n.boolean()}),n.strictObject({kind:n.literal(`lock`),nodeId:M,locked:n.boolean()})]),ys=n.strictObject({kind:n.literal(`arrange`),changes:n.array(vs).min(1)}),bs=n.strictObject({kind:n.literal(`duplicate`),nodeIds:hs,destination:n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`native`)}),n.strictObject({kind:n.literal(`inside`),parentId:M})])}),xs=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)}),ys,bs,n.strictObject({kind:n.literal(`compile-html`),contextOperations:n.array(fo).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:M,parentNodeId:M,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.`)})]),Ss=n.strictObject({pageId:M.optional(),nodeIds:n.array(M)}),Cs=n.strictObject({request:xs,scope:Ss}),ws=n.strictObject({operations:n.array(fo),idMap:n.record(M,M),rootNodeIds:n.array(M)}),Ts=ws.extend({compilations:n.array(n.strictObject({id:M,draft:Oi,warnings:n.array(Gi).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:Ts}),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 Es=n.object({id:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),request:xs,scope:Ss,phase:Vi,attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Ds=n.discriminatedUnion(`state`,[Es.extend({state:n.enum([`queued`,`running`]),result:n.null(),failure:n.null()}),Es.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:ws.extend({loadedVersion:n.number().int().positive()}),failure:n.null()}),Es.extend({state:n.enum([`failed`,`cancelled`,`expired`]),result:n.null(),failure:Ki})]),Os=n.strictObject({canvasId:n.uuid(),expectedVersion:n.number().int().positive(),request:xs,scope:Ss}),ks=n.object({job:Ds,alreadyExists:n.boolean()}),As=n.object({jobId:n.uuid()}),js=n.object({job:Ds}),Ms=`x-enhance-agent-client`,Ns=n.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Ps=n.strictObject({path:n.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:Ns.optional(),version:Ns.optional()}),Fs=Ps.pick({path:!0}).strip(),Is=n.strictObject({agent_client:n.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Ps.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:Ns.optional()}),Ls=e=>{let t=Ps.safeParse(e);if(t.success)return t.data;let n=Fs.safeParse(e);return{path:n.success?n.data.path:`direct_cli`}},Rs=n.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),zs=n.string().regex(/^[0-9a-f]{32}$/),Bs=n.object({viewKey:zs.optional(),admissionOrder:n.number().int().nonnegative().optional(),followColour:Rs.optional()}),Vs=n.object({pageId:n.string().min(1).nullable().optional(),followingViewKey:zs.nullable().optional()}),Hs=`enhance3.canvas.v1`,Us=16384,Ws=n.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),Gs=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:Ws}),Ks=Gs.extend(Bs.shape),qs=n.object({kind:n.literal(`guest`),connectionId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),colour:Ws,...Bs.shape}),Js=n.discriminatedUnion(`kind`,[Ks,qs]),Ys=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:Is.optional(),colour:Ws}),Xs=n.discriminatedUnion(`kind`,[Gs.omit({connectionId:!0,avatarUrl:!0}),Ys]),Zs=n.object({x:n.number(),y:n.number()}),Qs=w.extend({width:n.number().positive(),height:n.number().positive()}),$s=n.object({count:n.number().int().positive(),bounds:Qs.nullable()}),ec=n.object({kind:n.enum([`drag`,`resize`]),baseVersion:n.number().int().positive(),boxes:n.record(n.string().min(1),Qs).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:$s.optional()}),tc=n.object({cursor:Zs.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<=Us).optional(),selectionSummary:$s.nullable().optional(),visibleWorldBox:Qs.optional(),gesture:ec.nullable().optional(),cursorChat:n.string().max(140).nullable().optional(),...Vs.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),nc=n.object({actor:Js,seq:n.number().int().nonnegative(),cursor:Zs.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<=Us),selectionSummary:$s.nullable().optional(),visibleWorldBox:Qs.nullable(),gesture:ec.nullable(),cursorChat:n.string().max(140).nullable().default(null),...Vs.shape,followOrder:n.number().int().nonnegative().optional(),expiresAt:n.iso.datetime()}),rc=n.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),ic=n.object({activityId:n.uuid(),canvasId:n.uuid(),actor:Ys,phase:rc,nodeIds:n.array(n.string().min(1)).max(100),bounds:Qs.nullable(),expiresAt:n.iso.datetime()}),ac=n.object({canvasId:n.uuid(),phase:rc,nodeIds:n.array(n.string().min(1)).max(100).default([]),bounds:Qs.nullable().default(null)}),oc=n.object({activityId:n.uuid(),expiresAt:n.iso.datetime(),renewAfterMs:n.number().int().positive()}),sc=ac.extend({activityId:n.uuid()}),cc=n.object({canvasId:n.uuid(),activityId:n.uuid()}),lc=n.object({ended:n.literal(!0)}),uc={v:n.literal(1),seq:n.number().int().nonnegative()};n.discriminatedUnion(`type`,[n.object({...uc,type:n.literal(`access.changed`),payload:n.object({})}),n.object({...uc,type:n.literal(`comments.changed`),payload:n.object({threadId:n.uuid()})}),n.object({...uc,type:n.literal(`resources.changed`),payload:n.object({})}),n.object({...uc,type:n.literal(`room.snapshot`),payload:n.object({connectionId:n.uuid(),viewKey:Bs.shape.viewKey,peers:n.array(nc),activities:n.array(ic),documentVersion:n.number().int().positive()})}),n.object({...uc,type:n.literal(`presence.patch`),payload:nc}),n.object({...uc,type:n.literal(`presence.left`),payload:n.object({connectionId:n.uuid()})}),n.object({...uc,type:n.literal(`agent.activity`),payload:n.object({activityId:n.uuid(),activity:ic.nullable()})}),n.object({...uc,type:n.literal(`document.committed`),payload:n.object({mutationId:n.uuid(),actor:Xs,previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(fo).min(1)})}),n.object({...uc,type:n.literal(`sync.required`),payload:n.object({version:n.number().int().positive(),reason:n.enum([`gap`,`relay`,`replace`,`history-restored`])})}),n.object({...uc,type:n.literal(`room.ping`),payload:n.object({pingId:n.uuid(),sentAt:n.iso.datetime()})}),n.object({...uc,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:tc}),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 dc=n.object({canvasId:n.uuid(),protocols:n.array(n.literal(Hs)).min(1).max(1),viewId:n.uuid().optional()}),fc=n.object({endpoint:n.url(),ticket:n.string().min(1).max(4096),protocol:n.literal(Hs),expiresAt:n.iso.datetime()}),pc=n.uuid(),mc=T.shape.id,hc=n.array(mc),gc=/^\/c\/([^/]+)\/?$/iu,_c=e=>{let t=e.trim(),n=pc.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=pc.safeParse(gc.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&&!mc.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=hc.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`}},vc=(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=_c(n.href);return a.ok?{ok:!0,url:n.href}:a},yc=`root`,bc=`canvas-page-default`,xc=e=>Object.entries(e.relationships).filter(([,e])=>e.parentId===yc).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):t.sortKey<r.sortKey?-1:1).map(([e])=>e),Sc=e=>{let t=xc(e).filter(t=>e.nodes[t]?.component===rs);return t.length>0?t:[bc]},Cc=(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===yc){let e=t.props?.canvasPageId;return typeof e==`string`?e:bc}r=i}return null},wc=(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},Tc=(e,t)=>{let n=Sc(t);if(e.pageId!==void 0&&!n.includes(e.pageId))return{ok:!1,reason:`page`};let r=e.nodeIds.map(e=>Cc(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)]:xc(t).filter(e=>{let n=Cc(t,e);return n!==null&&(i===null||n===i)});return{ok:!0,pageId:i,rootNodeIds:a,nodeIds:wc(t,a)}},Ec=n.object({jobId:n.uuid()}),Dc=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),target:E,sourceState:Li.optional()}),Oc=n.discriminatedUnion(`purpose`,[Dc.extend({purpose:n.literal(`preparation`),preparation:Cs,screens:n.array(go).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`)}),Dc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:n.number().positive(),maxOutputPixels:Fi.optional(),format:n.literal(`png`)}),Dc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),sourceState:n.undefined().optional(),conversion:pa,scale:n.literal(1),format:n.literal(`json`)})]);n.object({jobId:n.uuid()}),n.object({jobId:n.uuid()});const kc=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`,[kc.extend({purpose:n.literal(`preparation`),target:E,preparation:Cs,sourceState:n.undefined().optional(),scale:n.literal(1)}),kc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:E,sourceState:Li.optional(),scale:n.number().positive(),maxOutputPixels:Fi.optional(),outputKey:n.string().min(1).max(500)}),kc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1).max(200)}),sourceState:n.undefined().optional(),conversion:pa,scale:n.literal(1)})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),bounds:Ii,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(Gi),timings:n.array(qi),sourceState:Ri.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:Oi}),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:Ki}),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 Ac=n.object({total:n.number().int().nonnegative(),loading:n.number().int().nonnegative(),unavailable:n.number().int().nonnegative()}),jc=n.object({jobId:n.uuid(),canvasId:n.uuid().nullable(),requestedVersion:n.number().int().positive().nullable(),loadedVersion:n.number().int().positive().nullable(),phase:Vi.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:Ac,warnings:n.array(Gi),timings:n.array(qi),sourceState:Ri.optional()}),Mc=n.object({selector:n.string().min(1).max(500),contentSelector:n.string().min(1).max(500).optional(),expectsPaint:n.boolean().optional(),bounds:Ii,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive()});n.discriminatedUnion(`state`,[jc.extend({state:n.literal(`loading`),capture:n.null(),failure:n.null()}),jc.extend({state:n.literal(`ready`),phase:n.literal(`target`),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),capture:Mc,failure:n.null()}),jc.extend({state:n.literal(`failed`),failure:n.object({reason:Ui,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:Ts});const Nc=n.string().min(1),Pc=n.object({canvasId:n.uuid()}),Fc=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(Nc),missingNodeIds:n.array(Nc),nodes:n.array(Mo),contextRootId:Nc.nullable(),visibleWorldBox:Ii.nullable(),next:n.array(n.string().min(1)).max(12)}),Ic=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`recording`),recordingId:n.string()})]),Lc=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:Ic.optional()}),Rc=n.object({provenance:Ic.optional(),report:Ti.optional()}),zc=n.object({recordingId:n.string()}),Bc=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 Vc=`$structure`,Hc=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)},Uc=e=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==`text`&&e!==`children`)),Wc=(e,t)=>{let n={...e,...t};return t.listStyle===`none`&&(Reflect.deleteProperty(n,`listLevel`),Reflect.deleteProperty(n,`listStart`)),n},Gc=(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},Kc=(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}})},qc=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},Jc=(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},Yc=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},Xc=(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},Zc=e=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let t=Zc(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}]}),Qc=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||Qc(e.children))),$c=e=>{let t=[[]];for(let n of e){let e=n.kind===`span`?$c(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(Yn(e))}return n.join(``)},Xn=e=>{let t=e.props;if(t===void 0||!Array.isArray(t.richText))return[];let n=Kn(t.richText);if(n===null)return[];let r=t.text;return S(n)===r?n:[]},Zn=e=>{let t=[...Xn(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},Qn=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},$n=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())}),er=n.object({url:n.url(),expiresAt:n.iso.datetime(),bytes:n.number().int().min(0)}),tr=`/v1/canvas-assets/`,nr=[`image/avif`,`image/gif`,`image/jpeg`,`image/png`,`image/webp`],rr=n.string().regex(/^image\/[a-z0-9.+-]+$/u),ir=n.object({canvasId:n.uuid(),contentType:n.enum(nr),bytes:n.number().int().positive()}),ar=n.object({assetId:n.uuid(),path:n.string().startsWith(`/v1/canvas-assets/`),upload:C}),or=(e,t)=>`${tr}${encodeURIComponent(e)}/${encodeURIComponent(t)}`,sr=n.tuple([n.uuid(),n.uuid()]),cr=e=>{if(!e.startsWith(`/v1/canvas-assets/`))return null;let t=sr.safeParse(e.slice(18).split(`/`)).data;return t===void 0?null:{canvasId:t[0],assetId:t[1]}},lr=[`font/ttf`,`font/otf`,`font/woff`,`font/woff2`,`font/collection`],ur=n.object({canvasId:n.uuid(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),dr=ur.extend({bytes:n.number().int().positive()}),fr=dr.extend({contentType:n.enum(lr)}),pr=n.object({path:n.string().startsWith(`/v1/canvas-assets/`)}),mr=pr.extend({upload:C}),hr=(e,t)=>`${tr}${encodeURIComponent(e)}/fonts/${encodeURIComponent(t)}`,gr=n.object({canvasId:n.uuid(),sources:n.array(ur).min(1)}),_r=n.object({resources:n.array(n.object({source:ur,path:n.string()}))}),vr=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:ur.safeParse({canvasId:t,sha256:r}).data??null},yr=1e3,br=new Set(lr),xr=(e,t)=>e===`image`?rr.safeParse(t).success:br.has(t),Sr=n.strictObject({canvasId:n.uuid(),clientToken:n.uuid()}),Cr=n.discriminatedUnion(`kind`,[Sr.extend({kind:n.literal(`image`),contentType:n.enum(nr),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)}),Sr.extend({kind:n.literal(`font`),contentType:n.enum(lr),bytes:n.number().int().positive(),sha256:n.string().regex(/^[a-f0-9]{64}$/u)})]),wr=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(yr),maximumWeight:n.number().min(1).max(yr)}).refine(e=>e.minimumWeight<=e.maximumWeight,`Font weight bounds must be ordered.`)]),Tr=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:wr.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=>xr(e.kind,e.contentType),`Content type must match the asset kind.`).refine(e=>e.path===(e.kind===`image`?or(e.canvasId,e.assetId):hr(e.canvasId,e.sha256)),`The resource path must match its native identity.`),Er=Tr.safeExtend({upload:C.nullable()}).refine(e=>e.state===`awaiting_upload`==(e.upload!==null),`Only pending uploads receive upload access.`),Dr=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`]),Or=(e,t)=>typeof t==`number`&&!Dr.has(e.toLowerCase())?`${String(t)}px`:String(t),kr=[`top`,`right`,`bottom`,`left`],Ar=[`grid-template-rows`,`grid-template-columns`,`grid-template-areas`],jr={gap:[`row-gap`,`column-gap`],"text-wrap":[`text-wrap-mode`,`text-wrap-style`],padding:kr.map(e=>`padding-${e}`),margin:kr.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":Ar,grid:[...Ar,`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`]},Mr=e=>jr[e.toLowerCase()]??[e.toLowerCase()],Nr=(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}},Pr=(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=Nr(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},Fr=e=>/^(?:--|-?[_a-z\u{80}-\u{FFFF}])[-\w\u{80}-\u{FFFF}]*$/iu.test(e)&&!/^(?:auto|span|initial|unset)$/iu.test(e)?e:`auto`,Ir=(e,t,n)=>{let r=Pr(t,`/`),i=r[0]??t;if(e!==`grid-area`)return r[n]??Fr(i);let a=r[1]??Fr(i);return[i,a,r[2]??Fr(i),r[3]??Fr(a)][n]??t},Lr=(e,t,n)=>{let r=Pr(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]},Rr=(e,t,n)=>{if(/^(?:none|initial|unset)$/iu.test(t))return[`none`,`none`,`none`,`auto`,`auto`,`row`][n]??t;let r=Pr(t,`/`),i=r[0]??t,a=r[1];if(i===``||a===``||r.length>2)return t;let o=Pr(i).some(e=>e.toLowerCase()===`auto-flow`),s=a!==void 0&&Pr(a).some(e=>e.toLowerCase()===`auto-flow`);if(e===`grid`&&a!==void 0&&o!==s)return Lr(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},zr=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]},Br=(e,t,n)=>{if(/(?:var|env)\(|^(?:inherit|revert(?:-layer)?)$/iu.test(t))return t;if(/^grid-(?:area|row|column)$/u.test(e))return Ir(e,t,n);if(e===`grid-template`||e===`grid`)return Rr(e,t,n);let r=Pr(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:zr(r)[n]??t:r[n]??(n===3?r[1]:void 0)??r[0]??t},Vr=e=>e.additionalStyles===void 0?{}:Object.fromEntries(e.additionalStyles.declarations.filter(e=>e.enabled).map(e=>[e.property,e.value])),Hr=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()))),...Vr(e)}},Ur=e=>/!important\s*$/iu.test(String(e)),Wr=(e,t)=>{let n=String(e).replace(/\s*!important\s*$/iu,``).trim();return t||n.includes(`(`)?n:n.toLowerCase()},Gr=(e,t)=>{let n=null,r=!1,i=Object.entries(Hr(e));for(let[e,a]of i){let i=Mr(e),o=i.indexOf(t);if(o===-1)continue;let s=Ur(a);if(r&&!s)continue;let c=Wr(a,/^grid(?:-|$)/iu.test(e));n=i.length===1?c:Br(e.toLowerCase(),c,o),r=s}return n??void 0},Kr=new WeakMap,qr=(e,t)=>{let n=Kr.get(e.styles),r=n!==void 0&&n.additionalStyles===e.additionalStyles?n:{additionalStyles:e.additionalStyles,values:new Map};if(r!==n&&Kr.set(e.styles,r),r.values.has(t))return r.values.get(t);let i=Gr(e,t);return r.values.set(t,i),i},Jr=(e,t)=>{let n=new Set(Object.entries(Hr(e)).filter(([,e])=>Ur(e)).flatMap(([e])=>Mr(e)));return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,Mr(e).some(e=>n.has(e))&&!Ur(t)?`${Or(e,t)} !important`:t]))},Yr=(e,t)=>{let n=new Set,r=e;for(;r!==void 0&&!n.has(r.id);){n.add(r.id);let e=qr(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`},Xr=(e,t,n)=>{let r=/^(?:vertical|sideways)-/u.test(Yr(e,n));return[t===`horizontal`?`width`:`height`,t===`vertical`===r?`inline-size`:`block-size`]},Zr=e=>{if(e===void 0)return`freeform`;let t=qr(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`},Qr=(e,t)=>{if(e===void 0||Zr(e)!==`flex`)return;let n=e.layout?.container?.direction??(t=>qr(e,t))(`flex-direction`)??`row`;if(!/^(?:row|column)(?:-reverse)?$/u.test(n))return;let r=/^(?:vertical|sideways)-/u.test(Yr(e,t));return n.startsWith(`column`)===r?`horizontal`:`vertical`},$r=n.enum([`png`,`jpeg`]),ei=n.number().positive(),ti=n.strictObject({format:$r.optional(),scale:ei.optional()}),ni=n.strictObject({format:$r.nullable().optional(),scale:ei.nullable().optional()}).refine(e=>e.format!==void 0||e.scale!==void 0),ri=n.number(),ii=ri.nonnegative(),ai=n.string().min(1).max(200),oi=n.string().regex(/^[MmLlHhVvCcSsQqTtAaZzEe\d\s.,+-]*$/u),si=n.strictObject({x:ri,y:ri,width:ii,height:ii}),ci=n.strictObject({kind:n.literal(`path`),path:oi.min(1),fillRule:n.enum([`nonzero`,`evenodd`]),viewBox:si.extend({width:ii.positive(),height:ii.positive()})}),li=n.strictObject({kind:n.literal(`polygon`),count:n.number().int().min(3),innerRatio:n.number().min(0).max(1).optional(),cornerRadius:ii,cornerSmoothing:n.number().min(0).max(1)}),ui=n.enum([`union`,`subtract`,`intersect`,`exclude`]),di=n.strictObject({kind:n.literal(`boolean`),operation:ui,operandIds:n.array(ai).min(1).refine(e=>new Set(e).size===e.length),result:n.strictObject({path:oi,fillRule:n.literal(`nonzero`),isEmpty:n.boolean(),bounds:si,inputKey:n.string().regex(/^[a-f0-9]{16}$/u)}).refine(e=>e.isEmpty===(e.path===``))}),fi=n.discriminatedUnion(`kind`,[ci,li,n.strictObject({kind:n.literal(`mask`),maskId:ai,mode:n.enum([`alpha`,`luminance`,`outline`]).optional()}),di]),pi=`Update Enhance: compositing is no longer supported. Use the isolation style or a mask group.`,mi=n.literal(15,{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,`)||cr(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()}),hi=n.enum([`start`,`center`,`end`,`stretch`,`scale`]),gi=n.object({x:hi,y:hi}),_i=n.enum([`source`,`generated`,`content`,`user`]),T=n.looseObject({id:n.string().min(1),label:n.string(),component:n.string().min(1),labelOrigin:_i.optional(),visible:n.boolean().optional(),locked:n.boolean().optional(),constraints:gi.optional(),styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:en.optional(),responsive:n.never().optional(),appearance:mn.optional(),exportSettings:ti.optional(),typography:Cn.optional(),additionalStyles:kn.optional(),geometry:fi.optional(),compositing:n.never({error:pi}).optional(),props:n.record(n.string(),n.unknown()).optional(),box:w.optional()}),vi=n.object({version:n.literal(15),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({})}),yi=n.record(n.string(),n.unknown()),bi=n.preprocess(e=>{let t=yi.safeParse(e).data;return t===void 0?e:Object.keys(t).length===0?xi():Le(t)},vi),xi=()=>({version:15,nodes:{root:{id:`root`,label:`Canvas`,component:`root`,labelOrigin:`generated`,visible:!0,locked:!1,styles:{}}},relationships:{},tombstones:{}}),Si=n.string().min(1),Ci=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:Si.optional()}),wi=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`]),Ti=n.object({nodeCount:n.number().int().positive(),unsupportedFeatures:n.array(n.object({feature:wi,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(Ci)}),Ei=T.omit({id:!0}).extend({temporaryId:Si}),Di=n.object({temporaryId:Si,parentTemporaryId:Si,sortKey:n.string().min(1)}),Oi=n.object({version:n.literal(1),rootTemporaryId:Si,nodes:n.array(Ei).min(1),relationships:n.array(Di),report:Ti.catch({nodeCount:0,issues:[]})}).transform(e=>({...e,report:{...e.report,nodeCount:e.nodes.length}})),ki=n.object({canvasId:n.uuid(),documentFormatVersion:mi,mutationId:n.uuid(),baseVersion:n.number().int().positive(),screenNodeId:n.string().min(1),draft:Oi}),Ai=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(Si,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}),ji=[`queued`,`claimed`,`grant`,`navigate`,`document`,`sources`,`fonts`,`layout`,`target`,`capture`,`serialize`,`compile`,`commit`,`upload`,`complete`],Mi=[`queued`,`running`,`succeeded`,`failed`,`cancelled`,`expired`],Ni=[`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`],Pi=[`ASSET_UNAVAILABLE`,`FONT_FALLBACK`,`LOCAL_FONT_FALLBACK`,`SOURCE_FALLBACK`,`SCALE_REDUCED`,`LAYOUT_FALLBACK`],Fi=n.number().int().positive(),Ii=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:Ii})]),Li=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),atMs:n.number().int().nonnegative()}),Ri=n.object({kind:n.literal(`recording`),recordingId:n.uuid(),requestedAtMs:n.number().int().nonnegative(),settledAtMs:n.number().int().nonnegative()}),zi=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:Ii,version:n.number().int().positive(),alreadyPresent:n.boolean()}),Bi=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:Li.optional(),scale:n.number().positive().default(1),maxOutputPixels:Fi.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`]}),Vi=n.enum(ji),Hi=n.enum(Mi),Ui=n.enum(Ni),Wi=n.enum(Pi),Gi=n.object({code:Wi,message:n.string().min(1).max(500),sourceId:n.string().min(1).nullable()}),Ki=n.object({reason:Ui,phase:Vi,message:n.string().min(1).max(500),retryable:n.boolean(),sourceId:n.string().min(1).nullable()}),qi=n.object({phase:Vi,durationMs:n.number().int().min(0)}),Ji=n.object({canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),target:E,sourceState:Ri.optional(),snapshot:zi.optional(),bounds:Ii,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(Gi),timings:n.array(qi),expiresAt:n.iso.datetime()}),Yi=n.object({id:n.uuid(),canvasId:n.uuid(),purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),phase:Vi,requestedVersion:n.number().int().positive(),target:E,sourceState:Li.optional(),scale:n.number().positive(),maxOutputPixels:Fi.optional(),format:n.literal(`png`),attempt:n.number().int().min(0),lastFailure:Ki.optional(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Xi=n.discriminatedUnion(`state`,[Yi.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),Yi.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),Yi.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Ji,failure:n.null()}),Yi.extend({state:n.literal(`failed`),result:n.null(),failure:Ki}),Yi.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ki.extend({reason:n.literal(`CANCELLED`)})}),Yi.extend({state:n.literal(`expired`),result:n.null(),failure:Ki.extend({reason:n.literal(`EXPIRED`)})})]),Zi=n.object({job:Xi,alreadyExists:n.boolean()}),Qi=n.object({jobId:n.uuid()}),$i=Qi.extend({waitMs:n.number().int().min(0).max(1e4).optional()}),ea=n.object({job:Xi}),ta=n.object({jobId:n.uuid()}),na=n.object({job:Xi}),ra=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()})]),ia=n.object({canvasId:n.uuid(),nodeId:n.string().min(1),expectedVersion:n.number().int().positive(),scale:n.number().positive()}),aa=n.object({jobId:n.uuid()}),oa=n.object({jobId:n.uuid(),download:er,source:ra.optional()}),sa=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`)})}),ca=n.object({canvasId:n.uuid(),recordingId:n.uuid(),atMs:n.number().int().nonnegative(),context:n.strictObject({expectedVersion:n.number().int().positive(),request:sa}).optional()}),la=n.object({job:Xi,alreadyExists:n.boolean()}),ua=n.object({rootIds:n.array(n.string().min(1))}),da=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)})]),fa=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()})]),pa=n.object({source:fa,destination:da,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`]})}),ma=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)})]),ha=n.object({id:n.uuid(),canvasId:n.uuid(),source:ma,destination:da,phase:Vi,requestedVersion:n.number().int().positive(),attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),ga=n.discriminatedUnion(`state`,[ha.extend({state:n.literal(`queued`),result:n.null(),failure:n.null()}),ha.extend({state:n.literal(`running`),result:n.null(),failure:n.null()}),ha.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:Ai.extend({report:Ti}),failure:n.null()}),ha.extend({state:n.literal(`failed`),result:n.null(),failure:Ki}),ha.extend({state:n.literal(`cancelled`),result:n.null(),failure:Ki.extend({reason:n.literal(`CANCELLED`)})}),ha.extend({state:n.literal(`expired`),result:n.null(),failure:Ki.extend({reason:n.literal(`EXPIRED`)})})]),_a=pa.and(n.object({canvasId:n.uuid(),expectedVersion:n.number().int().positive().optional(),mutationId:n.uuid().optional(),writeScope:ua.optional(),scope:Bi.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`]}),va=n.object({job:ga,alreadyExists:n.boolean()}),ya=n.object({jobId:n.uuid()}),ba=n.object({job:ga}),xa=n.object({jobId:n.uuid()}),Sa=n.object({job:ga});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:Oi}),n.object({state:n.literal(`failed`),jobId:n.uuid(),message:n.string().min(1)})]);const Ca=n.object({add:n.array(n.object({resourceId:n.string().min(1)}).catchall(n.unknown())),remove:n.array(n.string().min(1))}),wa=n.union([n.string(),g]),D=n.union([x.shape.value,g]).nullable().optional(),Ta=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":wa.optional(),"border-bottom-right-radius":wa.optional(),"border-bottom-width":wa.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":wa.optional(),"border-radius":wa.nullable().optional(),"border-right":D,"border-right-color":D,"border-right-style":D,"border-right-width":wa.optional(),"border-style":D,"border-top":D,"border-top-color":D,"border-top-style":D,"border-top-left-radius":wa.optional(),"border-top-right-radius":wa.optional(),"border-top-width":wa.optional(),"border-width":wa.nullable().optional(),outline:D,"outline-color":D,"outline-style":D,"outline-offset":wa.optional(),"outline-width":wa.optional()}),Ea=n.string().regex(/^(?:\d+(?:\.\d+)?|\.\d+)px$/u),Da=n.string().regex(/^-?(?:\d+(?:\.\d+)?|\.\d+)px$/u),Oa=x.shape.value.refine(e=>!/\burl\s*\(/iu.test(e),`invalid text colour`),ka=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:Oa,"font-family":x.shape.value,"font-size":n.union([_,Ea]),"font-weight":ka,"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`])},Aa=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()}),ja=n.union([x.shape.value,g]).nullable().optional(),Ma=n.strictObject({"text-decoration":ja,"text-decoration-line":ja,"text-decoration-style":ja,"text-decoration-color":ja,"text-decoration-thickness":ja,"text-underline-offset":ja,"text-decoration-skip-ink":ja,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,Da,n.literal(`normal`)]).nullable().optional(),"line-height":O[`line-height`].nullable().optional(),"text-align":O[`text-align`].nullable().optional(),"text-indent":n.union([g,Da]).nullable().optional(),"white-space":O[`white-space`].nullable().optional(),"word-spacing":n.union([g,Da,n.literal(`normal`)]).nullable().optional()}),Na=x.shape.value,k=n.union([n.string(),g]),A=n.union([x.shape.value,g]).nullable().optional(),Pa=Ma.extend(Ta.shape).extend({"align-content":A,"align-items":A,"align-self":A,"aspect-ratio":A,"block-size":A,bottom:A,"box-sizing":A,display:A,flex:A,"flex-basis":A,"flex-direction":A,"flex-grow":A,"flex-shrink":A,"flex-wrap":A,grid:A,"grid-template":A,"grid-template-columns":A,"grid-template-rows":A,"grid-template-areas":A,"grid-auto-columns":A,"grid-auto-rows":A,"grid-auto-flow":A,"grid-row":A,"grid-column":A,"grid-area":A,"grid-row-start":A,"grid-row-end":A,"grid-column-start":A,"grid-column-end":A,"justify-items":A,"justify-self":A,"place-items":A,"place-self":A,"place-content":A,height:A,"inline-size":A,inset:A,"inset-block":A,"inset-block-end":A,"inset-block-start":A,"inset-inline":A,"inset-inline-end":A,"inset-inline-start":A,isolation:A,"justify-content":A,left:A,margin:A,"margin-block":A,"margin-block-end":A,"margin-block-start":A,"margin-inline":A,"margin-inline-end":A,"margin-inline-start":A,"max-block-size":A,"max-height":A,"max-inline-size":A,"max-width":A,"min-block-size":A,"min-height":A,"min-inline-size":A,"min-width":A,order:A,padding:A,"padding-block":A,"padding-block-end":A,"padding-block-start":A,"padding-inline":A,"padding-inline-end":A,"padding-inline-start":A,position:A,right:A,top:A,width:A,background:n.string().nullable().optional(),"background-color":n.string().nullable().optional(),"background-image":A,"background-size":A,"background-position":A,"background-repeat":A,"background-origin":A,"background-blend-mode":A,"box-shadow":n.string().nullable().optional(),"column-gap":k.optional(),gap:k.optional(),"margin-bottom":k.optional(),"margin-left":k.optional(),"margin-right":k.optional(),"margin-top":k.optional(),opacity:n.union([n.string(),n.number()]).nullable().optional(),overflow:Na.nullable().optional(),"overflow-x":Na.nullable().optional(),"overflow-y":Na.nullable().optional(),"padding-bottom":k.optional(),"padding-left":k.optional(),"padding-right":k.optional(),"padding-top":k.optional(),"row-gap":k.optional(),"stroke-width":k.optional()}),Fa=n.union([Pa.keyof(),x.shape.property.refine(e=>e.startsWith(`--`))]),Ia=Pa.catchall(A).refine(e=>Object.keys(e).every(e=>Fa.safeParse(e).success)),La=n.record(n.string(),n.unknown()),Ra=n.number().int().positive(),za=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`retain`),count:Ra,attributes:La.optional(),shouldPreserveParagraph:n.boolean().optional()}),n.object({kind:n.literal(`delete`),count:Ra}),n.object({kind:n.literal(`insert`),text:n.string().min(1).refine(e=>e.isWellFormed()),attributes:La.optional(),shouldPreserveParagraph:n.boolean().optional()})]),Ba=n.object({baseLength:n.number().int().nonnegative(),representation:n.enum([`plain`,`rich`,`links`]).optional(),steps:n.array(za),endAttributes:La.optional(),properties:La.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`})}),Va=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),isActive:n.boolean()}),Ha=n.object({baseVersion:n.number().int().nonnegative(),after:n.array(n.string().min(1)),change:Ba}),Ua=n.object({actionId:n.string().min(1),baseVersion:n.number().int().nonnegative(),originalChange:Ba,inverse:Ba,history:Va.optional(),source:Ha.optional()}),Wa=n.object({op:n.literal(`editText`),nodeId:n.string().min(1),change:Ba,actionId:n.string().min(1).optional(),revision:Ua.optional(),history:Va.optional(),source:Ha.optional()}),Ga=2e3,Ka=n.object({title:n.string().trim().min(1).max(200)}).strict(),qa=n.array(zn.shape.id),Ja=n.object({canvasId:n.uuid()}),Ya=n.object({definition:zn.refine(e=>e.sourceStyleId===void 0),revision:n.number().int().positive(),fontFaces:n.array(n.record(n.string(),n.unknown()))}),Xa=n.object({styles:n.array(Ya).refine(e=>new Set(e.map(e=>e.definition.id)).size===e.length)}),Za=Ja.extend({revision:n.number().int().positive(),documentVersion:n.number().int().positive(),description:n.string().max(Ga),publishedAt:n.iso.datetime(),...Xa.shape}),Qa=Ja.extend({mutationId:n.uuid(),expectedRevision:n.number().int().nonnegative(),documentVersion:n.number().int().positive(),publish:qa,remove:qa,description:n.string().trim().max(Ga)}).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.`}),$a=n.object({canvasId:n.uuid(),title:n.string().max(200)}),eo=n.object({search:n.string().trim().max(200).default(``),cursor:$a.nullable().default(null),limit:n.number().int().min(1).max(50).default(20)}),to=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()}),no=n.object({items:n.array(to).max(50),nextCursor:$a.nullable()}),ro=n.object({parentId:n.string().min(1),sortKey:n.string().min(1)}),io=n.object({op:n.literal(`insertConvertedSubtree`),destination:da,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),ro)}),j=n.string().min(1),ao=w.extend({width:n.number().positive(),height:n.number().positive()}),oo=n.object({parentId:j,afterId:j.optional()}),so=ro,co=n.object({op:n.literal(`setStyles`),nodeId:j,styles:Ia,clear:n.array(Fa).min(1).refine(e=>new Set(e).size===e.length).optional()}).refine(e=>(e.clear??[]).every(t=>!Object.hasOwn(e.styles,t))),lo=n.discriminatedUnion(`op`,[io,n.object({op:n.literal(`insertNode`),node:T,parentage:so,prototypeSource:n.object({canvasId:n.uuid(),nodeId:j,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()}),oo.extend({op:n.literal(`insertText`),nodeId:j,label:n.string().default(`Text`),text:n.string(),box:ao,styles:Aa.default({})}),oo.extend({op:n.literal(`insertPrototype`),nodeId:j,label:n.string().default(`Prototype`),prototypeId:n.uuid(),deploymentId:n.uuid(),box:ao,canvasPageId:j.optional()}),n.object({op:n.literal(`setPrototypeDeployment`),nodeId:j,prototypeId:n.uuid(),deploymentId:n.uuid(),expected:n.object({prototypeId:n.uuid(),deploymentId:n.uuid()}).optional()}),Wa,n.object({op:n.literal(`setText`),nodeId:j,text:n.string()}),n.object({op:n.literal(`setBox`),nodeId:j,box:n.union([w,n.literal(`default`)])}),n.object({op:n.literal(`setLabel`),nodeId:j,label:n.string().trim().min(1),labelOrigin:_i.nullable().optional()}),n.object({op:n.literal(`setContainerKind`),nodeId:j,component:n.enum([`frame`,`group`])}),n.object({op:n.literal(`setVisibility`),nodeId:j,visible:n.boolean().nullable()}),n.object({op:n.literal(`setLocked`),nodeId:j,locked:n.boolean().nullable()}),n.object({op:n.literal(`setConstraints`),nodeId:j,constraints:gi.nullable()}),co,n.object({op:n.literal(`patchExportSettings`),nodeId:j,exportSettings:ni}),n.object({op:n.literal(`setAppearance`),nodeId:j,appearance:_n}),n.object({op:n.literal(`setLayout`),nodeId:j,layout:n.union([en,n.literal(`default`)]),fields:n.array(en.keyof()).optional()}),n.object({op:n.literal(`patchTypography`),nodeId:j,typography:Tn}),n.object({op:n.literal(`setTypography`),nodeId:j,typography:n.union([Cn,n.literal(`default`)])}),n.object({op:n.literal(`patchAdditionalStyles`),nodeId:j,additionalStyles:jn}),n.object({op:n.literal(`setAdditionalStyles`),nodeId:j,additionalStyles:n.union([kn,n.literal(`default`)])}),Bt,n.object({op:n.literal(`setTextStyleLibrary`),nodeId:n.literal(`root`),sourceCanvasId:n.uuid(),library:Ka.nullable()}),n.object({op:n.literal(`patchFontLibrary`),nodeId:n.literal(`root`),fonts:Ca}),n.object({op:n.literal(`setTextStyle`),nodeId:n.literal(`root`),styleId:zn.shape.id,textStyle:zn.nullable(),changedTextNodeIds:n.array(j).optional()}).refine(e=>e.textStyle===null||e.textStyle.id===e.styleId,`text style identity must match`),n.object({op:n.literal(`setGeometry`),nodeId:j,geometry:n.union([fi,n.literal(`default`)])}),n.object({op:n.literal(`setProps`),nodeId:j,props:n.union([n.record(n.string(),n.unknown()),n.literal(`default`)])}),n.object({op:n.literal(`setParentage`),nodeId:j,parentage:so}),oo.extend({op:n.literal(`move`),nodeId:j}),n.object({op:n.literal(`remove`),nodeId:j,removedText:n.record(j,T.pick({props:!0})).optional()})]),uo=lo.options.map(e=>e.shape.op.value),fo=n.preprocess((e,t)=>typeof e!=`object`||!e||Reflect.get(e,`op`)!==`setCompositing`?e:(t.issues.push({code:`custom`,message:pi,input:e}),n.NEVER),lo),po=Ai.extend({operation:io,next:n.array(n.string().min(1))}),mo=n.record(n.string(),n.unknown()),ho=n.object({canvasId:n.uuid(),afterVersion:n.number().int().positive().optional()}),go=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:er.nullable()}),_o=n.object({mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(fo)}),vo=n.object({mutations:n.array(_o).optional(),version:n.number().int().min(1),restoreFenceVersion:n.number().int().positive().optional(),document:mo.optional(),screens:n.array(go)}),yo=vo.extend({document:mo}),bo=n.object({canvasId:n.uuid(),baseVersion:n.number().int().min(1),document:mo.refine(e=>vi.safeParse(e).success,`A save requires a valid current-format canvas document.`),screenIds:n.array(n.uuid())}),xo=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:mo})]),So=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Co=(e,t,n)=>{if(!So(e)||typeof e.data!=`string`)return e;let r=n(e.data,t);return r===e.data?e:{...e,data:r}},wo=(e,t)=>{if(!So(e)||!Array.isArray(e.sources))return e;let n=e.sources,r=n.map(n=>Co(n,e,t));return r.every((e,t)=>e===n[t])?e:{...e,sources:r}},To=(e,t)=>{if(!Array.isArray(e?.fontFaces))return e;let n=e.fontFaces,r=n.map(e=>wo(e,t));return r.every((e,t)=>e===n[t])?e:{...e,fontFaces:r}},Eo=n.object({start:n.number().int().nonnegative(),end:n.number().int().positive(),href:n.url().refine(e=>[`http:`,`https:`].includes(new URL(e).protocol))}),Do=n.object({text:n.string(),links:n.array(Eo).optional()}),Oo=(e,t)=>{let n=e.start-t.start;return n===0?e.end-t.end:n},ko=e=>Do.safeParse(e.props).data?.text??null,Ao=e=>{let t=Do.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(Oo),i=[];for(let e of r)(i.at(-1)?.end??0)<=e.start&&i.push(e);return i},jo=n.enum([`position`,`layout`,`clip`,`cornerRadius`,`blending`,`typography`,`nativeControl`,`textDecoration`,`fill`,`outline`,`textStroke`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`vector`,`export`,`source`]),Mo=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:w.nullable(),propertySections:n.array(jo)}),No=n.object({canvasId:n.uuid()}),Po=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:w.nullable(),kinds:n.record(n.string(),n.number().int().min(0)),next:n.array(n.string().min(1))}),Fo=n.object({canvasId:n.uuid()}),Io=n.object({canvasId:n.uuid(),version:n.number().int().positive(),nodes:n.array(Mo)}),Lo=n.object({canvasId:n.uuid(),nodeId:n.string().min(1)}),Ro=n.object({canvasId:n.uuid(),version:n.number().int().positive(),node:Mo.extend({styles:n.record(n.string(),n.union([n.string(),n.number()])),layout:en.optional(),appearance:mn.optional(),geometry:fi.optional(),typography:Cn.optional(),additionalStyles:kn.optional(),props:n.record(n.string(),n.unknown()),children:n.array(n.string().min(1))}),next:n.array(n.string().min(1))}),zo=[[`alignSelf`,`align-self`],[`order`,`order`],[`flexGrow`,`flex-grow`],[`flexShrink`,`flex-shrink`],[`flexBasis`,`flex-basis`],[`aspectRatio`,`aspect-ratio`]],Bo=[[`direction`,`flex-direction`],[`wrap`,`flex-wrap`],[`alignItems`,`align-items`],[`alignContent`,`align-content`],[`justifyContent`,`justify-content`],[`rowGap`,`row-gap`],[`columnGap`,`column-gap`]],Vo=[`top`,`right`,`bottom`,`left`],Ho=(e,t,n)=>{let r={...e};for(let e of Vo)n.has(`${t}-${e}`)&&Reflect.deleteProperty(r,e);return r},Uo=(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},Wo=(e,t)=>{let n=new Set([...t].flatMap(e=>Mr(e))),r=Uo(e,n);for(let[e,t]of zo)n.has(t)&&Reflect.deleteProperty(r,e);if(r.margin!==void 0&&(r.margin=Ho(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 Bo)n.has(t)&&Reflect.deleteProperty(i,e);return i.padding!==void 0&&(i.padding=Ho(i.padding,`padding`,n)),n.has(`grid-template-columns`)&&(Reflect.deleteProperty(i,`gridColumns`),Reflect.deleteProperty(i,`gridAutoRepeat`)),r.container=i,r},Go=(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},Ko=(e,t,n)=>{let r=new Set([...t].flatMap(e=>Mr(e))),i=Wo(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:Go(i[e],n[e],r);t===void 0?Reflect.deleteProperty(i,e):i[e]=t}return i},qo=T.shape.id,Jo=w.extend({width:n.number().positive(),height:n.number().positive()}),Yo=n.record(qo,qo),Xo=n.strictObject({fingerprint:n.string().regex(/^[a-f0-9]{64}$/u),revisionPolicy:n.enum([`strict`,`rebase`]),copiedNodeIds:Yo.optional()}),Zo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),documentFormatVersion:mi,baseVersion:n.number().int().positive(),operations:n.array(fo).min(1),requestContext:Xo.optional(),writeScope:ua.optional()}),Qo=n.object({canvasId:n.uuid(),mutationId:n.uuid(),previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(fo),insertedNodeIds:n.array(qo),changedNodeIds:n.array(qo),removedNodeIds:n.array(qo),boxes:n.record(qo,w),affectedBounds:Jo.nullable(),copiedNodeIds:Yo.optional(),next:n.array(n.string().min(1))}),$o=n.strictObject({canvasId:n.uuid(),mutationId:n.uuid(),fingerprint:Xo.shape.fingerprint}),es=n.discriminatedUnion(`state`,[n.strictObject({state:n.literal(`not-found`)}),n.strictObject({state:n.literal(`committed`),result:Qo})]),ts={nodes:1e3,fields:20,id:200,label:500,value:1e3},ns=n.object({available:n.boolean(),omittedNodes:n.number().int().nonnegative(),nodes:n.array(n.object({nodeId:n.string().min(1),label:n.string().max(ts.label),kind:n.enum([`inserted`,`removed`,`changed`,`unchanged`,`unavailable`]),omittedFields:n.number().int().nonnegative(),fields:n.array(n.object({label:n.string().max(ts.id),before:n.string().max(ts.value).nullable(),after:n.string().max(ts.value).nullable(),truncated:n.boolean()})).max(ts.fields)})).max(ts.nodes)}),rs=`page`,is=`frame`,as=`group`,os=`rectangle`,ss=`image`,cs=`text`,ls=[`position`,`layout`,`cornerRadius`,`blending`,`fill`,`outline`,`border`,`outerShadow`,`innerShadow`,`filters`,`additionalStyles`,`export`],us=[`position`,`layout`,`clip`,...ls.filter(e=>e!==`position`&&e!==`layout`)],ds=[...ls,`vector`],fs=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:rs,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:is,label:`Frame`,category:`container`,capabilities:{canSelect:!0,canContainChildren:!0,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:us},{objectKind:as,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:os,label:`Rectangle`,category:`primitive`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`reflow`,preservesAspect:!1,canLockAspectRatio:!0},propertySections:ls},{objectKind:ss,label:`Image`,category:`media`,capabilities:{canSelect:!0,canContainChildren:!1,canEditProperties:!0,commentAnchor:`node`},selectionBehavior:{hitTarget:`frame`},resizeBehavior:{mode:`scale`,preservesAspect:!0,canLockAspectRatio:!0},propertySections:ls},{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:ds},{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:ds},{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:cs,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])),ps=e=>fs[e]??null,ms=e=>ps(e)?.propertySections??[],M=T.shape.id,hs=n.array(M).min(1),gs=n.strictObject({x:n.number(),y:n.number()}),_s=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.`}),vs=n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`position`),nodeId:M,parentPosition:gs}),n.strictObject({kind:n.literal(`resize`),nodeId:M,size:_s}),n.strictObject({kind:n.literal(`relative-position`),nodeId:M,referenceNodeId:M,side:n.enum([`above`,`below`,`left`,`right`]),gap:n.number().nonnegative(),align:n.enum([`start`,`center`,`end`])}),n.strictObject({kind:n.literal(`move`),nodeIds:hs,targetNodeId:M,position:n.enum([`before`,`inside`,`after`])}),n.strictObject({kind:n.literal(`group`),nodeIds:hs,label:n.string().min(1).optional()}),n.strictObject({kind:n.literal(`ungroup`),nodeIds:hs}),n.strictObject({kind:n.literal(`label`),nodeId:M,label:n.string().min(1)}),n.strictObject({kind:n.literal(`visibility`),nodeId:M,visible:n.boolean()}),n.strictObject({kind:n.literal(`lock`),nodeId:M,locked:n.boolean()})]),ys=n.strictObject({kind:n.literal(`arrange`),changes:n.array(vs).min(1)}),bs=n.strictObject({kind:n.literal(`duplicate`),nodeIds:hs,destination:n.discriminatedUnion(`kind`,[n.strictObject({kind:n.literal(`native`)}),n.strictObject({kind:n.literal(`inside`),parentId:M})])}),xs=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)}),ys,bs,n.strictObject({kind:n.literal(`compile-html`),contextOperations:n.array(fo).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:M,parentNodeId:M,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.`)})]),Ss=n.strictObject({pageId:M.optional(),nodeIds:n.array(M)}),Cs=n.strictObject({request:xs,scope:Ss}),ws=n.strictObject({operations:n.array(fo),idMap:n.record(M,M),rootNodeIds:n.array(M)}),Ts=ws.extend({compilations:n.array(n.strictObject({id:M,draft:Oi,warnings:n.array(Gi).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:Ts}),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 Es=n.object({id:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),request:xs,scope:Ss,phase:Vi,attempt:n.number().int().nonnegative(),createdAt:n.iso.datetime(),updatedAt:n.iso.datetime()}),Ds=n.discriminatedUnion(`state`,[Es.extend({state:n.enum([`queued`,`running`]),result:n.null(),failure:n.null()}),Es.extend({state:n.literal(`succeeded`),phase:n.literal(`complete`),result:ws.extend({loadedVersion:n.number().int().positive()}),failure:n.null()}),Es.extend({state:n.enum([`failed`,`cancelled`,`expired`]),result:n.null(),failure:Ki})]),Os=n.strictObject({canvasId:n.uuid(),expectedVersion:n.number().int().positive(),request:xs,scope:Ss}),ks=n.object({job:Ds,alreadyExists:n.boolean()}),As=n.object({jobId:n.uuid()}),js=n.object({job:Ds}),Ms=`x-enhance-agent-client`,Ns=n.string().trim().min(1).max(80).regex(/^[\w .+/-]+$/u),Ps=n.strictObject({path:n.enum([`local_mcp`,`hosted_mcp`,`direct_cli`]),name:Ns.optional(),version:Ns.optional()}),Fs=Ps.pick({path:!0}).strip(),Is=n.strictObject({agent_client:n.enum([`claude_code`,`codex`,`cursor`,`unknown`]),connection_path:Ps.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:Ns.optional()}),Ls=e=>{let t=Ps.safeParse(e);if(t.success)return t.data;let n=Fs.safeParse(e);return{path:n.success?n.data.path:`direct_cli`}},Rs=n.enum([`green`,`blue`,`indigo`,`amber`,`lime`,`teal`,`cyan`,`sky`,`violet`,`purple`,`fuchsia`,`pink`]),zs=n.string().regex(/^[0-9a-f]{32}$/),Bs=n.object({viewKey:zs.optional(),admissionOrder:n.number().int().nonnegative().optional(),followColour:Rs.optional()}),Vs=n.object({pageId:n.string().min(1).nullable().optional(),followingViewKey:zs.nullable().optional()}),Hs=`enhance3.canvas.v1`,Us=16384,Ws=n.enum([`blue`,`violet`,`green`,`amber`,`magenta`,`teal`,`red`,`orange`]),Gs=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:Ws}),Ks=Gs.extend(Bs.shape),qs=n.object({kind:n.literal(`guest`),connectionId:n.uuid(),displayName:n.string().min(1).max(100),initials:n.string().min(1).max(8),colour:Ws,...Bs.shape}),Js=n.discriminatedUnion(`kind`,[Ks,qs]),Ys=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:Is.optional(),colour:Ws}),Xs=n.discriminatedUnion(`kind`,[Gs.omit({connectionId:!0,avatarUrl:!0}),Ys]),Zs=n.object({x:n.number(),y:n.number()}),Qs=w.extend({width:n.number().positive(),height:n.number().positive()}),$s=n.object({count:n.number().int().positive(),bounds:Qs.nullable()}),ec=n.object({kind:n.enum([`drag`,`resize`]),baseVersion:n.number().int().positive(),boxes:n.record(n.string().min(1),Qs).refine(e=>Object.keys(e).length<=100&&new TextEncoder().encode(JSON.stringify(e)).byteLength<=16384),summary:$s.optional()}),tc=n.object({cursor:Zs.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<=Us).optional(),selectionSummary:$s.nullable().optional(),visibleWorldBox:Qs.optional(),gesture:ec.nullable().optional(),cursorChat:n.string().max(140).nullable().optional(),...Vs.shape}).refine(e=>Object.keys(e).length>0,`presence patch cannot be empty`),nc=n.object({actor:Js,seq:n.number().int().nonnegative(),cursor:Zs.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<=Us),selectionSummary:$s.nullable().optional(),visibleWorldBox:Qs.nullable(),gesture:ec.nullable(),cursorChat:n.string().max(140).nullable().default(null),...Vs.shape,followOrder:n.number().int().nonnegative().optional(),expiresAt:n.iso.datetime()}),rc=n.enum([`reading`,`writing`,`creating`,`deleting`,`rendering`]),ic=n.object({activityId:n.uuid(),canvasId:n.uuid(),actor:Ys,phase:rc,nodeIds:n.array(n.string().min(1)).max(100),bounds:Qs.nullable(),expiresAt:n.iso.datetime()}),ac=n.object({canvasId:n.uuid(),phase:rc,nodeIds:n.array(n.string().min(1)).max(100).default([]),bounds:Qs.nullable().default(null)}),oc=n.object({activityId:n.uuid(),expiresAt:n.iso.datetime(),renewAfterMs:n.number().int().positive()}),sc=ac.extend({activityId:n.uuid()}),cc=n.object({canvasId:n.uuid(),activityId:n.uuid()}),lc=n.object({ended:n.literal(!0)}),uc={v:n.literal(1),seq:n.number().int().nonnegative()};n.discriminatedUnion(`type`,[n.object({...uc,type:n.literal(`access.changed`),payload:n.object({})}),n.object({...uc,type:n.literal(`comments.changed`),payload:n.object({threadId:n.uuid()})}),n.object({...uc,type:n.literal(`resources.changed`),payload:n.object({})}),n.object({...uc,type:n.literal(`room.snapshot`),payload:n.object({connectionId:n.uuid(),viewKey:Bs.shape.viewKey,peers:n.array(nc),activities:n.array(ic),documentVersion:n.number().int().positive()})}),n.object({...uc,type:n.literal(`presence.patch`),payload:nc}),n.object({...uc,type:n.literal(`presence.left`),payload:n.object({connectionId:n.uuid()})}),n.object({...uc,type:n.literal(`agent.activity`),payload:n.object({activityId:n.uuid(),activity:ic.nullable()})}),n.object({...uc,type:n.literal(`document.committed`),payload:n.object({mutationId:n.uuid(),actor:Xs,previousVersion:n.number().int().positive(),version:n.number().int().positive(),operations:n.array(fo).min(1)})}),n.object({...uc,type:n.literal(`sync.required`),payload:n.object({version:n.number().int().positive(),reason:n.enum([`gap`,`relay`,`replace`,`history-restored`])})}),n.object({...uc,type:n.literal(`room.ping`),payload:n.object({pingId:n.uuid(),sentAt:n.iso.datetime()})}),n.object({...uc,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:tc}),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 dc=n.object({canvasId:n.uuid(),protocols:n.array(n.literal(Hs)).min(1).max(1),viewId:n.uuid().optional()}),fc=n.object({endpoint:n.url(),ticket:n.string().min(1).max(4096),protocol:n.literal(Hs),expiresAt:n.iso.datetime()}),pc=n.uuid(),mc=T.shape.id,hc=n.array(mc),gc=/^\/c\/([^/]+)\/?$/iu,_c=e=>{let t=e.trim(),n=pc.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=pc.safeParse(gc.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&&!mc.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=hc.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`}},vc=(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=_c(n.href);return a.ok?{ok:!0,url:n.href}:a},yc=`root`,bc=`canvas-page-default`,xc=e=>Object.entries(e.relationships).filter(([,e])=>e.parentId===yc).toSorted(([e,t],[n,r])=>t.sortKey===r.sortKey?e.localeCompare(n):t.sortKey<r.sortKey?-1:1).map(([e])=>e),Sc=e=>{let t=xc(e).filter(t=>e.nodes[t]?.component===rs);return t.length>0?t:[bc]},Cc=(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===yc){let e=t.props?.canvasPageId;return typeof e==`string`?e:bc}r=i}return null},wc=(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},Tc=(e,t)=>{let n=Sc(t);if(e.pageId!==void 0&&!n.includes(e.pageId))return{ok:!1,reason:`page`};let r=e.nodeIds.map(e=>Cc(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)]:xc(t).filter(e=>{let n=Cc(t,e);return n!==null&&(i===null||n===i)});return{ok:!0,pageId:i,rootNodeIds:a,nodeIds:wc(t,a)}},Ec=n.object({jobId:n.uuid()}),Dc=n.object({jobId:n.uuid(),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),target:E,sourceState:Li.optional()}),Oc=n.discriminatedUnion(`purpose`,[Dc.extend({purpose:n.literal(`preparation`),preparation:Cs,screens:n.array(go).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`)}),Dc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),scale:n.number().positive(),maxOutputPixels:Fi.optional(),format:n.literal(`png`)}),Dc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1)}),sourceState:n.undefined().optional(),conversion:pa,scale:n.literal(1),format:n.literal(`json`)})]);n.object({jobId:n.uuid()}),n.object({jobId:n.uuid()});const kc=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`,[kc.extend({purpose:n.literal(`preparation`),target:E,preparation:Cs,sourceState:n.undefined().optional(),scale:n.literal(1)}),kc.extend({purpose:n.enum([`inspection`,`snapshot`,`thumbnail`,`export`]),target:E,sourceState:Li.optional(),scale:n.number().positive(),maxOutputPixels:Fi.optional(),outputKey:n.string().min(1).max(500)}),kc.extend({purpose:n.literal(`conversion`),target:n.object({kind:n.literal(`node`),nodeId:n.string().min(1).max(200)}),sourceState:n.undefined().optional(),conversion:pa,scale:n.literal(1)})]),n.object({jobId:n.uuid(),loadedVersion:n.number().int().positive(),bounds:Ii,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(Gi),timings:n.array(qi),sourceState:Ri.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:Oi}),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:Ki}),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 Ac=n.object({total:n.number().int().nonnegative(),loading:n.number().int().nonnegative(),unavailable:n.number().int().nonnegative()}),jc=n.object({jobId:n.uuid(),canvasId:n.uuid().nullable(),requestedVersion:n.number().int().positive().nullable(),loadedVersion:n.number().int().positive().nullable(),phase:Vi.exclude([`queued`,`claimed`,`capture`,`upload`,`complete`]),sources:Ac,warnings:n.array(Gi),timings:n.array(qi),sourceState:Ri.optional()}),Mc=n.object({selector:n.string().min(1).max(500),contentSelector:n.string().min(1).max(500).optional(),expectsPaint:n.boolean().optional(),bounds:Ii,width:n.number().int().positive(),height:n.number().int().positive(),scale:n.number().positive()});n.discriminatedUnion(`state`,[jc.extend({state:n.literal(`loading`),capture:n.null(),failure:n.null()}),jc.extend({state:n.literal(`ready`),phase:n.literal(`target`),canvasId:n.uuid(),requestedVersion:n.number().int().positive(),loadedVersion:n.number().int().positive(),capture:Mc,failure:n.null()}),jc.extend({state:n.literal(`failed`),failure:n.object({reason:Ui,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:Ts});const Nc=n.string().min(1),Pc=n.object({canvasId:n.uuid()}),Fc=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(Nc),missingNodeIds:n.array(Nc),nodes:n.array(Mo),contextRootId:Nc.nullable(),visibleWorldBox:Ii.nullable(),next:n.array(n.string().min(1)).max(12)}),Ic=n.discriminatedUnion(`kind`,[n.object({kind:n.literal(`recording`),recordingId:n.string()})]),Lc=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:Ic.optional()}),Rc=n.object({provenance:Ic.optional(),report:Ti.optional()}),zc=n.object({recordingId:n.string()}),Bc=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 Vc=`$structure`,Hc=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)},Uc=e=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==`text`&&e!==`children`)),Wc=(e,t)=>{let n={...e,...t};return t.listStyle===`none`&&(Reflect.deleteProperty(n,`listLevel`),Reflect.deleteProperty(n,`listStart`)),n},Gc=(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},Kc=(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}})},qc=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},Jc=(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},Yc=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},Xc=(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},Zc=e=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let t=Zc(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}]}),Qc=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||Qc(e.children))),$c=e=>{let t=[[]];for(let n of e){let e=n.kind===`span`?$c(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},el=(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})},tl=e=>{let t=S(e),n=Yc(e),r=$c(Zc(e)),i=qc(t),a=el(n,i);return i.map((e,t)=>({kind:`span`,paragraph:a[t]??{},styles:{},children:r[t]??[]}))},nl=(e,t,n)=>{let r=qc(S(e));return tl(e).map((e,i)=>{let a=r[i];return a===void 0?e:Jc(a,t)?{...e,paragraph:n(e.paragraph??{})}:e})},rl=(e,t)=>Xc(Yc(e),t),il=(e,t,n)=>{if(!Qc(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:rl(e,r===``?n.start:i.length)}]:[],s=tl([...t,...o]);return n.replaces?Kc(s,{start:n.start,end:r.length-i.length+n.end}):s},al={color:`inherit`,textDecorationLine:`underline`,textDecorationThickness:`0.08em`,textUnderlineOffset:`0.14em`},ol=new Set(Rn),sl=new Set(Object.entries(En).flatMap(([e,t])=>t.some(e=>ol.has(e))?[e.replaceAll(/-([a-z])/gu,(e,t)=>t.toUpperCase())]:[])),cl=(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=>!sl.has(e))&&(r.position===void 0||r.position===e.position))return e;if(n){let n=Bn.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)&&sl.has(e)))}});return n.success?n.data:null}return Object.keys(t).some(e=>sl.has(e))?null:e},ll=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}}),ul=e=>{if(e.href!==void 0)for(let[t,n]of Object.entries(al))e.styles[t]===n&&Reflect.deleteProperty(e.styles,t);Reflect.deleteProperty(e,`href`)},dl=(e,t)=>e.flatMap(e=>{if(e.kind!==`span`)return[e];let n={...e,styles:{...e.styles},children:dl(e.children,t)};if(t.type===`format`){let e=Object.keys(ll(t));for(let t of e)Reflect.deleteProperty(n,t);let r=cl(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`)ul(n);else if(t.type===`paint`)Reflect.deleteProperty(n,`fills`),Reflect.deleteProperty(n.styles,`color`);else for(let e of $n(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]}),fl=(e,t)=>e.map(e=>e.kind===`span`?e.href!==void 0||e.children.some(e=>e.kind===`span`)?{...e,children:fl(e.children,t)}:{...e,styles:{...e.styles,...t}}:{kind:`span`,styles:t,children:[e]}),pl=(e,t)=>{let n=Qn(e);if(t.href!==null&&t.href===n)return e;let r=dl(e,t);return t.href===null?r:[{kind:`span`,styles:al,href:t.href,children:r}]},ml=(e,t)=>{if(t.type===`link`)return pl(e,t);let n=dl(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}]:fl(n,t.styles),r=ll(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}]},hl={},gl=()=>hl.current??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),_l=e=>new Set([0,e.length,...Array.from(gl().segment(e),({index:e})=>e)]),vl=(e,t)=>{let n=_l(e);return t.start<=t.end&&n.has(t.start)&&n.has(t.end)},yl=(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)},bl=e=>e.kind===`text`?e.text.length:e.kind===`break`?1:S(e.children).length,xl=(e,t,n)=>{let r=0;return e.flatMap(e=>{let i=bl(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:xl(e.children,a,o)}]:e.kind===`text`?[{...e,text:e.text.slice(a,o)}]:[e]})},Sl=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),Cl=e=>e.kind===`span`&&e.paragraph!==void 0&&S(e.children).endsWith(`
|
|
6
6
|
`),wl=e=>{let t=[];for(let n of e){let e=t.at(-1);if(e!==void 0&&!Cl(e)&&Sl(e)===Sl(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:wl([...e.children,...n.children])};continue}}t.push(n)}return t},Tl=(e,t)=>e.split(/([\n\u{2028}])/u).flatMap(e=>e===`
|