Šķîþ ţö ḿàîñ çöñţéñţ

Š-06: Ţĥé ṽîšüàļ éđîţöŕ đàţà ḿöđéļ

Šüḿḿàŕý​

Ţĥé ṽîšüàļ éđîţöŕ îš à ŕéñđéŕ-àñđ-îñšþéçţ šüŕƒàçé öṽéŕ ţĥé çöñţéñţ ḿöđéļ (Ƒ-02), šĥîþþéđ àš à ķîţ îñ @neokapi/ui-primitives üñđéŕ ţĥé ./preview šüƃþàţĥ. À đöçüḿéñţ'š Part šţŕéàḿ îš þŕöĵéçţéđ îñ Ĝö ţö à ĥîéŕàŕçĥîçàļ, ĴŠÖÑ-šéŕîàļîžàƃļé ContentTree (core/editor), ţĥéñ ñöŕḿàļîžéđ öñ ţĥé ŢýþéŠçŕîþţ šîđé ţö à RenderDoc ŵĥöšé kind đŕîṽéš à ƒöŕḿàţ-šĥàþéđ ŕéñđéŕéŕ. Îñļîñé ŕüñš àŕé šţýļéđ ţĥŕöüĝĥ ţĥé ṽöçàƃüļàŕý; šţàñđ-öƒƒ öṽéŕļàýš ŕéñđéŕ àš îñļîñé ḿàŕķš ŵĥöšé àççéñţ îš à ƒüñçţîöñ öƒ ţĥé öṽéŕļàý ţýþé àñđ ţĥé šþàñ'š öŵñ þŕöþéŕţîéš. Éṽéŕý þŕöĵéçţîöñ öƒ à ŕüñ šéǫüéñçé ţö ţéẋţ îš đéçļàŕéđ þéŕ ŕüñ ķîñđ, šö à þļàçéĥöļđéŕ öŕ à þļüŕàļ çàñ ñéṽéŕ ṽàñîšĥ ƒŕöḿ à ṽîéŵ. Ţĥé ķîţ đŕàŵš àñđ îñšþéçţš. À ĥöšţ ţĥàţ éđîţš çöḿḿîţš ţĥŕöüĝĥ ţĥé çĥàñĝé šéŕṽîçé (É-09): îţ šéñđš à çĥàñĝé šéţ ñàḿîñĝ ţĥé ŕéṽîšîöñ îţ ŕéñđéŕéđ, àñđ ţĥé šéŕṽîçé àþþļîéš îţ ţö ţĥé ƃļöçķ àñđ ŵŕîţéš ţĥé đöçüḿéñţ ƃàçķ ţĥŕöüĝĥ ŕéàđéŕ, šķéļéţöñ àñđ ŵŕîţéŕ, ŵĥöéṽéŕ éđîţéđ.

renderedit → writeSourcefile / storeReader+ skeletonEditorrender + inspectChange setset_content · if_matchWriter+ skeletonOutputfaithful originalContent modelBlock · Run · Edition

Ţĥé ţöþ ŕöŵ þŕöĵéçţš ḿöđéļ ţö þîẋéļš; ţĥé ƃöţţöḿ ŕöŵ çöḿḿîţš àñ éđîţ àñđ ŕéçöñšţŕüçţš ƒàîţĥƒüļ öüţþüţ.

Çöñţéẋţ​

Ţĥé çöñţéñţ ḿöđéļ, ţĥé ƒöŕḿàţ šýšţéḿ àñđ îţš ƃýţé-ƒàîţĥƒüļ šķéļéţöñ, ţĥé ţööļ šýšţéḿ, àñđ ţĥé îñţéŕçĥàñĝé þàçķàĝé ƒàḿîļý éàçĥ ĥàṽé ţĥéîŕ öŵñ đéçîšîöñ ŕéçöŕđ. Ţĥé éđîţöŕ šþàñš ţŵö öƒ ţĥéḿ àñđ ƃéļöñĝš ţö ñéîţĥéŕ, ƒöŕ ţŵö ŕéàšöñš.

Îţ šþàñš Ĝö àñđ ŢýþéŠçŕîþţ. Ţĥé ḿöđéļ îš þŕöĵéçţéđ ţö à ContentTree îñ core/editor, ţĥéñ ñöŕḿàļîžéđ àñđ ŕéñđéŕéđ îñ packages/ui. Ţĥé ĥàñđ-öƒƒ, ţĥé ContentTree àñđ îţš ŢýþéŠçŕîþţ ḿîŕŕöŕ, îš ţĥé šéàḿ ŵĥéŕé ţĥé ţŵö ĥàļṽéš ḿééţ, àñđ à šéàḿ ñöƃöđý ŵŕöţé đöŵñ îš à šéàḿ ţĥàţ đŕîƒţš.

Ţĥé ƃàçķ þàţĥ îš ţĥé ļéàšţ öƃṽîöüš þàŕţ. Éṽéŕý šüŕƒàçé ţĥàţ éđîţš çöñţéñţ šéñđš ţĥé šàḿé çĥàñĝé šéţ ţö ţĥé šàḿé šéŕṽîçé, šö ţĥé çöñţŕàçţ ŵöŕţĥ þîññîñĝ đöŵñ îš ŕéàđ → çĥàñĝé šéţ → ŵŕîţé, àñđ ţĥé ķîţ'š þàŕţ îñ îţ îš ţĥé ŕéàđ.

Đéçîšîöñ​

Ţĥé éđîţöŕ ŕéñđéŕš ţĥé çöñţéñţ ḿöđéļ​

Ţĥé ƃŕîđĝé ƃéţŵééñ ţĥé éñĝîñé àñđ àñý þŕéṽîéŵ šüŕƒàçé îš ţĥé ContentTree (core/editor/anatomy.go): à ĥîéŕàŕçĥîçàļ, ĴŠÖÑ-šéŕîàļîžàƃļé ṽîéŵ öƒ à đöçüḿéñţ'š Part šţŕéàḿ. BuildContentTree ŵàļķš ţĥé šţŕéàḿ ŵîţĥ à çöñţàîñéŕ šţàçķ, àţţàçĥîñĝ éàçĥ þàŕţ ţö ţĥé îññéŕḿöšţ öþéñ çöñţàîñéŕ àñđ þŕöđüçîñĝ ñöđéš öƒ ķîñđ layer, group, block, data, öŕ media.

À ƃļöçķ ñöđé þŕéšéŕṽéš ŵĥàţ ţĥé ḿöđéļ ĥöļđš: ţĥé ŕüñ šéǫüéñçéš ƒöŕ šöüŕçé àñđ éàçĥ ţàŕĝéţ, þéŕ-ţàŕĝéţ ḿéţàđàţà, ţĥé šţàñđ-öƒƒ öṽéŕļàý ṽîéŵš çàŕŕýîñĝ ţĥé ţéẋţ éàçĥ šþàñ çöṽéŕš, àñđ šéĝḿéñţ šþàñš đéŕîṽéđ ƃý ŕüñ-îñđéẋ ŕàñĝé ƒŕöḿ ţĥé šéĝḿéñţàţîöñ öṽéŕļàý (Ḿ-02).

ContentTree îš đîšţîñçţ ƒŕöḿ ţĥé éđîţöŕ'š öţĥéŕ þŕöĵéçţîöñ, BlockIndex, ŵĥîçĥ ƒļàţţéñš à ƃļöçķ'š šöüŕçé ţö þļàîñ šţŕîñĝš ƒöŕ ŕéçöñšţŕüçţîöñ. Ţĥé þŕéṽîéŵ ķîţ çöñšüḿéš ţĥé ŕüñ-þŕéšéŕṽîñĝ ContentTree, šö ţĥé éđîţöŕ ŕéñđéŕš éẋàçţļý ŵĥàţ ţĥé ḿöđéļ ĥöļđš (îñļîñé þļàçéĥöļđéŕš, þàîŕéđ çöđéš, þļüŕàļš) ŕàţĥéŕ ţĥàñ à ļöššý šţŕîñĝ ṽîéŵ.

Ŕéñđéŕ þàţĥ​

Sourcefile / storechanReaderDataFormatReaderchanContentTreecore/editorPart stream → treechanRenderDocrenderDoc.tsSTRUCTURE_RULESchanViewDocumentViewer

À Þàŕţ šţŕéàḿ ƃéçöḿéš à ĥîéŕàŕçĥîçàļ ţŕéé, ñöŕḿàļîžéđ ţö à ƒöŕḿàţ-šĥàþéđ đöçüḿéñţ ŵĥöšé ķîñđ šéļéçţš ţĥé ŕéñđéŕéŕ.

treeToRenderDoc ñöŕḿàļîžéš à ContentTree îñţö à RenderDoc ţĥŕöüĝĥ à đàţà-đŕîṽéñ STRUCTURE_RULES ţàƃļé. Îţ çöļļéçţš ţàŕĝéţ ļöçàļéš àçŕöšš àļļ ƃļöçķš, ţĥéñ ţŕîéš ļàýéŕ-šĥàþé đéţéçţöŕš îñ đéçļàŕàţîöñ öŕđéŕ, ƒîŕšţ ḿàţçĥ ŵîññîñĝ (þŕéšéñţàţîöñ šļîđéš, šþŕéàđšĥééţ ŵöŕķšĥééţš, à ŵöŕđ-þŕöçéššîñĝ đöçüḿéñţ ƃöđý, à þàĝéđ ļàýéŕ þàţţéŕñ), ƒàļļîñĝ ƃàçķ ţö à ƒöŕḿàţ-ƒàḿîļý çļàššîƒîçàţîöñ àñđ ƒîñàļļý ţö à ĝéñéŕîç šéçţîöñ éẋţŕàçţîöñ. Ţĥé ŕéšüļţ çàŕŕîéš à kind öƒ slides, sheet, doc, pages, list, öŕ sections, àñđ éṽéŕý ƃļöçķ þŕöĵéçţš ţö à ŕéñđéŕ ļîñé çàŕŕýîñĝ îţš îđ, ţéẋţ, îñļîñé çöđéš, þéŕ-ļöçàļé ţàŕĝéţš, ŕöļé, öṽéŕļàýš, àñđ àññöţàţîöñš.

FormatPreview đîšþàţçĥéš öñ ţĥàţ ķîñđ ţö à ķîñđ-šþéçîƒîç ŕéñđéŕéŕ. Ļéàƒ ţéẋţ ĝöéš ţĥŕöüĝĥ à šĥàŕéđ çöḿþöñéñţ ţĥàţ àþþļîéš ţĥé àçţîṽé ţŕàñšîţîöñ, ŕéšöļṽéš öṽéŕļàý ḿàŕķš, àñđ, ŵĥéñ à before đöçüḿéñţ îš šüþþļîéđ, ŵöŕđ-ļéṽéļ đ ĥîĝĥļîĝĥţîñĝ.

DocumentViewer çöḿþöšéš ţĥé ƒüļļ šüŕƒàçé: à ĥéàđéŕ çàŕŕýîñĝ ţĥé ƒîļéñàḿé, à ƒîļé-ţýþé ƃàđĝé, ţĥé ƃýţé šîžé, àñđ à đöŵñļöàđ ƃüţţöñ; à šöüŕçé-ţö-ţàŕĝéţ ţöĝĝļé šĥöŵñ öñļý ŵĥéñ ţàŕĝéţ ļöçàļéš éẋîšţ; àñđ à ţàƃ šţŕîþ. Þŕéṽîéŵ, Ƃļöçķš, àñđ Šţàţš àŕé àļŵàýš þŕéšéñţ. Šţŕüçţüŕé àþþéàŕš ŵĥéñ ţĥé ţŕéé çàŕŕîéš šţŕüçţüŕàļ ŕöļéš, Ļàýöüţ ŵĥéñ îţ çàŕŕîéš þàĝé ĝéöḿéţŕý (É-08), Ḿéđîà ŵĥéñ îţ çàŕŕîéš à ţéḿþöŕàļ öŕ ŕàšţéŕ ḿéđîà ļàýéŕ (Ḿ-03), àñđ Ŕàŵ ŵĥéñ ţĥé ĥöšţ àçţüàļļý ĥöļđš ţĥé ƃýţéš. À ĥöšţ çàñ àþþéñđ îţš öŵñ ţàƃš; ţĥé ļàƃ üšéš ţĥéḿ ƒöŕ öüţþüţ-ƒöŕḿàţ þîļļš. Đöŵñļöàđîñĝ îš ţĥé šîñĝļé ĥéàđéŕ ƃüţţöñ ŕàţĥéŕ ţĥàñ à đüþļîçàţé ţàƃ, ƃéçàüšé öñ ţĥé đéšķţöþ ţĥé ļöçàļ ƒîļé îš àļŕéàđý ţĥé šöüŕçé öƒ ţŕüţĥ.

Þŕöĵéçţîöñ îš đéçļàŕéđ þéŕ ŕüñ ķîñđ​

Ţüŕñîñĝ à ŕüñ šéǫüéñçé îñţö ţéẋţ îš ţĥé šţéþ éṽéŕý šüŕƒàçé þéŕƒöŕḿš àñđ ţĥé öñé éàšîéšţ ţö ĝéţ ŵŕöñĝ. Ţĥé ļöššý ƒöŕḿ îš à ļööþ ţĥàţ ķééþš ţéẋţ ŕüñš àñđ šķîþš ţĥé ŕéšţ, ŵĥîçĥ ŕéàđš àš "çöñçàţéñàţé ţĥé ţéẋţ" àñđ ƃéĥàṽéš àš "đéļéţé éṽéŕý þļàçéĥöļđéŕ, þàîŕéđ çöđé àñđ þļüŕàļ". Ñöţĥîñĝ ƒàîļš; ţĥé çöñţéñţ îš ĝöñé.

Šö à þŕöĵéçţîöñ îš đéçļàŕéđ, ñéṽéŕ ļööþéđ. À RunSpec (packages/kapi-format/src/run-projection.ts) àñšŵéŕš ƒöŕ éṽéŕý ķîñđ îñ RUN_KINDS, àñđ îţš ţýþé îš à ḿàþþéđ ţýþé öṽéŕ ţĥàţ ļîšţ, šö à šþéç ţĥàţ öḿîţš à ķîñđ đöéš ñöţ çöḿþîļé. Éàçĥ ķîñđ îš ŕéñđéŕéđ, éẋþàñđéđ, đŕöþþéđ ŵîţĥ à šţàţéđ ŕéàšöñ, öŕ đéçļàŕéđ üñšüþþöŕţéđ àñđ ŕéþöŕţéđ, îñ ŵĥîçĥ çàšé ţĥé šþéç'š ŕéǫüîŕéđ fallback îš đŕàŵñ îñ îţš þļàçé. À ķîñđ àđđéđ ţö ţĥé ḿöđéļ ƃŕéàķš éṽéŕý þŕöĵéçţîöñ üñţîļ éàçĥ ĥàš šàîđ ŵĥàţ îţ đöéš ŵîţĥ îţ. scripts/check-run-projection.sh ķééþš à ĥàñđ-ŵŕîţţéñ ļööþ ƒŕöḿ ŕéţüŕñîñĝ; îţ ŕüñš îñ make lint àñđ îñ ÇÎ.

Ţĥé ķîţ'š ŕéñđéŕ ļîñé ţĥéŕéƒöŕé çàŕŕîéš à ƃļöçķ'š îñļîñé çöđéš ƃéšîđé îţš ţéẋţ, šö à þļàçéĥöļđéŕ îš đŕàŵñ àš ţĥé šàḿé çĥîþ ŵĥéŕéṽéŕ îţ àþþéàŕš, àñđ à þļüŕàļ ƃļöçķ ŕéàđš îţš other ƃŕàñçĥ ƃéĥîñđ à çĥîþ ţĥàţ šàýš šö ŕàţĥéŕ ţĥàñ ŕéñđéŕîñĝ àš àñ éḿþţý ļîñé. Ţĥé çĥîþ ñàḿéš ţĥé ṽàŕîàƃļé à þļàçéĥöļđéŕ šţàñđš ƒöŕ, ƃéçàüšé ţĥé ĴŠẊ ṽöçàƃüļàŕý îš öñé ţĥé đéƒàüļţ ŕéĝîšţŕý ļöàđš.

Ŕüñ, ṽöçàƃüļàŕý, ŕéñđéŕîñĝ​

Îñļîñé ŕüñš àŕé šţýļéđ ţĥŕöüĝĥ ţĥé ṽöçàƃüļàŕý ŕéĝîšţŕý. Ţĥé ṽöçàƃüļàŕý þàçķš àŕé çàñöñîçàļ àš à Ĝö éḿƃéđ îñ core/model/vocabularies; packages/ui/src/vocabularies çàŕŕîéš à ƃýţé-îđéñţîçàļ ḿîŕŕöŕ, àñđ scripts/format-ops/check-vocab-packs.mjs ĥöļđš ţĥé ţŵö éǫüàļ îñ make lint. Ŕéšöļṽîñĝ à ŕüñ'š ţýþé ýîéļđš đîšþļàý îñƒöŕḿàţîöñ: à çàţéĝöŕý, à ļàƃéļ, ĤŢḾĻ àñđ đîšþļàý ţéḿþļàţéš, à çĥîþ ļàƃéļ, à çöļöüŕ, àñ éǫüîṽàļéñçé ţéẋţ, àñđ éđîţîñĝ çöñšţŕàîñţš. Àñ üñķñöŵñ ţýþé îš ñöţ àñ éŕŕöŕ: ţĥé ŕéĝîšţŕý šýñţĥéšîžéš àñ éñţŕý ƒŕöḿ à đéƒàüļţ ƒàļļƃàçķ, îñţéŕþöļàţîñĝ ţĥé ţýþé ñàḿé îñţö ţĥé ţéḿþļàţéš, đéŕîṽîñĝ à šĥöŕţ çĥîþ ļàƃéļ, àñđ ĝîṽîñĝ îţ à ñéüţŕàļ àççéñţ àñđ þéŕḿîššîṽé çöñšţŕàîñţš. Ţĥé éđîţöŕ üšéš ţĥöšé ƒîéļđš ƒöŕ šţýļéđ çĥîþš, ţööļţîþš, àñđ ţĥé đéļéţàƃļé, çļöñéàƃļé, àñđ ŕéöŕđéŕàƃļé àƒƒöŕđàñçéš.

Ţĥîš ḿîŕŕöŕš ţĥé ḿöđéļ çöñţŕàçţ éẋàçţļý: ţĥé ṽöçàƃüļàŕý îš đéšçŕîþţîṽé. Îţ đŕîṽéš đîšþļàý àñđ éđîţîñĝ àƒƒöŕđàñçéš àñđ îš ñéṽéŕ çöñšüļţéđ ƃý ŵŕîţéŕš, ŵĥîçĥ ŕéþļàý éàçĥ ŕüñ'š öŵñ đàţà ṽéŕƃàţîḿ (Ƒ-02).

Öṽéŕļàýš ƃéçöḿé ḿàŕķš, ķéýéđ öñ ţýþé àñđ šþàñ​

Šţàñđ-öƒƒ öṽéŕļàýš ƃéçöḿé çöļöüŕ-çöđéđ, ţööļţîþþéđ ḿàŕķš. Ţĥŕéé ƒüñçţîöñš đö ţĥé ŵöŕķ, àñđ éàçĥ éḿƃöđîéš à đéçîšîöñ.

Ţĥé àççéñţ ķéý îš ţĥé 郃éçţîṽé çàţéĝöŕý. À ṽöîçé-ṽöçàƃüļàŕý ṽîöļàţîöñ ŕîđéš öñ ţĥé ĝéñéŕîç qa öṽéŕļàý ţýþé, šö àñ àççéñţ çĥöšéñ öñ ţýþé àļöñé ŵöüļđ þàîñţ îţ àš àñ öŕđîñàŕý ƒîñđîñĝ. Ţĥé ŕéšöļṽéŕ ţĥéŕéƒöŕé ŕéàđš ţĥé šþàñ'š öŵñ çàţéĝöŕý: à qa šþàñ çàţéĝöŕîšéđ àš ṽöîçé ṽöçàƃüļàŕý ŕéšöļṽéš ţö ţĥé ṽöîçé àççéñţ, àñđ éṽéŕýţĥîñĝ éļšé ŕéšöļṽéš öñ îţš ţýþé. Ţĥé šţýļé ţàƃļé ĝîṽéš ţéŕḿîñöļöĝý à ṽîöļéţ "Ṽöçàƃüļàŕý" àççéñţ, ṽöîçé à þîñķ "Ṽöîçé", öţĥéŕ ƒîñđîñĝš àñ àḿƃéŕ, éñţîţîéš à šķý ƃļüé, šéĝḿéñţàţîöñ àñđ àļîĝñḿéñţ ţĥéîŕ öŵñ ḿüţéđ àççéñţš, àñđ ŕéđàçţîöñ àñ éñţŕý ŵĥöšé ļàƃéļ àñđ ţööļţîþ àŕé üšéđ ŵĥîļé ţĥé ŕéñđéŕéŕ þàîñţš à çéñšöŕ ƃàŕ îñšţéàđ öƒ à ƃàçķĝŕöüñđ. Üñķñöŵñ ķéýš ƒàļļ ƃàçķ ţö à ñéüţŕàļ "Àññöţàţîöñ" àççéñţ ŵîţĥ à ţîţļé-çàšéđ ļàƃéļ, šö à ñéŵ öṽéŕļàý ţýþé ŕéñđéŕš šéñšîƃļý ƃéƒöŕé àñýöñé ţéàçĥéš ţĥé ţàƃļé àƃöüţ îţ.

Šþàñš àŕé ļöçàţéđ ƃý ţĥéîŕ ţéẋţ. Öṽéŕļàýš àñçĥöŕ ţö ŕüñ-îñđéẋ ŕàñĝéš, ƃüţ ţĥé ŕéñđéŕéŕ ŵöŕķš öṽéŕ ţĥé çöñçàţéñàţéđ ļîţéŕàļ ţéẋţ, šö ḿàţçĥîñĝ ƃý ţĥé éñĝîñé-éẋţŕàçţéđ šþàñ ţéẋţ îš ŕöƃüšţ àçŕöšš ţĥàţ þŕöĵéçţîöñ. À þéŕ-öṽéŕļàý šéàŕçĥ çüŕšöŕ àđṽàñçéš þàšţ éàçĥ ḿàţçĥ, šö ŕéþéàţéđ îđéñţîçàļ šþàñ ţéẋţš ŵîţĥîñ öñé öṽéŕļàý ḿàþ ţö šüççéššîṽé öççüŕŕéñçéš ŕàţĥéŕ ţĥàñ àļļ ţö ţĥé ƒîŕšţ. Šþàñš ŵĥöšé ţéẋţ çàññöţ ƃé ļöçàţéđ (à šþàñ çöṽéŕîñĝ öñļý îñļîñé ḿàŕķüþ, ƒöŕ îñšţàñçé) àŕé đŕöþþéđ ŕàţĥéŕ ţĥàñ ḿîšþöšîţîöñéđ. Öñé öṽéŕļàý ţýþé îš éẋçļüđéđ öüţŕîĝĥţ: à çöñţéñţ-ḿéḿöŕý ļéṽéŕàĝé ḿàŕķéŕ îš à ļîñé-ļéṽéļ ƒàçţ, ñöţ à šþàñ ĥîĝĥļîĝĥţ, àñđ ţĥé ŕéñđéŕéŕ šţýļéš ţĥé ŵĥöļé ļîñé ƒŕöḿ îţ.

Öṽéŕļàþš ƒļàţţéñ îññéŕḿöšţ-ŵîñš. Ƒöŕ éàçĥ çĥàŕàçţéŕ þöšîţîöñ ţĥé ñàŕŕöŵéšţ çöṽéŕîñĝ šþàñ öŵñš îţ, àñđ çöñţîĝüöüš þöšîţîöñš üñđéŕ ţĥé šàḿé öŵñéŕ éḿîţ öñé ñöñ-öṽéŕļàþþîñĝ šéĝḿéñţ, šö à ţéŕḿ îñšîđé àñ éñţîţý šţîļļ šĥöŵš àš ţĥé ţéŕḿ.

BlockInspector îš ţĥé šţŕüçţüŕàļ çöüñţéŕþàŕţ ţö ţĥé šţýļéđ þŕéṽîéŵ: à çöļļàþšîƃļé þéŕ-ƃļöçķ ṽîéŵ ŕéñđéŕîñĝ ţĥé šöüŕçé ŕüñ šéǫüéñçé, éàçĥ ṽàŕîàñţ'š ŕöŵ (ṽàŕîàñţ ķéý, šţàţüš, šçöŕé, öŕîĝîñ), éàçĥ öṽéŕļàý'š ŕöŵš (ţýþé, šîđé, ļàýéŕ, àñđ þéŕ-šþàñ îđ, ŕüñ ŕàñĝé, ţéẋţ, àñđ þŕöþéŕţîéš), àññöţàţîöñ ŕöŵš, ţĥé þŕöþéŕţîéš ĝŕîđ, àñđ ƒļàĝ ƃàđĝéš.

Ţĥé ķîţ ŕéñđéŕš àñđ îñšþéçţš; à ĥöšţ çöḿḿîţš​

@neokapi/ui-primitives îš ţĥé šîñĝļé šöüŕçé öƒ ţŕüţĥ ƒöŕ ţĥé ķîţ, éẋþöŕţéđ üñđéŕ ./preview: ţĥé ṽîéŵéŕ àñđ ƒöŕḿàţ þŕéṽîéŵ, ţĥé ƒîļé ƃŕöŵšéŕ, ţĥé ƃļöçķ îñšþéçţöŕ, ţĥé šţŕüçţüŕé, ļàýöüţ, àñđ çöñţéñţ-ţŕéé ṽîéŵš, ŕüñ šéǫüéñçéš àñđ çöđé ṽîéŵš, ţĥé ḿüļţîḿöđàļ ṽîéŵéŕš ƒöŕ ţîḿéđ ḿéđîà àñđ ŕàšţéŕ öṽéŕļàýš, àñđ ţĥé šüþþöŕţîñĝ üţîļîţîéš (ţĥé ŕéñđéŕ-đöç ñöŕḿàļîžéŕ, ţĥé öṽéŕļàý šţýļé àñđ šþàñ ŕéšöļṽéŕš, ŕüñ-ŕàñĝé ḿàþþîñĝ, ŕöļé šţýļîñĝ, ĝéöḿéţŕý ƒļàţţéñîñĝ, àñđ ţĥé ṽöçàƃüļàŕý ŕéĝîšţŕý).

ÇöñšüḿéŕĤöŵ îţ üšéš ţĥé ķîţ
Ķàþî Đéšķţöþƒîļé îñšþéçţîöñ îñšîđé à þŕöĵéçţ ţàƃ (Š-02)
Ķàþî Ļàƃŵŕàþš ţĥé ṽîéŵéŕ ţö îñšþéçţ éñĝîñé öüţþüţ; ţĥé éẋþļöŕéŕš üšé ţĥé ţŕéé àñđ ƃŕöŵšéŕ ṽîéŵš
Ţĥé þļàýĝŕöüñđ àñđ đöçš šîţéţĥé šàḿé ṽîéŵéŕ öṽéŕ ŴÀŠḾ-þŕöđüçéđ öüţþüţ

Ţĥé ķîţ ĥöļđš ñö çöḿḿîţ þàţĥ, ŵĥîçĥ ķééþš îţ đéþéñđéñçý-ļîĝĥţ ÜÎ éṽéŕý öñé öƒ ţĥöšé çöñšüḿéŕš šĥàŕéš. À ĥöšţ ţĥàţ éđîţš ƃüîļđš ţĥé çöḿḿîţ ƃéšîđé ţĥé ṽîéŵéŕ öñ ţĥé çĥàñĝé šéŕṽîçé. Ķàþî Đéšķţöþ'š đöçüḿéñţ ṽîéŵ đöéš: à çļîçķ öñ à ƃļöçķ îñ ţĥé Þŕéṽîéŵ þüţš îţ îñ ƒöçüš, àñđ Éđîţ öþéñš ţĥé ƃļöçķ'š šöüŕçé, öŕ ţĥé ţŕàñšļàţîöñ ţĥé ṽîéŵ šĥöŵš, îñ àñ éđîţöŕ üñđéŕ ţĥé đöçüḿéñţ. Ţĥé éđîţöŕ ŕéàđš ţĥé ƃļöçķ ţĥŕöüĝĥ ţĥé šéŕṽîçé, đŕàŵš éàçĥ îñļîñé çöđé àš à çĥîþ àñđ à þļüŕàļ à ƒöŕḿ àţ à ţîḿé (à ţŕàñšļàţîöñ'š öŵñ þļüŕàļ, ŵĥîçĥ ţĥé ŕéàđ ļîšţš ƃéšîđé ţĥé ƃļöçķ), àñđ šàṽéš à set_content ŵîţĥ ţĥé ŕéṽîšîöñ îţ ŕéàđ; ţĥé đöçüḿéñţ îš îñšþéçţéđ àĝàîñ öñçé ţĥé çĥàñĝé ļàñđš. À ƃļöçķ ţĥàţ çĥàñĝéđ šîñçé îţ ŵàš ŕéàđ îš ŕéƒüšéđ ŵîţĥ ţĥé ţéẋţ îţ ĥöļđš ñöŵ, ŵĥîçĥ ţĥé éđîţöŕ šĥöŵš ƃéƒöŕé àšķîñĝ ţö àþþļý ţĥé éđîţ öṽéŕ îţ (Š-02).

Éđîţ þàţĥ àñđ ŕöüñđ-ţŕîþ​

Ţĥé éđîţöŕ-šîđé BlockIndex çàŕŕîéš à ƒļàţţéñéđ, šţŕîñĝ-ṽàļüéđ ṽîéŵ; îţš UpdateTarget ḿéţĥöđ ḿüţàţéš ţĥàţ îñ-ḿéḿöŕý þŕöĵéçţîöñ àñđ îš à ţéšţ ĥéļþéŕ, ñöţ à çöḿḿîţ þàţĥ.

À šüŕƒàçé çöḿḿîţš àñ éđîţ àš à çĥàñĝé šéţ (É-09): àñ öþéŕàţîöñ àđđŕéššéđ ţö àñ éđîţîöñ öƒ à ƃļöçķ ({doc, block, edition}), ñàḿîñĝ îñ if_match ţĥé ŕéṽîšîöñ öƒ ţĥàţ éđîţîöñ ţĥé šüŕƒàçé ŕéñđéŕéđ, ŵîţĥ ţĥé ñéŵ çöñţéñţ îñ ţĥé þļàçéĥöļđéŕ ƒöŕḿ à ŕéàđ šĥöŵš. Ţĥé çĥàñĝé šéŕṽîçé àþþļîéš îţ ŵîţĥ change.ApplyBlock, ţĥé öñé ƒüñçţîöñ ţĥàţ çĥàñĝéš à ƃļöçķ'š çöñţéñţ, çĥéçķš ţĥé ŕéšüļţ, àñđ çöḿḿîţš îţ ţĥŕöüĝĥ ţĥé đöçüḿéñţ'š ĥöḿé, ŵĥîçĥ ƒöŕ à þŕöĵéçţ ƒîļé îš ţĥé ƒîļé îţšéļƒ. À ŕéṽîšîöñ ţĥàţ ḿöṽéđ šîñçé ţĥé ŕéàđ ŕéƒüšéš ţĥé çĥàñĝé ŵîţĥ ţĥé éđîţîöñ àš îţ šţàñđš, šö ñö šüŕƒàçé öṽéŕŵŕîţéš à çĥàñĝé îţ đîđ ñöţ šéé.

Change setset_contentif_matcheditApplyBlockcore/changein placeeditReader replaythe homeinject the editeditWriter+ skeletoneditOutputfaithful original

Ţĥé çĥàñĝé šéŕṽîçé ŕéþļàýš ţĥé đöçüḿéñţ ţĥŕöüĝĥ îţš ŕéàđéŕ, àþþļîéš ţĥé çĥàñĝé šéţ ţö ţĥé ƃļöçķš îţ ñàḿéš, àñđ ŕéçöñšţŕüçţš ƃýţé-ƒàîţĥƒüļ öüţþüţ ţĥŕöüĝĥ ţĥé šķéļéţöñ.

Ţĥé ŕöüñđ-ţŕîþ îš à ƒŕàḿéŵöŕķ ḿéçĥàñîšḿ îñđéþéñđéñţ öƒ ŵĥö éđîţéđ: ţĥé đöçüḿéñţ îš ŕéþļàýéđ ţĥŕöüĝĥ îţš ŕéàđéŕ, ţĥé çĥàñĝé îš àþþļîéđ ţö ţĥé éḿîţţéđ ƃļöçķ þàŕţš, àñđ ţĥé ŵŕîţéŕ ŕéçöñšţŕüçţš ţĥé đöçüḿéñţ ƃý þàîŕîñĝ ţĥé ŕéàđéŕ'š šķéļéţöñ éḿîţţéŕ ŵîţĥ ţĥé ŵŕîţéŕ'š šķéļéţöñ çöñšüḿéŕ, îñţéŕļéàṽîñĝ ļîţéŕàļ šķéļéţöñ ƒŕàĝḿéñţš ŵîţĥ ţĥé éđîţéđ ŕüñš ŕàţĥéŕ ţĥàñ ŕé-šéŕîàļîžîñĝ à þàŕšé ţŕéé (É-02). Ţĥé éǫüîṽàļéñţ ƃîļîñĝüàļ ŕöüñđ-ţŕîþ ƒöŕ à ţŕàñšļàţöŕ ĥàñđ-öƒƒ îš ţĥé éẋţŕàçţ àñđ ḿéŕĝé ŵöŕķƒļöŵ (Ḿ-01); àñ àĝéñţ šéñđš ţĥé šàḿé çĥàñĝé šéţ ţĥŕöüĝĥ kapi apply öŕ îţš ḾÇÞ ţööļš (Š-03).

Ŵĥàţ þéŕšîšţš, ŵĥàţ îš ŕéçöñšţŕüçţéđ​

Ŵîţĥîñ ţĥé çöñţéñţ ḿöđéļ àñđ îţš îñţéŕçĥàñĝé ƒàḿîļý (Ḿ-06):

  • Éđîţîöñš àŕé ƒîŕšţ-çļàšš ŕéçöŕđš: ŕüñš þļüš šţàţüš, öŕîĝîñ, šçöŕé àñđ ţĥé éđîţîöñ éàçĥ ŵàš đéŕîṽéđ ƒŕöḿ, ţĥé šöüŕçé üñđéŕ ţĥé éḿþţý éđîţîöñ ķéý ƃéšîđé éàçĥ ţŕàñšļàţîöñ (ĶƂƑ šçĥéḿà 2.0).
  • Àññöţàţîöñš àŕé ţĥé ƃļöçķ-šçöþéđ ţýþéđ çàŕŕîéŕ; ţĥé ƃļöçķ ƒîļé çàŕŕîéš ƃļöçķš, ţĥéîŕ éđîţîöñš, àñđ þŕöþéŕţîéš, àñđ ţĥé ĴŠÖÑ-Ļîñéš šîđéçàŕ çàŕŕîéš àññöţàţîöñ öṽéŕļàýš ŵîţĥ ţĥéîŕ àñçĥöŕ ķîñđš.
  • Ţĥé šķéļéţöñ îš ţĥé ƃîñàŕý šķéļéţöñ šţöŕé (É-02).

Öṽéŕļàýš àŕé ŕéçöñšţŕüçţéđ öñ đéḿàñđ ŕàţĥéŕ ţĥàñ šéŕîàļîžéđ àš þöšîţîöñàļ šţŕüçţüŕé: šéĝḿéñţàţîöñ îš ŕéçöḿþüţéđ ƒŕöḿ ţĥé ŕüñš, àñđ ţéŕḿ, éñţîţý, àñđ çĥéçķ öṽéŕļàýš àŕé ŕé-àţţàçĥéđ ƃý ţĥé ţööļš ţĥàţ þŕöđüçé ţĥéḿ ŵîţĥîñ à šéššîöñ. Ƃéçàüšé öṽéŕļàý šþàñš àñçĥöŕ ţö ŕüñ ŕàñĝéš, à šöüŕçé ŕéŵŕîţé šĥîƒţš öŕ đŕöþš ţĥéḿ ţĥŕöüĝĥ ţĥé ƒŕàḿéŵöŕķ'š öṽéŕļàý ŕéḿàþþîñĝ; ţàŕĝéţš àñđ àññöţàţîöñš àŕé üñàƒƒéçţéđ.

Çöñšéǫüéñçéš​

  • Ţĥé éđîţöŕ ĥàš öñé đöçüḿéñţéđ çöñţŕàçţ šĥàŕéđ ƃý éṽéŕý çöñšüḿéŕ, šö à ñéŵ ŕéñđéŕ ķîñđ, öṽéŕļàý àççéñţ, öŕ îñšþéçţöŕ ŕöŵ îš à çöñţàîñéđ çĥàñĝé àĝàîñšţ à ķñöŵñ šéàḿ.
  • Ŕéñđéŕîñĝ îš à þüŕé þŕöĵéçţîöñ öƒ ţĥé çöñţéñţ ḿöđéļ: ţĥé éđîţöŕ çàññöţ đîṽéŕĝé ƒŕöḿ ŵĥàţ ţĥé éñĝîñé ĥöļđš, ƃéçàüšé îţ çöñšüḿéš ţĥé ŕüñ-þŕéšéŕṽîñĝ ţŕéé ŕàţĥéŕ ţĥàñ à šéþàŕàţé ḿöđéļ.
  • À þŕöĵéçţîöñ ţĥàţ ƒöŕĝéţš à ŕüñ ķîñđ ƒàîļš ţö çöḿþîļé, àñđ à ĥàñđ-ŵŕîţţéñ ļööþ ƒàîļš ļîñţ, šö çöñţéñţ çàññöţ šîļéñţļý đîšàþþéàŕ ƒŕöḿ à ṽîéŵ.
  • Ŕéšöļṽîñĝ ţĥé àççéñţ ƒŕöḿ ţýþé àñđ šþàñ ķééþš öñé öṽéŕļàý ţýþé àƃļé ţö çàŕŕý šéṽéŕàļ ķîñđš öƒ ƒîñđîñĝ ŵîţĥöüţ ţĥé ŕéñđéŕéŕ ƒļàţţéñîñĝ ţĥéḿ îñţö öñé çöļöüŕ.
  • Ļöçàţîñĝ šþàñš ƃý ţéẋţ ŕàţĥéŕ ţĥàñ ƃý ŕàñĝé ḿàķéš ţĥé ḿàŕķš ŕöƃüšţ àçŕöšš ţĥé ŕüñ-ţö-ţéẋţ þŕöĵéçţîöñ, àţ ţĥé þŕîçé öƒ šîļéñţļý đŕöþþîñĝ à šþàñ ŵĥöšé ţéẋţ đöéš ñöţ àþþéàŕ, ŵĥîçĥ îš ţĥé ŕîĝĥţ ţŕàđé ŵĥéñ ţĥé àļţéŕñàţîṽé îš à ḿàŕķ öñ ţĥé ŵŕöñĝ ŵöŕđš.
  • Çöḿḿîţţîñĝ šţàýš öüţšîđé ţĥé ķîţ, îñ ţĥé ĥöšţ, àñđ éṽéŕý ĥöšţ çöḿḿîţš ţĥŕöüĝĥ ţĥé öñé çĥàñĝé šéŕṽîçé, ŵĥîçĥ îš ŵĥàţ ķééþš ţĥé ķîţ đéþéñđéñçý-ļîĝĥţ àñđ éṽéŕý éđîţ ĝöṽéŕñéđ àñđ ŕéçöŕđéđ ţĥé šàḿé ŵàý.
  • Ƒàîţĥƒüļ ŕöüñđ-ţŕîþ îš à þŕöþéŕţý öƒ ŕéàđéŕ, šķéļéţöñ, àñđ ŵŕîţéŕ, ñöţ öƒ àñý éđîţöŕ: àþþļýîñĝ ţĥé çĥàñĝé šéţ ţö ţĥé ŕéàđ ƃļöçķš àñđ ŕéþļàýîñĝ ţĥé đöçüḿéñţ îš ŵĥàţ ŕéçöñšţŕüçţš îţ.
  • Öṽéŕļàýš àŕé éþĥéḿéŕàļ îñ ţĥé ļîṽé þŕéṽîéŵ: à đüŕàƃļé îñţéŕþŕéţàţîöñ ḿüšţ ƃé šţöŕéđ àš àñ àññöţàţîöñ, öŕ ŕé-đéŕîṽéđ ƃý ŕé-ŕüññîñĝ ţĥé ţööļ ţĥàţ þŕöđüçéđ îţ.
  • BlockIndex.UpdateTarget îš à ţéšţ ĥéļþéŕ. À çöḿḿîţ îš à çĥàñĝé šéţ ţĥŕöüĝĥ ţĥé çĥàñĝé šéŕṽîçé.

Öþéñ ǫüéšţîöñš​

  • Öṽéŕļàý þéŕšîšţéñçé. Ţĥé ƒŕàḿéŵöŕķ ĥàš ñö þéŕšîšţéñçé ļàýéŕ ƒöŕ þöšîţîöñàļ öṽéŕļàýš; ţĥé ĴŠÖÑ-Ļîñéš šîđéçàŕ îš đéƒîñéđ ƃüţ ñöţ ýéţ ŕéàđ öŕ ŵŕîţţéñ ƃý ţĥé þŕéṽîéŵ ķîţ. Ŵĥéţĥéŕ ţéŕḿ, éñţîţý, àñđ çĥéçķ öṽéŕļàýš šĥöüļđ þéŕšîšţ ŕàţĥéŕ ţĥàñ àļŵàýš ƃé ŕé-đéŕîṽéđ îš üñšéţţļéđ.
  • BlockIndex ļîƒéçýçļé öñ éđîţ. Ŵĥéţĥéŕ à ƒŕöñţéñđ ĥöļđš îţš öŵñ îñđéẋ àñđ šéñđš đéļţà éđîţš, öŕ ŕé-đéŕîṽéš îţ àƒţéŕ éàçĥ çöḿḿîţ, îš ñöţ þîññéđ đöŵñ.
  • Đîšþļàý-ĥîñţ àñđ çöñţéñţ-ŕéƒéŕéñçé šçöþé. Ŵĥéţĥéŕ ţĥéšé àŕé þöþüļàţéđ ƃý éṽéŕý ŕéàđéŕ àñđ þéŕšîšţéđ ƃý à ĝîṽéñ ĥöšţ šţöŕé îš ƒöŕḿàţ- àñđ àþþļîçàţîöñ-đéþéñđéñţ.
  • Šéĝḿéñţ šþàñ îđš àçŕöšš éđîţš. Ŵĥéţĥéŕ öṽéŕļàý šþàñ îđš šţàý šţàƃļé ŵĥéñ šöüŕçé ţéẋţ çĥàñĝéš, öŕ šĥîƒţ ŵîţĥ ŕéƃàšîñĝ.

Ŕéļàţéđ​