🔀 merge: master, with #653, into the editor family's wiki
📝 docs: a code editor keeps its Tab inside a dialog, and an edit carries the text the document holds (EN + pt-BR)
📝 docs: a dense row's margin reaches its neighbour under a pointer too
In English and Portuguese: since a pointer's target keeps a 24dp floor, a row of the completion list reaches 3dp over the row above it under a pointer, as it reaches 13dp under a finger, until #630.
📝 docs: a completion row is cut by its cells, and a diff's fillers after the last line take a press on it
Copilot's second round on #653, in English and Portuguese: a row longer than the list counts the cells the code's grid gives each character and never cuts inside one, and a press under the code is measured from the last row, so a diff's fillers after the last line land on it.
📝 docs: the completion list's documentation takes the room the rows leave, and turning read-only closes the list
Copilot's first round on #653, in English and Portuguese: the documentation shows as many of its lines as fit on its side or none, a list of providers changed in place hands what it gained, and turning an editor read-only closes its list.
📝 docs: an app's own provider stays beside the built-ins, and a long row is cut alike on both targets (EN + pt-BR)
📝 docs: the code input names its list without aria-expanded (EN + pt-BR)
📝 docs: the code editor shows its completion list, and a press under the code goes to its end (EN + pt-BR)
📝 docs: a provider's own cancellation is its failure, a TimeProvider source is refused, and a disposed source lets go (EN + pt-BR)
📝 docs: a provider's range keeps its distance from the line's end, a long line is read around the caret, and a linked source lets go (EN + pt-BR)
📝 docs: the completion reads the words near the caret, keeps the Tab trap and owns a provider's failure (EN + pt-BR)
📝 docs: the code engine completes as a word is typed, and the cancellation pair crosses (EN + pt-BR)
📝 docs: the code diff view, and a component's own keys, since 0.2.0-preview.59 (EN + pt-BR)
📝 docs: CodeDiffer ships in 0.2.0-preview.59, and its row says so (EN + pt-BR)
0.2.0-preview.58 is cut from main without eQuantic/equantic-ui#386, which
brings CodeDiffer. The section's version mark named .58, and the status
table listed the diff as included with no version, so a reader on .58
would have looked for a type their packages do not have.
WikiVersionMarkTests reads a mark on unreleased work as a promise and
compares it only once a tag contains the symbol, so a wrong .58 would have
been caught at the .59 tag, failing that release's tests.
📝 docs: a region too large to mark word by word stops at the limit (EN + pt-BR)
📝 docs: the code engine compares two texts, and EQ1007 refuses an overload (EN + pt-BR)
CodeDiffer answers the lines and the words that differ, as git --minimal does, and the Diagnostics page gains EQ1007: a method name declared twice in one type, which a JavaScript class cannot hold.
📝 docs: the code editor page catches up with slices 0 to 1c (EN + pt-BR)
The engine lives in eQuantic.UI.Code now, text comes from the platform's own input, the keymap speaks both keyboard traditions, a column maps to its cell, the editor takes a Height and draws only what is in view, find is rebuilt, the app can ask for the keyboard, and the server writes the surface and lets the client redraw what it could not measure. Every new section carries the release it ships in.
📝 docs: the architecture page describes the SDK as it is, and the wiki reads in order
The Architecture Overview is rewritten for the two-target SDK — the layers,
both pipelines, what a build actually writes, Server Actions on the wire,
routing through the context, the real commands — with every example true to
the tree (the static/logic split, the pages/ folder, the manifest, the
[Parameter] attribute and the page/component templates never existed in this
form). The sidebar and the Home navigation put Architecture before the
write-once feature pages so a linear reader meets the map first, and point at
the repository's docs/ index. Six live mentions of the dissolved
eQuantic.UI.Core, the removed Tailwind package, the EnableDefaultCss option that
never existed and the word the project does not use for a component are
corrected; the Image page's diagram names where the optimizer state really
lives and says that no component reads it yet. English and Portuguese in the
same commit.
📝 docs: the visual editor page catches up with the editor
The page was written when there was a preview and an identity mechanism and nothing else, and it has
been saying "no editing from the canvas" through four slices that added exactly that. Nothing compiles
a wiki, so a stale page stays green forever and the site publishes it.
Now documented, EN and pt-BR: the three tiers a selected node is classified into and why they exist
(a row built five hundred times in a foreach has one source site and no separate existence, so
"delete this row" is wrong for it); the inspector, its three honesty rules — compiled before offered,
WorkspaceEdit rather than a file write, never rewriting the form the file is written in — and the one
level it descends so that padding and background are reachable at all; and the three structural
gestures with the fence they live inside.
The distinction the whole design turns on is now stated rather than implied: UNDERSTANDING is not
fenced, only WRITING is. The editor opens code that already exists, and real code splits itself across
helper methods and files.
Both Roadmap pages carried a premise the work disproved on day one — that click-to-select would ride
the V3 source maps eqc already emits. It cannot: the whole Build body is emitted through one call, so
the finest position a map can name is the start of the method. The repo's ROADMAP said so; the wiki
went on telling readers the opposite.
📝 docs: CodeEditor speaks pt-BR
docs: the gutter stays where it is
Replaces the paragraph that said it did not, and states the price: ContentLeft is the code's own
left padding, not gutter + padding. Column zero is where the caret, the selection band and every
decoration start counting, which is why moving its origin was one edit and not three.
docs: the interaction contract, and the marks say which release in their own syntax
Components gains the §10 contract as shipped: hover derived and pointer-only, composite selection
controls as one Tab stop, modal surfaces owning the keyboard and giving it back, fields naming
themselves to assistive tech, and the SDK's own strings behind one seam.
Styling gains the hover derivation and why the media gate wraps the rule and never the hash.
The version marks move to `eq:since <version> symbol="…" src="…"`, so the site can read the release
out of the mark itself and drop a page or a section a chosen version never had.
docs: a hovered link arrives warm, and where a link leaves the reader
ServerIntegration — the navigation payload does not draw, and pointing at a link warms both halves
of the navigation it suggests (172ms → 28ms, no request on the click). Names the two things that
were quietly false: nothing ever marked a link for the prefetch seam, and the warmed answer was
stored under one key and looked up with another.
Components — Link.KeepsPosition, and why chrome with its own scrolling never needed it.
docs: the coordinate space, the navigation payload, and two implicit defaults
CodeEditor — one coordinate space (the viewport lives outside CodeSurface, and why), Standalone and
ViewportWidth, and the caret coming back into view. Names what is still missing: the gutter is not
pinned, and what pinning would cost.
ServerIntegration — what a client navigation now asks the target route for, and why it goes to the
route rather than a side endpoint.
Compiler — the two things C# gives you for free and JavaScript does not: an unset value type is
zero, and a primary-constructor parameter is instance state.
Components — the two reasons InView reported nothing on the web.
Capabilities — GetService<T> only worked on the web from preview.21.
Styling — a vendor prefix shares its atomic class with the standard property.
docs: the editor's grid, and why the caret used to drift
docs: present the product as a single, settled design
The wiki now describes what eQuantic.UI is — never what it used to be. Removed
every legacy banner, migration log, slice label, internal date, baseline
progression and discarded-decision story across 18 pages; changelog pages fold
into their product pages and remain as pointers; the roadmap lists only what
is ahead. Facts were verified against the source tree while rewriting (golden
count, Vulkan backend, theme bridge, Tailwind property names).
📝 docs: a metade web do editor, e os cinco defeitos que só corrê-la revelou
📝 docs: find, brackets, decorações por intervalo e a janela de linhas
📝 docs: CodeEditor, o keymap partilhado e a geometria do caret
📝 docs: CodeBlock, a medição no contexto, e as regras do eqc para modelos puros