Version Packages - #41
Merged
Merged
Conversation
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@lynxtron-examples/config@0.0.5
Patch Changes
dd950b6: Add the
electron-fiddlesshowcase β the complete Electrondocs/fiddlessetported to Lynxtron (55 fiddles: 37 working, 7 partial, 11 N/A) β and surface it
as a dedicated "Electron Fiddles" section in the Lynxtron GO gallery.
It follows upstream's own model rather than inventing one. Upstream's
docs/fiddlesholds 171 files and zeropackage.jsons: each fiddle is a plainsource folder, and Electron Fiddle synthesizes a throwaway project around it at
run time and spawns Electron on that. Here each fiddle is likewise a loose
source folder laid out at its upstream path, and
scripts/assemble.mjsturns oneinto a complete standalone Lynxtron project, compiles it, and runs it β with the
one extra step Electron does not need, since Lynx cannot load source at run time.
Because every fiddle is its own project, launching one from the gallery spawns
its own Lynxtron process. That isolation is load-bearing: while all fiddles
shared a single main process, the ones touching app-global state
(
Menu.setApplicationMenu,app.dock.setMenu,app.setAsDefaultProtocolClient) silently overwrote each other.kit/(@lynxtron-examples/fiddle-kit): the shared bridge helpers, Lynx UIkit, and runtime access to native classes the ESM shim omits. It ships inside
the showcase as a
file:dependency rather than as an independently releasedworkspace package β a fetched showcase has no monorepo to resolve
workspace:*against, and the kit is private so it cannot be published.config:createShowcaseConfiggainsserver(andentries, for multi-entryshowcases).
lynxtron-go: the gallery bakes in the fiddle catalog and lists all 55 fiddlesgrouped by upstream category with status badges, separate from the
featured-showcase grid.
The fiddles are pared back to the API demonstration itself and share the repo's
Fiddle Dark language with
showcases/counterandshowcases/system-monitorβpalette from
@lynxtron-examples/config/tokens.css, labelled panels, andvar(--font-mono)reserved for data.partialfiddles keep one plain linenaming the gap; the tutorial prose that repeated the port matrix is gone.
Each fiddle also lists the Lynxtron APIs it calls, in monospace, and tapping one
opens its page in the published API reference. The lists are derived from each
fiddle's own source rather than hand-written.
@lynxtron-examples/benchmark@0.0.4
Patch Changes
28c3775: Migrate every showcase from the deprecated per-window
win.on('-lynx-invoke')and
win.on('-lynx-message')listeners to the process-globallynxBridge.handle()and
lynxBridge.on()API.Each showcase's dispatch switch is split into per-method handlers, and
registration is hoisted to
app.whenReady()so windows that reopen (e.g. thegallery's
activatehandler, the benchmark's second window) do notre-register the same handler.
@lynxtron-examples/floating-clock@0.0.4
Patch Changes
28c3775: Migrate every showcase from the deprecated per-window
win.on('-lynx-invoke')and
win.on('-lynx-message')listeners to the process-globallynxBridge.handle()and
lynxBridge.on()API.Each showcase's dispatch switch is split into per-method handlers, and
registration is hoisted to
app.whenReady()so windows that reopen (e.g. thegallery's
activatehandler, the benchmark's second window) do notre-register the same handler.
@lynxtron-examples/system-monitor@0.0.4
Patch Changes
28c3775: Migrate every showcase from the deprecated per-window
win.on('-lynx-invoke')and
win.on('-lynx-message')listeners to the process-globallynxBridge.handle()and
lynxBridge.on()API.Each showcase's dispatch switch is split into per-method handlers, and
registration is hoisted to
app.whenReady()so windows that reopen (e.g. thegallery's
activatehandler, the benchmark's second window) do notre-register the same handler.
@lynxtron-examples/todolist@0.0.5
Patch Changes
28c3775: Migrate every showcase from the deprecated per-window
win.on('-lynx-invoke')and
win.on('-lynx-message')listeners to the process-globallynxBridge.handle()and
lynxBridge.on()API.Each showcase's dispatch switch is split into per-method handlers, and
registration is hoisted to
app.whenReady()so windows that reopen (e.g. thegallery's
activatehandler, the benchmark's second window) do notre-register the same handler.
lynxtron-go@0.1.0
Minor Changes
dd950b6: Add the
electron-fiddlesshowcase β the complete Electrondocs/fiddlessetported to Lynxtron (55 fiddles: 37 working, 7 partial, 11 N/A) β and surface it
as a dedicated "Electron Fiddles" section in the Lynxtron GO gallery.
It follows upstream's own model rather than inventing one. Upstream's
docs/fiddlesholds 171 files and zeropackage.jsons: each fiddle is a plainsource folder, and Electron Fiddle synthesizes a throwaway project around it at
run time and spawns Electron on that. Here each fiddle is likewise a loose
source folder laid out at its upstream path, and
scripts/assemble.mjsturns oneinto a complete standalone Lynxtron project, compiles it, and runs it β with the
one extra step Electron does not need, since Lynx cannot load source at run time.
Because every fiddle is its own project, launching one from the gallery spawns
its own Lynxtron process. That isolation is load-bearing: while all fiddles
shared a single main process, the ones touching app-global state
(
Menu.setApplicationMenu,app.dock.setMenu,app.setAsDefaultProtocolClient) silently overwrote each other.kit/(@lynxtron-examples/fiddle-kit): the shared bridge helpers, Lynx UIkit, and runtime access to native classes the ESM shim omits. It ships inside
the showcase as a
file:dependency rather than as an independently releasedworkspace package β a fetched showcase has no monorepo to resolve
workspace:*against, and the kit is private so it cannot be published.config:createShowcaseConfiggainsserver(andentries, for multi-entryshowcases).
lynxtron-go: the gallery bakes in the fiddle catalog and lists all 55 fiddlesgrouped by upstream category with status badges, separate from the
featured-showcase grid.
The fiddles are pared back to the API demonstration itself and share the repo's
Fiddle Dark language with
showcases/counterandshowcases/system-monitorβpalette from
@lynxtron-examples/config/tokens.css, labelled panels, andvar(--font-mono)reserved for data.partialfiddles keep one plain linenaming the gap; the tutorial prose that repeated the port matrix is gone.
Each fiddle also lists the Lynxtron APIs it calls, in monospace, and tapping one
opens its page in the published API reference. The lists are derived from each
fiddle's own source rather than hand-written.
Patch Changes
dd950b6: Fix the fetch β install β build β run chain for showcases opened from the
gallery, and make gallery thumbnails render again.
Four separate failures, each of which made a fetched showcase unrunnable:
a terminal, so pnpm's "remove node_modules?" confirmation had nothing to
answer it and bailed with
ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY. Theinstall environment now declares itself non-interactive.
~/.lynxtron-gopinnedno
packageManager, so on a machine with pnpm 11 it used that β and pnpm 11no longer reads
pnpm.onlyBuiltDependenciesfrom package.json and turnsignored build scripts into a hard error.
@lynx-js/lynxtron's postinstalldownloads the runtime binary, so the install "succeeded" with no runtime.
The workspace now pins the same pnpm as the monorepo, and declares
onlyBuiltDependenciesin pnpm-workspace.yaml as well (here and in themonorepo) so either pnpm major works.
@lynx-js/lynxtron-builder's postinstall patchesapp-builder-libanddmg-builder, which pnpm does not hoist. The monorepo carries both at itsroot for exactly this reason; the synthesized workspace now does too.
<image>loaderreads the URL itself rather than going through the window's fetch handler, and
does not load https at all β the URL answered 200 and the image still never
appeared. Thumbnails are now staged into the app's own bundle and referenced
as local files, which also leaves a packaged build self-contained.
965289b: Three fixes found while testing the IDE surface.
The palette opened behind the code. Native Scintilla views paint above all
Lynx UI whatever the z-index says, so an overlay does not cover the editor β the
editor covers the overlay. The Fiddle has handled this since it grew dialogs
(App passes
overlayActiveand it detaches its editors); the IDE's singleeditor had no equivalent, so on that surface only the palette's footer showed
below the editor's bottom edge. It now detaches while the palette or gallery is
open, and re-attaches after β re-attach only, since re-pushing the text would
also jump the caret to line 0.
One resolver, and reuse what is already on disk. The Fiddle and the IDE are
two views of one workspace, but each carried its own copy of "local source tree,
else fetch" β two functions meaning the same thing, free to drift, sharing every
failure anyway. They now share one, which also gained the step both were
missing:
fetchwipes and re-extracts its destination on every call, so openinga showcase in the Fiddle and then in the IDE downloaded and installed the same
workspace twice, seconds apart. A materialized workspace is now reused, verified
by reading its manifest so a half-extracted directory from an interrupted fetch
is not mistaken for a usable one.
A failed workspace says so. A window opened to prepare a showcase that never
arrived showed the same "Open Folder" invitation as an idle one; the reason sat
in the Output panel, which is closed by default. The editor area now names the
failure and offers Try again.
09c97f2: Make Cmd+P actually search the workspace, add Cmd+K, and restyle the palette to
the app's own design language with keyboard navigation.
Cmd+P could not really search files. Its pool was the sidebar's model:
openFolderloads the root's direct children, and a directory's contents loadonly when the user expands it. A showcase keeps its source under
src/, whichis collapsed on open β so
App.tsx,index.tsxand everything else real wasinvisible, and only the handful of root-level files were findable. The palette
now indexes the workspace itself, walking it breadth-first a few directories per
tick so the synchronous filesystem bridge does not stall the UI. With a full
index, ordering matters: matches rank name-exact > name-prefix > name-substring
Cmd+K opens the same palette with
>already typed β literally "Cmd+P thentype
>". The mode still derives from the prefix, so backspacing the>fallsback to file search exactly as it does when typed by hand.
It was the last surface still painted in hardcoded VS Code greys (
#252526,#3c3c3c,#007aff), so it read as a different product from the Fiddle homeand the showcase gallery beside it. It now uses the theme variables the rest of
the app uses, which also means it follows the light theme instead of ignoring it.
β/βmove the selection and wrapat the ends,
Home/Endjump,Enteractivates the selected row ratherthan always the first, and
Esccloses. The selection is tracked by row key,not index, so narrowing the query keeps the same row selected instead of
sliding the highlight onto whatever now sits in that position. Hover moves it
too, so pointer and keyboard never disagree.
z-indexat all and could fall behind thegallery overlay (300) and the Fiddle's dialogs (100/200). It is now 400.
z-index alone is not sufficient against the native Scintilla editors, which
paint above all Lynx UI β that was already handled, since App.tsx passes
overlayActivewhile the palette is open so the Fiddle detaches them.description and tags, and the fixed height clipped them.
Accelerators moved to a trailing key chip, the way a real menu shows them.
0136cc3: Quick Open now opens files in the product you are looking at.
The palette was born with the IDE, and its file rows always went to
openFileβ which writes App-level editor tabs that only the IDE renders. Onthe Fiddle surface, which is where the app starts and where the gallery's Open
lands you, picking a file wrote it into state nothing displayed. Cmd+P looked
broken there because half of it was.
The palette stays App-level, since it has to float above both products, but its
rows now come from whichever product is mounted:
selectEditora sidebar click does, so a hidden file is revealed and focusedrather than silently selected.
before.
Cmd+K is unaffected: commands are global and worked on both surfaces already.
Also fixes the row path rendering. It was
fullPath.replace(rootPath + '/', ''), and a string argument toreplacesubstitutes the first matchanywhere β with no workspace root the pattern was just
/, sosrc/app/App.tsxrendered assrcapp/App.tsx.c238495: Make the window show one product at a time, and make the menu reach it.
The app hosts two products β the Fiddle and the IDE workspace β but which one
you saw was the product of two independent booleans, and the menu was
hardwired to one of them. Nothing reconciled the two.
One surface. The visible product was
legacyIdeOpen && route.kind === 'workspace': two flags for one mutually exclusive state, which made"workspace route, flag off" representable. In that state files opened into
tabs nothing rendered, and Quick Open searched a workspace you thought you
had left. It was reachable from the gallery: opening a fiddle while in a
workspace cleared the flag but left the route. The surface is now derived
from the route alone, so the state cannot be expressed.
The menu follows the surface.
fiddle:*events are handled byFiddle.tsx and
ide:*by App.tsx, and only one of the two is mounted. Sincethe Fiddle port rewrote the menu around
fiddle:*, every IDE accelerator hadbeen sending to an unmounted component: Cmd+S, Cmd+W, Cmd+O, Cmd+F,
Cmd+Shift+F and Cmd+J all did nothing in the IDE workspace, and App.tsx's
six matching listeners had no sender at all. The renderer now reports its
surface and the menu is rebuilt for it, so each accelerator reaches the
product that is actually mounted.
Each surface gets its own menu. The workspace surface no longer shows
New Fiddle, Run Fiddle, Stop Fiddle or Publish to Gist β none of which it can
do β and gains Open Folderβ¦, Close Tab, Find, Find in Files and Toggle Panel.
The Fiddle surface is unchanged. Cmd+P and Cmd+K exist on both.
Cmd+O in particular was not merely dead in the IDE: on the Fiddle surface it
feeds the chosen folder to
loadLocalFiddle, which rejects anything that isnot already fiddle-shaped, so File βΈ Open could not open an ordinary project
at all. The workspace surface now routes it to the IDE's own folder dialog.
Updated dependencies [dd950b6]
Updated dependencies [0e3d212]
@lynxtron-examples/electron-fiddles@0.1.0
Minor Changes
dd950b6: Add the
electron-fiddlesshowcase β the complete Electrondocs/fiddlessetported to Lynxtron (55 fiddles: 37 working, 7 partial, 11 N/A) β and surface it
as a dedicated "Electron Fiddles" section in the Lynxtron GO gallery.
It follows upstream's own model rather than inventing one. Upstream's
docs/fiddlesholds 171 files and zeropackage.jsons: each fiddle is a plainsource folder, and Electron Fiddle synthesizes a throwaway project around it at
run time and spawns Electron on that. Here each fiddle is likewise a loose
source folder laid out at its upstream path, and
scripts/assemble.mjsturns oneinto a complete standalone Lynxtron project, compiles it, and runs it β with the
one extra step Electron does not need, since Lynx cannot load source at run time.
Because every fiddle is its own project, launching one from the gallery spawns
its own Lynxtron process. That isolation is load-bearing: while all fiddles
shared a single main process, the ones touching app-global state
(
Menu.setApplicationMenu,app.dock.setMenu,app.setAsDefaultProtocolClient) silently overwrote each other.kit/(@lynxtron-examples/fiddle-kit): the shared bridge helpers, Lynx UIkit, and runtime access to native classes the ESM shim omits. It ships inside
the showcase as a
file:dependency rather than as an independently releasedworkspace package β a fetched showcase has no monorepo to resolve
workspace:*against, and the kit is private so it cannot be published.config:createShowcaseConfiggainsserver(andentries, for multi-entryshowcases).
lynxtron-go: the gallery bakes in the fiddle catalog and lists all 55 fiddlesgrouped by upstream category with status badges, separate from the
featured-showcase grid.
The fiddles are pared back to the API demonstration itself and share the repo's
Fiddle Dark language with
showcases/counterandshowcases/system-monitorβpalette from
@lynxtron-examples/config/tokens.css, labelled panels, andvar(--font-mono)reserved for data.partialfiddles keep one plain linenaming the gap; the tutorial prose that repeated the port matrix is gone.
Each fiddle also lists the Lynxtron APIs it calls, in monospace, and tapping one
opens its page in the published API reference. The lists are derived from each
fiddle's own source rather than hand-written.
Patch Changes
28c3775: Migrate every showcase from the deprecated per-window
win.on('-lynx-invoke')and
win.on('-lynx-message')listeners to the process-globallynxBridge.handle()and
lynxBridge.on()API.Each showcase's dispatch switch is split into per-method handlers, and
registration is hoisted to
app.whenReady()so windows that reopen (e.g. thegallery's
activatehandler, the benchmark's second window) do notre-register the same handler.
@lynxtron-examples/cli@0.0.5
Patch Changes
dd950b6: Fix the fetch β install β build β run chain for showcases opened from the
gallery, and make gallery thumbnails render again.
Four separate failures, each of which made a fetched showcase unrunnable:
a terminal, so pnpm's "remove node_modules?" confirmation had nothing to
answer it and bailed with
ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY. Theinstall environment now declares itself non-interactive.
~/.lynxtron-gopinnedno
packageManager, so on a machine with pnpm 11 it used that β and pnpm 11no longer reads
pnpm.onlyBuiltDependenciesfrom package.json and turnsignored build scripts into a hard error.
@lynx-js/lynxtron's postinstalldownloads the runtime binary, so the install "succeeded" with no runtime.
The workspace now pins the same pnpm as the monorepo, and declares
onlyBuiltDependenciesin pnpm-workspace.yaml as well (here and in themonorepo) so either pnpm major works.
@lynx-js/lynxtron-builder's postinstall patchesapp-builder-libanddmg-builder, which pnpm does not hoist. The monorepo carries both at itsroot for exactly this reason; the synthesized workspace now does too.
<image>loaderreads the URL itself rather than going through the window's fetch handler, and
does not load https at all β the URL answered 200 and the image still never
appeared. Thumbnails are now staged into the app's own bundle and referenced
as local files, which also leaves a packaged build self-contained.
0e3d212: Make a fetched showcase actually install and build.
Two independent faults in the synthesized workspace under
~/.lynxtron-gostopped every remote showcase β in the Fiddle and the IDE alike β before it
could run.
The lockfile was frozen against manifests that move. Every install the CLI
spawns runs with
CI=true, set so pnpm would not stop on an interactive purgeprompt with no TTY. That flag carries a second meaning: pnpm also defaults
frozen-lockfileto true in CI. The workspace's manifests are rewritten fromthe current catalog on every fetch, while its lockfile is a cache left by the
previous one, so any catalog move made the next fetch die with
ERR_PNPM_OUTDATED_LOCKFILEbefore installing anything. That is the inverse ofa repo CI install β there the lockfile is the source of truth and must not
drift, here it is a cache that has to follow the manifests. All three install
sites now pass
--no-frozen-lockfile. It has to be the flag: pnpm does not readnpm_config_frozen_lockfilefrom the environment (checked against pnpm10.15.1).
Two toolchains coexisted in one tree. The root pins
@lynxtron-examples/configtolatest, and a published config carries harddependency ranges frozen at whatever the catalog was when it shipped. With the
catalog ahead of the last publish, pnpm satisfied both: the new toolchain at the
root, a nested old one under config β and the showcase's build resolved its
plugin through config. Old plugin against new React is a crash, not a warning:
The synthesized workspace is ours end to end, so there is one right version of
each toolchain package β the one the showcase was built against. It is now
declared as
pnpm.overrides, which holds however far behind the publishedconfig drifts.
@lynxtron-examples/counter@0.0.2
Patch Changes
28c3775: Migrate every showcase from the deprecated per-window
win.on('-lynx-invoke')and
win.on('-lynx-message')listeners to the process-globallynxBridge.handle()and
lynxBridge.on()API.Each showcase's dispatch switch is split into per-method handlers, and
registration is hoisted to
app.whenReady()so windows that reopen (e.g. thegallery's
activatehandler, the benchmark's second window) do notre-register the same handler.