x4js 2.2.41 → 2.2.42
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/package.json +1 -1
- package/src/components/assets/icons.ts +10 -0
- package/src/components/checkbox/checkbox.ts +3 -8
- package/src/components/gridview/gridview.ts +3 -5
- package/src/components/listbox/listbox.ts +6 -0
- package/src/components/radio/radio.ts +3 -2
- package/src/components/treeview/treeview.ts +10 -4
- package/src/components/treeview/chevron-down-light.svg +0 -1
package/package.json
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
const x4icons = {
|
|
3
|
+
check: `<svg viewBox="0 0 10 7" fill="none" aria-hidden="true"><path d="M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg>`,
|
|
4
|
+
empty: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path opacity=".4" d="M32 96l0 200.6 21.7-54.3C65.9 211.9 95.3 192 128 192l320 0 0-32c0-17.7-14.3-32-32-32l-117.5 0c-25.5 0-49.9-10.1-67.9-28.1L204.1 73.4c-6-6-14.1-9.4-22.6-9.4L64 64C46.3 64 32 78.3 32 96zM49.1 426.1c-2 4.9-1.4 10.5 1.6 14.9s7.9 7 13.2 7l320 0 80 0c6.5 0 12.4-4 14.9-10.1l64-160c2-4.9 1.4-10.5-1.6-14.9s-7.9-7-13.2-7l-400 0c-6.5 0-12.4 4-14.9 10.1l-64 160z"/><path d="M448 160l0 32 32 0 0-32c0-35.3-28.7-64-64-64L298.5 96c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0 80 0c19.6 0 37.3-11.9 44.6-30.2l64-160c5.9-14.8 4.1-31.5-4.8-44.7S543.9 224 528 224l-400 0c-19.6 0-37.3 11.9-44.6 30.2L32 382.8 32 96c0-17.7 14.3-32 32-32l117.5 0c8.5 0 16.6 3.4 22.6 9.4l22.6-22.6L204.1 73.4l26.5 26.5c18 18 42.4 28.1 67.9 28.1L416 128c17.7 0 32 14.3 32 32zM384 448L64 448c-5.3 0-10.3-2.6-13.2-7s-3.6-10-1.6-14.9l64-160c2.4-6.1 8.3-10.1 14.9-10.1l400 0c5.3 0 10.3 2.6 13.2 7s3.6 10 1.6 14.9l-64 160C476.4 444 470.5 448 464 448l-80 0z"/></svg>`,
|
|
5
|
+
radio: `<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 5 5" aria-hidden="true"><circle class="fa-primary" cx="2.5" cy="2.5" r="2.5" ></circle><circle class="fa-secondary" cx="2.5" cy="2.5" r="1.25"></circle></svg>`,
|
|
6
|
+
chevron: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor"><!--!Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.--><path d="M267.3 395.3c-6.2 6.2-16.4 6.2-22.6 0l-192-192c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L256 361.4 436.7 180.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-192 192z"/></svg>`,
|
|
7
|
+
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default x4icons;
|
|
@@ -3,12 +3,11 @@ import { EventCallback } from '../../core/core_events';
|
|
|
3
3
|
|
|
4
4
|
import { Input } from '../input/input';
|
|
5
5
|
import { Label } from '../label/label';
|
|
6
|
+
import { class_ns } from '../../core/core_tools';
|
|
6
7
|
|
|
7
|
-
import
|
|
8
|
+
import icons from "../assets/icons";
|
|
8
9
|
|
|
9
10
|
import "./checkbox.module.scss"
|
|
10
|
-
import icon from "./check.svg";
|
|
11
|
-
import { class_ns } from '../../core/core_tools';
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* Checkbox events
|
|
@@ -76,11 +75,7 @@ export class Checkbox extends Component<CheckboxProps,CheckBoxEvents> {
|
|
|
76
75
|
} ),
|
|
77
76
|
])
|
|
78
77
|
|
|
79
|
-
|
|
80
|
-
const svg = `<svg viewBox="0 0 10 7" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd">
|
|
81
|
-
</path></svg>`
|
|
82
|
-
|
|
83
|
-
this.query<Label>( '.inner' ).dom.insertAdjacentHTML( "beforeend", svg );
|
|
78
|
+
this.query<Label>( '.inner' ).dom.insertAdjacentHTML( "beforeend", icons.check );
|
|
84
79
|
|
|
85
80
|
/*
|
|
86
81
|
svgLoader.load( icon ).then( svg => {
|
|
@@ -27,12 +27,10 @@ import { Box } from '../boxes/boxes';
|
|
|
27
27
|
import { CSizer } from '../sizers/sizer'
|
|
28
28
|
import { Viewport } from '../viewport/viewport';
|
|
29
29
|
import { Label, SimpleText } from '../label/label';
|
|
30
|
+
import icons from "../assets/icons"
|
|
30
31
|
|
|
31
32
|
import { _tr } from '../../core/core_i18n';
|
|
32
33
|
|
|
33
|
-
const check_icon = `<svg viewBox="0 0 10 7" fill="none" aria-hidden="true"><path d="M4 4.586L1.707 2.293A1 1 0 1 0 .293 3.707l3 3a.997.997 0 0 0 1.414 0l5-5A1 1 0 1 0 8.293.293L4 4.586z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg>`;
|
|
34
|
-
const empty_icon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path opacity=".4" d="M32 96l0 200.6 21.7-54.3C65.9 211.9 95.3 192 128 192l320 0 0-32c0-17.7-14.3-32-32-32l-117.5 0c-25.5 0-49.9-10.1-67.9-28.1L204.1 73.4c-6-6-14.1-9.4-22.6-9.4L64 64C46.3 64 32 78.3 32 96zM49.1 426.1c-2 4.9-1.4 10.5 1.6 14.9s7.9 7 13.2 7l320 0 80 0c6.5 0 12.4-4 14.9-10.1l64-160c2-4.9 1.4-10.5-1.6-14.9s-7.9-7-13.2-7l-400 0c-6.5 0-12.4 4-14.9 10.1l-64 160z"/><path d="M448 160l0 32 32 0 0-32c0-35.3-28.7-64-64-64L298.5 96c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0 80 0c19.6 0 37.3-11.9 44.6-30.2l64-160c5.9-14.8 4.1-31.5-4.8-44.7S543.9 224 528 224l-400 0c-19.6 0-37.3 11.9-44.6 30.2L32 382.8 32 96c0-17.7 14.3-32 32-32l117.5 0c8.5 0 16.6 3.4 22.6 9.4l22.6-22.6L204.1 73.4l26.5 26.5c18 18 42.4 28.1 67.9 28.1L416 128c17.7 0 32 14.3 32 32zM384 448L64 448c-5.3 0-10.3-2.6-13.2-7s-3.6-10-1.6-14.9l64-160c2.4-6.1 8.3-10.1 14.9-10.1l400 0c5.3 0 10.3 2.6 13.2 7s3.6 10 1.6 14.9l-64 160C476.4 444 470.5 448 464 448l-80 0z"/></svg>`;
|
|
35
|
-
|
|
36
34
|
import "./gridview.module.scss"
|
|
37
35
|
|
|
38
36
|
export type CellRenderer = (rec: DataRecord) => Component;
|
|
@@ -677,7 +675,7 @@ export class Gridview<P extends GridviewProps = GridviewProps, E extends Gridvie
|
|
|
677
675
|
switch (type) {
|
|
678
676
|
case "checkbox": {
|
|
679
677
|
if (data) {
|
|
680
|
-
return new Icon({ cls: "cell-check" + cls, iconId:
|
|
678
|
+
return new Icon({ cls: "cell-check" + cls, iconId: icons.check });
|
|
681
679
|
}
|
|
682
680
|
|
|
683
681
|
return undefined;
|
|
@@ -1141,7 +1139,7 @@ export class Gridview<P extends GridviewProps = GridviewProps, E extends Gridvie
|
|
|
1141
1139
|
|
|
1142
1140
|
// empty ?
|
|
1143
1141
|
if( rowc==0 ) {
|
|
1144
|
-
this._body.setContent( new Label( { cls: "empty vertical", icon:
|
|
1142
|
+
this._body.setContent( new Label( { cls: "empty vertical", icon: icons.empty, text: this.props.emptyMsg ?? _tr.global.empty_list } ) );
|
|
1145
1143
|
return;
|
|
1146
1144
|
}
|
|
1147
1145
|
|
|
@@ -24,8 +24,12 @@ import { Header } from '../header/header';
|
|
|
24
24
|
import { HBox } from '../boxes/boxes';
|
|
25
25
|
import { Label, SimpleText } from '../label/label';
|
|
26
26
|
|
|
27
|
+
import { _tr } from '../../x4.js';
|
|
28
|
+
import icons from '../assets/icons'
|
|
29
|
+
|
|
27
30
|
import "./listbox.module.scss"
|
|
28
31
|
|
|
32
|
+
|
|
29
33
|
export type ListboxID = number | string;
|
|
30
34
|
|
|
31
35
|
export interface ListItem {
|
|
@@ -63,6 +67,7 @@ export interface ListboxProps extends Omit<ComponentProps,'content'> {
|
|
|
63
67
|
footer?: Component,
|
|
64
68
|
checkable?: true,
|
|
65
69
|
multisel?: true,
|
|
70
|
+
emptyMsg?: string,
|
|
66
71
|
|
|
67
72
|
dblClick?: EventCallback<EvDblClick>;
|
|
68
73
|
selectionChange?: EventCallback<EvSelectionChange>;
|
|
@@ -450,6 +455,7 @@ export class Listbox extends Component<ListboxProps,ListboxEvents> {
|
|
|
450
455
|
}
|
|
451
456
|
else {
|
|
452
457
|
update_sel = oldSel.length>0;
|
|
458
|
+
this._view.setContent( new Label( { cls: "empty vertical", icon: icons.empty, text: this.props.emptyMsg ?? _tr.global.empty_list } ) );
|
|
453
459
|
}
|
|
454
460
|
|
|
455
461
|
if( update_sel ) {
|
|
@@ -22,6 +22,8 @@ import { Label } from '../label/label';
|
|
|
22
22
|
import { Input } from '../input/input'
|
|
23
23
|
import { HBox } from '../boxes/boxes';
|
|
24
24
|
|
|
25
|
+
import icons from "../assets/icons"
|
|
26
|
+
|
|
25
27
|
import "./radio.module.scss";
|
|
26
28
|
|
|
27
29
|
/**
|
|
@@ -84,8 +86,7 @@ export class Radio extends Component<RadioProps,RadioEvents> {
|
|
|
84
86
|
} ),
|
|
85
87
|
])
|
|
86
88
|
|
|
87
|
-
|
|
88
|
-
this._check.dom.insertAdjacentHTML( "beforeend", svg );
|
|
89
|
+
this._check.dom.insertAdjacentHTML( "beforeend", icons.radio );
|
|
89
90
|
|
|
90
91
|
//svgLoader.load( icon ).then( svg => {
|
|
91
92
|
// this._check.dom.insertAdjacentHTML( "beforeend", svg );
|
|
@@ -24,8 +24,10 @@ import { ListboxID, ListItem } from '../listbox/listbox';
|
|
|
24
24
|
import { Box, BoxProps, HBox, VBox } from '../boxes/boxes';
|
|
25
25
|
import { Icon } from '../icon/icon';
|
|
26
26
|
|
|
27
|
+
import { _tr } from '../../x4.js';
|
|
28
|
+
import icons from '../assets/icons'
|
|
29
|
+
|
|
27
30
|
import "./treeview.module.scss";
|
|
28
|
-
import folder_icon from "./chevron-down-light.svg"
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
//import folder_closed from "./folder-minus-light.svg"
|
|
@@ -53,6 +55,7 @@ export interface TreeItem extends ListItem {
|
|
|
53
55
|
interface TreeviewProps extends Omit<ComponentProps,"content"> {
|
|
54
56
|
items: TreeItem[];
|
|
55
57
|
footer?: Component;
|
|
58
|
+
emptyMsg?: string;
|
|
56
59
|
selectionChange?: EventCallback<EvSelectionChange>;
|
|
57
60
|
dblClick?: EventCallback<EvDblClick>;
|
|
58
61
|
click?: EventCallback<EvClick>;
|
|
@@ -83,7 +86,7 @@ class CTreeViewItem extends Box {
|
|
|
83
86
|
|
|
84
87
|
if( item ) {
|
|
85
88
|
this._label = new HBox( {cls:"label item", content: [
|
|
86
|
-
this._icon = new Icon( { cls: 'arrow', iconId: item.children ?
|
|
89
|
+
this._icon = new Icon( { cls: 'arrow', iconId: item.children ? icons.chevron : undefined } ),
|
|
87
90
|
new Label( { tag: "span", cls: "", text: item.text, icon: item.iconId } ),
|
|
88
91
|
]});
|
|
89
92
|
|
|
@@ -150,7 +153,7 @@ class CTreeViewItem extends Box {
|
|
|
150
153
|
}
|
|
151
154
|
|
|
152
155
|
setItems( items: TreeItem[ ] ) {
|
|
153
|
-
if( items ) {
|
|
156
|
+
if( items && items.length ) {
|
|
154
157
|
const childs = items.map( itm => {
|
|
155
158
|
return new CTreeViewItem( {}, itm );
|
|
156
159
|
})
|
|
@@ -219,10 +222,13 @@ export class Treeview extends Component<TreeviewProps,TreeviewEvents> {
|
|
|
219
222
|
|
|
220
223
|
const root = new CTreeViewItem( { cls: "root"}, null );
|
|
221
224
|
|
|
222
|
-
if( items ) {
|
|
225
|
+
if( items && items.length ) {
|
|
223
226
|
root.setItems( items );
|
|
224
227
|
this._view.setContent( root );
|
|
225
228
|
}
|
|
229
|
+
else {
|
|
230
|
+
this._view.setContent( new Label( { cls: "empty vertical", icon: icons.empty, text: this.props.emptyMsg ?? _tr.global.empty_list } ) );
|
|
231
|
+
}
|
|
226
232
|
}
|
|
227
233
|
|
|
228
234
|
private _on_click( ev: UIEvent ) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor"><!--!Font Awesome Pro 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc.--><path d="M267.3 395.3c-6.2 6.2-16.4 6.2-22.6 0l-192-192c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L256 361.4 436.7 180.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-192 192z"/></svg>
|