Something went wrong. Try again.
inkfinite (an infinite canvas/whiteboard) monorepo ink.stormlightlabs.org
svelte rust tauri svg canvas perfect-freehand
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986{ "$comment": "Generated by Inkfinite's binding generator. Do not edit this file manually.", "$defs": { "ActorId": { "description": "Stable identifier for a human, agent, or system actor.", "type": "string" }, "AffectedRegion": { "description": "Region that a renderer should consider dirty after a transaction.", "properties": { "bounds": { "$ref": "#/$defs/Bounds", "description": "Union of the record's bounds before and after the change." }, "page_id": { "$ref": "#/$defs/PageId", "description": "Page containing the changed visual content." } }, "required": [ "page_id", "bounds" ], "type": "object" }, "AssetId": { "description": "Stable identifier for an embedded or linked asset.", "type": "string" }, "AssetPatch": { "description": "Mutable asset fields.", "properties": { "name": { "description": "Replacement display name.", "type": [ "string", "null" ] }, "provenance_source": { "description": "Replacement attribution source label.", "type": [ "string", "null" ] } }, "type": "object" }, "AssetRecord": { "description": "Image, font, or other binary asset.", "properties": { "digest": { "description": "Content digest including its algorithm prefix.", "type": "string" }, "id": { "$ref": "#/$defs/AssetId", "description": "Stable record identifier." }, "media_type": { "description": "IANA media type.", "type": "string" }, "name": { "description": "User-visible asset name.", "type": "string" }, "provenance": { "$ref": "#/$defs/Provenance", "description": "Attribution for the asset." }, "source": { "$ref": "#/$defs/AssetSource", "description": "Stored or linked content." }, "version": { "$ref": "#/$defs/RecordVersion", "description": "Version used by optimistic operation preconditions." } }, "required": [ "id", "name", "media_type", "digest", "source", "provenance", "version" ], "type": "object" }, "AssetSource": { "description": "Storage form for asset contents.", "oneOf": [ { "description": "Bytes stored inside the canonical document.", "properties": { "bytes": { "description": "Raw asset bytes.", "items": { "format": "uint8", "maximum": 255, "minimum": 0, "type": "integer" }, "type": "array" }, "kind": { "const": "embedded", "type": "string" } }, "required": [ "kind", "bytes" ], "type": "object" }, { "description": "Stable external URI retained for formats that cannot embed an asset.", "properties": { "kind": { "const": "external", "type": "string" }, "uri": { "description": "URI used to resolve the content.", "type": "string" } }, "required": [ "kind", "uri" ], "type": "object" } ] }, "BindingAnchor": { "description": "Attachment point on a bound shape.", "oneOf": [ { "description": "Attach to the calculated center.", "properties": { "kind": { "const": "center", "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "description": "Attach at normalized shape coordinates.", "properties": { "kind": { "const": "edge", "type": "string" }, "x": { "description": "Normalized horizontal coordinate.", "format": "double", "type": "number" }, "y": { "description": "Normalized vertical coordinate.", "format": "double", "type": "number" } }, "required": [ "kind", "x", "y" ], "type": "object" } ] }, "BindingId": { "description": "Stable identifier for a binding.", "type": "string" }, "BindingKind": { "description": "Registry key for a binding definition.", "type": "string" }, "BindingRecord": { "description": "Relationship between two shapes.", "properties": { "anchor": { "$ref": "#/$defs/BindingAnchor", "description": "Attachment point on the target." }, "id": { "$ref": "#/$defs/BindingId", "description": "Stable record identifier." }, "kind": { "$ref": "#/$defs/BindingKind", "description": "Registry key describing binding behavior." }, "relation_type": { "description": "Optional semantic relationship type, such as `depends_on`.", "type": [ "string", "null" ] }, "source_handle": { "description": "Named source handle, such as `start` or `end`.", "type": "string" }, "source_shape_id": { "$ref": "#/$defs/ShapeId", "description": "Shape that owns the binding, such as an arrow." }, "target_shape_id": { "$ref": "#/$defs/ShapeId", "description": "Shape to which the source is bound." }, "version": { "$ref": "#/$defs/RecordVersion", "description": "Version used by optimistic operation preconditions." } }, "required": [ "id", "kind", "source_shape_id", "target_shape_id", "source_handle", "anchor", "version" ], "type": "object" }, "Bounds": { "description": "Axis-aligned bounds in document coordinates.", "properties": { "height": { "description": "Non-negative height.", "format": "double", "type": "number" }, "width": { "description": "Non-negative width.", "format": "double", "type": "number" }, "x": { "description": "Left edge.", "format": "double", "type": "number" }, "y": { "description": "Top edge.", "format": "double", "type": "number" } }, "required": [ "x", "y", "width", "height" ], "type": "object" }, "ChangeHash": { "description": "Opaque causal hash supplied by the CRDT implementation.", "type": "string" }, "CommitResult": { "description": "Successful result from a durable transaction.", "properties": { "affected_ids": { "description": "All records affected directly or through repairs.", "items": { "$ref": "#/$defs/RecordId" }, "type": "array" }, "affected_regions": { "description": "Visual regions invalidated by the commit.", "items": { "$ref": "#/$defs/AffectedRegion" }, "type": "array" }, "heads": { "description": "Causal heads after the commit.", "items": { "$ref": "#/$defs/ChangeHash" }, "type": "array" }, "inverse": { "$ref": "#/$defs/InverseMetadata", "description": "Metadata retained for actor-scoped undo." }, "patch": { "$ref": "#/$defs/DocumentPatch", "description": "Materialized mirror update." }, "transaction_id": { "$ref": "#/$defs/TransactionId", "description": "Transaction that was committed." }, "warnings": { "description": "Non-fatal repairs and normalization notes.", "items": { "$ref": "#/$defs/Warning" }, "type": "array" } }, "required": [ "transaction_id", "heads", "patch", "affected_ids", "affected_regions", "inverse", "warnings" ], "type": "object" }, "ContainerLayout": { "description": "Optional automatic layout applied by a container shape.", "oneOf": [ { "description": "Children retain their explicit transforms.", "properties": { "kind": { "const": "free", "type": "string" } }, "required": [ "kind" ], "type": "object" }, { "description": "Children flow along one axis.", "properties": { "alignment": { "$ref": "#/$defs/LayoutAlignment", "description": "Alignment on the cross axis." }, "direction": { "$ref": "#/$defs/StackDirection", "description": "Flow direction." }, "gap": { "description": "Space between adjacent children.", "format": "double", "type": "number" }, "kind": { "const": "stack", "type": "string" }, "padding": { "$ref": "#/$defs/Insets", "description": "Space between children and container edges." } }, "required": [ "kind", "direction", "gap", "padding", "alignment" ], "type": "object" }, { "description": "Children flow through a fixed number of columns.", "properties": { "alignment": { "$ref": "#/$defs/LayoutAlignment", "description": "Alignment within cells." }, "column_gap": { "description": "Horizontal gap between cells.", "format": "double", "type": "number" }, "columns": { "description": "Positive number of grid columns.", "format": "uint32", "minimum": 0, "type": "integer" }, "kind": { "const": "grid", "type": "string" }, "padding": { "$ref": "#/$defs/Insets", "description": "Space between children and container edges." }, "row_gap": { "description": "Vertical gap between cells.", "format": "double", "type": "number" } }, "required": [ "kind", "columns", "column_gap", "row_gap", "padding", "alignment" ], "type": "object" } ] }, "Document": { "description": "Normalized, materialized Inkfinite document.", "properties": { "assets": { "additionalProperties": { "$ref": "#/$defs/AssetRecord" }, "description": "Assets indexed by their stable IDs.", "type": "object" }, "bindings": { "additionalProperties": { "$ref": "#/$defs/BindingRecord" }, "description": "Bindings indexed by their stable IDs.", "type": "object" }, "layers": { "additionalProperties": { "$ref": "#/$defs/LayerRecord" }, "description": "Layers indexed by their stable IDs.", "type": "object" }, "page_ids": { "description": "Pages in user-visible order.", "items": { "$ref": "#/$defs/PageId" }, "type": "array" }, "pages": { "additionalProperties": { "$ref": "#/$defs/PageRecord" }, "description": "Pages indexed by their stable IDs.", "type": "object" }, "shapes": { "additionalProperties": { "$ref": "#/$defs/ShapeRecord" }, "description": "Shapes indexed by their stable IDs.", "type": "object" } }, "required": [ "pages", "page_ids", "layers", "shapes", "bindings", "assets" ], "type": "object" }, "DocumentId": { "description": "Stable identifier for a document.", "type": "string" }, "DocumentPatch": { "description": "Materialized patch returned after a successful commit.", "properties": { "changed": { "description": "Records changed by the commit.", "items": { "$ref": "#/$defs/RecordId" }, "type": "array" }, "created": { "description": "Records created by the commit.", "items": { "$ref": "#/$defs/RecordId" }, "type": "array" }, "deleted": { "description": "Records deleted by the commit.", "items": { "$ref": "#/$defs/RecordId" }, "type": "array" } }, "required": [ "created", "changed", "deleted" ], "type": "object" }, "DocumentPath": { "description": "Cross-platform serialized document path used at file-service boundaries.", "type": "string" }, "DocumentSnapshot": { "description": "Materialized document plus its format and causal identity.", "properties": { "document": { "$ref": "#/$defs/Document", "description": "Normalized records." }, "document_id": { "$ref": "#/$defs/DocumentId", "description": "Stable document identifier." }, "format": { "$ref": "#/$defs/FormatId", "description": "Stable format identifier." }, "format_version": { "description": "Version of the document contract.", "format": "uint32", "minimum": 0, "type": "integer" }, "heads": { "description": "Causal CRDT heads represented by this snapshot.", "items": { "$ref": "#/$defs/ChangeHash" }, "type": "array" } }, "required": [ "format", "format_version", "document_id", "heads", "document" ], "type": "object" }, "FormatId": { "description": "Stable identifier for a serialized contract.", "type": "string" }, "GraphLayoutAlgorithm": { "description": "Graph layout algorithm exposed by Inkfinite.", "oneOf": [ { "const": "flow", "description": "Layer a directed graph by rank.", "type": "string" }, { "const": "tree", "description": "Layer a directed graph with tree-oriented stable ordering.", "type": "string" }, { "const": "radial", "description": "Place graph ranks on concentric circles.", "type": "string" } ] }, "GraphLayoutDirection": { "description": "Direction of ranked graph layouts.", "oneOf": [ { "const": "top_to_bottom", "description": "Sources appear above their targets.", "type": "string" }, { "const": "left_to_right", "description": "Sources appear to the left of their targets.", "type": "string" } ] }, "GraphLayoutOptions": { "description": "Options shared by graph layout operations.", "properties": { "algorithm": { "$ref": "#/$defs/GraphLayoutAlgorithm", "description": "Layout algorithm to use." }, "direction": { "$ref": "#/$defs/GraphLayoutDirection", "description": "Direction for ranked layouts." }, "node_gap": { "description": "Space between adjacent nodes in one rank or radial ring.", "format": "double", "type": "number" }, "rank_gap": { "description": "Space between ranked rows or radial rings.", "format": "double", "type": "number" } }, "required": [ "algorithm", "direction", "node_gap", "rank_gap" ], "type": "object" }, "Insets": { "description": "Padding inside a layout container.", "properties": { "bottom": { "description": "Bottom inset.", "format": "double", "type": "number" }, "left": { "description": "Left inset.", "format": "double", "type": "number" }, "right": { "description": "Right inset.", "format": "double", "type": "number" }, "top": { "description": "Top inset.", "format": "double", "type": "number" } }, "required": [ "top", "right", "bottom", "left" ], "type": "object" }, "InverseMetadata": { "description": "Operations needed to compensate a committed transaction.", "properties": { "actor_id": { "$ref": "#/$defs/ActorId", "description": "Actor whose history owns this inverse." }, "operations": { "description": "Field-scoped compensating operations.", "items": { "$ref": "#/$defs/Operation" }, "type": "array" } }, "required": [ "actor_id", "operations" ], "type": "object" }, "LayerContentsDisposition": { "description": "Policy for children of a deleted non-empty layer.", "oneOf": [ { "description": "Move root shapes to the specified layer while preserving their order.", "properties": { "destination_layer_id": { "$ref": "#/$defs/LayerId" }, "kind": { "const": "move_to", "type": "string" } }, "required": [ "kind", "destination_layer_id" ], "type": "object" }, { "description": "Delete every descendant explicitly.", "properties": { "kind": { "const": "delete", "type": "string" } }, "required": [ "kind" ], "type": "object" } ] }, "LayerId": { "description": "Stable identifier for a layer.", "type": "string" }, "LayerPatch": { "description": "Mutable layer fields.", "properties": { "locked": { "description": "Replacement locked state.", "type": [ "boolean", "null" ] }, "name": { "description": "Replacement display name.", "type": [ "string", "null" ] }, "opacity": { "anyOf": [ { "$ref": "#/$defs/Opacity" }, { "type": "null" } ], "description": "Replacement inherited opacity." }, "visible": { "description": "Replacement visibility.", "type": [ "boolean", "null" ] } }, "type": "object" }, "LayerRecord": { "description": "A layer record and its ordered root-shape list.", "properties": { "id": { "$ref": "#/$defs/LayerId", "description": "Stable record identifier." }, "locked": { "description": "Whether descendants can be selected or changed.", "type": "boolean" }, "name": { "description": "User-visible layer name.", "type": "string" }, "opacity": { "$ref": "#/$defs/Opacity", "description": "Opacity inherited by descendants." }, "page_id": { "$ref": "#/$defs/PageId", "description": "Page that owns this layer." }, "shape_ids": { "description": "Root shape IDs in back-to-front draw order.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "version": { "$ref": "#/$defs/RecordVersion", "description": "Version used by optimistic operation preconditions." }, "visible": { "description": "Whether descendants participate in rendering and hit testing.", "type": "boolean" } }, "required": [ "id", "page_id", "name", "shape_ids", "visible", "locked", "opacity", "version" ], "type": "object" }, "LayoutAlignment": { "description": "Cross-axis alignment for laid-out children.", "oneOf": [ { "const": "start", "description": "Align children to the start edge.", "type": "string" }, { "const": "center", "description": "Center children on the cross axis.", "type": "string" }, { "const": "end", "description": "Align children to the end edge.", "type": "string" }, { "const": "stretch", "description": "Stretch children across the cross axis.", "type": "string" } ] }, "LayoutAxis": { "description": "Axis used by alignment and distribution operations.", "oneOf": [ { "const": "horizontal", "description": "Horizontal document axis.", "type": "string" }, { "const": "vertical", "description": "Vertical document axis.", "type": "string" } ] }, "Opacity": { "description": "Opacity constrained to the inclusive range from zero to one.", "format": "float", "maximum": 1.0, "minimum": 0.0, "type": "number" }, "Operation": { "description": "Durable document operation. Ordered insertions use sibling anchors only.", "oneOf": [ { "description": "Insert a page into the document's ordered page list.", "properties": { "anchor": { "$ref": "#/$defs/SiblingAnchor", "description": "Placement relative to an existing page." }, "page": { "$ref": "#/$defs/PageRecord", "description": "Complete new page record." }, "type": { "const": "create_page", "type": "string" } }, "required": [ "type", "page", "anchor" ], "type": "object" }, { "description": "Rename a page.", "properties": { "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "name": { "description": "Replacement name.", "type": "string" }, "page_id": { "$ref": "#/$defs/PageId", "description": "Page to rename." }, "type": { "const": "rename_page", "type": "string" } }, "required": [ "type", "page_id", "name" ], "type": "object" }, { "description": "Delete a page and its owned records.", "properties": { "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "page_id": { "$ref": "#/$defs/PageId", "description": "Page to delete." }, "type": { "const": "delete_page", "type": "string" } }, "required": [ "type", "page_id" ], "type": "object" }, { "description": "Insert a layer into a page's ordered layer list.", "properties": { "anchor": { "$ref": "#/$defs/SiblingAnchor2", "description": "Placement relative to an existing layer." }, "layer": { "$ref": "#/$defs/LayerRecord", "description": "Complete new layer record." }, "type": { "const": "create_layer", "type": "string" } }, "required": [ "type", "layer", "anchor" ], "type": "object" }, { "description": "Change mutable layer fields.", "properties": { "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "layer_id": { "$ref": "#/$defs/LayerId", "description": "Layer to change." }, "patch": { "$ref": "#/$defs/LayerPatch", "description": "Requested field replacements." }, "type": { "const": "patch_layer", "type": "string" } }, "required": [ "type", "layer_id", "patch" ], "type": "object" }, { "description": "Move a layer within its page.", "properties": { "anchor": { "$ref": "#/$defs/SiblingAnchor2", "description": "New placement relative to a sibling layer." }, "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "layer_id": { "$ref": "#/$defs/LayerId", "description": "Layer to move." }, "type": { "const": "reorder_layer", "type": "string" } }, "required": [ "type", "layer_id", "anchor" ], "type": "object" }, { "description": "Delete a layer using an explicit child disposition.", "properties": { "contents": { "$ref": "#/$defs/LayerContentsDisposition", "description": "Required handling for existing shapes." }, "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "layer_id": { "$ref": "#/$defs/LayerId", "description": "Layer to delete." }, "type": { "const": "delete_layer", "type": "string" } }, "required": [ "type", "layer_id", "contents" ], "type": "object" }, { "description": "Insert a shape into its parent's ordered child list.", "properties": { "anchor": { "$ref": "#/$defs/SiblingAnchor3", "description": "Placement relative to an existing shape child." }, "shape": { "$ref": "#/$defs/ShapeRecord", "description": "Complete new shape record." }, "type": { "const": "create_shape", "type": "string" } }, "required": [ "type", "shape", "anchor" ], "type": "object" }, { "description": "Change mutable shape fields without moving it.", "properties": { "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "patch": { "$ref": "#/$defs/ShapePatch", "description": "Requested field replacements." }, "shape_id": { "$ref": "#/$defs/ShapeId", "description": "Shape to change." }, "type": { "const": "patch_shape", "type": "string" } }, "required": [ "type", "shape_id", "patch" ], "type": "object" }, { "description": "Move a shape to another layer or container and place it by sibling anchor.", "properties": { "anchor": { "$ref": "#/$defs/SiblingAnchor3", "description": "Placement relative to a child of the replacement parent." }, "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "parent": { "$ref": "#/$defs/ShapeParent", "description": "Replacement parent." }, "shape_id": { "$ref": "#/$defs/ShapeId", "description": "Shape to move." }, "type": { "const": "reparent_shape", "type": "string" } }, "required": [ "type", "shape_id", "parent", "anchor" ], "type": "object" }, { "description": "Change a shape's registry kind and kind-specific properties.\n\nTransform, common style, semantic metadata, hierarchy, and stable ID\nremain attached to the existing shape record.", "properties": { "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "kind": { "description": "Replacement registry kind.", "type": "string" }, "properties": { "additionalProperties": true, "description": "Replacement kind-specific properties.", "type": "object" }, "shape_id": { "$ref": "#/$defs/ShapeId", "description": "Shape to convert." }, "style": { "anyOf": [ { "$ref": "#/$defs/ShapeStyle" }, { "type": "null" } ], "description": "Optional replacement common style." }, "type": { "const": "convert_shape", "type": "string" } }, "required": [ "type", "shape_id", "kind", "properties" ], "type": "object" }, { "description": "Delete a shape and its owned descendants.", "properties": { "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "shape_id": { "$ref": "#/$defs/ShapeId", "description": "Shape to delete." }, "type": { "const": "delete_shape", "type": "string" } }, "required": [ "type", "shape_id" ], "type": "object" }, { "description": "Create a relationship between two shapes.", "properties": { "binding": { "$ref": "#/$defs/BindingRecord", "description": "Complete new binding record." }, "type": { "const": "create_binding", "type": "string" } }, "required": [ "type", "binding" ], "type": "object" }, { "description": "Delete a binding.", "properties": { "binding_id": { "$ref": "#/$defs/BindingId", "description": "Binding to delete." }, "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "type": { "const": "delete_binding", "type": "string" } }, "required": [ "type", "binding_id" ], "type": "object" }, { "description": "Add an asset to the document.", "properties": { "asset": { "$ref": "#/$defs/AssetRecord", "description": "Complete new asset record." }, "type": { "const": "create_asset", "type": "string" } }, "required": [ "type", "asset" ], "type": "object" }, { "description": "Change mutable asset metadata.", "properties": { "asset_id": { "$ref": "#/$defs/AssetId", "description": "Asset to change." }, "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "patch": { "$ref": "#/$defs/AssetPatch", "description": "Requested field replacements." }, "type": { "const": "patch_asset", "type": "string" } }, "required": [ "type", "asset_id", "patch" ], "type": "object" }, { "description": "Delete an asset that is no longer referenced.", "properties": { "asset_id": { "$ref": "#/$defs/AssetId", "description": "Asset to delete." }, "expected_version": { "anyOf": [ { "$ref": "#/$defs/RecordVersion" }, { "type": "null" } ], "description": "Optional optimistic record version." }, "type": { "const": "delete_asset", "type": "string" } }, "required": [ "type", "asset_id" ], "type": "object" }, { "description": "Align two or more shapes using their materialized bounds.", "properties": { "alignment": { "$ref": "#/$defs/ShapeAlignment", "description": "Alignment line shared by the shapes." }, "expected_versions": { "additionalProperties": { "$ref": "#/$defs/RecordVersion" }, "description": "Optional optimistic versions keyed by shape ID.", "type": "object" }, "shape_ids": { "description": "Shapes to align.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "type": { "const": "align_shapes", "type": "string" } }, "required": [ "type", "shape_ids", "alignment", "expected_versions" ], "type": "object" }, { "description": "Distribute three or more shapes with equal gaps between their bounds.", "properties": { "axis": { "$ref": "#/$defs/LayoutAxis", "description": "Axis on which to distribute the shapes." }, "expected_versions": { "additionalProperties": { "$ref": "#/$defs/RecordVersion" }, "description": "Optional optimistic versions keyed by shape ID.", "type": "object" }, "shape_ids": { "description": "Shapes to distribute.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "type": { "const": "distribute_shapes", "type": "string" } }, "required": [ "type", "shape_ids", "axis", "expected_versions" ], "type": "object" }, { "description": "Stack two or more shapes along one axis with a shared cross-axis center.", "properties": { "axis": { "$ref": "#/$defs/LayoutAxis", "description": "Axis on which to stack the shapes." }, "expected_versions": { "additionalProperties": { "$ref": "#/$defs/RecordVersion" }, "description": "Optional optimistic versions keyed by shape ID.", "type": "object" }, "gap": { "description": "Space between adjacent shape bounds.", "format": "double", "type": "number" }, "shape_ids": { "description": "Shapes to stack.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "type": { "const": "stack_shapes", "type": "string" } }, "required": [ "type", "shape_ids", "axis", "gap", "expected_versions" ], "type": "object" }, { "description": "Arrange two or more shapes in a deterministic row-major grid.", "properties": { "column_gap": { "description": "Horizontal space between grid columns.", "format": "double", "type": "number" }, "columns": { "description": "Number of columns in the grid.", "format": "uint32", "minimum": 0, "type": "integer" }, "expected_versions": { "additionalProperties": { "$ref": "#/$defs/RecordVersion" }, "description": "Optional optimistic versions keyed by shape ID.", "type": "object" }, "row_gap": { "description": "Vertical space between grid rows.", "format": "double", "type": "number" }, "shape_ids": { "description": "Shapes to arrange.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "type": { "const": "grid_shapes", "type": "string" } }, "required": [ "type", "shape_ids", "columns", "column_gap", "row_gap", "expected_versions" ], "type": "object" }, { "description": "Tidy two or more shapes into a balanced row-major grid.", "properties": { "expected_versions": { "additionalProperties": { "$ref": "#/$defs/RecordVersion" }, "description": "Optional optimistic versions keyed by shape ID.", "type": "object" }, "gap": { "description": "Space between grid cells.", "format": "double", "type": "number" }, "shape_ids": { "description": "Shapes to tidy.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "type": { "const": "tidy_shapes", "type": "string" } }, "required": [ "type", "shape_ids", "gap", "expected_versions" ], "type": "object" }, { "description": "Arrange selected shapes from their structured connections.", "properties": { "expected_versions": { "additionalProperties": { "$ref": "#/$defs/RecordVersion" }, "description": "Optional optimistic versions keyed by shape ID.", "type": "object" }, "layout": { "$ref": "#/$defs/GraphLayoutOptions", "description": "Graph algorithm and spacing options." }, "shape_ids": { "description": "Shapes to arrange.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "type": { "const": "graph_layout", "type": "string" } }, "required": [ "type", "shape_ids", "layout", "expected_versions" ], "type": "object" } ] }, "Origin": { "description": "Origin of a record or transaction.", "oneOf": [ { "const": "human", "description": "Direct edit made by a person.", "type": "string" }, { "const": "agent", "description": "Edit proposed or applied by an agent.", "type": "string" }, { "const": "sync", "description": "Change received from a trusted peer.", "type": "string" }, { "const": "system", "description": "Deterministic repair or other internal change.", "type": "string" } ] }, "PageId": { "description": "Stable identifier for a page.", "type": "string" }, "PageRecord": { "description": "A page record and its ordered layer list.", "properties": { "id": { "$ref": "#/$defs/PageId", "description": "Stable record identifier." }, "layer_ids": { "description": "Layer IDs in back-to-front draw order.", "items": { "$ref": "#/$defs/LayerId" }, "type": "array" }, "name": { "description": "User-visible page name.", "type": "string" }, "version": { "$ref": "#/$defs/RecordVersion", "description": "Version used by optimistic operation preconditions." } }, "required": [ "id", "name", "layer_ids", "version" ], "type": "object" }, "Proposal": { "description": "Validated transaction held for explicit user review.", "properties": { "affected_regions": { "description": "Document-coordinate regions affected by the proposed geometry.", "items": { "$ref": "#/$defs/AffectedRegion" }, "type": "array" }, "expires_at": { "$ref": "#/$defs/Timestamp", "description": "Wall-clock expiry retained for clients and diagnostics." }, "id": { "$ref": "#/$defs/ProposalId", "description": "Stable proposal identifier." }, "object_previews": { "description": "Record-level before/after data used to render the proposal on the canvas.", "items": { "$ref": "#/$defs/ProposalObjectPreview" }, "type": "array" }, "operation_previews": { "description": "Human-readable, independently selectable operation previews.", "items": { "$ref": "#/$defs/ProposalOperationPreview" }, "type": "array" }, "preview": { "$ref": "#/$defs/DocumentPatch", "description": "Preview patch shown by the UI." }, "transaction": { "$ref": "#/$defs/TransactionDraft", "description": "Transaction validated against the listed heads." }, "warnings": { "description": "Validation or repair warnings shown before acceptance.", "items": { "$ref": "#/$defs/Warning" }, "type": "array" } }, "required": [ "id", "transaction", "preview", "affected_regions", "operation_previews", "object_previews", "warnings", "expires_at" ], "type": "object" }, "ProposalChangeKind": { "description": "Visual classification for one record-level proposal change.", "oneOf": [ { "const": "added", "description": "A record exists only after the proposal.", "type": "string" }, { "const": "modified", "description": "A record exists before and after with non-positional changes.", "type": "string" }, { "const": "moved", "description": "A shape's transform or parent changes between snapshots.", "type": "string" }, { "const": "removed", "description": "A record exists only before the proposal.", "type": "string" } ] }, "ProposalId": { "description": "Stable identifier for a transaction proposal awaiting user review.", "type": "string" }, "ProposalObjectPreview": { "description": "Before/after data for one record affected by a proposal.", "properties": { "after": { "anyOf": [ { "$ref": "#/$defs/QueryRecord" }, { "type": "null" } ], "description": "Complete record after the proposal, when it exists." }, "after_bounds": { "anyOf": [ { "$ref": "#/$defs/Bounds" }, { "type": "null" } ], "description": "World-space shape bounds after the proposal, when applicable." }, "before": { "anyOf": [ { "$ref": "#/$defs/QueryRecord" }, { "type": "null" } ], "description": "Complete record before the proposal, when it existed." }, "before_bounds": { "anyOf": [ { "$ref": "#/$defs/Bounds" }, { "type": "null" } ], "description": "World-space shape bounds before the proposal, when applicable." }, "change": { "$ref": "#/$defs/ProposalChangeKind", "description": "Visual classification used by review clients." }, "changed_fields": { "description": "Changed record fields, including nested metadata and relationship fields.", "items": { "type": "string" }, "type": "array" }, "operation_positions": { "description": "Transaction operation positions that directly name this record.", "items": { "format": "uint32", "minimum": 0, "type": "integer" }, "type": "array" }, "record_id": { "$ref": "#/$defs/RecordId", "description": "Record identified by this preview." } }, "required": [ "record_id", "change", "operation_positions", "changed_fields" ], "type": "object" }, "ProposalOperationPreview": { "description": "Review metadata for one operation in a proposal.", "properties": { "bounds": { "description": "Geometry attributable to this operation before or after the proposal.", "items": { "$ref": "#/$defs/Bounds" }, "type": "array" }, "label": { "description": "Stable human-readable operation label.", "type": "string" }, "position": { "description": "Zero-based position used by partial acceptance.", "format": "uint32", "minimum": 0, "type": "integer" }, "record_ids": { "description": "Records named directly by this operation.", "items": { "$ref": "#/$defs/RecordId" }, "type": "array" } }, "required": [ "position", "label", "record_ids", "bounds" ], "type": "object" }, "Provenance": { "description": "Attribution retained with content.", "properties": { "actor_id": { "$ref": "#/$defs/ActorId", "description": "Actor responsible for the record's current form." }, "origin": { "$ref": "#/$defs/Origin", "description": "Path by which the record entered the document." }, "source": { "description": "Optional source identifier, such as an external reference or proposal ID.", "type": [ "string", "null" ] }, "timestamp": { "$ref": "#/$defs/Timestamp", "description": "Time at which this provenance entry was recorded." } }, "required": [ "actor_id", "origin", "timestamp" ], "type": "object" }, "QueryRecord": { "description": "Complete materialized record returned by a detailed query.", "oneOf": [ { "description": "Page record.", "properties": { "kind": { "const": "page", "type": "string" }, "record": { "$ref": "#/$defs/PageRecord" } }, "required": [ "kind", "record" ], "type": "object" }, { "description": "Layer record.", "properties": { "kind": { "const": "layer", "type": "string" }, "record": { "$ref": "#/$defs/LayerRecord" } }, "required": [ "kind", "record" ], "type": "object" }, { "description": "Shape record.", "properties": { "kind": { "const": "shape", "type": "string" }, "record": { "$ref": "#/$defs/ShapeRecord" } }, "required": [ "kind", "record" ], "type": "object" }, { "description": "Binding record.", "properties": { "kind": { "const": "binding", "type": "string" }, "record": { "$ref": "#/$defs/BindingRecord" } }, "required": [ "kind", "record" ], "type": "object" }, { "description": "Asset record.", "properties": { "kind": { "const": "asset", "type": "string" }, "record": { "$ref": "#/$defs/AssetRecord" } }, "required": [ "kind", "record" ], "type": "object" } ] }, "QueryResult": { "description": "Materialized query result suitable for machine clients.", "properties": { "bounds": { "additionalProperties": { "$ref": "#/$defs/Bounds" }, "description": "Bounds for matching shapes, in the same order as their shape records.", "type": "object" }, "details": { "default": [], "description": "Complete records when the query requested them.", "items": { "$ref": "#/$defs/QueryRecord" }, "type": "array" }, "heads": { "description": "Causal heads inspected by the query.", "items": { "$ref": "#/$defs/ChangeHash" }, "type": "array" }, "records": { "description": "Matching records in deterministic order.", "items": { "$ref": "#/$defs/RecordId" }, "type": "array" }, "total": { "default": 0, "description": "Number of matches before applying the requested limit.", "format": "uint", "minimum": 0, "type": "integer" }, "truncated": { "default": false, "description": "Whether the result omitted matches because of the requested limit.", "type": "boolean" } }, "required": [ "heads", "records", "bounds" ], "type": "object" }, "RecordId": { "description": "Identifies a record touched by a commit or proposal.", "oneOf": [ { "description": "Page record.", "properties": { "id": { "$ref": "#/$defs/PageId" }, "kind": { "const": "page", "type": "string" } }, "required": [ "kind", "id" ], "type": "object" }, { "description": "Layer record.", "properties": { "id": { "$ref": "#/$defs/LayerId" }, "kind": { "const": "layer", "type": "string" } }, "required": [ "kind", "id" ], "type": "object" }, { "description": "Shape record.", "properties": { "id": { "$ref": "#/$defs/ShapeId" }, "kind": { "const": "shape", "type": "string" } }, "required": [ "kind", "id" ], "type": "object" }, { "description": "Binding record.", "properties": { "id": { "$ref": "#/$defs/BindingId" }, "kind": { "const": "binding", "type": "string" } }, "required": [ "kind", "id" ], "type": "object" }, { "description": "Asset record.", "properties": { "id": { "$ref": "#/$defs/AssetId" }, "kind": { "const": "asset", "type": "string" } }, "required": [ "kind", "id" ], "type": "object" } ] }, "RecordVersion": { "description": "Monotonic version of a record within the document history.", "format": "uint64", "minimum": 0, "type": "integer" }, "SaveResult": { "description": "Result of saving an open document session.", "properties": { "heads": { "description": "Heads persisted by this save.", "items": { "$ref": "#/$defs/ChangeHash" }, "type": "array" }, "path": { "$ref": "#/$defs/DocumentPath", "description": "Path written by the file service." } }, "required": [ "path", "heads" ], "type": "object" }, "SemanticMetadata": { "description": "Human- and agent-readable meaning attached to a shape.", "properties": { "agent_editable": { "description": "Whether an agent may propose or apply edits to this shape.", "type": "boolean" }, "body": { "default": null, "description": "Optional card body.", "type": [ "string", "null" ] }, "custom_metadata": { "additionalProperties": true, "default": {}, "description": "Optional user-defined structured metadata. An empty map means no custom fields.", "type": "object" }, "description": { "description": "Optional longer description.", "type": [ "string", "null" ] }, "link": { "default": null, "description": "Optional external link associated with the content.", "type": [ "string", "null" ] }, "locked": { "description": "Whether direct edits to this shape are prohibited.", "type": "boolean" }, "name": { "description": "Optional display name.", "type": [ "string", "null" ] }, "provenance": { "$ref": "#/$defs/Provenance", "description": "Attribution for the record." }, "role": { "description": "Optional semantic selector such as `architecture.service`.", "type": [ "string", "null" ] }, "source": { "default": null, "description": "Optional content source, such as a citation or file path.", "type": [ "string", "null" ] }, "tags": { "description": "Searchable, user-defined tags.", "items": { "type": "string" }, "type": "array" }, "title": { "default": null, "description": "Optional card title.", "type": [ "string", "null" ] } }, "required": [ "tags", "locked", "agent_editable", "provenance" ], "type": "object" }, "SessionId": { "description": "Stable identifier for an open document session.", "type": "string" }, "ShapeAlignment": { "description": "Edge or center line used to align a group of shapes.", "oneOf": [ { "const": "left", "description": "Align left bounds.", "type": "string" }, { "const": "center", "description": "Align horizontal centers.", "type": "string" }, { "const": "right", "description": "Align right bounds.", "type": "string" }, { "const": "top", "description": "Align top bounds.", "type": "string" }, { "const": "middle", "description": "Align vertical centers.", "type": "string" }, { "const": "bottom", "description": "Align bottom bounds.", "type": "string" } ] }, "ShapeId": { "description": "Stable identifier for a shape.", "type": "string" }, "ShapeKind": { "description": "Registry key for a shape definition.", "type": "string" }, "ShapeParent": { "description": "Parent that owns a shape's sole draw-order entry.", "oneOf": [ { "description": "The shape is a root child of a layer.", "properties": { "id": { "$ref": "#/$defs/LayerId" }, "kind": { "const": "layer", "type": "string" } }, "required": [ "kind", "id" ], "type": "object" }, { "description": "The shape is a child of a container shape.", "properties": { "id": { "$ref": "#/$defs/ShapeId" }, "kind": { "const": "shape", "type": "string" } }, "required": [ "kind", "id" ], "type": "object" } ] }, "ShapePatch": { "description": "Mutable shape fields. `Some(None)` clears an optional field.", "properties": { "layout": { "anyOf": [ { "$ref": "#/$defs/ContainerLayout" }, { "type": "null" } ], "description": "Replacement or removal of container layout." }, "metadata": { "anyOf": [ { "$ref": "#/$defs/SemanticMetadata" }, { "type": "null" } ], "description": "Replacement semantic metadata." }, "properties": { "additionalProperties": true, "description": "Replacement kind-specific properties.", "type": [ "object", "null" ] }, "style": { "anyOf": [ { "$ref": "#/$defs/ShapeStyle" }, { "type": "null" } ], "description": "Replacement common style." }, "transform": { "anyOf": [ { "$ref": "#/$defs/Transform" }, { "type": "null" } ], "description": "Replacement relative transform." } }, "type": "object" }, "ShapeRecord": { "description": "A shape record shared by all built-in shape definitions.", "properties": { "child_ids": { "description": "Ordered children when this shape is a container. This list is the\nframe presentation and export order.", "items": { "$ref": "#/$defs/ShapeId" }, "type": "array" }, "id": { "$ref": "#/$defs/ShapeId", "description": "Stable record identifier." }, "kind": { "$ref": "#/$defs/ShapeKind", "description": "Registry key. Built-in values are exposed as `*_KIND` constants." }, "layout": { "anyOf": [ { "$ref": "#/$defs/ContainerLayout" }, { "type": "null" } ], "description": "Optional automatic layout for container shapes." }, "metadata": { "$ref": "#/$defs/SemanticMetadata", "description": "Human- and agent-readable semantics and permissions." }, "parent": { "$ref": "#/$defs/ShapeParent", "description": "Parent relation; ordering comes only from the parent's child list." }, "properties": { "additionalProperties": true, "description": "Kind-specific serialized properties validated by the registry.", "type": "object" }, "style": { "$ref": "#/$defs/ShapeStyle", "description": "Visual properties common to all kinds." }, "transform": { "$ref": "#/$defs/Transform", "description": "Transform relative to `parent`." }, "version": { "$ref": "#/$defs/RecordVersion", "description": "Version used by optimistic operation preconditions." } }, "required": [ "id", "kind", "parent", "transform", "child_ids", "properties", "metadata", "style", "version" ], "type": "object" }, "ShapeStyle": { "description": "Common visual style shared by all shape kinds.", "properties": { "fill_opacity": { "anyOf": [ { "$ref": "#/$defs/Opacity" }, { "type": "null" } ], "description": "Optional opacity override for fills." }, "opacity": { "$ref": "#/$defs/Opacity", "description": "Opacity applied to the complete shape." }, "stroke_opacity": { "anyOf": [ { "$ref": "#/$defs/Opacity" }, { "type": "null" } ], "description": "Optional opacity override for strokes." } }, "required": [ "opacity" ], "type": "object" }, "SiblingAnchor": { "description": "Anchor used to place an item in an ordered child list without numeric indexes.", "oneOf": [ { "description": "Place the item before every existing sibling.", "properties": { "position": { "const": "first", "type": "string" } }, "required": [ "position" ], "type": "object" }, { "description": "Place the item after every existing sibling.", "properties": { "position": { "const": "last", "type": "string" } }, "required": [ "position" ], "type": "object" }, { "description": "Place the item immediately before the identified sibling.", "properties": { "position": { "const": "before", "type": "string" }, "sibling_id": { "$ref": "#/$defs/PageId" } }, "required": [ "position", "sibling_id" ], "type": "object" }, { "description": "Place the item immediately after the identified sibling.", "properties": { "position": { "const": "after", "type": "string" }, "sibling_id": { "$ref": "#/$defs/PageId" } }, "required": [ "position", "sibling_id" ], "type": "object" } ] }, "SiblingAnchor2": { "description": "Anchor used to place an item in an ordered child list without numeric indexes.", "oneOf": [ { "description": "Place the item before every existing sibling.", "properties": { "position": { "const": "first", "type": "string" } }, "required": [ "position" ], "type": "object" }, { "description": "Place the item after every existing sibling.", "properties": { "position": { "const": "last", "type": "string" } }, "required": [ "position" ], "type": "object" }, { "description": "Place the item immediately before the identified sibling.", "properties": { "position": { "const": "before", "type": "string" }, "sibling_id": { "$ref": "#/$defs/LayerId" } }, "required": [ "position", "sibling_id" ], "type": "object" }, { "description": "Place the item immediately after the identified sibling.", "properties": { "position": { "const": "after", "type": "string" }, "sibling_id": { "$ref": "#/$defs/LayerId" } }, "required": [ "position", "sibling_id" ], "type": "object" } ] }, "SiblingAnchor3": { "description": "Anchor used to place an item in an ordered child list without numeric indexes.", "oneOf": [ { "description": "Place the item before every existing sibling.", "properties": { "position": { "const": "first", "type": "string" } }, "required": [ "position" ], "type": "object" }, { "description": "Place the item after every existing sibling.", "properties": { "position": { "const": "last", "type": "string" } }, "required": [ "position" ], "type": "object" }, { "description": "Place the item immediately before the identified sibling.", "properties": { "position": { "const": "before", "type": "string" }, "sibling_id": { "$ref": "#/$defs/ShapeId" } }, "required": [ "position", "sibling_id" ], "type": "object" }, { "description": "Place the item immediately after the identified sibling.", "properties": { "position": { "const": "after", "type": "string" }, "sibling_id": { "$ref": "#/$defs/ShapeId" } }, "required": [ "position", "sibling_id" ], "type": "object" } ] }, "StackDirection": { "description": "Stack direction for container layout.", "oneOf": [ { "const": "horizontal", "description": "Place children from left to right.", "type": "string" }, { "const": "vertical", "description": "Place children from top to bottom.", "type": "string" } ] }, "Timestamp": { "description": "Milliseconds since the Unix epoch.", "format": "int64", "type": "integer" }, "TransactionDraft": { "description": "One durable edit submitted to the transaction engine.", "properties": { "actor_id": { "$ref": "#/$defs/ActorId", "description": "Actor responsible for the transaction." }, "base_heads": { "description": "Causal heads inspected by the caller.", "items": { "$ref": "#/$defs/ChangeHash" }, "type": "array" }, "description": { "description": "Human-readable explanation retained in history.", "type": "string" }, "id": { "$ref": "#/$defs/TransactionId", "description": "Stable transaction identifier." }, "operations": { "description": "Ordered operations committed as one CRDT change.", "items": { "$ref": "#/$defs/Operation" }, "type": "array" }, "origin": { "$ref": "#/$defs/Origin", "description": "Path by which the transaction entered the engine." }, "timestamp": { "$ref": "#/$defs/Timestamp", "description": "Client-recorded transaction time." } }, "required": [ "id", "actor_id", "origin", "base_heads", "description", "operations", "timestamp" ], "type": "object" }, "TransactionId": { "description": "Stable identifier for a transaction.", "type": "string" }, "Transform": { "description": "Transform relative to a shape's parent container or layer.", "properties": { "rotation": { "description": "Clockwise rotation in radians.", "format": "double", "type": "number" }, "scale_x": { "description": "Horizontal scale.", "format": "double", "type": "number" }, "scale_y": { "description": "Vertical scale.", "format": "double", "type": "number" }, "translation": { "$ref": "#/$defs/Vec2", "description": "Translation in parent coordinates." } }, "required": [ "translation", "rotation", "scale_x", "scale_y" ], "type": "object" }, "Vec2": { "description": "Two-dimensional point or vector in document coordinates.", "properties": { "x": { "description": "Horizontal component.", "format": "double", "type": "number" }, "y": { "description": "Vertical component.", "format": "double", "type": "number" } }, "required": [ "x", "y" ], "type": "object" }, "Warning": { "description": "Non-fatal repair or normalization performed during a commit or merge.", "properties": { "code": { "description": "Stable machine-readable warning code.", "type": "string" }, "message": { "description": "Human-readable warning detail.", "type": "string" }, "record_ids": { "description": "Related records, if known.", "items": { "$ref": "#/$defs/RecordId" }, "type": "array" } }, "required": [ "code", "message", "record_ids" ], "type": "object" } }, "$schema": "https://json-schema.org/draft/2020-12/schema", "description": "Successful transport-independent response.", "oneOf": [ { "description": "A new session was opened.", "properties": { "type": { "const": "session_opened", "type": "string" }, "value": { "$ref": "#/$defs/SessionId" } }, "required": [ "type", "value" ], "type": "object" }, { "description": "Current materialized document state.", "properties": { "type": { "const": "snapshot", "type": "string" }, "value": { "$ref": "#/$defs/DocumentSnapshot" } }, "required": [ "type", "value" ], "type": "object" }, { "description": "Transaction, undo, or redo result.", "properties": { "type": { "const": "committed", "type": "string" }, "value": { "$ref": "#/$defs/CommitResult" } }, "required": [ "type", "value" ], "type": "object" }, { "description": "A transaction was validated and held for user review.", "properties": { "type": { "const": "proposed", "type": "string" }, "value": { "$ref": "#/$defs/Proposal" } }, "required": [ "type", "value" ], "type": "object" }, { "description": "A proposal was rejected and removed.", "properties": { "type": { "const": "proposal_rejected", "type": "string" } }, "required": [ "type" ], "type": "object" }, { "description": "A document was persisted.", "properties": { "type": { "const": "saved", "type": "string" }, "value": { "$ref": "#/$defs/SaveResult" } }, "required": [ "type", "value" ], "type": "object" }, { "description": "Deterministic semantic query results.", "properties": { "type": { "const": "query_result", "type": "string" }, "value": { "$ref": "#/$defs/QueryResult" } }, "required": [ "type", "value" ], "type": "object" }, { "description": "Validation completed without errors.", "properties": { "type": { "const": "valid", "type": "string" } }, "required": [ "type" ], "type": "object" }, { "description": "A session was closed.", "properties": { "type": { "const": "closed", "type": "string" } }, "required": [ "type" ], "type": "object" } ], "title": "Response"}