Skip to content

Releases: neomjs/neo

examples.serverside.gridContainer

25 May 19:08
Compare
Choose a tag to compare
  • 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/

Screenshot 2025-05-25 at 19 50 46 Screenshot 2025-05-25 at 21 27 57

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 and dist/production environments for this specific use case.

Feedback from Google Gemini:
Screenshot 2025-05-25 at 20 46 29
Screenshot 2025-05-25 at 20 46 40

buildScripts/production/appworker: minify all json files inside copied resources folders

23 May 18:24
Compare
Choose a tag to compare

examples.serverside.toolbarItems

23 May 12:55
Compare
Choose a tag to compare
  • 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

Screenshot 2025-05-23 at 14 54 53

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

13 May 12:29
Compare
Choose a tag to compare

housekeeping

12 May 11:13
Compare
Choose a tag to compare
  • 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

05 May 17:50
Compare
Choose a tag to compare
  • 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

03 May 13:05
Compare
Choose a tag to compare
  • 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

15 Apr 10:49
Compare
Choose a tag to compare
  • table.Container: prevent store load events from triggering twice initially. See: #6650
  • grid.VerticalScrollbar: update the height when filtering the store. See: #6649

All changes in 1 commit: 94c534d

housekeeping

14 Apr 10:43
Compare
Choose a tag to compare
  • 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

Screenshot 2025-04-14 at 12 54 38

housekeeping

09 Apr 10:56
Compare
Choose a tag to compare
  • 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