x4js 1.4.33 → 1.4.37
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.
- package/lib/colorpicker.d.ts +1 -0
- package/lib/colorpicker.js +21 -10
- package/lib/component.d.ts +37 -0
- package/lib/component.js +3 -3
- package/lib/formatters.js +2 -1
- package/lib/panel.d.ts +1 -0
- package/lib/panel.js +1 -1
- package/lib/svgcomponent.d.ts +6 -0
- package/lib/svgcomponent.js +31 -1
- package/lib/x4.css +7 -1
- package/package.json +1 -1
- package/src/alpha.jpg +0 -0
- package/src/colorpicker.ts +24 -11
- package/src/component.ts +1 -1
- package/src/formatters.ts +3 -1
- package/src/panel.ts +2 -1
- package/src/svgcomponent.ts +43 -3
- package/src/x4.less +10 -1
package/lib/colorpicker.d.ts
CHANGED
|
@@ -90,6 +90,7 @@ export interface ColorPickerEditorProps extends ColorPickerProps {
|
|
|
90
90
|
label?: string;
|
|
91
91
|
labelWidth?: number;
|
|
92
92
|
cust_colors?: Color[];
|
|
93
|
+
displayValue?: false;
|
|
93
94
|
change: EventCallback<EvChange>;
|
|
94
95
|
}
|
|
95
96
|
export declare class ColorPickerEditor extends HLayout<ColorPickerEditorProps, ColorPickerEventMap> {
|
package/lib/colorpicker.js
CHANGED
|
@@ -516,19 +516,30 @@ class ColorPickerEditor extends layout_1.HLayout {
|
|
|
516
516
|
flex: props.labelWidth < 0 ? -props.labelWidth : undefined,
|
|
517
517
|
width: props.labelWidth >= 0 ? props.labelWidth : undefined,
|
|
518
518
|
}) : null,
|
|
519
|
-
new
|
|
520
|
-
cls: 'value',
|
|
519
|
+
new component_1.Component({
|
|
521
520
|
flex: 1,
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
521
|
+
content: [
|
|
522
|
+
new label_1.Label({
|
|
523
|
+
cls: 'alpha @fit',
|
|
524
|
+
text: ''
|
|
525
|
+
}),
|
|
526
|
+
new label_1.Label({
|
|
527
|
+
cls: 'value @fit',
|
|
528
|
+
text: props.displayValue === false ? '' : color.toHex(),
|
|
529
|
+
style: {
|
|
530
|
+
backgroundColor: color.toString(),
|
|
531
|
+
color: tcolor
|
|
532
|
+
},
|
|
533
|
+
dom_events: {
|
|
534
|
+
click: () => this._showPicker()
|
|
535
|
+
}
|
|
536
|
+
})
|
|
537
|
+
],
|
|
530
538
|
})
|
|
531
539
|
]);
|
|
540
|
+
if (props.displayValue === false) {
|
|
541
|
+
this.setStyleValue('background-image', "url( 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIxMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS45LjAiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pn8+b7YAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRy0tCQRSHv7Qwyh5gRIsWEtZKwwyiNi2UXlAt1CCrjV5fgdrlXiOibdBWKIja9FrUX1DboHUQFEUQ7YLWRW0qbueqoESe4cz55jdzDjNnwBLOKFm93gvZXF4LTvid85EFp+0FK5204sURVXR1JjQepqZ93lNnxluPWav2uX+tOZ7QFahrFB5VVC0vPCk8vZZXTd4R7lDS0bjwmbBbkwsK35l6rMSvJqdK/G2yFg4GwNIu7ExVcayKlbSWFZaX48pmVpXyfcyX2BO5uZDEHvFudIJM4MfJFGMEGGKAEZmH8OCjX1bUyPcW82dZkVxFZpV1NJZJkSaPW9RVqZ6QmBQ9ISPDutn/v33Vk4O+UnW7HxqeDeO9F2zb8FMwjK8jw/g5BusTXOYq+SuHMPwheqGiuQ6gbRPOrypabBcutqDrUY1q0aJkFbckk/B2Ci0RcNxA02KpZ+V9Th4gvCFfdQ17+9An59uWfgF7Hmfv4QYbGAAAAAlwSFlzAAALEwAACxMBAJqcGAAAACdJREFUGJVjbGhoYEAC9fX1yFwmBryAptKM////R+Y3NjbSzW4C0gAo9QeQBmhTIwAAAABJRU5ErkJggg=='");
|
|
542
|
+
}
|
|
532
543
|
this._setTabIndex(props.tabIndex);
|
|
533
544
|
}
|
|
534
545
|
set value(color) {
|
package/lib/component.d.ts
CHANGED
|
@@ -44,6 +44,43 @@ export interface ICaptureInfo {
|
|
|
44
44
|
handler: EventHandler<UIEvent>;
|
|
45
45
|
iframes: NodeListOf<HTMLIFrameElement>;
|
|
46
46
|
}
|
|
47
|
+
/** @ignore properties without 'px' unit */
|
|
48
|
+
export declare const _x4_unitless: {
|
|
49
|
+
animationIterationCount: number;
|
|
50
|
+
borderImageOutset: number;
|
|
51
|
+
borderImageSlice: number;
|
|
52
|
+
borderImageWidth: number;
|
|
53
|
+
boxFlex: number;
|
|
54
|
+
boxFlexGroup: number;
|
|
55
|
+
boxOrdinalGroup: number;
|
|
56
|
+
columnCount: number;
|
|
57
|
+
flex: number;
|
|
58
|
+
flexGrow: number;
|
|
59
|
+
flexPositive: number;
|
|
60
|
+
flexShrink: number;
|
|
61
|
+
flexNegative: number;
|
|
62
|
+
flexOrder: number;
|
|
63
|
+
gridRow: number;
|
|
64
|
+
gridColumn: number;
|
|
65
|
+
fontWeight: number;
|
|
66
|
+
lineClamp: number;
|
|
67
|
+
lineHeight: number;
|
|
68
|
+
opacity: number;
|
|
69
|
+
order: number;
|
|
70
|
+
orphans: number;
|
|
71
|
+
tabSize: number;
|
|
72
|
+
widows: number;
|
|
73
|
+
zIndex: number;
|
|
74
|
+
zoom: number;
|
|
75
|
+
fillOpacity: number;
|
|
76
|
+
floodOpacity: number;
|
|
77
|
+
stopOpacity: number;
|
|
78
|
+
strokeDasharray: number;
|
|
79
|
+
strokeDashoffset: number;
|
|
80
|
+
strokeMiterlimit: number;
|
|
81
|
+
strokeOpacity: number;
|
|
82
|
+
strokeWidth: number;
|
|
83
|
+
};
|
|
47
84
|
/**
|
|
48
85
|
*
|
|
49
86
|
*/
|
package/lib/component.js
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
29
29
|
*/
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
exports.Container = exports.SizerOverlay = exports.EvOverlayResize = exports.Separator = exports.EvSize = exports.Space = exports.Flex = exports.flyWrap = exports.Component = exports.EvFocus = exports.EvDblClick = exports.html = exports.isHtmlString = exports.HtmlString = void 0;
|
|
31
|
+
exports.Container = exports.SizerOverlay = exports.EvOverlayResize = exports.Separator = exports.EvSize = exports.Space = exports.Flex = exports.flyWrap = exports.Component = exports.EvFocus = exports.EvDblClick = exports._x4_unitless = exports.html = exports.isHtmlString = exports.HtmlString = void 0;
|
|
32
32
|
/**
|
|
33
33
|
* @todo
|
|
34
34
|
* create Container class
|
|
@@ -50,7 +50,7 @@ const _x4_el_store = Symbol();
|
|
|
50
50
|
/** @ignore where Component is stored in dom */
|
|
51
51
|
const _x4_el_sym = Symbol();
|
|
52
52
|
/** @ignore properties without 'px' unit */
|
|
53
|
-
|
|
53
|
+
exports._x4_unitless = {
|
|
54
54
|
animationIterationCount: 1, borderImageOutset: 1, borderImageSlice: 1, borderImageWidth: 1, boxFlex: 1, boxFlexGroup: 1,
|
|
55
55
|
boxOrdinalGroup: 1, columnCount: 1, flex: 1, flexGrow: 1, flexPositive: 1, flexShrink: 1, flexNegative: 1, flexOrder: 1,
|
|
56
56
|
gridRow: 1, gridColumn: 1, fontWeight: 1, lineClamp: 1, lineHeight: 1, opacity: 1, order: 1, orphans: 1, tabSize: 1, widows: 1,
|
|
@@ -273,7 +273,7 @@ class Component extends base_component_1.BaseComponent {
|
|
|
273
273
|
if (value === undefined) {
|
|
274
274
|
value = null;
|
|
275
275
|
}
|
|
276
|
-
else if (!_x4_unitless[name] && ((0, tools_1.isNumber)(value) || reNumber.test(value))) {
|
|
276
|
+
else if (!exports._x4_unitless[name] && ((0, tools_1.isNumber)(value) || reNumber.test(value))) {
|
|
277
277
|
value = value + 'px';
|
|
278
278
|
}
|
|
279
279
|
this.m_dom.style[name] = value;
|
package/lib/formatters.js
CHANGED
|
@@ -64,8 +64,9 @@ function money_formatter(input) {
|
|
|
64
64
|
return '';
|
|
65
65
|
}
|
|
66
66
|
let val = (0, tools_1.roundTo)(typeof (input) == 'string' ? parseFloat(input) : input, 2);
|
|
67
|
-
if (val
|
|
67
|
+
if (Object.is(val, -0.00)) {
|
|
68
68
|
val = 0.00;
|
|
69
|
+
}
|
|
69
70
|
let res = moneyFmt.format(val);
|
|
70
71
|
return res;
|
|
71
72
|
}
|
package/lib/panel.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ export interface PanelProps<E extends ContainerEventMap = ContainerEventMap> ext
|
|
|
34
34
|
title: string;
|
|
35
35
|
gadgets?: Component[];
|
|
36
36
|
sens?: 'horizontal' | 'vertical';
|
|
37
|
+
bodyStyle?: any;
|
|
37
38
|
}
|
|
38
39
|
export declare class Panel<T extends PanelProps = PanelProps, E extends ContainerEventMap = ContainerEventMap> extends VLayout<T, E> {
|
|
39
40
|
private m_ui_title;
|
package/lib/panel.js
CHANGED
|
@@ -41,7 +41,7 @@ class Panel extends layout_1.VLayout {
|
|
|
41
41
|
const sens = props?.sens == 'horizontal' ? '@hlayout' : '@vlayout';
|
|
42
42
|
//todo: cannot be called twice do to content overload
|
|
43
43
|
this.m_ui_title = new label_1.Label({ cls: 'title', text: this.m_props.title });
|
|
44
|
-
this.m_ui_body = new component_1.Component({ cls: 'body ' + sens, content: this.m_props.content });
|
|
44
|
+
this.m_ui_body = new component_1.Component({ cls: 'body ' + sens, content: this.m_props.content, style: props.bodyStyle });
|
|
45
45
|
}
|
|
46
46
|
/** @ignore */
|
|
47
47
|
render() {
|
package/lib/svgcomponent.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ import { Component, CProps } from './component';
|
|
|
33
33
|
declare abstract class SVGItem {
|
|
34
34
|
private m_tag;
|
|
35
35
|
private m_attrs;
|
|
36
|
+
private m_style;
|
|
36
37
|
constructor(tag: string);
|
|
37
38
|
/**
|
|
38
39
|
* render the item
|
|
@@ -61,6 +62,7 @@ declare abstract class SVGItem {
|
|
|
61
62
|
* @returns this
|
|
62
63
|
*/
|
|
63
64
|
attr(name: string, value: string): this;
|
|
65
|
+
style(name: string, value: string): this;
|
|
64
66
|
/**
|
|
65
67
|
* add a class
|
|
66
68
|
* @param name class name to add
|
|
@@ -70,6 +72,10 @@ declare abstract class SVGItem {
|
|
|
70
72
|
*
|
|
71
73
|
*/
|
|
72
74
|
renderAttrs(): string;
|
|
75
|
+
/**
|
|
76
|
+
*
|
|
77
|
+
*/
|
|
78
|
+
renderStyle(): string;
|
|
73
79
|
renderContent(): string;
|
|
74
80
|
}
|
|
75
81
|
/**
|
package/lib/svgcomponent.js
CHANGED
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
31
|
exports.SVGComponent = exports.SVGPathBuilder = void 0;
|
|
32
32
|
const component_1 = require("./component");
|
|
33
|
+
const tools_1 = require("./tools");
|
|
34
|
+
const reNumber = /^-?\d+(\.\d+)?$/;
|
|
33
35
|
// degrees to radian
|
|
34
36
|
function d2r(d) {
|
|
35
37
|
return d * Math.PI / 180.0;
|
|
@@ -61,16 +63,18 @@ function clean(a, ...b) {
|
|
|
61
63
|
class SVGItem {
|
|
62
64
|
m_tag;
|
|
63
65
|
m_attrs;
|
|
66
|
+
m_style;
|
|
64
67
|
constructor(tag) {
|
|
65
68
|
this.m_tag = tag;
|
|
66
69
|
this.m_attrs = new Map();
|
|
70
|
+
this.m_style = new Map();
|
|
67
71
|
}
|
|
68
72
|
/**
|
|
69
73
|
* render the item
|
|
70
74
|
* @returns
|
|
71
75
|
*/
|
|
72
76
|
render() {
|
|
73
|
-
return `<${this.m_tag} ${this.renderAttrs()}>${this.renderContent()}</${this.m_tag}>`;
|
|
77
|
+
return `<${this.m_tag} ${this.renderAttrs()} ${this.renderStyle()}>${this.renderContent()}</${this.m_tag}>`;
|
|
74
78
|
}
|
|
75
79
|
/**
|
|
76
80
|
* change the stroke color
|
|
@@ -109,6 +113,16 @@ class SVGItem {
|
|
|
109
113
|
this.m_attrs.set(name, value);
|
|
110
114
|
return this;
|
|
111
115
|
}
|
|
116
|
+
style(name, value) {
|
|
117
|
+
if (value === undefined) {
|
|
118
|
+
value = null;
|
|
119
|
+
}
|
|
120
|
+
else if (!component_1._x4_unitless[name] && ((0, tools_1.isNumber)(value) || reNumber.test(value))) {
|
|
121
|
+
value = value + 'px';
|
|
122
|
+
}
|
|
123
|
+
this.m_style.set(name, value);
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
112
126
|
/**
|
|
113
127
|
* add a class
|
|
114
128
|
* @param name class name to add
|
|
@@ -122,12 +136,28 @@ class SVGItem {
|
|
|
122
136
|
*
|
|
123
137
|
*/
|
|
124
138
|
renderAttrs() {
|
|
139
|
+
if (!this.m_attrs.size) {
|
|
140
|
+
return "";
|
|
141
|
+
}
|
|
125
142
|
let result = '';
|
|
126
143
|
this.m_attrs.forEach((v, k) => {
|
|
127
144
|
result += ` ${k} = "${v}"`;
|
|
128
145
|
});
|
|
129
146
|
return result;
|
|
130
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
*
|
|
150
|
+
*/
|
|
151
|
+
renderStyle() {
|
|
152
|
+
if (!this.m_style.size) {
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
let result = 'style="';
|
|
156
|
+
this.m_style.forEach((v, k) => {
|
|
157
|
+
result += `${k}:${v};`;
|
|
158
|
+
});
|
|
159
|
+
return result + '"';
|
|
160
|
+
}
|
|
131
161
|
renderContent() {
|
|
132
162
|
return '';
|
|
133
163
|
}
|
package/lib/x4.css
CHANGED
|
@@ -1042,6 +1042,8 @@ textarea::selection {
|
|
|
1042
1042
|
.x-message-box .x-form .icon,
|
|
1043
1043
|
.x-important .x-form .icon {
|
|
1044
1044
|
font-size: 48px;
|
|
1045
|
+
width: 48px;
|
|
1046
|
+
height: 48px;
|
|
1045
1047
|
color: var(--x4-error-color);
|
|
1046
1048
|
margin-right: 8px;
|
|
1047
1049
|
}
|
|
@@ -1433,6 +1435,10 @@ textarea::selection {
|
|
|
1433
1435
|
height: 16px;
|
|
1434
1436
|
border: 1px solid rgba(0, 0, 0, 0.4);
|
|
1435
1437
|
}
|
|
1438
|
+
.x-color-picker-editor .alpha {
|
|
1439
|
+
background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QA6RXhpZgAATU0AKgAAAAgAA1EAAAQAAAABAAAAAFEBAAMAAAABAAEAAFEEAAEAAAAB/AAAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAQABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9iK90orwugD//2Q==');
|
|
1440
|
+
padding: 4px;
|
|
1441
|
+
}
|
|
1436
1442
|
.x-color-picker .sel {
|
|
1437
1443
|
position: absolute;
|
|
1438
1444
|
left: 10px;
|
|
@@ -1504,7 +1510,7 @@ textarea::selection {
|
|
|
1504
1510
|
min-height: unset;
|
|
1505
1511
|
}
|
|
1506
1512
|
.x-color-picker .alpha {
|
|
1507
|
-
background-image: url('data:image/
|
|
1513
|
+
background-image: url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QA6RXhpZgAATU0AKgAAAAgAA1EAAAQAAAABAAAAAFEBAAMAAAABAAEAAFEEAAEAAAAB/AAAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAQABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9iK90orwugD//2Q==');
|
|
1508
1514
|
}
|
|
1509
1515
|
.x-color-picker .alpha .marker {
|
|
1510
1516
|
position: absolute;
|
package/package.json
CHANGED
package/src/alpha.jpg
ADDED
|
Binary file
|
package/src/colorpicker.ts
CHANGED
|
@@ -630,6 +630,7 @@ export interface ColorPickerEditorProps extends ColorPickerProps {
|
|
|
630
630
|
label?: string;
|
|
631
631
|
labelWidth?: number;
|
|
632
632
|
cust_colors?: Color[];
|
|
633
|
+
displayValue?: false,
|
|
633
634
|
|
|
634
635
|
change: EventCallback<EvChange>;
|
|
635
636
|
}
|
|
@@ -662,20 +663,32 @@ export class ColorPickerEditor extends HLayout<ColorPickerEditorProps, ColorPick
|
|
|
662
663
|
flex: props.labelWidth < 0 ? -props.labelWidth : undefined,
|
|
663
664
|
width: props.labelWidth >= 0 ? props.labelWidth : undefined,
|
|
664
665
|
}) : null,
|
|
665
|
-
new
|
|
666
|
-
cls: 'value',
|
|
666
|
+
new Component( {
|
|
667
667
|
flex: 1,
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
668
|
+
content: [
|
|
669
|
+
new Label({
|
|
670
|
+
cls: 'alpha @fit',
|
|
671
|
+
text: ''
|
|
672
|
+
}),
|
|
673
|
+
new Label({
|
|
674
|
+
cls: 'value @fit',
|
|
675
|
+
text: props.displayValue===false ? '' : color.toHex(),
|
|
676
|
+
style: {
|
|
677
|
+
backgroundColor: color.toString(),
|
|
678
|
+
color: tcolor
|
|
679
|
+
},
|
|
680
|
+
dom_events: {
|
|
681
|
+
click: () => this._showPicker()
|
|
682
|
+
}
|
|
683
|
+
})
|
|
684
|
+
],
|
|
685
|
+
} )
|
|
677
686
|
]);
|
|
678
687
|
|
|
688
|
+
if( props.displayValue===false ) {
|
|
689
|
+
this.setStyleValue( 'background-image', "url( 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMTAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIxMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS45LjAiCiAgICAgIHN0RXZ0OndoZW49IjIwMjEtMDMtMjJUMTU6NTE6NDkrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pn8+b7YAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRy0tCQRSHv7Qwyh5gRIsWEtZKwwyiNi2UXlAt1CCrjV5fgdrlXiOibdBWKIja9FrUX1DboHUQFEUQ7YLWRW0qbueqoESe4cz55jdzDjNnwBLOKFm93gvZXF4LTvid85EFp+0FK5204sURVXR1JjQepqZ93lNnxluPWav2uX+tOZ7QFahrFB5VVC0vPCk8vZZXTd4R7lDS0bjwmbBbkwsK35l6rMSvJqdK/G2yFg4GwNIu7ExVcayKlbSWFZaX48pmVpXyfcyX2BO5uZDEHvFudIJM4MfJFGMEGGKAEZmH8OCjX1bUyPcW82dZkVxFZpV1NJZJkSaPW9RVqZ6QmBQ9ISPDutn/v33Vk4O+UnW7HxqeDeO9F2zb8FMwjK8jw/g5BusTXOYq+SuHMPwheqGiuQ6gbRPOrypabBcutqDrUY1q0aJkFbckk/B2Ci0RcNxA02KpZ+V9Th4gvCFfdQ17+9An59uWfgF7Hmfv4QYbGAAAAAlwSFlzAAALEwAACxMBAJqcGAAAACdJREFUGJVjbGhoYEAC9fX1yFwmBryAptKM////R+Y3NjbSzW4C0gAo9QeQBmhTIwAAAABJRU5ErkJggg=='" );
|
|
690
|
+
}
|
|
691
|
+
|
|
679
692
|
this._setTabIndex(props.tabIndex);
|
|
680
693
|
}
|
|
681
694
|
|
package/src/component.ts
CHANGED
|
@@ -67,7 +67,7 @@ const _x4_el_store = Symbol();
|
|
|
67
67
|
const _x4_el_sym = Symbol();
|
|
68
68
|
|
|
69
69
|
/** @ignore properties without 'px' unit */
|
|
70
|
-
const _x4_unitless = {
|
|
70
|
+
export const _x4_unitless = {
|
|
71
71
|
animationIterationCount: 1, borderImageOutset: 1, borderImageSlice: 1, borderImageWidth: 1, boxFlex: 1, boxFlexGroup: 1,
|
|
72
72
|
boxOrdinalGroup: 1, columnCount: 1, flex: 1, flexGrow: 1, flexPositive: 1, flexShrink: 1, flexNegative: 1, flexOrder: 1,
|
|
73
73
|
gridRow: 1, gridColumn: 1, fontWeight: 1, lineClamp: 1, lineHeight: 1, opacity: 1, order: 1, orphans: 1, tabSize: 1, widows: 1,
|
package/src/formatters.ts
CHANGED
|
@@ -74,7 +74,9 @@ export function money_formatter(input: any): string {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
let val: number = roundTo(typeof (input) == 'string' ? parseFloat(input) : input, 2);
|
|
77
|
-
if (val
|
|
77
|
+
if (Object.is(val, -0.00)) {
|
|
78
|
+
val = 0.00;
|
|
79
|
+
}
|
|
78
80
|
|
|
79
81
|
let res = moneyFmt.format(val);
|
|
80
82
|
return res;
|
package/src/panel.ts
CHANGED
|
@@ -41,6 +41,7 @@ export interface PanelProps<E extends ContainerEventMap = ContainerEventMap> ex
|
|
|
41
41
|
title: string;
|
|
42
42
|
gadgets?: Component[];
|
|
43
43
|
sens?: 'horizontal' | 'vertical'; // vertical by default
|
|
44
|
+
bodyStyle?: any;
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
export class Panel<T extends PanelProps = PanelProps, E extends ContainerEventMap = ContainerEventMap> extends VLayout<T,E> {
|
|
@@ -54,7 +55,7 @@ export class Panel<T extends PanelProps = PanelProps, E extends ContainerEventMa
|
|
|
54
55
|
|
|
55
56
|
//todo: cannot be called twice do to content overload
|
|
56
57
|
this.m_ui_title = new Label({cls: 'title', text: this.m_props.title});
|
|
57
|
-
this.m_ui_body = new Component( { cls: 'body '+sens, content: this.m_props.content } );
|
|
58
|
+
this.m_ui_body = new Component( { cls: 'body '+sens, content: this.m_props.content, style: props.bodyStyle } );
|
|
58
59
|
}
|
|
59
60
|
|
|
60
61
|
/** @ignore */
|
package/src/svgcomponent.ts
CHANGED
|
@@ -27,8 +27,10 @@
|
|
|
27
27
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
28
28
|
**/
|
|
29
29
|
|
|
30
|
-
import { Component, CProps } from './component'
|
|
30
|
+
import { Component, CProps, _x4_unitless } from './component'
|
|
31
|
+
import { isNumber } from "./tools"
|
|
31
32
|
|
|
33
|
+
const reNumber = /^-?\d+(\.\d+)?$/;
|
|
32
34
|
|
|
33
35
|
// degrees to radian
|
|
34
36
|
function d2r( d: number ): number {
|
|
@@ -69,10 +71,12 @@ function clean( a, ...b ) {
|
|
|
69
71
|
abstract class SVGItem {
|
|
70
72
|
private m_tag: string
|
|
71
73
|
private m_attrs: Map<string,string>;
|
|
74
|
+
private m_style: Map<string,string>;
|
|
72
75
|
|
|
73
76
|
constructor( tag: string ) {
|
|
74
77
|
this.m_tag = tag;
|
|
75
78
|
this.m_attrs = new Map( );
|
|
79
|
+
this.m_style = new Map( );
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
/**
|
|
@@ -80,7 +84,7 @@ abstract class SVGItem {
|
|
|
80
84
|
* @returns
|
|
81
85
|
*/
|
|
82
86
|
render( ) : string {
|
|
83
|
-
return `<${this.m_tag} ${this.renderAttrs()}>${this.renderContent( )}</${this.m_tag}>`;
|
|
87
|
+
return `<${this.m_tag} ${this.renderAttrs()} ${this.renderStyle()}>${this.renderContent( )}</${this.m_tag}>`;
|
|
84
88
|
}
|
|
85
89
|
|
|
86
90
|
/**
|
|
@@ -127,6 +131,19 @@ abstract class SVGItem {
|
|
|
127
131
|
return this;
|
|
128
132
|
}
|
|
129
133
|
|
|
134
|
+
style( name: string, value: string ) : this {
|
|
135
|
+
|
|
136
|
+
if (value === undefined) {
|
|
137
|
+
value = null;
|
|
138
|
+
}
|
|
139
|
+
else if (!_x4_unitless[name] && (isNumber(value) || reNumber.test(value))) {
|
|
140
|
+
value = value + 'px';
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
this.m_style.set( name, value );
|
|
144
|
+
return this;
|
|
145
|
+
}
|
|
146
|
+
|
|
130
147
|
/**
|
|
131
148
|
* add a class
|
|
132
149
|
* @param name class name to add
|
|
@@ -142,13 +159,36 @@ abstract class SVGItem {
|
|
|
142
159
|
*
|
|
143
160
|
*/
|
|
144
161
|
|
|
145
|
-
renderAttrs( ) {
|
|
162
|
+
renderAttrs( ): string {
|
|
163
|
+
if( !this.m_attrs.size ) {
|
|
164
|
+
return "";
|
|
165
|
+
}
|
|
166
|
+
|
|
146
167
|
let result = '';
|
|
147
168
|
this.m_attrs.forEach( (v,k) => {
|
|
148
169
|
result += ` ${k} = "${v}"`
|
|
149
170
|
});
|
|
171
|
+
|
|
150
172
|
return result;
|
|
151
173
|
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
*
|
|
177
|
+
*/
|
|
178
|
+
|
|
179
|
+
renderStyle( ): string {
|
|
180
|
+
|
|
181
|
+
if( !this.m_style.size ) {
|
|
182
|
+
return "";
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
let result = 'style="';
|
|
186
|
+
this.m_style.forEach( (v,k) => {
|
|
187
|
+
result += `${k}:${v};`
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
return result+'"';
|
|
191
|
+
}
|
|
152
192
|
|
|
153
193
|
renderContent( ): string {
|
|
154
194
|
return '';
|
package/src/x4.less
CHANGED
|
@@ -1295,6 +1295,8 @@ textarea {
|
|
|
1295
1295
|
|
|
1296
1296
|
.icon {
|
|
1297
1297
|
font-size: 48px;
|
|
1298
|
+
width: 48px;
|
|
1299
|
+
height: 48px;
|
|
1298
1300
|
color: var( --x4-error-color );
|
|
1299
1301
|
margin-right: 8px;
|
|
1300
1302
|
}
|
|
@@ -1793,6 +1795,13 @@ textarea {
|
|
|
1793
1795
|
}
|
|
1794
1796
|
}
|
|
1795
1797
|
|
|
1798
|
+
.x-color-picker-editor {
|
|
1799
|
+
.alpha {
|
|
1800
|
+
background-image: url( 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QA6RXhpZgAATU0AKgAAAAgAA1EAAAQAAAABAAAAAFEBAAMAAAABAAEAAFEEAAEAAAAB/AAAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAQABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9iK90orwugD//2Q==' );
|
|
1801
|
+
padding: 4px;
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1796
1805
|
.x-color-picker {
|
|
1797
1806
|
|
|
1798
1807
|
.sel {
|
|
@@ -1879,7 +1888,7 @@ textarea {
|
|
|
1879
1888
|
}
|
|
1880
1889
|
|
|
1881
1890
|
.alpha {
|
|
1882
|
-
background-image: url( 'data:image/
|
|
1891
|
+
background-image: url( 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QA6RXhpZgAATU0AKgAAAAgAA1EAAAQAAAABAAAAAFEBAAMAAAABAAEAAFEEAAEAAAAB/AAAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAQABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9iK90orwugD//2Q==' );
|
|
1883
1892
|
|
|
1884
1893
|
.marker {
|
|
1885
1894
|
position: absolute;
|