neo.mjs 7.14.0 → 7.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='7.14.0'
23
+ * @member {String} version='7.16.0'
24
24
  */
25
- version: '7.14.0'
25
+ version: '7.16.0'
26
26
  }
27
27
 
28
28
  /**
@@ -16,7 +16,7 @@
16
16
  "@type": "Organization",
17
17
  "name": "Neo.mjs"
18
18
  },
19
- "datePublished": "2024-10-12",
19
+ "datePublished": "2024-10-18",
20
20
  "publisher": {
21
21
  "@type": "Organization",
22
22
  "name": "Neo.mjs"
@@ -47,7 +47,7 @@ class Container extends Base {
47
47
  picture : 'torsten.png',
48
48
  profileGitHub : 'https://github.com/Dinkh',
49
49
  profileLinkedIn: 'https://www.linkedin.com/in/dinkheller/',
50
- teamRole : 'Co-Founder & Core Team Member'
50
+ teamRole : 'Contributor'
51
51
  },{
52
52
  module : MemberContainer,
53
53
  location : 'Madison, Wisconsin',
@@ -55,7 +55,7 @@ class Container extends Base {
55
55
  picture : 'Max.jpeg',
56
56
  profileGitHub : 'https://github.com/maxrahder/',
57
57
  profileLinkedIn: 'https://www.linkedin.com/in/maxrahder/',
58
- teamRole : 'Training'
58
+ teamRole : 'Contributor'
59
59
  }],
60
60
  /**
61
61
  * @member {Object} layout={ntype:'vbox',align:'center'}
@@ -111,7 +111,7 @@ class FooterContainer extends Container {
111
111
  }, {
112
112
  module: Component,
113
113
  cls : ['neo-version'],
114
- html : 'v7.14.0'
114
+ html : 'v7.16.0'
115
115
  }]
116
116
  }],
117
117
  /**
@@ -7,18 +7,19 @@ import inquirer from 'inquirer';
7
7
  import os from 'os';
8
8
  import path from 'path';
9
9
 
10
- const __dirname = path.resolve(),
11
- cwd = process.cwd(),
12
- requireJson = path => JSON.parse(fs.readFileSync((path))),
13
- packageJson = requireJson(path.join(__dirname, 'package.json')),
14
- insideNeo = packageJson.name === 'neo.mjs',
15
- neoPath = insideNeo ? './' : './node_modules/neo.mjs/',
16
- addonChoices = fs.readdirSync(path.join(neoPath, '/src/main/addon')).map(item => item.slice(0, -4)),
17
- program = new Command(),
18
- programName = `${packageJson.name} create-app`,
19
- questions = [],
20
- scssFolders = fs.readdirSync(path.join(neoPath, '/resources/scss')),
21
- themeFolders = [];
10
+ const
11
+ __dirname = path.resolve(),
12
+ cwd = process.cwd(),
13
+ requireJson = path => JSON.parse(fs.readFileSync((path))),
14
+ packageJson = requireJson(path.join(__dirname, 'package.json')),
15
+ insideNeo = packageJson.name === 'neo.mjs',
16
+ neoPath = insideNeo ? './' : './node_modules/neo.mjs/',
17
+ addonChoices = fs.readdirSync(path.join(neoPath, '/src/main/addon')).map(item => item.slice(0, -4)),
18
+ program = new Command(),
19
+ programName = `${packageJson.name} create-app`,
20
+ questions = [],
21
+ scssFolders = fs.readdirSync(path.join(neoPath, '/resources/scss')),
22
+ themeFolders = [];
22
23
 
23
24
  scssFolders.forEach(folder => {
24
25
  if (folder.includes('theme')) {
@@ -86,16 +87,6 @@ if (programOpts.info) {
86
87
  });
87
88
  }
88
89
 
89
- if (!programOpts.mainThreadAddons) {
90
- questions.push({
91
- type : 'checkbox',
92
- name : 'mainThreadAddons',
93
- message: 'Please choose your main thread addons:',
94
- choices: addonChoices,
95
- default: ['DragDrop', 'Stylesheet']
96
- });
97
- }
98
-
99
90
  if (!programOpts.useSharedWorkers) {
100
91
  questions.push({
101
92
  type : 'list',
@@ -106,22 +97,12 @@ if (programOpts.info) {
106
97
  });
107
98
  }
108
99
 
109
- if (!programOpts.useServiceWorker) {
110
- questions.push({
111
- type : 'list',
112
- name : 'useServiceWorker',
113
- message: 'Do you want to use a ServiceWorker for caching assets?',
114
- choices: ['yes', 'no'],
115
- default: 'no'
116
- });
117
- }
118
-
119
100
  inquirer.prompt(questions).then(answers => {
120
101
  let appName = programOpts.appName || answers.appName,
121
- mainThreadAddons = programOpts.mainThreadAddons || answers.mainThreadAddons,
102
+ mainThreadAddons = programOpts.mainThreadAddons || ['DragDrop', 'Navigator', 'Stylesheet'],
122
103
  themes = programOpts.themes || answers.themes,
123
104
  useSharedWorkers = programOpts.useSharedWorkers || answers.useSharedWorkers,
124
- useServiceWorker = programOpts.useServiceWorker || answers.useServiceWorker,
105
+ useServiceWorker = programOpts.useServiceWorker || 'no',
125
106
  lAppName = appName.toLowerCase(),
126
107
  appPath = 'apps/' + lAppName + '/',
127
108
  dir = 'apps/' + lAppName,
@@ -177,7 +158,12 @@ if (programOpts.info) {
177
158
  mainPath : `${insideNeo ? './' : '../node_modules/neo.mjs/src/'}Main.mjs`
178
159
  };
179
160
 
180
- if (!(mainThreadAddons.includes('DragDrop') && mainThreadAddons.includes('Stylesheet') && mainThreadAddons.length === 2)) {
161
+ if (!(
162
+ mainThreadAddons.includes('DragDrop') &&
163
+ mainThreadAddons.includes('Navigator') &&
164
+ mainThreadAddons.includes('Stylesheet') &&
165
+ mainThreadAddons.length === 3)
166
+ ) {
181
167
  neoConfig.mainThreadAddons = mainThreadAddons;
182
168
  }
183
169
 
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='7.14.0'
23
+ * @member {String} version='7.16.0'
24
24
  */
25
- version: '7.14.0'
25
+ version: '7.16.0'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "7.14.0",
3
+ "version": "7.16.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -53,14 +53,14 @@
53
53
  "cssnano": "^7.0.6",
54
54
  "envinfo": "^7.14.0",
55
55
  "fs-extra": "^11.2.0",
56
- "highlightjs-line-numbers.js": "^2.8.0",
57
- "inquirer": "^11.1.0",
58
- "marked": "^14.1.2",
56
+ "highlightjs-line-numbers.js": "^2.9.0",
57
+ "inquirer": "^12.0.0",
58
+ "marked": "^14.1.3",
59
59
  "monaco-editor": "0.50.0",
60
60
  "neo-jsdoc": "1.0.1",
61
61
  "neo-jsdoc-x": "1.0.5",
62
62
  "postcss": "^8.4.47",
63
- "sass": "^1.79.5",
63
+ "sass": "^1.80.2",
64
64
  "siesta-lite": "5.5.2",
65
65
  "url": "^0.11.4",
66
66
  "webpack": "^5.95.0",
@@ -1,4 +1,4 @@
1
- @import "global/all";
1
+ @use "global/all";
2
2
 
3
3
  html, .neo-body-viewport {
4
4
  align-items : center;
@@ -8,6 +8,14 @@
8
8
  background-image: url("data:image/svg+xml,%3Csvg width='8' height='8' viewBox='0 0 6 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23504e54' fill-opacity='0.18' fill-rule='evenodd'%3E%3Cpath d='M5 0h1L0 6V5zM6 5v1H5z'/%3E%3C/g%3E%3C/svg%3E");
9
9
  padding : 3em;
10
10
 
11
+ .button-group {
12
+ background-color: transparent;
13
+ display : flex;
14
+ flex-direction : row-reverse;
15
+ gap : 8px;
16
+ margin : 2rem 0;
17
+ }
18
+
11
19
  .logo-container {
12
20
  align-items : center;
13
21
  background-color: transparent;
@@ -19,11 +27,8 @@
19
27
  min-width : 240px;
20
28
  }
21
29
 
22
- .button-group {
23
- display : flex;
24
- flex-direction: row-reverse;
25
- gap : 8px;
26
- margin : 2rem 0;
30
+ .neo-github {
31
+ background-color: #fff;
27
32
  }
28
33
 
29
34
  .neo-h1 {
@@ -1 +1 @@
1
- @import "MouseCursor";
1
+ @use "MouseCursor";
@@ -1,4 +1,4 @@
1
- @import "../../../resources/scss/theme-neo-light/design-tokens/_all.scss";
1
+ @use "../../../resources/scss/theme-neo-light/design-tokens/_all.scss";
2
2
 
3
3
  :root .neo-theme-neo-light {
4
4
  --neo-background-color: #fafafa;
@@ -1,4 +1,4 @@
1
1
  // the import order matters
2
- @import "Core";
3
- @import "Semantic";
4
- @import "Component";
2
+ @use "Core";
3
+ @use "Semantic";
4
+ @use "Component";
@@ -262,12 +262,12 @@ const DefaultConfig = {
262
262
  useVdomWorker: true,
263
263
  /**
264
264
  * buildScripts/injectPackageVersion.mjs will update this value
265
- * @default '7.14.0'
265
+ * @default '7.16.0'
266
266
  * @memberOf! module:Neo
267
267
  * @name config.version
268
268
  * @type String
269
269
  */
270
- version: '7.14.0'
270
+ version: '7.16.0'
271
271
  };
272
272
 
273
273
  Object.assign(DefaultConfig, {
@@ -122,16 +122,28 @@ class Base extends Component {
122
122
  * @member {Object} _vdom
123
123
  */
124
124
  _vdom:
125
- {tag: 'button', type: 'button', cn: [
126
- {tag: 'span', cls: ['neo-button-glyph']},
127
- {tag: 'span', cls: ['neo-button-text']},
128
- {cls: ['neo-button-badge']},
129
- {cls: ['neo-button-ripple-wrapper'], cn: [
130
- {cls: ['neo-button-ripple']}
131
- ]}
132
- ]}
125
+ {tag: 'button', type: 'button', cn: [
126
+ {tag: 'span', cls: ['neo-button-glyph']},
127
+ {tag: 'span', cls: ['neo-button-text']},
128
+ {cls: ['neo-button-badge']},
129
+ {cls: ['neo-button-ripple-wrapper'], cn: [
130
+ {cls: ['neo-button-ripple']}
131
+ ]}
132
+ ]}
133
133
  }
134
134
 
135
+ /**
136
+ * @member {Object} rippleWrapper
137
+ */
138
+ get badgeNode() {
139
+ return this.getVdomRoot().cn[2]
140
+ }
141
+ /**
142
+ * @member {Object} rippleWrapper
143
+ */
144
+ get iconNode() {
145
+ return this.getVdomRoot().cn[0]
146
+ }
135
147
  /**
136
148
  * Time in ms for the ripple effect when clicking on the button.
137
149
  * Only active if useRippleEffect is set to true.
@@ -144,6 +156,12 @@ class Base extends Component {
144
156
  * @private
145
157
  */
146
158
  #rippleTimeoutId = null
159
+ /**
160
+ * @member {Object} rippleWrapper
161
+ */
162
+ get rippleWrapper() {
163
+ return this.getVdomRoot().cn[3]
164
+ }
147
165
 
148
166
  /**
149
167
  * @param {Object} config
@@ -166,9 +184,9 @@ class Base extends Component {
166
184
  * @protected
167
185
  */
168
186
  afterSetBadgePosition(value, oldValue) {
169
- let me = this,
170
- badgeNode = me.getBadgeNode(),
171
- cls = badgeNode.cls || [];
187
+ let me = this,
188
+ {badgeNode} = me,
189
+ cls = badgeNode.cls || [];
172
190
 
173
191
  NeoArray.remove(cls, 'neo-' + oldValue);
174
192
  NeoArray.add(cls, 'neo-' + value);
@@ -185,7 +203,7 @@ class Base extends Component {
185
203
  * @protected
186
204
  */
187
205
  afterSetBadgeText(value, oldValue) {
188
- let badgeNode = this.getBadgeNode();
206
+ let {badgeNode} = this;
189
207
 
190
208
  badgeNode.html = value;
191
209
  badgeNode.removeDom = !Boolean(value);
@@ -200,7 +218,7 @@ class Base extends Component {
200
218
  * @protected
201
219
  */
202
220
  afterSetIconCls(value, oldValue) {
203
- let iconNode = this.getIconNode();
221
+ let {iconNode} = this;
204
222
 
205
223
  NeoArray.remove(iconNode.cls, oldValue);
206
224
  NeoArray.add( iconNode.cls, value);
@@ -216,7 +234,7 @@ class Base extends Component {
216
234
  * @protected
217
235
  */
218
236
  afterSetIconColor(value, oldValue) {
219
- let iconNode = this.getIconNode();
237
+ let {iconNode} = this;
220
238
 
221
239
  if (!iconNode.style) {
222
240
  iconNode.style = {};
@@ -261,17 +279,17 @@ class Base extends Component {
261
279
  model = me.getModel(),
262
280
  {appName, theme, windowId} = me,
263
281
 
264
- config = Neo.merge({
265
- module : module.default,
266
- align : {edgeAlign : 't0-b0', target: me.id},
267
- appName,
268
- displayField : 'text',
269
- floating : true,
270
- hidden : true,
271
- parentComponent: me,
272
- theme,
273
- windowId
274
- }, menuConfig);
282
+ config = Neo.merge({
283
+ module : module.default,
284
+ align : {edgeAlign: 't0-b0', target: me.id},
285
+ appName,
286
+ displayField : 'text',
287
+ floating : true,
288
+ hidden : true,
289
+ parentComponent: me,
290
+ theme,
291
+ windowId
292
+ }, menuConfig);
275
293
 
276
294
  if (items) {
277
295
  config.items = items
@@ -366,7 +384,7 @@ class Base extends Component {
366
384
  */
367
385
  afterSetUseRippleEffect(value, oldValue) {
368
386
  // setting the config to false ends running ripple animations
369
- this.getRippleWrapper().removeDom = true;
387
+ this.rippleWrapper.removeDom = true;
370
388
  this.update()
371
389
  }
372
390
 
@@ -464,36 +482,11 @@ class Base extends Component {
464
482
  }
465
483
 
466
484
  /**
467
- * @param {Boolean} updateParentVdom
468
- * @param {Boolean} silent
485
+ * @param args
469
486
  */
470
- destroy(updateParentVdom=false, silent=false) {
471
- this.menuList && this.menuList.destroy(true, false);
472
- super.destroy(updateParentVdom, silent)
473
- }
474
-
475
- /**
476
- * Convenience shortcut
477
- * @returns {Object}
478
- */
479
- getBadgeNode() {
480
- return this.getVdomRoot().cn[2]
481
- }
482
-
483
- /**
484
- * Convenience shortcut
485
- * @returns {Object}
486
- */
487
- getIconNode() {
488
- return this.getVdomRoot().cn[0]
489
- }
490
-
491
- /**
492
- * Convenience shortcut
493
- * @returns {Object}
494
- */
495
- getRippleWrapper() {
496
- return this.getVdomRoot().cn[3]
487
+ destroy(...args) {
488
+ this.menuList?.destroy(true, false);
489
+ super.destroy(...args)
497
490
  }
498
491
 
499
492
  /**
@@ -518,7 +511,7 @@ class Base extends Component {
518
511
  diameter = Math.max(buttonRect.height, buttonRect.width),
519
512
  radius = diameter / 2,
520
513
  rippleEffectDuration = me.rippleEffectDuration,
521
- rippleWrapper = me.getRippleWrapper(),
514
+ {rippleWrapper} = me,
522
515
  rippleEl = rippleWrapper.cn[0],
523
516
  rippleTimeoutId;
524
517
 
@@ -358,6 +358,11 @@ class MonacoEditor extends Base {
358
358
  scrollBeyondLastLine: me.scrollBeyondLastLine,
359
359
  theme : me.editorTheme,
360
360
  value : me.stringifyValue(me.value),
361
+
362
+ scrollbar: {
363
+ alwaysConsumeMouseWheel: false // enables page scrolling when over-scrolling the content box
364
+ },
365
+
361
366
  ...me.options
362
367
  }
363
368
  }
package/src/menu/List.mjs CHANGED
@@ -45,7 +45,7 @@ class List extends BaseList {
45
45
  items_: null,
46
46
  /**
47
47
  * Internal flag.
48
- * Sub-menus will bubble of focus changes to the top level.
48
+ * Sub-menus will bubble focus changes to the top level.
49
49
  * @member {Boolean} menuFocus_=false
50
50
  * @protected
51
51
  */
@@ -43,11 +43,7 @@ class ListModel extends BaseListModel {
43
43
  * @param {Object} data
44
44
  */
45
45
  onKeyDownRight(data) {
46
- let activeSubMenu = this.view.activeSubMenu;
47
-
48
- if (activeSubMenu) {
49
- activeSubMenu.selectionModel.selectAt(0)
50
- }
46
+ this.view.activeSubMenu?.selectionModel.selectAt(0)
51
47
  }
52
48
  }
53
49