x4js 2.0.14 → 2.0.17

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.
Files changed (75) hide show
  1. package/lib/cjs/x4.css +1 -1
  2. package/lib/cjs/x4.js +2 -2
  3. package/lib/esm/x4.css +1 -1
  4. package/lib/esm/x4.mjs +2 -2
  5. package/lib/src/components/boxes/boxes.ts +101 -9
  6. package/lib/src/components/canvas/canvas_ex.ts +13 -6
  7. package/lib/src/components/components.ts +2 -1
  8. package/lib/src/components/dialog/dialog.module.scss +3 -4
  9. package/lib/src/components/dialog/dialog.ts +19 -2
  10. package/lib/src/components/form/form.ts +1 -1
  11. package/lib/src/components/icon/icon.module.scss +1 -0
  12. package/lib/src/components/icon/icon.ts +0 -2
  13. package/lib/src/components/input/input.ts +46 -22
  14. package/lib/src/components/keyboard/keyboard.ts +29 -28
  15. package/lib/src/components/menu/menu.ts +2 -2
  16. package/lib/src/components/popup/popup.module.scss +6 -0
  17. package/lib/src/components/popup/popup.ts +5 -3
  18. package/lib/src/components/propgrid/progrid.module.scss +4 -0
  19. package/lib/src/components/propgrid/propgrid.ts +22 -5
  20. package/lib/src/components/sizers/sizer.ts +2 -1
  21. package/lib/src/components/tabs/tabs.ts +6 -0
  22. package/lib/src/components/textedit/textedit.ts +26 -21
  23. package/lib/src/core/component.ts +15 -21
  24. package/lib/src/core/core_application.ts +2 -1
  25. package/lib/src/core/core_data.ts +9 -8
  26. package/lib/src/core/core_element.ts +5 -0
  27. package/lib/src/core/core_i18n.ts +1 -1
  28. package/lib/src/core/core_router.ts +2 -2
  29. package/lib/src/core/core_state.ts +62 -0
  30. package/lib/src/core/core_svg.ts +1 -0
  31. package/lib/src/x4.ts +4 -0
  32. package/lib/styles/x4.css +1 -1
  33. package/lib/types/x4js.d.ts +369 -234
  34. package/package.json +18 -28
  35. package/src/components/boxes/boxes.ts +101 -9
  36. package/src/components/canvas/canvas.ts +1 -1
  37. package/src/components/canvas/canvas_ex.ts +13 -6
  38. package/src/components/components.ts +2 -1
  39. package/src/components/dialog/dialog.module.scss +3 -4
  40. package/src/components/dialog/dialog.ts +19 -2
  41. package/src/components/form/form.ts +1 -1
  42. package/src/components/icon/icon.module.scss +1 -0
  43. package/src/components/icon/icon.ts +0 -2
  44. package/src/components/input/input.ts +46 -22
  45. package/src/components/keyboard/keyboard.ts +29 -28
  46. package/src/components/menu/menu.ts +2 -2
  47. package/src/components/popup/popup.module.scss +6 -0
  48. package/src/components/popup/popup.ts +5 -3
  49. package/src/components/propgrid/progrid.module.scss +4 -0
  50. package/src/components/propgrid/propgrid.ts +22 -5
  51. package/src/components/sizers/sizer.ts +2 -1
  52. package/src/components/tabs/tabs.ts +6 -0
  53. package/src/components/textedit/textedit.ts +26 -21
  54. package/src/core/component.ts +15 -21
  55. package/src/core/core_application.ts +2 -1
  56. package/src/core/core_data.ts +9 -8
  57. package/src/core/core_element.ts +5 -0
  58. package/src/core/core_i18n.ts +1 -1
  59. package/src/core/core_router.ts +2 -2
  60. package/src/core/core_state.ts +62 -0
  61. package/src/core/core_svg.ts +1 -0
  62. package/src/x4.ts +4 -0
  63. package/.vscode/launch.json +0 -14
  64. package/demo/assets/house-light.svg +0 -1
  65. package/demo/assets/radio.svg +0 -4
  66. package/demo/index.html +0 -12
  67. package/demo/main.scss +0 -23
  68. package/demo/main.ts +0 -324
  69. package/demo/package.json +0 -26
  70. package/demo/scss.d.ts +0 -4
  71. package/demo/svg.d.ts +0 -1
  72. package/demo/tsconfig.json +0 -14
  73. package/scripts/build.mjs +0 -378
  74. package/scripts/prepack.mjs +0 -346
  75. package/tsconfig.json +0 -14
@@ -12,7 +12,7 @@
12
12
  * that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
13
13
  *
14
14
  * AUTOGENERATED CODE, DO NOT MODIFY
15
- * generated on Tue Apr 22 2025
15
+ * generated on Tue Jul 22 2025
16
16
  */
17
17
 
18
18
 
@@ -294,6 +294,8 @@ declare module 'x4js' {
294
294
 
295
295
  type ComponentAttributes = Record<string,string|number|boolean>;
296
296
 
297
+ type CreateComponentCallBack = ( attrs: Record<string,string> ) => ComponentContent;
298
+
297
299
  type ComponentContent = Component | Component[] | string | string[] | UnsafeHtml | UnsafeHtml[] | number | boolean;
298
300
 
299
301
  export interface ComponentProps {
@@ -325,22 +327,22 @@ declare module 'x4js' {
325
327
  dom: Element;
326
328
  props: P;
327
329
  clsprefix: string;
328
- #store: Map<string|Symbol,any>;
330
+ #store: Map<string|symbol,any>;
329
331
  constructor( props: P );
330
332
  hasClass( cls: string ): void;
331
333
  addClass( cls: string ): void;
332
334
  removeClass( cls: string ): void;
333
335
  removeClassEx( re: RegExp ): void;
334
336
  toggleClass( cls: string ): void;
335
- setClass( cls: string, set: boolean ): void;
336
- setAttributes( attrs: ComponentAttributes ): void;
337
+ setClass( cls: string, set: boolean ): this;
338
+ setAttributes( attrs: ComponentAttributes ): this;
337
339
  setAttribute( name: string, value: string | number | boolean ): void;
338
340
  getAttribute( name: string ): string;
339
341
  getData( name: string ): string;
340
342
  getIntData( name: string ): number;
341
343
  setData( name: string, value: string ): void;
342
- setInternalData( name: string|Symbol, value: any ): this;
343
- getInternalData( name: string|Symbol ): any;
344
+ setInternalData( name: string|symbol, value: any ): this;
345
+ getInternalData( name: string|symbol ): any;
344
346
  addDOMEvent<K extends keyof GlobalDOMEvents>( name: K, listener: GlobalDOMEvents[K], prepend: any ): void;
345
347
  setDOMEvents( events: GlobalDOMEvents ): void;
346
348
  mapPropEvents<N extends keyof E>( props: P, elements: N[] ): void;
@@ -362,7 +364,7 @@ declare module 'x4js' {
362
364
  getComputedStyle( ): void;
363
365
  setCapture( pointerId: number ): void;
364
366
  releaseCapture( pointerId: number ): void;
365
- getBoundingRect( ): IRect;
367
+ getBoundingRect( ): Rect;
366
368
  focus( ): this;
367
369
  hasFocus( ): void;
368
370
  scrollIntoView( arg: boolean | ScrollIntoViewOptions ): void;
@@ -381,7 +383,7 @@ declare module 'x4js' {
381
383
  enumChildComponents( recursive: boolean ): void;
382
384
  enumChildNodes( recursive: boolean ): void;
383
385
  animate( keyframes: Keyframe[], duration: number ): void;
384
- createElement( clsOrTag: string | ComponentConstructor | Symbol | Function, attrs: any, children: Component[] ): Component | Component[];
386
+ createElement( clsOrTag: string | ComponentConstructor | symbol | CreateComponentCallBack, attrs: any, children: Component[] ): Component | Component[];
385
387
  createFragment( ): Component[];
386
388
  queryInterface<T>( name: string ): T;
387
389
  }
@@ -421,11 +423,6 @@ declare module 'x4js' {
421
423
  uievent: UIEvent;
422
424
  }
423
425
 
424
- export interface EvMessage extends ComponentEvent {
425
- msg: string;
426
- params?: any;
427
- }
428
-
429
426
  export interface EvDrag extends ComponentEvent {
430
427
  element: unknown;
431
428
  data: any;
@@ -439,6 +436,43 @@ declare module 'x4js' {
439
436
  export interface EvDblClick extends ComponentEvent {
440
437
  }
441
438
 
439
+ // ---------------------------------------
440
+ // from /src/core/core_application.ts
441
+
442
+ export interface EvMessage extends CoreEvent {
443
+ msg: string;
444
+ params: any;
445
+ }
446
+
447
+ export interface ApplicationEvents extends EventMap {
448
+ global: EvMessage;
449
+ message: EvMessage;
450
+ }
451
+
452
+ class Process {
453
+ getMaxTouchPoints( ): void;
454
+ }
455
+
456
+ export class Application<E extends ApplicationEvents = ApplicationEvents> extends CoreElement<E> {
457
+ env: any;
458
+ mainview: Component;
459
+ process: any;
460
+ constructor( );
461
+ setMainView( view: Component ): void;
462
+ instance<P extends Application = Application>( ): P;
463
+ getMainView( ): void;
464
+ setEnv( name: string, value: any ): void;
465
+ getEnv( name: string, def_value: any ): void;
466
+ fireGlobal( msg: string, params: any ): void;
467
+ _setupKeyboard( ): void;
468
+ focusNext( next: boolean ): void;
469
+ setupSocketMessaging( path: string, looseCallback: ( ) => void ): void;
470
+ getStorage( name: string ): string;
471
+ getStorageJSON( name: string ): any;
472
+ setStorage( name: string, value: string | number ): void;
473
+ setStorageJSON( name: string, value: any ): void;
474
+ }
475
+
442
476
  // ---------------------------------------
443
477
  // from /src/core/core_colors.ts
444
478
 
@@ -474,6 +508,177 @@ declare module 'x4js' {
474
508
  isInvalid( ): void;
475
509
  }
476
510
 
511
+ // ---------------------------------------
512
+ // from /src/core/core_data.ts
513
+
514
+ type DataRecordID = any;
515
+
516
+ type DataFieldValue = string | Date | number | boolean;
517
+
518
+ type ChangeCallback = (type: string, id?: DataRecordID) => void;
519
+
520
+ type CalcCallback = () => string;
521
+
522
+ type FieldType = 'string' | 'int' | 'float' | 'date' | 'bool' | 'array' | 'object' | 'any' | 'calc';
523
+
524
+ type DataIndex = Uint32Array;
525
+
526
+ export interface EvDataChange extends CoreEvent {
527
+ change_type: 'create' | 'update' | 'delete' | 'data' | 'change';
528
+ id?: DataRecordID;
529
+ }
530
+
531
+ export interface MetaData {
532
+ type?: FieldType;
533
+ prec?: number;
534
+ required?: boolean;
535
+ calc?: (rec: DataRecord) => any;
536
+ model?: DataModel;
537
+ }
538
+
539
+ export interface FieldInfo extends MetaData {
540
+ name: string;
541
+ }
542
+
543
+ class MetaInfos {
544
+ name: string;
545
+ id: string;
546
+ fields: FieldInfo[];
547
+ constructor( name: string );
548
+ }
549
+
550
+ interface ModelConstructor {
551
+ }
552
+
553
+ export class DataModel {
554
+ getFields( ): FieldInfo[];
555
+ validate( record: DataRecord ): Error[];
556
+ getFieldIndex( name: string ): number;
557
+ serialize<T = any>( input: DataRecord ): T;
558
+ unSerialize( data: any, id: DataRecordID ): DataRecord;
559
+ _convertField( field: FieldInfo, input: any ): any;
560
+ getID( rec: DataRecord ): any;
561
+ getRaw( name: string | number, rec: DataRecord ): any;
562
+ getField( name: string, rec: DataRecord ): string;
563
+ }
564
+
565
+ export class DataRecord {
566
+ }
567
+
568
+ interface DataEventMap extends EventMap {
569
+ change?: EvChange;
570
+ }
571
+
572
+ type DataSolver = ( data: any ) => DataRecord[];
573
+
574
+ export interface DataProxyProps {
575
+ url: string;
576
+ params?: string[];
577
+ solver?: DataSolver;
578
+ }
579
+
580
+ export class DataProxy extends CoreElement<DataEventMap> {
581
+ m_props: DataProxyProps;
582
+ constructor( props: DataProxyProps );
583
+ load( url: string ): void;
584
+ }
585
+
586
+ interface DataStoreProps {
587
+ model: DataModel;
588
+ data?: any[];
589
+ url?: string;
590
+ autoload?: false;
591
+ solver?: DataSolver;
592
+ }
593
+
594
+ interface DataStoreEventMap extends EventMap {
595
+ data_change: EvDataChange;
596
+ }
597
+
598
+ export class DataStore extends EventSource<DataStoreEventMap> {
599
+ m_model: DataModel;
600
+ m_fields: FieldInfo[];
601
+ m_records: DataRecord[];
602
+ m_proxy: DataProxy;
603
+ m_rec_index: DataIndex;
604
+ constructor( props: DataStoreProps );
605
+ load( url: string ): void;
606
+ reload( ): void;
607
+ setData( records: any[] ): void;
608
+ setRawData( records: DataRecord[] ): void;
609
+ _rebuildIndex( ): void;
610
+ update( rec: DataRecord ): void;
611
+ append( rec: DataRecord | any ): void;
612
+ getMaxId( ): void;
613
+ delete( id: DataRecordID ): boolean;
614
+ indexOfId( id: DataRecordID ): number;
615
+ getById( id: DataRecordID ): DataRecord;
616
+ getByIndex( index: number ): DataRecord;
617
+ _getRecord( index: number ): DataRecord;
618
+ moveTo( other: DataStore ): void;
619
+ createView( opts: DataViewProps ): DataView;
620
+ createIndex( filter: FilterInfo ): DataIndex;
621
+ sortIndex( index: DataIndex, sort: SortProp[] ): void;
622
+ forEach( cb: ( rec: DataRecord, index: number ) => any ): void;
623
+ export( ): void;
624
+ changed( ): void;
625
+ getModel( ): void;
626
+ }
627
+
628
+ export interface EvViewChange extends CoreEvent {
629
+ change_type: "change" | "filter" | "sort";
630
+ }
631
+
632
+ interface DataViewEventMap extends EventMap {
633
+ view_change: EvViewChange;
634
+ }
635
+
636
+ interface DataViewProps {
637
+ store?: DataStore;
638
+ filter?: FilterInfo;
639
+ order?: string | SortProp[] | SortProp;
640
+ }
641
+
642
+ type FilterFunc = ( rec: DataRecord ) => boolean;
643
+
644
+ export interface FilterInfo {
645
+ op: '<' | '<=' | '=' | '>=' | '>' | '<>' | 'empty-result' | FilterFunc;
646
+ field?: string;
647
+ value?: string | RegExp;
648
+ caseSensitive?: boolean;
649
+ }
650
+
651
+ export interface SortProp {
652
+ field: string;
653
+ ascending: boolean;
654
+ numeric?: boolean;
655
+ }
656
+
657
+ export class DataView extends CoreElement<DataViewEventMap> {
658
+ m_index: DataIndex;
659
+ m_store: DataStore;
660
+ m_model: DataModel;
661
+ m_sort: SortProp[];
662
+ m_filter: FilterInfo;
663
+ m_props: DataViewProps;
664
+ constructor( props: DataViewProps );
665
+ _storeChange( ev: EvDataChange ): void;
666
+ filter( filter: FilterInfo ): number;
667
+ _filter( filter: FilterInfo, notify: boolean ): number;
668
+ sort( props: SortProp[] ): void;
669
+ _sort( props: SortProp[], notify: boolean ): void;
670
+ getStore( ): void;
671
+ getCount( ): void;
672
+ indexOfId( id: DataRecordID ): number;
673
+ getByIndex( index: number ): DataRecord;
674
+ getIdByIndex( index: number ): DataRecordID;
675
+ getRecId( rec: DataRecord ): DataRecordID;
676
+ getById( id: DataRecordID ): DataRecord;
677
+ getModel( ): void;
678
+ changed( ): void;
679
+ forEach( cb: ( rec: DataRecord, index: number ) => any ): void;
680
+ }
681
+
477
682
  // ---------------------------------------
478
683
  // from /src/core/core_dragdrop.ts
479
684
 
@@ -498,6 +703,14 @@ declare module 'x4js' {
498
703
  _check( ): void;
499
704
  }
500
705
 
706
+ // ---------------------------------------
707
+ // from /src/core/core_react.ts
708
+
709
+ export class x4_react {
710
+ create_element( tag: string, props: any, content: any[] ): Component;
711
+ create_element<X extends Component>( tag: string | Constructor<X>, props: X["props"], content: any[] ): void;
712
+ }
713
+
501
714
  // ---------------------------------------
502
715
  // from /src/core/core_router.ts
503
716
 
@@ -530,6 +743,22 @@ declare module 'x4js' {
530
743
  _find( url: string ): { params: Record<string,any>, handlers: RouteHandler[] };
531
744
  }
532
745
 
746
+ // ---------------------------------------
747
+ // from /src/core/core_state.ts
748
+
749
+ type StateData = boolean | number | string | Date | any;
750
+
751
+ type State = Record<string,StateData>;
752
+
753
+ export class StateManager {
754
+ _state: StateData;
755
+ _subscribers: Map<string,any>;
756
+ _currentTracking: Set<string>;
757
+ constructor( initialState: StateData );
758
+ getState( path: string, defaultValue: StateData ): void;
759
+ setState( path: string, value: StateData, context: any ): void;
760
+ }
761
+
533
762
  // ---------------------------------------
534
763
  // from /src/core/core_svg.ts
535
764
 
@@ -655,38 +884,61 @@ declare module 'x4js' {
655
884
  interface StackItem {
656
885
  name: string;
657
886
  content: Component | ContentBuilder;
887
+ title?: string;
888
+ }
889
+
890
+ interface StackeBoxEvents extends ComponentEvents {
891
+ pageChange?: EvSelectionChange;
658
892
  }
659
893
 
660
- interface StackedLayoutProps extends Omit<ComponentProps,"content"> {
894
+ export interface StackBoxProps extends Omit<ComponentProps,"content"> {
661
895
  default: string;
662
896
  items: StackItem[];
897
+ pageChange?: EventCallback<EvSelectionChange>;
663
898
  }
664
899
 
665
900
  interface StackItemEx extends StackItem {
666
901
  page: Component;
667
902
  }
668
903
 
669
- @class_ns( "x4" ) export class StackBox extends Box<StackedLayoutProps> {
904
+ @class_ns( "x4" ) export class StackBox<P extends StackBoxProps = StackBoxProps, E extends StackeBoxEvents = StackeBoxEvents> extends Box<StackBoxProps,StackeBoxEvents> {
670
905
  _items: StackItemEx[];
671
- constructor( props: StackedLayoutProps );
906
+ _cur: number;
907
+ constructor( props: StackBoxProps );
672
908
  addItem( item: StackItem ): void;
673
909
  select( name: string ): void;
674
910
  _createPage( page: StackItemEx ): void;
675
911
  getPage( name: string ): void;
912
+ getItem( name: string ): void;
913
+ getCurPage( ): void;
914
+ }
915
+
916
+ @class_ns( "x4" ) export class AssistBox extends StackBox {
917
+ selectNextPage( nxt: any ): void;
918
+ isFirstPage( ): void;
919
+ isLastPage( ): void;
676
920
  }
677
921
 
678
- export interface GridboxProps extends BoxProps {
922
+ interface GridBoxItem {
923
+ row: number;
924
+ col: number;
925
+ item: Component;
926
+ }
927
+
928
+ export interface GridBoxProps extends Omit<BoxProps,"content"> {
679
929
  rows?: number | string | string[];
680
930
  columns?: number | string | string[];
931
+ items?: GridBoxItem[];
681
932
  }
682
933
 
683
- @class_ns("x4") export class GridBox<P extends GridboxProps=GridboxProps, E extends ComponentEvents=ComponentEvents> extends Box<P,E> {
934
+ @class_ns("x4") export class GridBox<P extends GridBoxProps=GridBoxProps, E extends ComponentEvents=ComponentEvents> extends Box<P,E> {
684
935
  constructor( props: P );
685
936
  setRows( r: number | string | string[] ): void;
686
937
  setCols( r: number | string | string[] ): void;
687
938
  setRowCount( n: number ): void;
688
939
  setColCount( n: number ): void;
689
940
  setTemplate( t: string[] ): void;
941
+ setItems( items: GridBoxItem[] ): void;
690
942
  }
691
943
 
692
944
  interface MasonryProps extends Omit<BoxProps,"content"> {
@@ -833,7 +1085,7 @@ declare module 'x4js' {
833
1085
  stop: ComponentEvent;
834
1086
  }
835
1087
 
836
- type SizerType = "left" | "top" | "right" | "bottom";
1088
+ type SizerType = "left" | "top" | "right" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right";
837
1089
 
838
1090
  @class_ns( "x4" ) export class CSizer extends Component<ComponentProps,CSizerEvent> {
839
1091
  _type: SizerType;
@@ -862,7 +1114,7 @@ declare module 'x4js' {
862
1114
  _ismodal: any;
863
1115
  constructor( props: P );
864
1116
  displayNear( rc: Rect, dst: any, src: any, offset: any ): void;
865
- displayCenter( ): void;
1117
+ displayCenter( center: any ): void;
866
1118
  displayAt( x: number, y: number ): void;
867
1119
  isOpen( ): void;
868
1120
  _do_hide( ): void;
@@ -912,6 +1164,7 @@ declare module 'x4js' {
912
1164
 
913
1165
  @class_ns("x4") export class Dialog<P extends DialogProps = DialogProps, E extends DialogEvents = DialogEvents> extends Popup<P, E> {
914
1166
  form: Form;
1167
+ _title: Label;
915
1168
  constructor( props: P );
916
1169
  focusNext( next: boolean ): boolean;
917
1170
  setContent( form: Form ): void;
@@ -919,6 +1172,8 @@ declare module 'x4js' {
919
1172
  getValues( ): void;
920
1173
  getButton( name: string ): void;
921
1174
  queryInterface<T extends IComponentInterface>( name: string ): T;
1175
+ setTitle( title: string ): void;
1176
+ getBtnBar( ): void;
922
1177
  }
923
1178
 
924
1179
  // ---------------------------------------
@@ -1005,12 +1260,60 @@ declare module 'x4js' {
1005
1260
  setDate( date: Date ): void;
1006
1261
  }
1007
1262
 
1263
+ // ---------------------------------------
1264
+ // from /src/components/canvas/canvas_ex.ts
1265
+
1266
+ export interface CanvasEx extends CanvasRenderingContext2D {
1267
+ width: number;
1268
+ height: number;
1269
+ smoothLine( points: any[], path: CanvasPath, move: boolean ): void;
1270
+ smoothLineEx( _points: any[], tension: number, numOfSeg: number, path: CanvasPath, move: boolean, close: boolean ): void;
1271
+ line( x1: number, y1: number, x2: number, y2: number, color: string, lineWidth: number ): void;
1272
+ roundRect( x: number, y: number, width: number, height: number, radius: number ): void;
1273
+ calcTextSize( text: string, rounded: boolean ): { width: number, height: number };
1274
+ setFontSize( fs: number ): void;
1275
+ circle( x: number, y: number, radius: number ): void;
1276
+ }
1277
+
1278
+ // ---------------------------------------
1279
+ // from /src/components/canvas/canvas.ts
1280
+
1281
+ export interface EvPaint extends ComponentEvent {
1282
+ ctx: CanvasEx;
1283
+ }
1284
+
1285
+ interface CanvasEventMap extends ComponentEvents {
1286
+ paint: EvPaint;
1287
+ }
1288
+
1289
+ export interface CanvasProps extends ComponentProps {
1290
+ paint: EventCallback<EvPaint>;
1291
+ clear?: boolean;
1292
+ }
1293
+
1294
+ @class_ns( "x4" ) export class Canvas extends Component<CanvasProps, CanvasEventMap> {
1295
+ m_iwidth: number;
1296
+ m_iheight: number;
1297
+ m_scale: any;
1298
+ m_canvas: Component;
1299
+ constructor( props: CanvasProps );
1300
+ scale( scale: number ): void;
1301
+ getContext( ): void;
1302
+ $update_rep: any;
1303
+ redraw( wait: number ): void;
1304
+ _paint( ): void;
1305
+ paint( ctx: CanvasEx ): void;
1306
+ }
1307
+
1008
1308
  // ---------------------------------------
1009
1309
  // from /src/components/input/input.ts
1010
1310
 
1011
1311
  export interface BaseProps extends ComponentProps {
1012
1312
  name?: string;
1013
1313
  autofocus?: boolean;
1314
+ required?: boolean;
1315
+ readonly?: boolean;
1316
+ placeholder?: string;
1014
1317
  focus?: EventCallback<EvFocus>;
1015
1318
  change?: EventCallback<EvChange>;
1016
1319
  }
@@ -1023,53 +1326,58 @@ declare module 'x4js' {
1023
1326
 
1024
1327
  interface RadioProps extends BaseProps {
1025
1328
  type: "radio";
1026
- value: boolean | number | string;
1329
+ value?: boolean | number | string;
1027
1330
  checked?: boolean;
1028
1331
  }
1029
1332
 
1030
1333
  export interface RangeProps extends BaseProps {
1031
1334
  type: "range";
1032
- value: number;
1335
+ value?: number;
1033
1336
  min: number;
1034
1337
  max: number;
1035
1338
  step?: number;
1036
1339
  }
1037
1340
 
1038
- interface DateProps extends BaseProps {
1341
+ export interface FileProps extends BaseProps {
1342
+ type: "file";
1343
+ accept: string | string[];
1344
+ value?: never;
1345
+ }
1346
+
1347
+ export interface DateProps extends BaseProps {
1039
1348
  type: "date";
1349
+ value?: Date | string;
1350
+ }
1351
+
1352
+ export interface TimeProps extends BaseProps {
1353
+ type: "time";
1040
1354
  readonly?: boolean;
1041
1355
  required?: boolean;
1042
- value: Date | string;
1356
+ value?: string;
1043
1357
  }
1044
1358
 
1045
- interface NumberProps extends BaseProps {
1359
+ export interface NumberProps extends BaseProps {
1046
1360
  type: "number";
1047
1361
  readonly?: boolean;
1048
1362
  required?: boolean;
1049
- value: number | string;
1363
+ value?: number | string;
1050
1364
  min?: number;
1051
1365
  max?: number;
1052
1366
  step?: number;
1053
1367
  }
1054
1368
 
1055
- interface FileProps extends BaseProps {
1056
- type: "file";
1057
- accept: string | string[];
1058
- }
1059
-
1060
1369
  export interface TextInputProps extends BaseProps {
1061
- type: "text" | "email" | "password" | "date" | "number";
1370
+ type?: "text" | "email" | "password";
1062
1371
  readonly?: boolean;
1063
1372
  required?: boolean;
1064
1373
  pattern?: string;
1065
1374
  value?: string | number;
1066
- placeholder?: string;
1067
1375
  spellcheck?: boolean;
1068
1376
  minlength?: number;
1069
1377
  maxlength?: number;
1070
1378
  }
1071
1379
 
1072
- type InputProps = CheckboxProps | RadioProps | TextInputProps | RangeProps | DateProps | NumberProps | FileProps;
1380
+ type InputProps = TextInputProps | CheckboxProps | RadioProps | RangeProps | DateProps | NumberProps | FileProps | TimeProps;
1073
1381
 
1074
1382
  interface InputEvents extends ComponentEvent {
1075
1383
  focus: EvFocus;
@@ -1082,7 +1390,7 @@ declare module 'x4js' {
1082
1390
  on_change( ev: InputEvent ): void;
1083
1391
  getValue( ): void;
1084
1392
  setValue( value: string ): void;
1085
- getNumValue( ): void;
1393
+ getNumValue( defNan: number ): void;
1086
1394
  setNumValue( value: number, ndec: any ): void;
1087
1395
  getCheck( ): void;
1088
1396
  setCheck( ck: boolean ): void;
@@ -1380,177 +1688,6 @@ declare module 'x4js' {
1380
1688
  constructor( props: FileDropProps );
1381
1689
  }
1382
1690
 
1383
- // ---------------------------------------
1384
- // from /src/core/core_data.ts
1385
-
1386
- type DataRecordID = any;
1387
-
1388
- type DataFieldValue = string | Date | number | boolean;
1389
-
1390
- type ChangeCallback = (type: string, id?: DataRecordID) => void;
1391
-
1392
- type CalcCallback = () => string;
1393
-
1394
- type FieldType = 'string' | 'int' | 'float' | 'date' | 'bool' | 'array' | 'object' | 'any' | 'calc';
1395
-
1396
- type DataIndex = Uint32Array;
1397
-
1398
- export interface EvDataChange extends CoreEvent {
1399
- change_type: 'create' | 'update' | 'delete' | 'data' | 'change';
1400
- id?: DataRecordID;
1401
- }
1402
-
1403
- export interface MetaData {
1404
- type?: FieldType;
1405
- prec?: number;
1406
- required?: boolean;
1407
- calc?: (rec: DataRecord) => any;
1408
- model?: DataModel;
1409
- }
1410
-
1411
- export interface FieldInfo extends MetaData {
1412
- name: string;
1413
- }
1414
-
1415
- class MetaInfos {
1416
- name: string;
1417
- id: string;
1418
- fields: FieldInfo[];
1419
- constructor( name: string );
1420
- }
1421
-
1422
- interface ModelConstructor {
1423
- }
1424
-
1425
- export class DataModel {
1426
- getFields( ): FieldInfo[];
1427
- validate( record: DataRecord ): Error[];
1428
- getFieldIndex( name: string ): number;
1429
- serialize( input: DataRecord ): any;
1430
- unSerialize( data: any, id: DataRecordID ): DataRecord;
1431
- _convertField( field: FieldInfo, input: any ): any;
1432
- getID( rec: DataRecord ): any;
1433
- getRaw( name: string | number, rec: DataRecord ): any;
1434
- getField( name: string, rec: DataRecord ): string;
1435
- }
1436
-
1437
- export class DataRecord {
1438
- }
1439
-
1440
- interface DataEventMap extends EventMap {
1441
- change?: EvChange;
1442
- }
1443
-
1444
- type DataSolver = ( data: any ) => DataRecord[];
1445
-
1446
- export interface DataProxyProps {
1447
- url: string;
1448
- params?: string[];
1449
- solver?: DataSolver;
1450
- }
1451
-
1452
- export class DataProxy extends CoreElement<DataEventMap> {
1453
- m_props: DataProxyProps;
1454
- constructor( props: DataProxyProps );
1455
- load( url: string ): void;
1456
- }
1457
-
1458
- interface DataStoreProps {
1459
- model: DataModel;
1460
- data?: any[];
1461
- url?: string;
1462
- autoload?: false;
1463
- solver?: DataSolver;
1464
- }
1465
-
1466
- interface DataStoreEventMap extends EventMap {
1467
- data_change: EvDataChange;
1468
- }
1469
-
1470
- export class DataStore extends EventSource<DataStoreEventMap> {
1471
- m_model: DataModel;
1472
- m_fields: FieldInfo[];
1473
- m_records: DataRecord[];
1474
- m_proxy: DataProxy;
1475
- m_rec_index: DataIndex;
1476
- constructor( props: DataStoreProps );
1477
- load( url: string ): void;
1478
- reload( ): void;
1479
- setData( records: any[] ): void;
1480
- setRawData( records: DataRecord[] ): void;
1481
- _rebuildIndex( ): void;
1482
- update( rec: DataRecord ): void;
1483
- append( rec: DataRecord | any ): void;
1484
- getMaxId( ): void;
1485
- delete( id: DataRecordID ): boolean;
1486
- indexOfId( id: DataRecordID ): number;
1487
- getById( id: DataRecordID ): DataRecord;
1488
- getByIndex( index: number ): DataRecord;
1489
- _getRecord( index: number ): DataRecord;
1490
- moveTo( other: DataStore ): void;
1491
- createView( opts: DataViewProps ): DataView;
1492
- createIndex( filter: FilterInfo ): DataIndex;
1493
- sortIndex( index: DataIndex, sort: SortProp[] ): void;
1494
- forEach( cb: ( rec: DataRecord, index: number ) => any ): void;
1495
- export( ): void;
1496
- changed( ): void;
1497
- getModel( ): void;
1498
- }
1499
-
1500
- export interface EvViewChange extends CoreEvent {
1501
- change_type: "change" | "filter" | "sort";
1502
- }
1503
-
1504
- interface DataViewEventMap extends EventMap {
1505
- view_change: EvViewChange;
1506
- }
1507
-
1508
- interface DataViewProps {
1509
- store?: DataStore;
1510
- filter?: FilterInfo;
1511
- order?: string | SortProp[] | SortProp;
1512
- }
1513
-
1514
- type FilterFunc = ( rec: DataRecord ) => boolean;
1515
-
1516
- export interface FilterInfo {
1517
- op: '<' | '<=' | '=' | '>=' | '>' | '<>' | 'empty-result' | FilterFunc;
1518
- field?: string;
1519
- value?: string | RegExp;
1520
- caseSensitive?: boolean;
1521
- }
1522
-
1523
- export interface SortProp {
1524
- field: string;
1525
- ascending: boolean;
1526
- numeric?: boolean;
1527
- }
1528
-
1529
- export class DataView extends CoreElement<DataViewEventMap> {
1530
- m_index: DataIndex;
1531
- m_store: DataStore;
1532
- m_model: DataModel;
1533
- m_sort: SortProp[];
1534
- m_filter: FilterInfo;
1535
- m_props: DataViewProps;
1536
- constructor( props: DataViewProps );
1537
- _storeChange( ev: EvDataChange ): void;
1538
- filter( filter: FilterInfo ): number;
1539
- _filter( filter: FilterInfo, notify: boolean ): number;
1540
- sort( props: SortProp[] ): void;
1541
- _sort( props: SortProp[], notify: boolean ): void;
1542
- getStore( ): void;
1543
- getCount( ): void;
1544
- indexOfId( id: DataRecordID ): number;
1545
- getByIndex( index: number ): DataRecord;
1546
- getIdByIndex( index: number ): DataRecordID;
1547
- getRecId( rec: DataRecord ): DataRecordID;
1548
- getById( id: DataRecordID ): DataRecord;
1549
- getModel( ): void;
1550
- changed( ): void;
1551
- forEach( cb: ( rec: DataRecord, index: number ) => any ): void;
1552
- }
1553
-
1554
1691
  // ---------------------------------------
1555
1692
  // from /src/components/image/image.ts
1556
1693
 
@@ -1863,7 +2000,7 @@ declare module 'x4js' {
1863
2000
  type IValueCB = ( name: string) => IValue;
1864
2001
 
1865
2002
  export interface PropertyValue {
1866
- type: 'boolean' | 'number' | 'string' | 'password' | 'options';
2003
+ type: 'boolean' | 'number' | 'string' | 'password' | 'options' | 'label' | 'button';
1867
2004
  title?: string;
1868
2005
  desc?: string;
1869
2006
  name?: string;
@@ -1953,23 +2090,6 @@ declare module 'x4js' {
1953
2090
  _on_click( ev: MouseEvent ): void;
1954
2091
  }
1955
2092
 
1956
- // ---------------------------------------
1957
- // from /src/components/tickline/tickline.ts
1958
-
1959
- interface TickLineProps extends ComponentProps {
1960
- values: number[];
1961
- min?: number;
1962
- max?: number;
1963
- color?: Color;
1964
- background?: Color;
1965
- type: "bars" | "line";
1966
- }
1967
-
1968
- export class TickLine extends Component<TickLineProps> {
1969
- constructor( props: TickLineProps );
1970
- update( ): void;
1971
- }
1972
-
1973
2093
  // ---------------------------------------
1974
2094
  // from /src/components/slider/slider.ts
1975
2095
 
@@ -2061,10 +2181,12 @@ declare module 'x4js' {
2061
2181
  @class_ns( "x4" ) export class Tabs extends VBox<TabsProps> {
2062
2182
  _list: CTabList;
2063
2183
  _stack: StackBox;
2184
+ _current: string;
2064
2185
  constructor( props: TabsProps );
2065
2186
  selectTab( name: string ): void;
2066
2187
  _onclick( ev: TablistClickEvent ): void;
2067
2188
  getTab( name: string ): void;
2189
+ getCurTab( ): void;
2068
2190
  addTab( item: TabItem ): void;
2069
2191
  }
2070
2192
 
@@ -2096,23 +2218,19 @@ declare module 'x4js' {
2096
2218
  // ---------------------------------------
2097
2219
  // from /src/components/textedit/textedit.ts
2098
2220
 
2099
- interface TextEditProps extends ComponentProps {
2221
+ type TextEditInputs = TextInputProps | NumberProps | DateProps | TimeProps;
2222
+
2223
+ interface TextEditBase {
2100
2224
  label: string | UnsafeHtml;
2101
2225
  labelWidth?: number;
2226
+ inputWidth?: number;
2102
2227
  inputId?: string;
2103
- type?: "text" | "email" | "password" | "date" | "number";
2104
- name?: string;
2105
- readonly?: boolean;
2106
- required?: boolean;
2107
- value: string | number;
2108
- placeholder?: string;
2109
- autofocus?: boolean;
2110
2228
  inputGadgets?: Component[];
2111
2229
  inputAttrs?: any;
2112
- focus?: EventCallback<EvFocus>;
2113
- change?: EventCallback<EvChange>;
2114
2230
  }
2115
2231
 
2232
+ type TextEditProps = TextEditInputs & TextEditBase;
2233
+
2116
2234
  @class_ns( "x4" ) export class TextEdit extends HBox {
2117
2235
  input: Input;
2118
2236
  constructor( props: TextEditProps );
@@ -2121,6 +2239,23 @@ declare module 'x4js' {
2121
2239
  getInput( ): void;
2122
2240
  }
2123
2241
 
2242
+ // ---------------------------------------
2243
+ // from /src/components/tickline/tickline.ts
2244
+
2245
+ interface TickLineProps extends ComponentProps {
2246
+ values: number[];
2247
+ min?: number;
2248
+ max?: number;
2249
+ color?: Color;
2250
+ background?: Color;
2251
+ type: "bars" | "line";
2252
+ }
2253
+
2254
+ export class TickLine extends Component<TickLineProps> {
2255
+ constructor( props: TickLineProps );
2256
+ update( ): void;
2257
+ }
2258
+
2124
2259
  // ---------------------------------------
2125
2260
  // from /src/components/tooltips/tooltips.ts
2126
2261