Releases: neomjs/neo
examples.serverside.gridContainer
- Added a new example to fully load a grid container configuration per remote
- Added
container.Base: loadItems()
with support for all environments
Online Demos:
https://neomjs.com/dist/production/examples/serverside/gridContainer/
https://neomjs.com/examples/serverside/gridContainer/


Most important files:
https://github.com/neomjs/neo/blob/dev/examples/serverside/gridContainer/Viewport.mjs
https://github.com/neomjs/neo/blob/dev/examples/serverside/gridContainer/resources/data/grid-container.json
The JSON file contains:
{
"modules": [
"src/grid/Container.mjs"
],
"items": [/**/]
}
This does get consumed by:
async loadItems(url) {
let response = await fetch(url),
remoteData = await response.json();
if (remoteData.modules?.length > 0) {
await Promise.all(remoteData.modules.map(modulePath => {
// Adjust relative URLs
if (!modulePath.startsWith('http')) {
modulePath = (Neo.config.environment === 'development' ? '../../' : '../../../../') + modulePath
}
return import(/* webpackIgnore: true */ modulePath)
}))
}
return remoteData.items
}
Meaning:
- Devs need to specify related modules which have to be there.
- This works perfectly fine the the development mode
- For
dist/production
, it is impossible to let Webpack bundle the dynamic modules, since it could be anything. - Neo.mjs provides the ability to run multiple environments inside the same app, which comes to the rescue => We can and have to combine the
development
anddist/production
environments for this specific use case.
buildScripts/production/appworker: minify all json files inside copied resources folders
examples.serverside.toolbarItems
- New example, which contains a viewport with an empty toolbar & a button to load the toolbar items from a JSON file
- It demonstrates that we can easily do "server-side" run-time updates
- It demonstrates that JSON reduces network traffic compared to XML
- It demonstrates that fetching neo component trees significantly reduces traffic compared to passing DOM trees
Code:
https://github.com/neomjs/neo/blob/dev/examples/serverside/toolbarItems/Viewport.mjs
https://github.com/neomjs/neo/blob/dev/examples/serverside/toolbarItems/resources/data/toolbar-items.json

Online Demo:
https://neomjs.com/dist/production/examples/serverside/toolbarItems/
Online Demo Dev Mode:
https://neomjs.com/examples/serverside/toolbarItems/
component.Helix: added a ResizeObserver
All changes in 1 commit: 920f392
Online Demo: https://neomjs.com/dist/production/examples/component/multiWindowHelix/index.html
housekeeping
- Bugfix for
container.Base: createItem()
, when adding existing instances which have parents that are not container Based. See: #6704
Portal App: Cube layout regression fix
- While this is clearly an easter egg feature, it was not supposed to break in v9 => fixed now
- The layout run-time changes now have less flickering than before
Demo video: https://youtu.be/3-h-ZjbhAj0
Get driven string based listener resolvings
- Before v9,
controller.Component
did parse views to resolve string based listeners, domListeners, button handlers & references - For more dynamic structures (like a buffered grid cycling components inside component based columns), this static resolving can become expensive
controller.Component
will no longer parse components at all- Instead, the very first time an event actually fires, string based event handlers will get resolved at this point
- Handlers which never get executed won't get touched at all
The new version also removed the vdom engine bypassing shortcut for changing styles
- It made sense before scoped vdom updates were in place (performance)
- Since we have these, the vdom engine needed to become the single source of truth again
- Changing layouts (especially the Cube layout) needs more polishing
All changes in 1 commit: 58e29d4
housekeeping
housekeeping
apps/colors
is now using a buffered grid instead of a table (this also affects the portal app landing page demo)- Since the disease.sh API is down, I switched all related apps & examples to use the static fallback data
All changes in 1 commit: 572b967

housekeeping
- Reduced the priority of container items themes => a theme defined inside a class config now wins
- Polished the component logger to no longer show duplicate items
examples.grid.nestedRecordFields.ViewportController
: updated the theme switching logic to match the controller scope
All changes in 1 commit: ee3ade1