x4js 1.4.39 → 1.4.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/README.md CHANGED
@@ -2,4 +2,18 @@
2
2
 
3
3
  This is the x4 framework repository.
4
4
 
5
- You will find the documentation & tutorials [Here](https://x4js.org)
5
+ X4 is a full typescript framework to develop Web or Desktop applications.
6
+ Included more than 50 controls like grids, charts, etc. Everything needed to push the limits of your creativity.
7
+ If these components are not enough, you can create your in few lines.
8
+
9
+ ## Home page
10
+ see [home](https://x4js.org)
11
+
12
+
13
+ ## Documentation
14
+ see [documentation](https://x4js.org/doc/)
15
+
16
+ ## API
17
+ see [API](https://x4js.org/api/)
18
+
19
+
@@ -91,7 +91,8 @@ export interface ColorPickerEditorProps extends ColorPickerProps {
91
91
  labelWidth?: number;
92
92
  cust_colors?: Color[];
93
93
  displayValue?: false;
94
- change: EventCallback<EvChange>;
94
+ change?: EventCallback<EvChange>;
95
+ name?: string;
95
96
  }
96
97
  export declare class ColorPickerEditor extends HLayout<ColorPickerEditorProps, ColorPickerEventMap> {
97
98
  constructor(props: ColorPickerEditorProps);
package/lib/combobox.js CHANGED
@@ -131,7 +131,7 @@ class ComboBox extends layout_1.HLayout {
131
131
  */
132
132
  showPopup() {
133
133
  let props = this.m_props;
134
- if (props.readOnly) {
134
+ if (props.readOnly || this.hasClass("@disable")) {
135
135
  return;
136
136
  }
137
137
  // need creation ?
@@ -200,6 +200,11 @@ class ComboBox extends layout_1.HLayout {
200
200
  this.m_props.value = item.id;
201
201
  }
202
202
  }
203
+ else {
204
+ if (this.m_ui_input && this.m_ui_input instanceof input_1.Input) {
205
+ this.m_ui_input.value = "";
206
+ }
207
+ }
203
208
  }
204
209
  /**
205
210
  *
@@ -218,13 +223,17 @@ class ComboBox extends layout_1.HLayout {
218
223
  if ((0, tools_1.isFunction)(items)) {
219
224
  items = items();
220
225
  }
221
- items.some((v) => {
226
+ const found = items.some((v) => {
222
227
  if (v.id === id) {
223
228
  this._setInput(v);
224
229
  this.m_selection = v;
225
230
  return true;
226
231
  }
227
232
  });
233
+ if (!found) {
234
+ this._setInput(null);
235
+ this.m_selection = null;
236
+ }
228
237
  }
229
238
  get input() {
230
239
  return this.m_ui_input instanceof input_1.Input ? this.m_ui_input : null;
package/lib/dialog.js CHANGED
@@ -149,7 +149,9 @@ class Dialog extends popup_1.Popup {
149
149
  this.setStyleValue('height', this.m_props.dlgHeight + '%');
150
150
  }
151
151
  this.addClass('@resized');
152
- this.m_el_title.setStyleValue("width", "auto");
152
+ if (this.m_el_title) {
153
+ this.m_el_title.setStyleValue("width", "auto");
154
+ }
153
155
  if (this.m_props.maximized) {
154
156
  this._maximize();
155
157
  this.emit('size', (0, component_1.EvSize)(null));
@@ -344,9 +346,9 @@ class Dialog extends popup_1.Popup {
344
346
  let { x, y } = (0, tools_1.getMousePos)(event, true);
345
347
  let wrc = (0, component_1.flyWrap)(x4dom_1.x4document.body).getBoundingRect();
346
348
  let rc = this.getBoundingRect(true);
347
- let trc = this.m_el_title.getBoundingRect();
349
+ ///let trc = this.m_el_title.getBoundingRect();
348
350
  let dx = x - rc.left, dy = y - rc.top;
349
- let cstyle = this.getComputedStyle();
351
+ //let cstyle = this.getComputedStyle();
350
352
  //let topw = cstyle.parse('marginTop') + cstyle.parse('paddingTop') + cstyle.parse('borderTopWidth');
351
353
  //let botw = cstyle.parse('marginBottom') + cstyle.parse('paddingBottom') + cstyle.parse('borderBottomWidth');
352
354
  //let lftw = cstyle.parse('marginLeft') + cstyle.parse('paddingLeft') + cstyle.parse('borderLeftWidth');
package/lib/gridview.js CHANGED
@@ -398,12 +398,14 @@ class GridView extends layout_1.VLayout {
398
398
  _col.width = width;
399
399
  if (_col.flex) {
400
400
  _col.$hdr.removeClass('@flex');
401
+ _col.$ftr?.removeClass('@flex');
401
402
  _col.flex = undefined;
402
403
  updateFlex = true;
403
404
  }
404
405
  }
405
406
  else if (width < 0 && !_col.flex) {
406
407
  _col.$hdr.addClass('@flex');
408
+ _col.$ftr?.addClass('@flex');
407
409
  _col.flex = 1;
408
410
  updateFlex = true;
409
411
  }
package/lib/listview.js CHANGED
@@ -481,6 +481,7 @@ class PopupListView extends popup_1.Popup {
481
481
  constructor(props) {
482
482
  super({ tabIndex: false });
483
483
  this.enableMask(false);
484
+ this.addClass("@non-maskable");
484
485
  props.tabIndex = false;
485
486
  this.m_list = new ListView(props);
486
487
  //this.m_list.addClass( '@fit' );
package/lib/x4.css CHANGED
@@ -27,7 +27,7 @@
27
27
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
28
  **/
29
29
  :root {
30
- --x4-font: "Inter";
30
+ --x4-font: "Helvetica, Arial, Sans-Serif";
31
31
  --x4-font-size: 13px;
32
32
  --x4-base-color: #266888;
33
33
  --x4-selection-color: #2458B3;
@@ -61,7 +61,7 @@
61
61
  --x4-icon-angle-down: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" fill="currentColor"><path d="M192 384c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L192 306.8l137.4-137.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-160 160C208.4 380.9 200.2 384 192 384z"/></svg>';
62
62
  --x4-icon-calendar-days: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill="currentColor"><path d="M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM64 304C64 312.8 71.16 320 80 320H112C120.8 320 128 312.8 128 304V272C128 263.2 120.8 256 112 256H80C71.16 256 64 263.2 64 272V304zM192 304C192 312.8 199.2 320 208 320H240C248.8 320 256 312.8 256 304V272C256 263.2 248.8 256 240 256H208C199.2 256 192 263.2 192 272V304zM336 256C327.2 256 320 263.2 320 272V304C320 312.8 327.2 320 336 320H368C376.8 320 384 312.8 384 304V272C384 263.2 376.8 256 368 256H336zM64 432C64 440.8 71.16 448 80 448H112C120.8 448 128 440.8 128 432V400C128 391.2 120.8 384 112 384H80C71.16 384 64 391.2 64 400V432zM208 384C199.2 384 192 391.2 192 400V432C192 440.8 199.2 448 208 448H240C248.8 448 256 440.8 256 432V400C256 391.2 248.8 384 240 384H208zM320 432C320 440.8 327.2 448 336 448H368C376.8 448 384 440.8 384 432V400C384 391.2 376.8 384 368 384H336C327.2 384 320 391.2 320 400V432z"/></svg>';
63
63
  --x4-icon-tip: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor"><path d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM296 336h-16V248C280 234.8 269.3 224 256 224H224C210.8 224 200 234.8 200 248S210.8 272 224 272h8v64h-16C202.8 336 192 346.8 192 360S202.8 384 216 384h80c13.25 0 24-10.75 24-24S309.3 336 296 336zM256 192c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32S224 142.3 224 160C224 177.7 238.3 192 256 192z"/></svg>';
64
- --x4-check: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill="currentColor"><path d="M440.1 103C450.3 112.4 450.3 127.6 440.1 136.1L176.1 400.1C167.6 410.3 152.4 410.3 143 400.1L7.029 264.1C-2.343 255.6-2.343 240.4 7.029 231C16.4 221.7 31.6 221.7 40.97 231L160 350.1L407 103C416.4 93.66 431.6 93.66 440.1 103V103z"/></svg>';
64
+ --x4-icon-check: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill="currentColor"><path d="M440.1 103C450.3 112.4 450.3 127.6 440.1 136.1L176.1 400.1C167.6 410.3 152.4 410.3 143 400.1L7.029 264.1C-2.343 255.6-2.343 240.4 7.029 231C16.4 221.7 31.6 221.7 40.97 231L160 350.1L407 103C416.4 93.66 431.6 93.66 440.1 103V103z"/></svg>';
65
65
  }
66
66
  /* source: https://tailwindcss.com/docs/customizing-colors/#default-color-palette */
67
67
  :root {
@@ -703,8 +703,8 @@ textarea::selection {
703
703
  padding: 4px;
704
704
  }
705
705
  .x-menu-item:hover {
706
- background-color: #c6d3d9;
707
- color: var(--gray-900);
706
+ background-color: var(--x4-hover-color);
707
+ color: var(--x4-hover-text);
708
708
  }
709
709
  .x-menu-item:hover .x-icon {
710
710
  color: var(--gray-900);
@@ -1153,7 +1153,7 @@ textarea::selection {
1153
1153
  .x-grid-view .x-row {
1154
1154
  position: absolute;
1155
1155
  width: calc(100% - 4px);
1156
- border-bottom: 1px solid #f0f0f0;
1156
+ border-bottom: 1px solid #d0d0d0;
1157
1157
  align-items: center;
1158
1158
  height: 2em;
1159
1159
  }
@@ -1163,15 +1163,17 @@ textarea::selection {
1163
1163
  }
1164
1164
  .x-spreadsheet .x-cell,
1165
1165
  .x-grid-view .x-cell {
1166
- border-right: 1px solid #f0f0f0;
1166
+ border-right: 1px solid #d0d0d0;
1167
1167
  }
1168
1168
  .x-spreadsheet .x-cell.center,
1169
1169
  .x-grid-view .x-cell.center {
1170
1170
  text-align: center;
1171
+ justify-content: center;
1171
1172
  }
1172
1173
  .x-spreadsheet .x-cell.right,
1173
1174
  .x-grid-view .x-cell.right {
1174
1175
  text-align: right;
1176
+ justify-content: right;
1175
1177
  }
1176
1178
  .x-spreadsheet:focus,
1177
1179
  .x-grid-view:focus {
package/lib/x4events.d.ts CHANGED
@@ -70,10 +70,12 @@ export declare function EvChange(value: unknown, context?: any): EvChange;
70
70
  * Selection Event
71
71
  * value is the new selection or null
72
72
  */
73
+ interface X4Selection {
74
+ }
73
75
  export interface EvSelectionChange extends BasicEvent {
74
- readonly selection: unknown;
76
+ readonly selection: X4Selection;
75
77
  }
76
- export declare function EvSelectionChange(selection: unknown, context?: any): EvSelectionChange;
78
+ export declare function EvSelectionChange(selection: X4Selection, context?: any): EvSelectionChange;
77
79
  /**
78
80
  * ContextMenu Event
79
81
  */
@@ -264,3 +266,4 @@ export declare class EventSource<Q extends EventMap, T extends EventTypes = MapE
264
266
  */
265
267
  removeAllListeners(eventName: string | null): void;
266
268
  }
269
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "x4js",
3
- "version": "1.4.39",
3
+ "version": "1.4.42",
4
4
  "description": "X4js core files",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -11,7 +11,8 @@
11
11
  },
12
12
  "keywords": [
13
13
  "typescript",
14
- "framework"
14
+ "framework",
15
+ "sap", "web", "desktop", "application"
15
16
  ],
16
17
  "scripts": {
17
18
  "build": "tsc && lessc src/x4.less >lib/x4.css",
package/src/cardview.ts CHANGED
@@ -137,13 +137,16 @@ export class CardView<P extends CardViewProps = CardViewProps, E extends CardVie
137
137
  }
138
138
 
139
139
  let page = this.m_cpage.page as Component;
140
-
141
140
  page.addClass('@active');
142
141
  page.removeClass('@hidden');
143
142
 
144
143
  if (!page.dom) {
145
144
  this._preparePage(page);
146
145
  }
146
+
147
+ if (this.m_cpage.selector) {
148
+ this.m_cpage.selector.addClass('@active');
149
+ }
147
150
  }
148
151
 
149
152
  this.emit('change', EvChange(this.m_cpage.name));
@@ -631,8 +631,8 @@ export interface ColorPickerEditorProps extends ColorPickerProps {
631
631
  labelWidth?: number;
632
632
  cust_colors?: Color[];
633
633
  displayValue?: false,
634
-
635
- change: EventCallback<EvChange>;
634
+ change?: EventCallback<EvChange>;
635
+ name?: string;
636
636
  }
637
637
 
638
638
  export class ColorPickerEditor extends HLayout<ColorPickerEditorProps, ColorPickerEventMap> {
package/src/combobox.ts CHANGED
@@ -191,7 +191,7 @@ export class ComboBox extends HLayout<ComboBoxProps,ComboBoxEventMap> {
191
191
  showPopup() {
192
192
 
193
193
  let props = this.m_props;
194
- if (props.readOnly) {
194
+ if (props.readOnly || this.hasClass("@disable") ) {
195
195
  return;
196
196
  }
197
197
 
@@ -278,6 +278,11 @@ export class ComboBox extends HLayout<ComboBoxProps,ComboBoxEventMap> {
278
278
  this.m_props.value = item.id;
279
279
  }
280
280
  }
281
+ else {
282
+ if( this.m_ui_input && this.m_ui_input instanceof Input ) {
283
+ this.m_ui_input.value = "";
284
+ }
285
+ }
281
286
  }
282
287
 
283
288
  /**
@@ -303,13 +308,18 @@ export class ComboBox extends HLayout<ComboBoxProps,ComboBoxEventMap> {
303
308
  items = items( );
304
309
  }
305
310
 
306
- items.some( (v) => {
311
+ const found = items.some( (v) => {
307
312
  if (v.id === id) {
308
313
  this._setInput( v );
309
314
  this.m_selection = v;
310
315
  return true;
311
316
  }
312
317
  });
318
+
319
+ if( !found ) {
320
+ this._setInput( null );
321
+ this.m_selection = null;
322
+ }
313
323
  }
314
324
 
315
325
  get input( ) : Input {
package/src/dialog.ts CHANGED
@@ -233,7 +233,10 @@ export class Dialog<P extends DialogProps = DialogProps, E extends DialogBoxEven
233
233
  }
234
234
 
235
235
  this.addClass('@resized');
236
- this.m_el_title.setStyleValue( "width", "auto" );
236
+
237
+ if( this.m_el_title ) {
238
+ this.m_el_title.setStyleValue( "width", "auto" );
239
+ }
237
240
 
238
241
  if (this.m_props.maximized) {
239
242
  this._maximize();
@@ -463,13 +466,12 @@ export class Dialog<P extends DialogProps = DialogProps, E extends DialogBoxEven
463
466
 
464
467
  let wrc = flyWrap(x4document.body).getBoundingRect();
465
468
  let rc = this.getBoundingRect(true);
466
- let trc = this.m_el_title.getBoundingRect();
469
+ ///let trc = this.m_el_title.getBoundingRect();
467
470
 
468
471
  let dx = x - rc.left,
469
472
  dy = y - rc.top;
470
473
 
471
- let cstyle = this.getComputedStyle();
472
-
474
+ //let cstyle = this.getComputedStyle();
473
475
  //let topw = cstyle.parse('marginTop') + cstyle.parse('paddingTop') + cstyle.parse('borderTopWidth');
474
476
  //let botw = cstyle.parse('marginBottom') + cstyle.parse('paddingBottom') + cstyle.parse('borderBottomWidth');
475
477
  //let lftw = cstyle.parse('marginLeft') + cstyle.parse('paddingLeft') + cstyle.parse('borderLeftWidth');
package/src/gridview.ts CHANGED
@@ -555,12 +555,14 @@ export class GridView extends VLayout<GridViewProps, GridViewEventMap> {
555
555
  _col.width = width;
556
556
  if( _col.flex ) {
557
557
  _col.$hdr.removeClass( '@flex' );
558
+ _col.$ftr?.removeClass( '@flex' );
558
559
  _col.flex = undefined;
559
560
  updateFlex = true;
560
561
  }
561
562
  }
562
563
  else if( width<0 && !_col.flex ) {
563
564
  _col.$hdr.addClass( '@flex' );
565
+ _col.$ftr?.addClass( '@flex' );
564
566
  _col.flex = 1;
565
567
  updateFlex = true;
566
568
  }
package/src/listview.ts CHANGED
@@ -691,6 +691,7 @@ export class PopupListView extends Popup<PopupListViewProps,PopupListViewEventMa
691
691
  super({ tabIndex: false });
692
692
 
693
693
  this.enableMask(false);
694
+ this.addClass( "@non-maskable" );
694
695
 
695
696
  props.tabIndex = false;
696
697
  this.m_list = new ListView(props);
package/src/x4.less CHANGED
@@ -30,7 +30,7 @@
30
30
  **/
31
31
 
32
32
  :root {
33
- --x4-font: "Inter";
33
+ --x4-font: "Helvetica, Arial, Sans-Serif";
34
34
  --x4-font-size: 13px;
35
35
 
36
36
  --x4-base-color: #266888;
@@ -75,7 +75,7 @@
75
75
  --x4-icon-angle-down: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" fill="currentColor"><path d="M192 384c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L192 306.8l137.4-137.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-160 160C208.4 380.9 200.2 384 192 384z"/></svg>';
76
76
  --x4-icon-calendar-days: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill="currentColor"><path d="M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V160H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM0 192H448V464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192zM64 304C64 312.8 71.16 320 80 320H112C120.8 320 128 312.8 128 304V272C128 263.2 120.8 256 112 256H80C71.16 256 64 263.2 64 272V304zM192 304C192 312.8 199.2 320 208 320H240C248.8 320 256 312.8 256 304V272C256 263.2 248.8 256 240 256H208C199.2 256 192 263.2 192 272V304zM336 256C327.2 256 320 263.2 320 272V304C320 312.8 327.2 320 336 320H368C376.8 320 384 312.8 384 304V272C384 263.2 376.8 256 368 256H336zM64 432C64 440.8 71.16 448 80 448H112C120.8 448 128 440.8 128 432V400C128 391.2 120.8 384 112 384H80C71.16 384 64 391.2 64 400V432zM208 384C199.2 384 192 391.2 192 400V432C192 440.8 199.2 448 208 448H240C248.8 448 256 440.8 256 432V400C256 391.2 248.8 384 240 384H208zM320 432C320 440.8 327.2 448 336 448H368C376.8 448 384 440.8 384 432V400C384 391.2 376.8 384 368 384H336C327.2 384 320 391.2 320 400V432z"/></svg>';
77
77
  --x4-icon-tip: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="currentColor"><path d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 464c-114.7 0-208-93.31-208-208S141.3 48 256 48s208 93.31 208 208S370.7 464 256 464zM296 336h-16V248C280 234.8 269.3 224 256 224H224C210.8 224 200 234.8 200 248S210.8 272 224 272h8v64h-16C202.8 336 192 346.8 192 360S202.8 384 216 384h80c13.25 0 24-10.75 24-24S309.3 336 296 336zM256 192c17.67 0 32-14.33 32-32c0-17.67-14.33-32-32-32S224 142.3 224 160C224 177.7 238.3 192 256 192z"/></svg>';
78
- --x4-check: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill="currentColor"><path d="M440.1 103C450.3 112.4 450.3 127.6 440.1 136.1L176.1 400.1C167.6 410.3 152.4 410.3 143 400.1L7.029 264.1C-2.343 255.6-2.343 240.4 7.029 231C16.4 221.7 31.6 221.7 40.97 231L160 350.1L407 103C416.4 93.66 431.6 93.66 440.1 103V103z"/></svg>';
78
+ --x4-icon-check: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" fill="currentColor"><path d="M440.1 103C450.3 112.4 450.3 127.6 440.1 136.1L176.1 400.1C167.6 410.3 152.4 410.3 143 400.1L7.029 264.1C-2.343 255.6-2.343 240.4 7.029 231C16.4 221.7 31.6 221.7 40.97 231L160 350.1L407 103C416.4 93.66 431.6 93.66 440.1 103V103z"/></svg>';
79
79
  }
80
80
 
81
81
  @BLACK10: rgba(0,0,0,0.1);
@@ -878,8 +878,9 @@ textarea {
878
878
  }
879
879
 
880
880
  &:hover {
881
- background-color: #c6d3d9;
882
- color: var( --gray-900 );
881
+ background-color: var( --x4-hover-color);
882
+ color: var(--x4-hover-text);
883
+
883
884
  .x-icon {
884
885
  color: var( --gray-900 );
885
886
  }
@@ -1401,7 +1402,7 @@ textarea {
1401
1402
  .x-row {
1402
1403
  position: absolute;
1403
1404
  width: calc( 100% - @bwidth ); // todo: border of 1st col
1404
- border-bottom: 1px solid #f0f0f0;
1405
+ border-bottom: 1px solid #d0d0d0;
1405
1406
  align-items: center;
1406
1407
  height: @def-height;
1407
1408
 
@@ -1411,14 +1412,16 @@ textarea {
1411
1412
  }
1412
1413
 
1413
1414
  .x-cell {
1414
- border-right: 1px solid #f0f0f0;
1415
+ border-right: 1px solid #d0d0d0;
1415
1416
 
1416
1417
  &.center {
1417
1418
  text-align: center;
1419
+ justify-content: center;
1418
1420
  }
1419
1421
 
1420
1422
  &.right {
1421
1423
  text-align: right;
1424
+ justify-content: right;
1422
1425
  }
1423
1426
  }
1424
1427
 
package/src/x4events.ts CHANGED
@@ -108,11 +108,14 @@ export function EvChange(value: unknown, context = null ) {
108
108
  * value is the new selection or null
109
109
  */
110
110
 
111
+ interface X4Selection {
112
+ }
113
+
111
114
  export interface EvSelectionChange extends BasicEvent {
112
- readonly selection: unknown;
115
+ readonly selection: X4Selection;
113
116
  }
114
117
 
115
- export function EvSelectionChange( selection: unknown, context = null ) {
118
+ export function EvSelectionChange( selection: X4Selection, context = null ) {
116
119
  return BasicEvent<EvSelectionChange>( { selection, context } );
117
120
  }
118
121