x4js 2.0.20 → 2.0.21
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/cjs/x4.css +1 -1
- package/lib/cjs/x4.js +2 -2
- package/lib/esm/x4.css +1 -1
- package/lib/esm/x4.mjs +2 -2
- package/lib/styles/x4.css +1 -1
- package/lib/types/x4js.d.ts +92 -77
- package/package.json +1 -1
- package/src/components/boxes/boxes.ts +33 -1
- package/src/components/combobox/combobox.module.scss +13 -0
- package/src/components/combobox/combobox.ts +7 -0
- package/src/components/form/form.ts +4 -4
- package/src/components/gridview/gridview.ts +12 -9
- package/src/components/header/header.module.scss +2 -1
- package/src/components/header/header.ts +17 -5
- package/src/components/icon/icon.module.scss +1 -0
- package/src/components/label/label.module.scss +6 -1
- package/src/components/listbox/listbox.module.scss +35 -31
- package/src/components/listbox/listbox.ts +50 -12
- package/src/components/messages/messages.ts +14 -0
- package/src/components/notification/notification.ts +1 -1
- package/src/components/popup/popup.ts +13 -2
- package/src/components/propgrid/propgrid.ts +4 -2
- package/src/components/sizers/sizer.ts +4 -4
- package/src/components/tabs/tabs.module.scss +2 -2
- package/src/components/tabs/tabs.ts +28 -4
- package/src/components/textedit/textedit.ts +1 -1
- package/src/components/treeview/treeview.module.scss +9 -1
- package/src/components/treeview/treeview.ts +52 -13
- package/src/core/component.ts +46 -9
- package/src/core/core_data.ts +8 -8
- package/src/core/core_state.ts +1 -1
- package/src/core/core_tools.ts +2 -0
- package/lib/src/components/base.scss +0 -25
- package/lib/src/components/boxes/boxes.module.scss +0 -54
- package/lib/src/components/boxes/boxes.ts +0 -370
- package/lib/src/components/breadcrumb/breadcrumb.scss +0 -56
- package/lib/src/components/breadcrumb/breadcrumb.ts +0 -93
- package/lib/src/components/breadcrumb/chevron-right.svg +0 -1
- package/lib/src/components/btngroup/btngroup.module.scss +0 -41
- package/lib/src/components/btngroup/btngroup.ts +0 -153
- package/lib/src/components/button/button.module.scss +0 -173
- package/lib/src/components/button/button.ts +0 -185
- package/lib/src/components/calendar/calendar-check-sharp-light.svg +0 -1
- package/lib/src/components/calendar/calendar.module.scss +0 -163
- package/lib/src/components/calendar/calendar.ts +0 -327
- package/lib/src/components/calendar/chevron-left-sharp-light.svg +0 -1
- package/lib/src/components/calendar/chevron-right-sharp-light.svg +0 -1
- package/lib/src/components/canvas/canvas.module.scss +0 -25
- package/lib/src/components/canvas/canvas.ts +0 -189
- package/lib/src/components/canvas/canvas_ex.ts +0 -276
- package/lib/src/components/checkbox/check.svg +0 -4
- package/lib/src/components/checkbox/checkbox.module.scss +0 -142
- package/lib/src/components/checkbox/checkbox.ts +0 -140
- package/lib/src/components/colorinput/colorinput.module.scss +0 -65
- package/lib/src/components/colorinput/colorinput.ts +0 -91
- package/lib/src/components/colorinput/crosshairs-simple-sharp-light.svg +0 -1
- package/lib/src/components/colorpicker/colorpicker.module.scss +0 -133
- package/lib/src/components/colorpicker/colorpicker.ts +0 -482
- package/lib/src/components/combobox/combobox.module.scss +0 -133
- package/lib/src/components/combobox/combobox.ts +0 -275
- package/lib/src/components/combobox/updown.svg +0 -4
- package/lib/src/components/components.ts +0 -42
- package/lib/src/components/dialog/dialog.module.scss +0 -104
- package/lib/src/components/dialog/dialog.ts +0 -229
- package/lib/src/components/dialog/xmark-sharp-light.svg +0 -1
- package/lib/src/components/filedrop/cloud-arrow-up.svg +0 -1
- package/lib/src/components/filedrop/filedrop.module.scss +0 -70
- package/lib/src/components/filedrop/filedrop.ts +0 -131
- package/lib/src/components/form/form.module.scss +0 -38
- package/lib/src/components/form/form.ts +0 -172
- package/lib/src/components/gridview/arrow-down-light.svg +0 -1
- package/lib/src/components/gridview/arrow-up-light.svg +0 -1
- package/lib/src/components/gridview/gridview.module.scss +0 -324
- package/lib/src/components/gridview/gridview.ts +0 -1175
- package/lib/src/components/header/header.module.scss +0 -40
- package/lib/src/components/header/header.ts +0 -130
- package/lib/src/components/icon/icon.module.scss +0 -31
- package/lib/src/components/icon/icon.ts +0 -137
- package/lib/src/components/image/image.module.scss +0 -28
- package/lib/src/components/image/image.ts +0 -168
- package/lib/src/components/input/input.module.scss +0 -74
- package/lib/src/components/input/input.ts +0 -422
- package/lib/src/components/keyboard/arrow-up.svg +0 -1
- package/lib/src/components/keyboard/delete-left.svg +0 -1
- package/lib/src/components/keyboard/eye-slash.svg +0 -1
- package/lib/src/components/keyboard/keyboard.module.scss +0 -134
- package/lib/src/components/keyboard/keyboard.ts +0 -526
- package/lib/src/components/label/label.module.scss +0 -76
- package/lib/src/components/label/label.ts +0 -97
- package/lib/src/components/link/link.ts +0 -81
- package/lib/src/components/listbox/listbox.module.scss +0 -161
- package/lib/src/components/listbox/listbox.ts +0 -539
- package/lib/src/components/menu/caret-right-solid.svg +0 -1
- package/lib/src/components/menu/menu.module.scss +0 -117
- package/lib/src/components/menu/menu.ts +0 -174
- package/lib/src/components/messages/circle-exclamation.svg +0 -1
- package/lib/src/components/messages/messages.module.scss +0 -92
- package/lib/src/components/messages/messages.ts +0 -215
- package/lib/src/components/messages/pen-field.svg +0 -1
- package/lib/src/components/normalize.scss +0 -391
- package/lib/src/components/notification/circle-check-solid.svg +0 -1
- package/lib/src/components/notification/circle-exclamation-solid.svg +0 -1
- package/lib/src/components/notification/circle-notch-light.svg +0 -1
- package/lib/src/components/notification/notification.module.scss +0 -84
- package/lib/src/components/notification/notification.ts +0 -107
- package/lib/src/components/notification/xmark-sharp-light.svg +0 -1
- package/lib/src/components/panel/panel.module.scss +0 -60
- package/lib/src/components/panel/panel.ts +0 -58
- package/lib/src/components/popup/popup.module.scss +0 -51
- package/lib/src/components/popup/popup.ts +0 -442
- package/lib/src/components/progress/progress.module.scss +0 -57
- package/lib/src/components/progress/progress.ts +0 -44
- package/lib/src/components/propgrid/folder-closed.svg +0 -1
- package/lib/src/components/propgrid/folder-open.svg +0 -1
- package/lib/src/components/propgrid/progrid.module.scss +0 -112
- package/lib/src/components/propgrid/propgrid.ts +0 -288
- package/lib/src/components/propgrid/updown.svg +0 -4
- package/lib/src/components/radio/radio.module.scss +0 -147
- package/lib/src/components/radio/radio.svg +0 -4
- package/lib/src/components/radio/radio.ts +0 -142
- package/lib/src/components/rating/rating.module.scss +0 -23
- package/lib/src/components/rating/rating.ts +0 -131
- package/lib/src/components/rating/star-sharp-light.svg +0 -1
- package/lib/src/components/rating/star-sharp-solid.svg +0 -1
- package/lib/src/components/select/select.module.scss +0 -9
- package/lib/src/components/select/select.ts +0 -134
- package/lib/src/components/shared.scss +0 -137
- package/lib/src/components/sizers/sizer.module.scss +0 -90
- package/lib/src/components/sizers/sizer.ts +0 -132
- package/lib/src/components/slider/slider.module.scss +0 -118
- package/lib/src/components/slider/slider.ts +0 -198
- package/lib/src/components/switch/switch.module.scss +0 -127
- package/lib/src/components/switch/switch.ts +0 -62
- package/lib/src/components/tabs/tabs.module.scss +0 -45
- package/lib/src/components/tabs/tabs.ts +0 -205
- package/lib/src/components/textarea/textarea.module.scss +0 -63
- package/lib/src/components/textarea/textarea.ts +0 -125
- package/lib/src/components/textedit/textedit.module.scss +0 -116
- package/lib/src/components/textedit/textedit.ts +0 -115
- package/lib/src/components/themes.scss +0 -88
- package/lib/src/components/tickline/tickline.module.scss +0 -26
- package/lib/src/components/tickline/tickline.ts +0 -82
- package/lib/src/components/tooltips/circle-info-sharp-light.svg +0 -1
- package/lib/src/components/tooltips/comments-question.svg +0 -1
- package/lib/src/components/tooltips/tooltips.scss +0 -72
- package/lib/src/components/tooltips/tooltips.ts +0 -109
- package/lib/src/components/treeview/chevron-down-light.svg +0 -1
- package/lib/src/components/treeview/treeview.module.scss +0 -185
- package/lib/src/components/treeview/treeview.ts +0 -445
- package/lib/src/components/viewport/viewport.module.scss +0 -32
- package/lib/src/components/viewport/viewport.ts +0 -41
- package/lib/src/core/component.ts +0 -1066
- package/lib/src/core/core_application.ts +0 -265
- package/lib/src/core/core_colors.ts +0 -250
- package/lib/src/core/core_data.ts +0 -1310
- package/lib/src/core/core_dom.ts +0 -471
- package/lib/src/core/core_dragdrop.ts +0 -201
- package/lib/src/core/core_element.ts +0 -115
- package/lib/src/core/core_events.ts +0 -177
- package/lib/src/core/core_i18n.ts +0 -393
- package/lib/src/core/core_react.ts +0 -79
- package/lib/src/core/core_router.ts +0 -237
- package/lib/src/core/core_state.ts +0 -62
- package/lib/src/core/core_styles.ts +0 -214
- package/lib/src/core/core_svg.ts +0 -712
- package/lib/src/core/core_tools.ts +0 -906
- package/lib/src/types/scss.d.ts +0 -4
- package/lib/src/types/svg.d.ts +0 -1
- package/lib/src/types/x4react.d.ts +0 -9
- package/lib/src/x4.scss +0 -19
- package/lib/src/x4.ts +0 -35
- package/lib/src/x4tsx.d.ts +0 -25
|
@@ -32,6 +32,7 @@ export interface TabItem {
|
|
|
32
32
|
title: string;
|
|
33
33
|
icon?: string;
|
|
34
34
|
content: Component;
|
|
35
|
+
cls?: string; // button class
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
/**
|
|
@@ -44,6 +45,10 @@ class CTab extends Button {
|
|
|
44
45
|
super( props );
|
|
45
46
|
|
|
46
47
|
this.addClass( "outline" );
|
|
48
|
+
if( item.cls ) {
|
|
49
|
+
this.addClass( item.cls );
|
|
50
|
+
}
|
|
51
|
+
|
|
47
52
|
this.setIcon( item.icon );
|
|
48
53
|
this.setText( item.title );
|
|
49
54
|
this.setData( "tabname", item.name );
|
|
@@ -100,7 +105,6 @@ class CTabList extends HBox<TablistProps,TablistEvents> {
|
|
|
100
105
|
}
|
|
101
106
|
}
|
|
102
107
|
|
|
103
|
-
|
|
104
108
|
setItems( items: TabItem[ ] ) {
|
|
105
109
|
this.clearContent( );
|
|
106
110
|
items.forEach( tab => {
|
|
@@ -114,8 +118,11 @@ class CTabList extends HBox<TablistProps,TablistEvents> {
|
|
|
114
118
|
}, tab ) );
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
removeItem( name: string ) {
|
|
122
|
+
const tab = this.query<Button>( `[data-tabname="${name}"]` );
|
|
123
|
+
if( tab ) {
|
|
124
|
+
this.removeChild( tab );
|
|
125
|
+
}
|
|
119
126
|
}
|
|
120
127
|
}
|
|
121
128
|
|
|
@@ -197,9 +204,26 @@ export class Tabs extends VBox<TabsProps> {
|
|
|
197
204
|
this._list.addItem( item );
|
|
198
205
|
this._stack.addItem( { name: item.name, content: item.content } );
|
|
199
206
|
|
|
200
|
-
if( this.
|
|
207
|
+
if( this._stack.getPageCount( )==1 ) {
|
|
201
208
|
this.selectTab( item.name );
|
|
202
209
|
}
|
|
203
210
|
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
*
|
|
214
|
+
*/
|
|
215
|
+
|
|
216
|
+
removeTab( name: string ) {
|
|
217
|
+
this._list.removeItem( name );
|
|
218
|
+
this._stack.removeItem( name );
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
*
|
|
223
|
+
*/
|
|
224
|
+
|
|
225
|
+
enumTabs( ): string[] {
|
|
226
|
+
return this._stack.enumPageNames( );
|
|
227
|
+
}
|
|
204
228
|
}
|
|
205
229
|
|
|
@@ -161,7 +161,15 @@
|
|
|
161
161
|
#icon {
|
|
162
162
|
color: var( --button-icon-color );
|
|
163
163
|
}
|
|
164
|
-
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
&:focus {
|
|
167
|
+
background-color: var( --ol-button-background-hover );
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
&:disabled {
|
|
171
|
+
color: var( --disabled-color-dark );
|
|
172
|
+
}
|
|
165
173
|
}
|
|
166
174
|
}
|
|
167
175
|
}
|
|
@@ -15,11 +15,12 @@
|
|
|
15
15
|
**/
|
|
16
16
|
|
|
17
17
|
import { class_ns } from '../../core/core_tools';
|
|
18
|
-
import {
|
|
18
|
+
import { EventCallback } from '../../core/core_events';
|
|
19
|
+
import { Component, ComponentEvent, ComponentEvents, ComponentProps, EvClick, EvDblClick, EvSelectionChange, componentFromDOM } from '../../core/component';
|
|
19
20
|
|
|
20
21
|
import { ScrollView, Viewport } from '../viewport/viewport';
|
|
21
22
|
import { Label } from '../label/label';
|
|
22
|
-
import { ListboxID, ListItem
|
|
23
|
+
import { ListboxID, ListItem } from '../listbox/listbox';
|
|
23
24
|
import { Box, BoxProps, HBox, VBox } from '../boxes/boxes';
|
|
24
25
|
import { Icon } from '../icon/icon';
|
|
25
26
|
|
|
@@ -52,14 +53,15 @@ export interface TreeItem extends ListItem {
|
|
|
52
53
|
interface TreeviewProps extends Omit<ComponentProps,"content"> {
|
|
53
54
|
items: TreeItem[];
|
|
54
55
|
footer?: Component;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
selection: TreeItem;
|
|
56
|
+
selectionChange?: EventCallback<EvSelectionChange>;
|
|
57
|
+
dblClick?: EventCallback<EvDblClick>;
|
|
58
|
+
click?: EventCallback<EvClick>;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
interface TreeviewEvents extends ComponentEvents {
|
|
62
62
|
selectionChange?: EvSelectionChange;
|
|
63
|
+
dblClick?: EvDblClick;
|
|
64
|
+
click?: EvClick;
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
/**
|
|
@@ -85,7 +87,11 @@ class CTreeViewItem extends Box {
|
|
|
85
87
|
new Label( { tag: "span", cls: "", text: item.text, icon: item.iconId } ),
|
|
86
88
|
]});
|
|
87
89
|
|
|
88
|
-
|
|
90
|
+
if( item.cls ) {
|
|
91
|
+
this._label.addClass( item.cls );
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
this._label.setInternalData( "id", item.id );
|
|
89
95
|
|
|
90
96
|
if( item.children ) {
|
|
91
97
|
this. _childs = new VBox( { cls: "body" } );
|
|
@@ -159,6 +165,8 @@ export class Treeview extends Component<TreeviewProps,TreeviewEvents> {
|
|
|
159
165
|
constructor( props: TreeviewProps ) {
|
|
160
166
|
super( props );
|
|
161
167
|
|
|
168
|
+
this.mapPropEvents( props, "selectionChange", "dblClick", "click" );
|
|
169
|
+
|
|
162
170
|
const scroller = new ScrollView( { cls: "body" } );
|
|
163
171
|
this._view = scroller.getViewport( );
|
|
164
172
|
|
|
@@ -173,7 +181,8 @@ export class Treeview extends Component<TreeviewProps,TreeviewEvents> {
|
|
|
173
181
|
|
|
174
182
|
this.setAttribute( "tabindex", 0 );
|
|
175
183
|
this.setDOMEvents( {
|
|
176
|
-
click: ( ev ) => this.
|
|
184
|
+
click: ( ev ) => this._on_click( ev ),
|
|
185
|
+
dblclick: (e) => this._on_click(e),
|
|
177
186
|
keydown: ( ev ) => this._onkey( ev ),
|
|
178
187
|
});
|
|
179
188
|
|
|
@@ -199,14 +208,27 @@ export class Treeview extends Component<TreeviewProps,TreeviewEvents> {
|
|
|
199
208
|
}
|
|
200
209
|
}
|
|
201
210
|
|
|
202
|
-
private
|
|
211
|
+
private _on_click( ev: UIEvent ) {
|
|
203
212
|
let target = ev.target as HTMLElement;
|
|
213
|
+
|
|
204
214
|
while( target && target!=this.dom ) {
|
|
205
215
|
const c = componentFromDOM( target );
|
|
206
216
|
|
|
207
217
|
if( c && c.hasClass("item") ) {
|
|
208
|
-
const id = c.
|
|
209
|
-
|
|
218
|
+
const id = c.getInternalData( "id" );
|
|
219
|
+
|
|
220
|
+
const fev: ComponentEvent = { context:id };
|
|
221
|
+
if (ev.type == 'click') {
|
|
222
|
+
this.fire('click', fev );
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
this.fire('dblClick', fev );
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (!fev.defaultPrevented) {
|
|
229
|
+
this._selectItem( id, c );
|
|
230
|
+
}
|
|
231
|
+
|
|
210
232
|
return;
|
|
211
233
|
}
|
|
212
234
|
|
|
@@ -413,7 +435,7 @@ export class Treeview extends Component<TreeviewProps,TreeviewEvents> {
|
|
|
413
435
|
}
|
|
414
436
|
|
|
415
437
|
const itm = this._findItem( id );
|
|
416
|
-
this.fire( "selectionChange", { selection: itm, empty: false } );
|
|
438
|
+
this.fire( "selectionChange", { selection: [itm], empty: false } );
|
|
417
439
|
}
|
|
418
440
|
|
|
419
441
|
private _findItem( id: ListboxID ) {
|
|
@@ -432,7 +454,7 @@ export class Treeview extends Component<TreeviewProps,TreeviewEvents> {
|
|
|
432
454
|
}
|
|
433
455
|
|
|
434
456
|
this._selection = undefined;
|
|
435
|
-
this.fire( "selectionChange", { selection:
|
|
457
|
+
this.fire( "selectionChange", { selection: [], empty: true } );
|
|
436
458
|
}
|
|
437
459
|
|
|
438
460
|
/**
|
|
@@ -442,4 +464,21 @@ export class Treeview extends Component<TreeviewProps,TreeviewEvents> {
|
|
|
442
464
|
getSelection( ) {
|
|
443
465
|
return this._selection;
|
|
444
466
|
}
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
*
|
|
470
|
+
*/
|
|
471
|
+
|
|
472
|
+
selectItem( id: ListboxID ) {
|
|
473
|
+
const itm = this._findItem( id );
|
|
474
|
+
if( itm ) {
|
|
475
|
+
this.visitChildren( ( c ) => {
|
|
476
|
+
const cid = c.getInternalData( "id" );
|
|
477
|
+
if( cid == id ) {
|
|
478
|
+
this._selectItem( id, c );
|
|
479
|
+
return true;
|
|
480
|
+
}
|
|
481
|
+
} );
|
|
482
|
+
}
|
|
483
|
+
}
|
|
445
484
|
}
|
package/src/core/component.ts
CHANGED
|
@@ -19,6 +19,7 @@ import { CoreElement } from './core_element';
|
|
|
19
19
|
import { ariaValues, unitless } from './core_styles';
|
|
20
20
|
import { CoreEvent, EventMap } from './core_events';
|
|
21
21
|
import { addEvent, DOMEventHandler, GlobalDOMEvents } from './core_dom';
|
|
22
|
+
import { Application, EvMessage } from './core_application';
|
|
22
23
|
|
|
23
24
|
interface RefType<T extends Component> {
|
|
24
25
|
dom: T;
|
|
@@ -92,8 +93,8 @@ export interface ComponentProps {
|
|
|
92
93
|
// shortcuts
|
|
93
94
|
width?: string | number;
|
|
94
95
|
height?: string | number;
|
|
95
|
-
disabled?:
|
|
96
|
-
hidden?:
|
|
96
|
+
disabled?: boolean,
|
|
97
|
+
hidden?: boolean,
|
|
97
98
|
flex?: boolean | number;
|
|
98
99
|
|
|
99
100
|
tooltip?: string;
|
|
@@ -106,7 +107,7 @@ export interface ComponentProps {
|
|
|
106
107
|
// because all memebers here are optional.
|
|
107
108
|
// this allow TS to recongnize derived props as ComponentProps
|
|
108
109
|
//[key: string]: any;
|
|
109
|
-
}
|
|
110
|
+
}
|
|
110
111
|
|
|
111
112
|
|
|
112
113
|
/**
|
|
@@ -219,6 +220,16 @@ export class Component<P extends ComponentProps = ComponentProps, E extends Comp
|
|
|
219
220
|
}
|
|
220
221
|
|
|
221
222
|
|
|
223
|
+
onGlobalEvent( cb: ( ev: EvMessage ) => void ) {
|
|
224
|
+
|
|
225
|
+
const off = Application.instance().on( "global", ev => {
|
|
226
|
+
cb( ev );
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
this.addDOMEvent( "removed", ( ) => off.off() );
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
|
|
222
233
|
// :: CLASSES ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
223
234
|
|
|
224
235
|
/**
|
|
@@ -328,7 +339,7 @@ export class Component<P extends ComponentProps = ComponentProps, E extends Comp
|
|
|
328
339
|
*/
|
|
329
340
|
|
|
330
341
|
setAttribute( name: string, value: string | number | boolean ) {
|
|
331
|
-
if( value===null || value===undefined ) {
|
|
342
|
+
if( value===null || value===undefined || value===false ) {
|
|
332
343
|
this.dom.removeAttribute( name );
|
|
333
344
|
}
|
|
334
345
|
else {
|
|
@@ -385,8 +396,8 @@ export class Component<P extends ComponentProps = ComponentProps, E extends Comp
|
|
|
385
396
|
return this;
|
|
386
397
|
}
|
|
387
398
|
|
|
388
|
-
getInternalData( name: string|symbol ):
|
|
389
|
-
return this.#store?.get(name);
|
|
399
|
+
getInternalData<T = any>( name: string|symbol ): T {
|
|
400
|
+
return this.#store?.get(name) as T;
|
|
390
401
|
}
|
|
391
402
|
|
|
392
403
|
|
|
@@ -868,6 +879,33 @@ export class Component<P extends ComponentProps = ComponentProps, E extends Comp
|
|
|
868
879
|
return children;
|
|
869
880
|
}
|
|
870
881
|
|
|
882
|
+
/**
|
|
883
|
+
*
|
|
884
|
+
*/
|
|
885
|
+
|
|
886
|
+
visitChildren( cb: ( el: Component ) => boolean ) {
|
|
887
|
+
|
|
888
|
+
const visit = ( p: Element ) => {
|
|
889
|
+
for( let d=p.firstElementChild; d; d=d.nextElementSibling ) {
|
|
890
|
+
const comp = componentFromDOM( d as Element );
|
|
891
|
+
if( comp ) {
|
|
892
|
+
if( cb( comp ) ) {
|
|
893
|
+
return true;
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
// avoid visit of svg elements
|
|
898
|
+
if( d.firstElementChild && d.tagName!="svg" && d.tagName!="SVG" ) {
|
|
899
|
+
if( visit( d ) ) {
|
|
900
|
+
return true;
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
visit( this.dom );
|
|
907
|
+
}
|
|
908
|
+
|
|
871
909
|
/**
|
|
872
910
|
*
|
|
873
911
|
*/
|
|
@@ -1022,11 +1060,10 @@ export interface EvFocus extends ComponentEvent {
|
|
|
1022
1060
|
* value is the new selection or null
|
|
1023
1061
|
*/
|
|
1024
1062
|
|
|
1025
|
-
|
|
1026
|
-
}
|
|
1063
|
+
type ISelection = number | string | any;
|
|
1027
1064
|
|
|
1028
1065
|
export interface EvSelectionChange extends ComponentEvent {
|
|
1029
|
-
readonly selection: ISelection;
|
|
1066
|
+
readonly selection: ISelection[];
|
|
1030
1067
|
readonly empty: boolean;
|
|
1031
1068
|
}
|
|
1032
1069
|
|
package/src/core/core_data.ts
CHANGED
|
@@ -889,31 +889,31 @@ export class DataStore extends EventSource<DataStoreEventMap> {
|
|
|
889
889
|
filterValue = filterValue.toUpperCase( );
|
|
890
890
|
}
|
|
891
891
|
|
|
892
|
-
|
|
892
|
+
const _lt = ( recval: string ) : boolean => {
|
|
893
893
|
return recval < filterValue;
|
|
894
894
|
}
|
|
895
895
|
|
|
896
|
-
|
|
896
|
+
const _le = ( recval: string ) : boolean => {
|
|
897
897
|
return recval <= filterValue;
|
|
898
898
|
}
|
|
899
899
|
|
|
900
|
-
|
|
900
|
+
const _eq = ( recval: string ) : boolean => {
|
|
901
901
|
return recval == filterValue;
|
|
902
902
|
}
|
|
903
903
|
|
|
904
|
-
|
|
904
|
+
const _neq = ( recval: string ) : boolean => {
|
|
905
905
|
return recval != filterValue;
|
|
906
906
|
}
|
|
907
907
|
|
|
908
|
-
|
|
908
|
+
const _ge = ( recval: string ) : boolean => {
|
|
909
909
|
return recval >= filterValue;
|
|
910
910
|
}
|
|
911
911
|
|
|
912
|
-
|
|
912
|
+
const _gt = ( recval: string ) : boolean => {
|
|
913
913
|
return recval > filterValue;
|
|
914
914
|
}
|
|
915
915
|
|
|
916
|
-
|
|
916
|
+
const _re = ( recval: string ) : boolean => {
|
|
917
917
|
filterRe.lastIndex = -1;
|
|
918
918
|
return filterRe.test( recval );
|
|
919
919
|
}
|
|
@@ -959,7 +959,7 @@ export class DataStore extends EventSource<DataStoreEventMap> {
|
|
|
959
959
|
let keep = filterFn( field );
|
|
960
960
|
if( keep ) {
|
|
961
961
|
index[iidx++] = idx;
|
|
962
|
-
}
|
|
962
|
+
}
|
|
963
963
|
});
|
|
964
964
|
}
|
|
965
965
|
}
|
package/src/core/core_state.ts
CHANGED
package/src/core/core_tools.ts
CHANGED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|
|
|
7
|
-
*
|
|
8
|
-
* @file base.scss
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
-
*
|
|
13
|
-
* Use of this source code is governed by an MIT-style license
|
|
14
|
-
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
@use "./shared.scss";
|
|
18
|
-
|
|
19
|
-
.x4box {
|
|
20
|
-
@extend .box;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.x4flex {
|
|
24
|
-
@extend .flex;
|
|
25
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ___ ___ __
|
|
3
|
-
* \ \/ / / _
|
|
4
|
-
* \ / /_| |_
|
|
5
|
-
* / \____ _|
|
|
6
|
-
* /__/\__\ |_|
|
|
7
|
-
*
|
|
8
|
-
* @file boxes.module.scss
|
|
9
|
-
* @author Etienne Cochard
|
|
10
|
-
*
|
|
11
|
-
* @copyright (c) 2024 R-libre ingenierie
|
|
12
|
-
*
|
|
13
|
-
* Use of this source code is governed by an MIT-style license
|
|
14
|
-
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
@use "../shared.scss";
|
|
18
|
-
|
|
19
|
-
.x4hbox {
|
|
20
|
-
@extend .hbox;
|
|
21
|
-
&.align-start {
|
|
22
|
-
align-items: start;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.x4vbox {
|
|
27
|
-
@extend .vbox;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.x4stackbox {
|
|
31
|
-
display: flex;
|
|
32
|
-
|
|
33
|
-
&>* {
|
|
34
|
-
@extend .fit;
|
|
35
|
-
position: relative !important;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
&>*:not(.selected) {
|
|
39
|
-
display: none;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.x4gridbox {
|
|
44
|
-
display: grid;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.x4masonrybox {
|
|
48
|
-
display: grid;
|
|
49
|
-
grid-gap: 10px;
|
|
50
|
-
grid-template-columns: repeat(auto-fill, minmax(250px,1fr));
|
|
51
|
-
grid-auto-rows: 10px;
|
|
52
|
-
|
|
53
|
-
overflow: hidden;
|
|
54
|
-
}
|