neo.mjs 4.2.5 → 4.2.7
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.
@@ -94,22 +94,20 @@ class MainContainer extends ConfigurationViewport {
|
|
94
94
|
|
95
95
|
createExampleComponent() {
|
96
96
|
return Neo.create({
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
height : 50,
|
98
|
+
iconCls : 'fa fa-home',
|
99
|
+
module : Button,
|
100
|
+
text : 'Hello World',
|
101
|
+
useRippleEffect: true,
|
102
|
+
width : 150,
|
103
|
+
|
104
|
+
handler: (data) => {
|
105
|
+
console.log('button click =>', data.component.id);
|
106
|
+
}
|
100
107
|
|
101
108
|
/*tooltips: [{
|
102
109
|
text: 'Hello World Tooltip'
|
103
|
-
}]
|
104
|
-
|
105
|
-
domListeners: {
|
106
|
-
click: {
|
107
|
-
fn: (data) => {
|
108
|
-
let button = Neo.getComponent(data.target.id);
|
109
|
-
console.log('button click =>', button.id);
|
110
|
-
}
|
111
|
-
}
|
112
|
-
}
|
110
|
+
}]*/
|
113
111
|
});
|
114
112
|
}
|
115
113
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "4.2.
|
3
|
+
"version": "4.2.7",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -43,7 +43,7 @@
|
|
43
43
|
"@fortawesome/fontawesome-free": "^6.2.0",
|
44
44
|
"@material/mwc-button": "^0.27.0",
|
45
45
|
"@material/mwc-textfield": "^0.27.0",
|
46
|
-
"autoprefixer": "^10.4.
|
46
|
+
"autoprefixer": "^10.4.12",
|
47
47
|
"chalk": "^5.0.1",
|
48
48
|
"clean-webpack-plugin": "^4.0.0",
|
49
49
|
"commander": "^9.4.0",
|
@@ -51,14 +51,14 @@
|
|
51
51
|
"envinfo": "^7.8.1",
|
52
52
|
"fs-extra": "^10.1.0",
|
53
53
|
"highlightjs-line-numbers.js": "^2.8.0",
|
54
|
-
"inquirer": "^9.1.
|
54
|
+
"inquirer": "^9.1.2",
|
55
55
|
"neo-jsdoc": "^1.0.1",
|
56
56
|
"neo-jsdoc-x": "^1.0.4",
|
57
57
|
"postcss": "^8.4.16",
|
58
|
-
"sass": "^1.
|
58
|
+
"sass": "^1.55.0",
|
59
59
|
"webpack": "^5.74.0",
|
60
60
|
"webpack-cli": "^4.10.0",
|
61
|
-
"webpack-dev-server": "4.11.
|
61
|
+
"webpack-dev-server": "4.11.1",
|
62
62
|
"webpack-hook-plugin": "^1.0.7",
|
63
63
|
"webpack-node-externals": "^3.0.0"
|
64
64
|
},
|
@@ -1,3 +1,14 @@
|
|
1
|
+
@keyframes ripple {
|
2
|
+
from {
|
3
|
+
opacity : 1;
|
4
|
+
transform: scale(0);
|
5
|
+
}
|
6
|
+
to {
|
7
|
+
opacity : 0;
|
8
|
+
transform: scale(4);
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
1
12
|
.neo-disabled {
|
2
13
|
.neo-button {
|
3
14
|
cursor: default;
|
@@ -16,6 +27,7 @@
|
|
16
27
|
flex-direction : row;
|
17
28
|
justify-content : center;
|
18
29
|
margin : v(button-margin);
|
30
|
+
overflow : hidden;
|
19
31
|
padding : v(button-padding);
|
20
32
|
position : relative;
|
21
33
|
text-decoration : none; // for url buttons => links
|
@@ -54,6 +66,15 @@
|
|
54
66
|
pointer-events: none;
|
55
67
|
}
|
56
68
|
|
69
|
+
.neo-button-ripple {
|
70
|
+
background-color: red;
|
71
|
+
border-radius : 50%;
|
72
|
+
opacity : 0;
|
73
|
+
pointer-events : none;
|
74
|
+
position : absolute;
|
75
|
+
transform : scale(4);
|
76
|
+
}
|
77
|
+
|
57
78
|
.neo-button-text {
|
58
79
|
color : v(button-text-color);
|
59
80
|
font-family : v(button-text-font-family);
|
package/src/button/Base.mjs
CHANGED
@@ -89,13 +89,19 @@ class Base extends Component {
|
|
89
89
|
* @member {String} urlTarget_='_blank'
|
90
90
|
*/
|
91
91
|
urlTarget_: '_blank',
|
92
|
+
/**
|
93
|
+
* True adds an expanding circle on click
|
94
|
+
* @member {Boolean} useRippleEffect_=false
|
95
|
+
*/
|
96
|
+
useRippleEffect_: false,
|
92
97
|
/**
|
93
98
|
* @member {Object} _vdom
|
94
99
|
*/
|
95
100
|
_vdom:
|
96
101
|
{tag: 'button', type: 'button', cn: [
|
97
102
|
{tag: 'span', cls: ['neo-button-glyph']},
|
98
|
-
{tag: 'span', cls: ['neo-button-text']}
|
103
|
+
{tag: 'span', cls: ['neo-button-text']},
|
104
|
+
{tag: 'span', cls: ['neo-button-ripple'], removeDom: true}
|
99
105
|
]}
|
100
106
|
}}
|
101
107
|
|
@@ -108,7 +114,7 @@ class Base extends Component {
|
|
108
114
|
afterSetHandler(value, oldValue) {
|
109
115
|
if (value) {
|
110
116
|
let me = this,
|
111
|
-
domListeners = me.domListeners
|
117
|
+
domListeners = me.domListeners;
|
112
118
|
|
113
119
|
domListeners.push({
|
114
120
|
click: value,
|
@@ -202,7 +208,7 @@ class Base extends Component {
|
|
202
208
|
afterSetRoute(value, oldValue) {
|
203
209
|
if (value) {
|
204
210
|
let me = this,
|
205
|
-
domListeners = me.domListeners
|
211
|
+
domListeners = me.domListeners;
|
206
212
|
|
207
213
|
domListeners.push({
|
208
214
|
click: me.changeRoute,
|
@@ -261,6 +267,26 @@ class Base extends Component {
|
|
261
267
|
me.vdom = vdom;
|
262
268
|
}
|
263
269
|
|
270
|
+
/**
|
271
|
+
* Triggered after the useRippleEffect config got changed
|
272
|
+
* @param {Boolean} value
|
273
|
+
* @param {Boolean} oldValue
|
274
|
+
* @protected
|
275
|
+
*/
|
276
|
+
afterSetUseRippleEffect(value, oldValue) {
|
277
|
+
if (value) {
|
278
|
+
let me = this,
|
279
|
+
domListeners = me.domListeners;
|
280
|
+
|
281
|
+
domListeners.push({
|
282
|
+
click: me.showRipple,
|
283
|
+
scope: me
|
284
|
+
});
|
285
|
+
|
286
|
+
me.domListeners = domListeners;
|
287
|
+
}
|
288
|
+
}
|
289
|
+
|
264
290
|
/**
|
265
291
|
* Triggered after the urlTarget config got changed
|
266
292
|
* @param {String} value
|
@@ -333,6 +359,35 @@ class Base extends Component {
|
|
333
359
|
Neo.Main.setRoute({value: me.route});
|
334
360
|
}
|
335
361
|
}
|
362
|
+
|
363
|
+
/**
|
364
|
+
* @param {Object} data
|
365
|
+
*/
|
366
|
+
async showRipple(data) {
|
367
|
+
let me = this,
|
368
|
+
buttonRect = data.path[0].rect,
|
369
|
+
diameter = Math.max(buttonRect.height, buttonRect.width),
|
370
|
+
radius = diameter / 2,
|
371
|
+
vdom = me.vdom,
|
372
|
+
rippleEl = vdom.cn[2];
|
373
|
+
|
374
|
+
rippleEl.style = Object.assign(rippleEl.style || {}, {
|
375
|
+
animation: 'none',
|
376
|
+
left : `${data.clientX - buttonRect.left - radius}px`,
|
377
|
+
height : `${diameter}px`,
|
378
|
+
top : `${data.clientY - buttonRect.top - radius}px`,
|
379
|
+
width : `${diameter}px`
|
380
|
+
});
|
381
|
+
|
382
|
+
delete rippleEl.removeDom;
|
383
|
+
|
384
|
+
me.vdom = vdom;
|
385
|
+
|
386
|
+
await Neo.timeout(1);
|
387
|
+
|
388
|
+
rippleEl.style.animation = 'ripple 400ms linear';
|
389
|
+
me.vdom = vdom;
|
390
|
+
}
|
336
391
|
}
|
337
392
|
|
338
393
|
Neo.applyClassConfig(Base);
|
package/src/component/Base.mjs
CHANGED
@@ -105,7 +105,7 @@ class Base extends CoreBase {
|
|
105
105
|
* afterSetStayOnHover(value, oldValue) {
|
106
106
|
* if (value) {
|
107
107
|
* let me = this,
|
108
|
-
* domListeners = me.domListeners
|
108
|
+
* domListeners = me.domListeners;
|
109
109
|
*
|
110
110
|
* domListeners.push(
|
111
111
|
* {mouseenter: me.onMouseEnter, scope: me},
|
package/src/worker/App.mjs
CHANGED
@@ -122,7 +122,7 @@ class App extends Base {
|
|
122
122
|
lAppName = appName.toLowerCase(),
|
123
123
|
cssMap = Neo.cssMap,
|
124
124
|
parent = proto?.__proto__,
|
125
|
-
classPath, fileName, mapClassName, ns, themeFolders;
|
125
|
+
classPath, classRoot, fileName, mapClassName, ns, themeFolders;
|
126
126
|
|
127
127
|
if (!cssMap) {
|
128
128
|
me.themeFilesCache.push([appName, proto]);
|
@@ -130,11 +130,11 @@ class App extends Base {
|
|
130
130
|
// we need to modify app related class names
|
131
131
|
if (!className.startsWith('Neo.')) {
|
132
132
|
className = className.split('.');
|
133
|
-
className.shift();
|
133
|
+
classRoot = className.shift().toLowerCase();
|
134
134
|
|
135
135
|
className[0] === 'view' && className.shift();
|
136
136
|
|
137
|
-
mapClassName = `apps.${Neo.apps[appName].appThemeFolder ||
|
137
|
+
mapClassName = `apps.${Neo.apps[appName].appThemeFolder || classRoot}.${className.join('.')}`;
|
138
138
|
className = `apps.${lAppName}.${className.join('.')}`;
|
139
139
|
}
|
140
140
|
|