feat(composer): der Canvas — dieselben Komponenten, dasselbe Stylesheet - #187
Merged
Conversation
Der Canvas soll die Vorschau SEIN, nicht eine haben. Eine Vorschau, die aus einer eigenen Annäherung an das Ergebnis gebaut ist, driftet — und die Drift fällt erst auf, wenn jemand veröffentlicht hat. Zwei Dinge machen das wahr. ER BAUT DEN KOMPOSITIONS-RENDERER NICHT NACH Jener erzeugt Inseln — Platzhalter, die der Browser später mit Vue-Komponenten füllt. Im Canvas liegen die Komponenten schon vor, also rendert er sie direkt: dieselben Komponenten, ein Schritt weniger. Das Insel-Markup nachzubauen gäbe dem Editor einen zweiten Renderpfad, und ein zweiter Pfad ist einer, der driftet. So kann sich zwischen Canvas und Live nur die DATEN unterscheiden — und dieser Unterschied ist gewollt (simulierte Kontextwerte). ER LÄDT DAS ECHTE STYLESHEET, EINGESPERRT @scope statt Selektor-Umschreiben: Das ist das Konstrukt, das die CSS-Arbeitsgruppe für genau diesen Fall gebaut hat, und ein Umschreiber, der einen Selektor falsch behandelt, ist eine Vorschau, die lügt. Zwei Dinge müssen eingesperrt werden. Die Regeln der Fläche würden sonst die Admin-Shell um den Canvas herum gestalten — .cal-header bedeutet auf beiden Seiten etwas. Und die Theme-Tokens sitzen absichtlich auf :root; das ist richtig für eine Fläche, aber im Admin gehört :root der Shell, und ein Workspace-Theme, das die Shell umfärbt, wäre absurd. :root, html und body werden deshalb auf den Scope-Wurzel umgeschrieben: :root IST das Dokumentelement und liegt außerhalb jedes @scope — ein Token-Block dort entkäme, ohne dass jemand es merkt, bis die Shell plötzlich anders aussieht. Ein verwaister Block bleibt im Editor sichtbar und benannt stehen. Das Frontend lässt ihn weg; wer hier gestaltet, muss sehen, dass da etwas ist, das zurückkommt, sobald das Plugin wieder da ist. Zehn Tests für das Scoping, darunter die Fälle, die still schiefgehen: :root nach einer anderen Regel (nicht nur am Anfang), eine Klasse, die zufällig "body" enthält, und ein zweites Stylesheet, das das erste ersetzen statt überlagern muss — sonst hinge das Ergebnis an der Einfügereihenfolge. Noch nicht drin: Drag & Drop, das Konfigurationspanel und das Laden der Surface-Plugin- Bundles in den Admin-Kontext, damit die Block-Registry im Canvas gefüllt ist. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
1. Why is this change necessary?
Der Canvas soll die Vorschau sein, nicht eine haben (§7.6). Eine Vorschau, die aus einer
eigenen Annäherung an das Ergebnis gebaut ist, driftet — und die Drift fällt erst auf, wenn jemand
veröffentlicht hat.
Setzt die beiden verbliebenen Bedingungen aus §7.6 um: Theme-Tokens und Sektions-CSS in den Canvas
scopen.
2. What does this change do, exactly?
Er baut den Kompositions-Renderer nicht nach. Jener erzeugt Inseln — Platzhalter, die der
Browser später mit Vue-Komponenten füllt. Im Canvas liegen die Komponenten schon vor, also rendert
er sie direkt: dieselben Komponenten, ein Schritt weniger.
Das Insel-Markup nachzubauen gäbe dem Editor einen zweiten Renderpfad, und ein zweiter Pfad
ist einer, der driftet. So kann sich zwischen Canvas und Live nur die Daten unterscheiden — und
dieser Unterschied ist gewollt (simulierte Kontextwerte).
Er lädt das echte Stylesheet, eingesperrt.
@scopestatt Selektor-Umschreiben: das Konstrukt,das die CSS-Arbeitsgruppe für genau diesen Fall gebaut hat. Ein Umschreiber, der einen Selektor
falsch behandelt, ist eine Vorschau, die lügt.
Zwei Dinge müssen eingesperrt werden:
.cal-headerbedeutet auf beiden Seiten etwas.:root. Das ist richtig für eine Fläche; im Admin gehört:rootder Shell, und ein Workspace-Theme, das die Shell umfärbt, wäre absurd.:root,htmlundbodywerden deshalb auf die Scope-Wurzel umgeschrieben::rootIST dasDokumentelement und liegt außerhalb jedes
@scope— ein Token-Block dort entkäme, ohne dass esjemand merkt, bis die Shell plötzlich anders aussieht.
Ein verwaister Block bleibt im Editor sichtbar und benannt stehen. Das Frontend lässt ihn weg;
wer hier gestaltet, muss sehen, dass da etwas ist, das zurückkommt, sobald das Plugin wieder da
ist.
3. Describe each step to reproduce the issue or behaviour.
Zehn Tests für das Scoping, darunter die Fälle, die still schiefgehen:
:rootnach einer anderen Regelbodyenthält.page-bodydarf nicht umgeschrieben werdenDas Bundle wurde gebaut und referenziert
CalloraVue— das eine Vue-Global aus #174, ohne das einSurface-Block im Admin-Canvas nicht laufen könnte.
4. Please link to the relevant issues (if any).
Setzt §7.6 Bedingungen 2 und 3 um. Baut auf #174 (ein Vue-Global) und #186 (Admin-API) auf.
Zahlen
13 Dateien. .NET 1980 + 29 Analyzer, Composer-UI 10 Tests — alle grün.
Noch nicht drin
Block-Registry aus
window.calloraSurface; im Admin füllt sie bislang niemand. Das ist dernächste Schritt und der letzte, bevor der Canvas echte Blöcke zeigt.
einem „Interaktiv testen"-Umschalter.