@zeedhi/common 1.41.0 → 1.44.0

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 (39) hide show
  1. package/dist/zd-common.esm.js +532 -22
  2. package/dist/zd-common.umd.js +531 -20
  3. package/package.json +2 -2
  4. package/types/components/index.d.ts +2 -0
  5. package/types/components/zd-apex-chart/apex-chart.d.ts +152 -1
  6. package/types/components/zd-apex-chart/interfaces.d.ts +35 -3
  7. package/types/components/zd-carousel/carousel.d.ts +10 -0
  8. package/types/components/zd-carousel/interfaces.d.ts +2 -0
  9. package/types/components/zd-code-editor/code-editor.d.ts +5 -1
  10. package/types/components/zd-code-editor/interfaces.d.ts +2 -1
  11. package/types/components/zd-container/container.d.ts +12 -0
  12. package/types/components/zd-container/interfaces.d.ts +3 -0
  13. package/types/components/zd-dialog/dialog.d.ts +11 -0
  14. package/types/components/zd-dialog/interfaces.d.ts +2 -0
  15. package/types/components/zd-dropdown/dropdown.d.ts +4 -0
  16. package/types/components/zd-dropdown/interfaces.d.ts +1 -0
  17. package/types/components/zd-form/form.d.ts +4 -0
  18. package/types/components/zd-form/interfaces.d.ts +1 -0
  19. package/types/components/zd-frame/frame.d.ts +3 -0
  20. package/types/components/zd-frame/interfaces.d.ts +3 -0
  21. package/types/components/zd-grid/grid-editable.d.ts +11 -1
  22. package/types/components/zd-iterable/column.d.ts +2 -0
  23. package/types/components/zd-iterable/interfaces.d.ts +1 -0
  24. package/types/components/zd-list/interfaces.d.ts +3 -0
  25. package/types/components/zd-list/list.d.ts +12 -0
  26. package/types/components/zd-menu/menu-group.d.ts +8 -0
  27. package/types/components/zd-menu/menu-link.d.ts +4 -0
  28. package/types/components/zd-menu/menu.d.ts +2 -0
  29. package/types/components/zd-modal/interfaces.d.ts +2 -0
  30. package/types/components/zd-modal/modal.d.ts +8 -0
  31. package/types/components/zd-select-tree-multiple/interfaces.d.ts +1 -0
  32. package/types/components/zd-select-tree-multiple/select-tree-multiple.d.ts +4 -0
  33. package/types/components/zd-selectable-list/interfaces.d.ts +1 -0
  34. package/types/components/zd-selectable-list/selectable-list.d.ts +4 -4
  35. package/types/components/zd-tabs/interfaces.d.ts +1 -0
  36. package/types/components/zd-tabs/tabs.d.ts +14 -0
  37. package/types/components/zd-tree-grid/tree-grid-editable.d.ts +3 -0
  38. package/types/utils/report/report-type/interfaces.d.ts +1 -0
  39. package/types/utils/themes/themes.d.ts +4 -0
@@ -1,4 +1,4 @@
1
- import { AccessorManager, Event, KeyMap, Metadata, FormatterParserProvider, Validation, Accessor, DatasourceFactory, I18n, MethodNotAssignedError, Loader, Mask, Config, dayjs, isEqual, Router, InstanceNotFoundError, Http, Cookie, normalize, URL as URL$1 } from '@zeedhi/core';
1
+ import { AccessorManager, Event, KeyMap, Metadata, FormatterParserProvider, Validation, Accessor, DatasourceFactory, I18n, MethodNotAssignedError, Loader, Mask, Config, dayjs, Utils, Router, InstanceNotFoundError, Http, Cookie, URL as URL$1 } from '@zeedhi/core';
2
2
  import merge from 'lodash.merge';
3
3
  import debounce from 'lodash.debounce';
4
4
  import isUndefined from 'lodash.isundefined';
@@ -437,6 +437,26 @@ class ApexChart extends ComponentRender {
437
437
  reset: 'zoomReset',
438
438
  },
439
439
  },
440
+ events: {
441
+ animationEnd: this.animationEndEvent.bind(this),
442
+ beforeMount: this.beforeMountEvent.bind(this),
443
+ mounted: this.mountedEvent.bind(this),
444
+ updated: this.updatedEvent.bind(this),
445
+ click: this.clickEvent.bind(this),
446
+ mouseMove: this.mouseMoveEvent.bind(this),
447
+ mouseLeave: this.mouseLeaveEvent.bind(this),
448
+ legendClick: this.legendClickEvent.bind(this),
449
+ markerClick: this.markerClickEvent.bind(this),
450
+ selection: this.selectionEvent.bind(this),
451
+ dataPointSelection: this.dataPointSelectionEvent.bind(this),
452
+ dataPointMouseEnter: this.dataPointMouseEnterEvent.bind(this),
453
+ dataPointMouseLeave: this.dataPointMouseLeaveEvent.bind(this),
454
+ beforeZoom: this.beforeZoomEvent.bind(this),
455
+ beforeResetZoom: this.beforeResetZoomEvent.bind(this),
456
+ zoomed: this.zoomedEvent.bind(this),
457
+ scrolled: this.scrolledEvent.bind(this),
458
+ brushScrolled: this.brushScrolledEvent.bind(this),
459
+ },
440
460
  },
441
461
  };
442
462
  this.chartType = this.getInitValue('chartType', props.chartType, this.chartType);
@@ -479,6 +499,223 @@ class ApexChart extends ComponentRender {
479
499
  }
480
500
  return Promise.resolve();
481
501
  }
502
+ /**
503
+ * Fires when the chart’s initial animation is finished
504
+ * @param chartContext
505
+ * @param config
506
+ * @param element DOM Element
507
+ */
508
+ animationEndEvent(chartContext, options) {
509
+ this.callEvent('chartAnimationEnd', { component: this, chartContext, options });
510
+ }
511
+ /**
512
+ * Fires before the chart has been drawn on screen
513
+ * @param chartContext
514
+ * @param config
515
+ * @param element DOM Element
516
+ */
517
+ beforeMountEvent(chartContext, config) {
518
+ this.callEvent('chartBeforeMount', {
519
+ component: this, chartContext, config,
520
+ });
521
+ }
522
+ /**
523
+ * Fires after the chart has been drawn on screen
524
+ * @param chartContext
525
+ * @param config
526
+ * @param element DOM Element
527
+ */
528
+ mountedEvent(chartContext, config) {
529
+ this.callEvent('chartMounted', {
530
+ component: this, chartContext, config,
531
+ });
532
+ }
533
+ /**
534
+ * Fires when the chart has been dynamically updated either with
535
+ * updateOptions() or updateSeries() functions
536
+ * @param chartContext
537
+ * @param config
538
+ * @param element DOM Element
539
+ */
540
+ updatedEvent(chartContext, config) {
541
+ this.callEvent('chartUpdated', {
542
+ component: this, chartContext, config,
543
+ });
544
+ }
545
+ /**
546
+ * Fires when the chart has been dynamically updated either with
547
+ * updateOptions() or updateSeries() functions
548
+ * @param event Event that triggered the click event
549
+ * @param chartContext
550
+ * @param config
551
+ * @param element DOM Element
552
+ */
553
+ clickEvent(event, chartContext, config) {
554
+ this.callEvent('chartClick', {
555
+ event, component: this, chartContext, config,
556
+ });
557
+ }
558
+ /**
559
+ * Fires when user moves mouse on any area of the chart.
560
+ * @param event Event that triggered the click event
561
+ * @param chartContext
562
+ * @param config
563
+ * @param element DOM Element
564
+ */
565
+ mouseMoveEvent(event, chartContext, config) {
566
+ this.callEvent('chartMouseMove', {
567
+ event, component: this, chartContext, config,
568
+ });
569
+ }
570
+ /**
571
+ * Fires when user moves mouse on any area of the chart.
572
+ * @param event Event that triggered the mouse leave
573
+ * @param chartContext
574
+ * @param config New config
575
+ * @param element DOM Element
576
+ */
577
+ mouseLeaveEvent(event, chartContext, config) {
578
+ this.callEvent('chartMouseLeave', {
579
+ event, component: this, chartContext, config,
580
+ });
581
+ }
582
+ /**
583
+ * Fires when user moves mouse on any area of the chart.
584
+ * @param chartContext
585
+ * @param seriesIndex
586
+ * @param config
587
+ * @param element DOM Element
588
+ */
589
+ legendClickEvent(chartContext, seriesIndex, config) {
590
+ this.callEvent('chartLegendClick', {
591
+ component: this, chartContext, seriesIndex, config,
592
+ });
593
+ }
594
+ /**
595
+ * Fires when user moves mouse on any area of the chart.
596
+ * @param event Event that triggered the marker click
597
+ * @param chartContext
598
+ * @param option New config
599
+ * @param element DOM Element
600
+ */
601
+ markerClickEvent(event, chartContext, config) {
602
+ this.callEvent('chartMarkerClick', {
603
+ event, component: this, chartContext, config,
604
+ });
605
+ }
606
+ /**
607
+ * Fires when user selects rect using the selection tool.
608
+ * The second argument
609
+ * @param chartContext
610
+ * @param config contains the yaxis and xaxis coordinates where user made the selection
611
+ * @param element DOM Element
612
+ */
613
+ selectionEvent(chartContext, config) {
614
+ this.callEvent('chartSelection', {
615
+ component: this, chartContext, config,
616
+ });
617
+ }
618
+ /**
619
+ * Fires when user clicks on a datapoint (bar/column/marker/bubble/donut-slice).
620
+ * @param event Event that triggered when user clicks on a datapoint
621
+ * @param chartContext
622
+ * @param config The config object, also includes additional information like
623
+ * which dataPointIndex was selected of which series.
624
+ * @param element DOM Element
625
+ */
626
+ dataPointSelectionEvent(event, chartContext, config) {
627
+ this.callEvent('chartDataPointSelection', {
628
+ event, component: this, chartContext, config,
629
+ });
630
+ }
631
+ /**
632
+ * Fires when user clicks on a datapoint (bar/column/marker/bubble/donut-slice).
633
+ * @param event Event that triggered when user’s mouse enter on a datapoint
634
+ * @param chartContext
635
+ * @param config The config object, also includes additional information like
636
+ * which dataPointIndex was hovered of particular series.
637
+ * @param element DOM Element
638
+ */
639
+ dataPointMouseEnterEvent(event, chartContext, config) {
640
+ this.callEvent('chartDataPointMouseEnter', {
641
+ event, component: this, chartContext, config,
642
+ });
643
+ }
644
+ /**
645
+ * MouseLeave event for a datapoint (bar/column/marker/bubble/donut-slice).
646
+ * @param event Event that triggered the beforeSlide event
647
+ * @param chartContext
648
+ * @param config
649
+ * @param element DOM Element
650
+ */
651
+ dataPointMouseLeaveEvent(event, chartContext, config) {
652
+ this.callEvent('chartDataPointMouseLeave', {
653
+ event, component: this, chartContext, config,
654
+ });
655
+ }
656
+ /**
657
+ * This function, if defined, runs just before zooming in/out of the chart
658
+ * allowing you to set a custom range for zooming in/out.
659
+ * @param chartContext
660
+ * @param config { min: timestamp, max: timestamp }
661
+ * @param element DOM Element
662
+ */
663
+ beforeZoomEvent(chartContext, config) {
664
+ this.callEvent('chartBeforeZoom', {
665
+ component: this, chartContext, config,
666
+ });
667
+ }
668
+ /**
669
+ * This function, if defined, runs just before the user hits the HOME button
670
+ * on the toolbar to reset the chart to it’s original state. The function
671
+ * allows you to set a custom axes range for the initial view of the chart.
672
+ * @param chartContext
673
+ * @param config { min: timestamp, max: timestamp }
674
+ * @param element DOM Element
675
+ */
676
+ beforeResetZoomEvent(chartContext, config) {
677
+ this.callEvent('chartBeforeResetZoom', {
678
+ component: this, chartContext, config,
679
+ });
680
+ }
681
+ /**
682
+ * Fires when user zooms in/out the chart using either the selection zooming
683
+ * tool or zoom in/out buttons.
684
+ * The 2nd argument includes information of the new xaxis/yaxis generated after zooming.
685
+ * @param chartContext
686
+ * @param config { min: timestamp, max: timestamp }
687
+ * @param element DOM Element
688
+ */
689
+ zoomedEvent(chartContext, config) {
690
+ this.callEvent('chartZoomed', {
691
+ component: this, chartContext, config,
692
+ });
693
+ }
694
+ /**
695
+ * Fires when user scrolls using the pan tool.
696
+ * The 2nd argument includes information of the new xaxis generated after scrolling.
697
+ * @param chartContext
698
+ * @param config { xaxis: any }
699
+ * @param element DOM Element
700
+ */
701
+ scrolledEvent(chartContext, config) {
702
+ this.callEvent('chartScrolled', {
703
+ component: this, chartContext, config,
704
+ });
705
+ }
706
+ /**
707
+ * Fires when user drags the brush in a brush chart.
708
+ * The 2nd argument includes information of the new axes generated after
709
+ * scrolling the brush.
710
+ * @param chartContext
711
+ * @param config { xaxis: any, yaxis: any }
712
+ * @param element DOM Element
713
+ */
714
+ brushScrolledEvent(chartContext, config) {
715
+ this.callEvent('chartBrushScrolled', {
716
+ component: this, chartContext, config,
717
+ });
718
+ }
482
719
  updateToolbarIcons() {
483
720
  var _a, _b, _c;
484
721
  if (!this.viewGetIconHTML)
@@ -863,6 +1100,16 @@ class Carousel extends ComponentRender {
863
1100
  * '30em', '400', 400. Values without measurement unit will be notated in pixels by default
864
1101
  */
865
1102
  this.height = 'auto';
1103
+ /**
1104
+ * Sets the carousel max height. Example values: 'auto', '100%', '400px',
1105
+ * '30em', '400', 400. Values without measurement unit will be notated in pixels by default
1106
+ */
1107
+ this.maxHeight = 'none';
1108
+ /**
1109
+ * Sets the carousel min height. Example values: 'auto', '100%', '400px',
1110
+ * '30em', '400', 400. Values without measurement unit will be notated in pixels by default
1111
+ */
1112
+ this.minHeight = 'none';
866
1113
  /**
867
1114
  * Configures the carousel as infinite (the slide after the last one is the first slide, and vice-versa)
868
1115
  */
@@ -954,6 +1201,8 @@ class Carousel extends ComponentRender {
954
1201
  this.buttonsOutside = this.getInitValue('buttonsOutside', props.buttonsOutside, this.buttonsOutside);
955
1202
  this.center = this.getInitValue('center', props.center, this.center);
956
1203
  this.height = this.getInitValue('height', props.height, this.height);
1204
+ this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
1205
+ this.minHeight = this.getInitValue('minHeight', props.minHeight, this.minHeight);
957
1206
  this.infiniteScroll = this.getInitValue('infiniteScroll', props.infiniteScroll, this.infiniteScroll);
958
1207
  this.initialSlide = this.getInitValue('initialSlide', props.initialSlide, this.initialSlide);
959
1208
  this.currentSlide = this.getInitValue('currentSlide', props.currentSlide, this.initialSlide);
@@ -1189,6 +1438,7 @@ class Form extends ComponentRender {
1189
1438
  this.internalValue = {};
1190
1439
  this.align = this.getInitValue('align', props.align, this.align);
1191
1440
  this.justify = this.getInitValue('justify', props.justify, this.justify);
1441
+ this.height = this.getInitValue('height', props.height, this.height);
1192
1442
  this.internalValue = this.getInitValue('value', props.value, this.value);
1193
1443
  this.createAccessors();
1194
1444
  }
@@ -1778,6 +2028,10 @@ class CodeEditor extends ComponentRender {
1778
2028
  * Max height in pixels. 'none' means no limit.
1779
2029
  */
1780
2030
  this.maxHeight = 'none';
2031
+ /**
2032
+ * Max height in pixels. 'none' means no limit.
2033
+ */
2034
+ this.height = 'auto';
1781
2035
  /**
1782
2036
  * Language code to be used for highlight (js|javascript, css, html, json, ts|typescript, bash|shell)
1783
2037
  * Other languages must be imported above
@@ -1797,6 +2051,7 @@ class CodeEditor extends ComponentRender {
1797
2051
  this.staticCode = this.getInitValue('staticCode', props.staticCode, this.staticCodeValue);
1798
2052
  this.copyIcon = this.getInitValue('copyIcon', props.copyIcon, this.copyIcon);
1799
2053
  this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
2054
+ this.height = this.getInitValue('height', props.height, this.height);
1800
2055
  this.language = this.getInitValue('language', props.language, this.language);
1801
2056
  this.showLineNumbers = this.getInitValue('showLineNumbers', props.showLineNumbers, this.showLineNumbers);
1802
2057
  this.createAccessors();
@@ -2003,12 +2258,27 @@ class Container extends ComponentRender {
2003
2258
  * Adds height 100% to container.
2004
2259
  */
2005
2260
  this.fillHeight = false;
2261
+ /**
2262
+ * Sets the height for the component.
2263
+ */
2264
+ this.height = 'auto';
2265
+ /**
2266
+ * Sets the maximum height for the component.
2267
+ */
2268
+ this.maxHeight = 'none';
2269
+ /**
2270
+ * Sets the minimum height for the component.
2271
+ */
2272
+ this.minHeight = 'none';
2006
2273
  /**
2007
2274
  * Removes viewport maximum-width size breakpoints.
2008
2275
  */
2009
2276
  this.fluid = true;
2010
2277
  this.fluid = this.getInitValue('fluid', props.fluid, this.fluid);
2011
2278
  this.fillHeight = this.getInitValue('fillHeight', props.fillHeight, this.fillHeight);
2279
+ this.height = this.getInitValue('height', props.height, this.height);
2280
+ this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
2281
+ this.minHeight = this.getInitValue('minHeight', props.minHeight, this.minHeight);
2012
2282
  this.createAccessors();
2013
2283
  }
2014
2284
  }
@@ -2346,6 +2616,14 @@ class Dialog extends Component {
2346
2616
  * Dialog type (normal, success, error, warning, info)
2347
2617
  */
2348
2618
  this.type = 'normal';
2619
+ /**
2620
+ * Confirm button component name
2621
+ */
2622
+ this.confirmButton = 'dialogButton';
2623
+ /**
2624
+ * Deny button component name
2625
+ */
2626
+ this.denyButton = undefined;
2349
2627
  /**
2350
2628
  * Default dialog buttons
2351
2629
  * @private
@@ -2357,6 +2635,8 @@ class Dialog extends Component {
2357
2635
  events: { click: () => this.hide() },
2358
2636
  }];
2359
2637
  this.defaultValues = {
2638
+ confirmButton: this.confirmButton,
2639
+ denyButton: this.denyButton,
2360
2640
  name: this.name,
2361
2641
  maxWidth: this.maxWidth,
2362
2642
  persistent: this.persistent,
@@ -2364,6 +2644,38 @@ class Dialog extends Component {
2364
2644
  title: this.title,
2365
2645
  text: this.text,
2366
2646
  };
2647
+ this.clickDefaultButtonKeyMapping = {
2648
+ enter: {
2649
+ event: () => {
2650
+ if (this.confirmButton) {
2651
+ const confirmButton = Metadata.getInstance(this.confirmButton);
2652
+ if (confirmButton
2653
+ && confirmButton.events
2654
+ && confirmButton.events.click
2655
+ && typeof confirmButton.events.click === 'function') {
2656
+ confirmButton.events.click({ component: new Button(confirmButton) });
2657
+ }
2658
+ }
2659
+ },
2660
+ stop: true,
2661
+ },
2662
+ esc: {
2663
+ event: () => {
2664
+ if (this.denyButton) {
2665
+ const denyButton = Metadata.getInstance(this.denyButton);
2666
+ if (denyButton
2667
+ && denyButton.events
2668
+ && denyButton.events.click
2669
+ && typeof denyButton.events.click === 'function')
2670
+ denyButton.events.click({ component: new Button(denyButton) });
2671
+ }
2672
+ else {
2673
+ this.hide();
2674
+ }
2675
+ },
2676
+ stop: true,
2677
+ },
2678
+ };
2367
2679
  this.assignDialogProperties(props);
2368
2680
  this.createAccessors();
2369
2681
  }
@@ -2373,6 +2685,8 @@ class Dialog extends Component {
2373
2685
  */
2374
2686
  assignDialogProperties(dialog) {
2375
2687
  this.buttons = dialog.buttons && dialog.buttons.length ? dialog.buttons : this.defaultButtons;
2688
+ this.confirmButton = this.getInitValue('confirmButton', dialog.confirmButton, this.defaultValues.confirmButton);
2689
+ this.denyButton = this.getInitValue('denyButton', dialog.denyButton, this.defaultValues.denyButton);
2376
2690
  this.name = this.getInitValue('name', dialog.name, this.defaultValues.name);
2377
2691
  this.maxWidth = this.getInitValue('maxWidth', dialog.maxWidth, this.defaultValues.maxWidth);
2378
2692
  this.persistent = this.getInitValue('persistent', dialog.persistent, this.defaultValues.persistent);
@@ -2385,6 +2699,7 @@ class Dialog extends Component {
2385
2699
  * Displays dialog
2386
2700
  */
2387
2701
  show() {
2702
+ KeyMap.bind(this.clickDefaultButtonKeyMapping, this);
2388
2703
  this.isVisible = true;
2389
2704
  }
2390
2705
  /**
@@ -2392,6 +2707,7 @@ class Dialog extends Component {
2392
2707
  */
2393
2708
  hide() {
2394
2709
  this.isVisible = false;
2710
+ KeyMap.unbind(this.clickDefaultButtonKeyMapping, this);
2395
2711
  }
2396
2712
  }
2397
2713
 
@@ -3463,7 +3779,7 @@ class DateRange extends TextInput {
3463
3779
  const lastValue = this.value;
3464
3780
  this.dateError = false;
3465
3781
  this.value = this.parseISODateRangeValue(newValue);
3466
- if (!isEqual(lastValue, this.value))
3782
+ if (!Utils.isEqual(lastValue, this.value))
3467
3783
  this.change(this.value);
3468
3784
  }
3469
3785
  formatISODateRangeValue(dates) {
@@ -3721,6 +4037,10 @@ class Dropdown extends ComponentRender {
3721
4037
  * Applies position fixed to the dropdown.
3722
4038
  */
3723
4039
  this.fixed = false;
4040
+ /**
4041
+ * Sets the height for the dropdown.
4042
+ */
4043
+ this.height = 'auto';
3724
4044
  /**
3725
4045
  * Offset the menu on the x-axis.
3726
4046
  */
@@ -3746,6 +4066,7 @@ class Dropdown extends ComponentRender {
3746
4066
  this.disabled = this.getInitValue('disabled', props.disabled, this.disabled);
3747
4067
  this.fixed = this.getInitValue('fixed', props.fixed, this.fixed);
3748
4068
  this.hover = this.getInitValue('hover', props.hover, this.hover);
4069
+ this.height = this.getInitValue('height', props.height, this.height);
3749
4070
  this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
3750
4071
  this.minHeight = this.getInitValue('minHeight', props.minHeight, this.minHeight);
3751
4072
  this.maxWidth = this.getInitValue('maxWidth', props.maxWidth, this.maxWidth);
@@ -4007,12 +4328,18 @@ class Frame extends ComponentRender {
4007
4328
  this.override = {};
4008
4329
  this.cache = false;
4009
4330
  this.cacheDuration = 2 * 60 * 60 * 1000;
4331
+ this.height = 'auto';
4332
+ this.maxHeight = 'none';
4333
+ this.minHeight = 'none';
4010
4334
  this.headerName = 'sw-fetched-on';
4011
4335
  this.path = props.path;
4012
4336
  this.local = props.local === true;
4013
4337
  this.override = props.override || this.override;
4014
4338
  this.cache = props.cache || this.cache;
4015
4339
  this.cacheDuration = this.getInitValue('cacheDuration', props.cacheDuration, this.cacheDuration);
4340
+ this.height = this.getInitValue('height', props.height, this.height);
4341
+ this.minHeight = this.getInitValue('minHeight', props.minHeight, this.minHeight);
4342
+ this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
4016
4343
  this.createAccessors();
4017
4344
  this.getMetadata();
4018
4345
  }
@@ -4149,6 +4476,8 @@ class Column extends Component {
4149
4476
  this.componentProps = {};
4150
4477
  /** column style property */
4151
4478
  this.style = {};
4479
+ /** Type of XLS */
4480
+ this.xlsType = '';
4152
4481
  /* Stores lookup data to prevent unnecessary requests */
4153
4482
  this.lookupData = {};
4154
4483
  /* Stores lookup data count (only to be reactive and force column update) */
@@ -4191,6 +4520,7 @@ class Column extends Component {
4191
4520
  this.loading = this.getInitValue('loading', props.loading, this.loading);
4192
4521
  this.style = this.getInitValue('style', props.style, this.style);
4193
4522
  this.componentProps = this.getInitValue('componentProps', props.componentProps, this.componentProps);
4523
+ this.xlsType = this.getInitValue('xlsType', props.xlsType, this.xlsType);
4194
4524
  this.conditions = this.getInitValue('conditions', props.conditions, this.conditions);
4195
4525
  this.createConditions();
4196
4526
  this.createActionConditions();
@@ -4529,7 +4859,7 @@ class GridColumn extends Column {
4529
4859
  if (this.componentProps.dataValueOut && ((_a = component.datasource) === null || _a === void 0 ? void 0 : _a.currentRow)) {
4530
4860
  this.componentProps.dataValueOut.forEach((columns) => {
4531
4861
  const { column, columnOnGrid } = columns;
4532
- if (!isEqual(newRow.originalRow[columnOnGrid], component.datasource.currentRow[column])) {
4862
+ if (!Utils.isEqual(newRow.originalRow[columnOnGrid], component.datasource.currentRow[column])) {
4533
4863
  newRow[`${columnOnGrid}_original`] = newRow.originalRow[columnOnGrid];
4534
4864
  newRow[columnOnGrid] = component.datasource.currentRow[column];
4535
4865
  }
@@ -4543,7 +4873,7 @@ class GridColumn extends Column {
4543
4873
  }
4544
4874
  }
4545
4875
  FormatterParserProvider.registerFormatter('column_ZdSelect', ({ column, value, row, componentProps, }) => {
4546
- if (!value)
4876
+ if (value === null || value === undefined)
4547
4877
  return '';
4548
4878
  const { dataText, formatterDataText, dataTextSeparator, dataValue, } = componentProps;
4549
4879
  let currentRow = row;
@@ -4591,7 +4921,7 @@ FormatterParserProvider.registerFormatter('column_ZdSelect', ({ column, value, r
4591
4921
  });
4592
4922
  return dataTextNames.reduce((result, columnName, index) => {
4593
4923
  const rowCell = currentRow[columnName];
4594
- if (rowCell) {
4924
+ if (rowCell !== undefined && rowCell !== null) {
4595
4925
  const separator = index > 0 ? (dataTextSeparator || ' | ') : '';
4596
4926
  const mask = masks[index];
4597
4927
  const maskValue = typeof mask === 'function' ? mask(rowCell) : mask;
@@ -5010,15 +5340,36 @@ class GridEditable extends Grid {
5010
5340
  * @private
5011
5341
  */
5012
5342
  this.editedRows = {};
5343
+ /**
5344
+ * Rows with newRowIdentifier
5345
+ * @private
5346
+ */
5347
+ this.addedRows = {};
5013
5348
  /**
5014
5349
  * Invalid inline components
5015
5350
  * @private
5016
5351
  */
5017
5352
  this.invalidComponents = {};
5353
+ this.cancelEditedRowsKeyMapping = {
5354
+ esc: {
5355
+ event: this.cancelEditedRows.bind(this),
5356
+ stop: true,
5357
+ input: true,
5358
+ active: true,
5359
+ },
5360
+ };
5018
5361
  this.newRowIdentifier = '__added_row';
5019
5362
  this.doubleClickEdit = this.getInitValue('doubleClickEdit', props.doubleClickEdit, this.doubleClickEdit);
5020
5363
  this.createAccessors();
5021
5364
  }
5365
+ onMounted(element) {
5366
+ super.onMounted(element);
5367
+ KeyMap.bind(this.cancelEditedRowsKeyMapping, this, element);
5368
+ }
5369
+ onBeforeDestroy() {
5370
+ super.onBeforeDestroy();
5371
+ KeyMap.unbind(this.cancelEditedRowsKeyMapping, this);
5372
+ }
5022
5373
  /**
5023
5374
  * Get Grid columns objects
5024
5375
  * @param columns Grid columns parameter
@@ -5188,7 +5539,7 @@ class GridEditable extends Grid {
5188
5539
  changeEditableComponent(column, row, value, component) {
5189
5540
  const key = row[this.datasource.uniqueKey];
5190
5541
  const columnName = column.name;
5191
- if (!isEqual(value, row[columnName])) {
5542
+ if (!Utils.isEqual(value, row[columnName])) {
5192
5543
  const newRow = {};
5193
5544
  newRow[key] = Object.assign({}, this.editedRows[key]);
5194
5545
  newRow[key].originalRow = Object.assign({}, row);
@@ -5234,6 +5585,14 @@ class GridEditable extends Grid {
5234
5585
  * Cancels all edited rows and enable grid components
5235
5586
  */
5236
5587
  cancelEditedRows() {
5588
+ return __awaiter(this, void 0, void 0, function* () {
5589
+ yield this.removeAddedRows();
5590
+ this.editing = false;
5591
+ this.editedRows = {};
5592
+ this.invalidComponents = {};
5593
+ });
5594
+ }
5595
+ removeAddedRows() {
5237
5596
  return __awaiter(this, void 0, void 0, function* () {
5238
5597
  const { data } = this.datasource;
5239
5598
  data.forEach((row, index) => {
@@ -5242,21 +5601,26 @@ class GridEditable extends Grid {
5242
5601
  }
5243
5602
  });
5244
5603
  yield this.datasource.updateData(data);
5245
- this.editing = false;
5246
- this.editedRows = {};
5247
- this.invalidComponents = {};
5248
5604
  });
5249
5605
  }
5606
+ addDataRow(row) {
5607
+ if (this.addedRows[row[this.datasource.uniqueKey]])
5608
+ this.datasource.post(row);
5609
+ else
5610
+ this.datasource.put(row);
5611
+ }
5250
5612
  /**
5251
5613
  * Saves all edited rows if they are valid
5252
5614
  * @throws Will throw when it finds an invalid row
5253
5615
  */
5254
5616
  saveEditedRows() {
5255
5617
  return __awaiter(this, void 0, void 0, function* () {
5256
- const response = yield Promise.all(this.getEditedRows().map((row) => this.datasource.put(row)));
5618
+ yield this.removeAddedRows();
5619
+ const response = yield Promise.all(this.getEditedRows().map((row) => this.addDataRow(row)));
5257
5620
  this.editing = false;
5258
5621
  this.editedRows = {};
5259
5622
  this.invalidComponents = {};
5623
+ this.addedRows = {};
5260
5624
  yield this.datasource.get();
5261
5625
  return response;
5262
5626
  });
@@ -5268,8 +5632,11 @@ class GridEditable extends Grid {
5268
5632
  getEditedRows() {
5269
5633
  const editedRows = [];
5270
5634
  Object.keys(this.editedRows).forEach((key) => {
5635
+ this.addedRows = {};
5271
5636
  const row = Object.assign(Object.assign({}, this.editedRows[key].originalRow), this.editedRows[key]);
5272
5637
  delete row.originalRow;
5638
+ if (row[this.newRowIdentifier])
5639
+ this.addedRows[key] = row;
5273
5640
  delete row[this.newRowIdentifier];
5274
5641
  Object.keys(row).forEach((attr) => {
5275
5642
  if (Object.prototype.hasOwnProperty.call(row, `${attr}_original`)) {
@@ -5963,11 +6330,12 @@ class Select extends TextInput {
5963
6330
  overrideGet() {
5964
6331
  const oldGet = this.datasource.get;
5965
6332
  this.datasource.get = () => __awaiter(this, void 0, void 0, function* () {
5966
- yield oldGet.call(this.datasource);
5967
- if (this.indexOf(this.value) !== -1 || this.datasource.search || this.isFocused)
5968
- return;
5969
- yield this.setValue(this.value, false);
5970
- this.removePushedValue();
6333
+ const response = yield oldGet.call(this.datasource);
6334
+ if (this.indexOf(this.value) === -1 && !this.datasource.search && !this.isFocused) {
6335
+ yield this.setValue(this.value, false);
6336
+ this.removePushedValue();
6337
+ }
6338
+ return response;
5971
6339
  });
5972
6340
  }
5973
6341
  get search() {
@@ -6307,10 +6675,10 @@ class Select extends TextInput {
6307
6675
  }
6308
6676
  }
6309
6677
  FormatterParserProvider.registerFormatter('ZdSelect', (value, { dataText, dataTextSeparator = ' | ', }) => {
6310
- if (!value && value !== 0) {
6678
+ if (value === null || value === undefined) {
6311
6679
  return null;
6312
6680
  }
6313
- if (typeof value === 'string' || typeof value === 'number') {
6681
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
6314
6682
  return value;
6315
6683
  }
6316
6684
  const dataTextArr = Array.isArray(dataText) ? dataText : [dataText];
@@ -6333,7 +6701,7 @@ FormatterParserProvider.registerFormatter('ZdSelect', (value, { dataText, dataTe
6333
6701
  }
6334
6702
  });
6335
6703
  return dataTextNames.reduce((result, column, index) => {
6336
- if (value[column]) {
6704
+ if (value[column] !== null && value[column] !== undefined) {
6337
6705
  const separator = index > 0 ? dataTextSeparator : '';
6338
6706
  let masked = value[column];
6339
6707
  if (masks[index]) {
@@ -6552,6 +6920,18 @@ class List extends ComponentRender {
6552
6920
  * Will only collapse when explicitly closed.
6553
6921
  */
6554
6922
  this.expand = false;
6923
+ /**
6924
+ * Sets the height for the component.
6925
+ */
6926
+ this.height = 'auto';
6927
+ /**
6928
+ * Sets the maxHeight for the component.
6929
+ */
6930
+ this.maxHeight = 'none';
6931
+ /**
6932
+ * Sets the minHeight for the component.
6933
+ */
6934
+ this.minHeight = 'none';
6555
6935
  this.dark = this.getInitValue('dark', props.dark, this.dark);
6556
6936
  this.dense = this.getInitValue('dense', props.dense, this.dense);
6557
6937
  this.disabled = this.getInitValue('disabled', props.disabled, this.disabled);
@@ -6563,6 +6943,9 @@ class List extends ComponentRender {
6563
6943
  this.color = this.getInitValue('color', props.color, this.color);
6564
6944
  this.elevation = this.getInitValue('elevation', props.elevation, this.elevation);
6565
6945
  this.expand = this.getInitValue('expand', props.expand, this.expand);
6946
+ this.height = this.getInitValue('height', props.height, this.height);
6947
+ this.maxHeight = this.getInitValue('maxHeight', props.maxHeight, this.maxHeight);
6948
+ this.minHeight = this.getInitValue('minHeight', props.minHeight, this.minHeight);
6566
6949
  this.createAccessors();
6567
6950
  }
6568
6951
  /**
@@ -7012,6 +7395,8 @@ class Menu extends ComponentRender {
7012
7395
  this.filteredMenuItems = [];
7013
7396
  /** Search value */
7014
7397
  this.searchValue = '';
7398
+ /** Store the current item focused */
7399
+ this.currentItem = null;
7015
7400
  this.app = this.getInitValue('app', props.app, this.app);
7016
7401
  this.clipped = this.getInitValue('clipped', props.clipped, this.clipped);
7017
7402
  this.fixed = this.getInitValue('fixed', props.fixed, this.fixed);
@@ -7244,7 +7629,7 @@ class Menu extends ComponentRender {
7244
7629
  if (item.component === 'ZdMenuGroup') {
7245
7630
  this.searchItems(item.items);
7246
7631
  }
7247
- else if (normalize(I18n.translate(item.label)).indexOf(normalize(this.searchValue)) !== -1) {
7632
+ else if (Utils.normalize(I18n.translate(item.label)).indexOf(Utils.normalize(this.searchValue)) !== -1) {
7248
7633
  this.filteredMenuItems.push(item);
7249
7634
  }
7250
7635
  }
@@ -7291,6 +7676,15 @@ class MenuLink extends ComponentRender {
7291
7676
  if (preventDefault) {
7292
7677
  event.preventDefault();
7293
7678
  }
7679
+ this.setFocus();
7680
+ }
7681
+ /**
7682
+ * Event triggered when this item is focus
7683
+ */
7684
+ focus() {
7685
+ if (this.parentMenu) {
7686
+ this.parentMenu.currentItem = this;
7687
+ }
7294
7688
  }
7295
7689
  /**
7296
7690
  * @returns item is selected or not
@@ -7358,6 +7752,26 @@ class MenuGroup extends ComponentRender {
7358
7752
  close() {
7359
7753
  this.opened = false;
7360
7754
  }
7755
+ /**
7756
+ * Event triggered when this item is clicked
7757
+ */
7758
+ click(event) {
7759
+ let preventDefault = false;
7760
+ preventDefault = this.callEvent('click', { event, component: this });
7761
+ if (preventDefault) {
7762
+ event.preventDefault();
7763
+ }
7764
+ this.setFocus();
7765
+ }
7766
+ /**
7767
+ * Event triggered when this item is focus
7768
+ */
7769
+ focus(event) {
7770
+ this.callEvent('focus', { event, component: this });
7771
+ if (this.parentMenu) {
7772
+ this.parentMenu.currentItem = this;
7773
+ }
7774
+ }
7361
7775
  }
7362
7776
 
7363
7777
  /**
@@ -7435,10 +7849,20 @@ class Modal extends Component {
7435
7849
  * If true the modal won't close when overlay is clicked
7436
7850
  */
7437
7851
  this.persistent = false;
7852
+ /**
7853
+ * Allows modal to be dragged around in the screen
7854
+ */
7855
+ this.draggable = false;
7856
+ /**
7857
+ * Css selector of the drag handle
7858
+ */
7859
+ this.dragHandle = '';
7438
7860
  this.title = this.getInitValue('title', props.title, this.title);
7439
7861
  this.fullscreen = this.getInitValue('fullscreen', props.fullscreen, this.fullscreen);
7440
7862
  this.grid = this.getInitValue('grid', props.grid, this.grid);
7441
7863
  this.persistent = this.getInitValue('persistent', props.persistent, this.persistent);
7864
+ this.draggable = this.getInitValue('draggable', props.draggable, this.draggable);
7865
+ this.dragHandle = this.getInitValue('dragHandle', props.dragHandle, this.dragHandle);
7442
7866
  this.isVisible = false;
7443
7867
  this.createAccessors();
7444
7868
  }
@@ -8880,8 +9304,13 @@ class SelectTreeMultiple extends SelectTree {
8880
9304
  */
8881
9305
  this.selectedNodes = [];
8882
9306
  this.selectValue = [];
9307
+ /**
9308
+ * Changes the behavior of checked nodes that will be displayed in the array of values
9309
+ */
9310
+ this.valueConsistsOf = 'LEAF_PRIORITY';
8883
9311
  this.flat = this.getInitValue('flat', props.flat, this.flat);
8884
9312
  this.limit = this.getInitValue('limit', props.limit, this.limit);
9313
+ this.valueConsistsOf = this.getInitValue('valueConsistsOf', props.valueConsistsOf, this.valueConsistsOf);
8885
9314
  this.createAccessors();
8886
9315
  }
8887
9316
  /**
@@ -8926,6 +9355,40 @@ class SelectTreeMultiple extends SelectTree {
8926
9355
  }
8927
9356
  }
8928
9357
 
9358
+ /**
9359
+ * Base class for SelectableList component.
9360
+ */
9361
+ class SelectableList extends List {
9362
+ constructor(props) {
9363
+ super(props);
9364
+ /**
9365
+ * Specifies whether at least one element must be selected
9366
+ */
9367
+ this.mandatory = false;
9368
+ /**
9369
+ * Defines the maximum number of elements the list has
9370
+ */
9371
+ this.max = undefined;
9372
+ /**
9373
+ * Defines how many elements of the list can be selected at the same time
9374
+ */
9375
+ this.multiple = undefined;
9376
+ /**
9377
+ * Sets the active list-item inside the list-group
9378
+ */
9379
+ this.value = undefined;
9380
+ this.activeClass = this.getInitValue('activeClass', props.activeClass, this.activeClass);
9381
+ this.mandatory = this.getInitValue('mandatory', props.mandatory, this.mandatory);
9382
+ this.max = this.getInitValue('max', props.max, this.max);
9383
+ this.multiple = this.getInitValue('multiple', props.multiple, this.multiple);
9384
+ this.value = this.getInitValue('value', props.value, this.value);
9385
+ this.createAccessors();
9386
+ }
9387
+ change(event, element) {
9388
+ this.callEvent('change', { event, element, component: this });
9389
+ }
9390
+ }
9391
+
8929
9392
  /**
8930
9393
  * Base class for SpeedDial component.
8931
9394
  */
@@ -9271,6 +9734,7 @@ class Tabs extends ComponentRender {
9271
9734
  this.tabs = [];
9272
9735
  this.tabs = this.getTabs(props.tabs || []);
9273
9736
  this.activeTab = this.getInitValue('activeTab', props.activeTab, this.activeTab);
9737
+ this.height = this.getInitValue('height', props.height, this.height);
9274
9738
  this.createAccessors();
9275
9739
  }
9276
9740
  getTabs(tabs) {
@@ -9283,6 +9747,31 @@ class Tabs extends ComponentRender {
9283
9747
  }
9284
9748
  return tab;
9285
9749
  }
9750
+ /**
9751
+ * Method for navigating to the next tab
9752
+ * @param loop Defines if want a loop navigation
9753
+ */
9754
+ nextTab(loop = false) {
9755
+ if (loop) {
9756
+ this.activeTab = (this.activeTab + 1) % this.tabs.length;
9757
+ }
9758
+ else if (this.activeTab < this.tabs.length - 1) {
9759
+ this.activeTab += 1;
9760
+ }
9761
+ }
9762
+ /**
9763
+ * Method for navigating to the previous tab
9764
+ * @param loop Defines if want a loop navigation
9765
+ */
9766
+ previousTab(loop = false) {
9767
+ if (loop) {
9768
+ const newTabIndex = (this.activeTab - 1) % this.tabs.length;
9769
+ this.activeTab = newTabIndex >= 0 ? newTabIndex : newTabIndex + this.tabs.length;
9770
+ }
9771
+ else if (this.activeTab > 0) {
9772
+ this.activeTab -= 1;
9773
+ }
9774
+ }
9286
9775
  /**
9287
9776
  * Triggered before tab is change.
9288
9777
  * @param event DOM event
@@ -10134,9 +10623,25 @@ class TreeGridEditable extends TreeGrid {
10134
10623
  * Enter edit mode on double click
10135
10624
  */
10136
10625
  this.doubleClickEdit = false;
10626
+ this.cancelEditedRowsKeyMapping = {
10627
+ esc: {
10628
+ event: this.cancelEditedRows.bind(this),
10629
+ stop: true,
10630
+ input: true,
10631
+ active: true,
10632
+ },
10633
+ };
10137
10634
  this.doubleClickEdit = this.getInitValue('doubleClickEdit', props.doubleClickEdit, this.doubleClickEdit);
10138
10635
  this.createAccessors();
10139
10636
  }
10637
+ onMounted(element) {
10638
+ super.onMounted(element);
10639
+ KeyMap.bind(this.cancelEditedRowsKeyMapping, this, element);
10640
+ }
10641
+ onBeforeDestroy() {
10642
+ super.onBeforeDestroy();
10643
+ KeyMap.unbind(this.cancelEditedRowsKeyMapping, this);
10644
+ }
10140
10645
  /**
10141
10646
  * Get Grid columns objects
10142
10647
  * @param columns Grid columns parameter
@@ -10305,7 +10810,7 @@ class TreeGridEditable extends TreeGrid {
10305
10810
  changeEditableComponent(column, row, value, component) {
10306
10811
  const key = row[this.datasource.uniqueKey];
10307
10812
  const columnName = column.name;
10308
- if (!isEqual(value, row[columnName])) {
10813
+ if (!Utils.isEqual(value, row[columnName])) {
10309
10814
  const newRow = {};
10310
10815
  newRow[key] = Object.assign({}, this.editedRows[key]);
10311
10816
  newRow[key].originalRow = Object.assign({}, row);
@@ -10579,7 +11084,7 @@ Icons.mdiIcons = {
10579
11084
  tableColumns: 'mdi-table-headers-eye',
10580
11085
  unfold: 'mdi-unfold-more-horizontal',
10581
11086
  warning: 'mdi-exclamation',
10582
- zoom: 'mdi-magnify-scan',
11087
+ zoom: 'mdi-magnify',
10583
11088
  zoomIn: 'mdi-plus-circle-outline',
10584
11089
  zoomPanning: 'mdi-hand-back-right-outline',
10585
11090
  zoomOut: 'mdi-minus-circle-outline',
@@ -10678,10 +11183,14 @@ const defaultTheme = {
10678
11183
  light: {
10679
11184
  'font-color': 'var(--v-grey-darken2)',
10680
11185
  'background-base': '#F6F6F6',
11186
+ 'scrollbar-track': 'var(--v-grey-lighten5)',
11187
+ 'scrollbar-thumb': 'var(--v-grey-lighten4)',
10681
11188
  },
10682
11189
  dark: {
10683
11190
  'font-color': 'var(--v-grey-lighten3)',
10684
11191
  'background-base': '#121212',
11192
+ 'scrollbar-track': 'var(--v-grey-darken3)',
11193
+ 'scrollbar-thumb': 'var(--v-grey-base)',
10685
11194
  },
10686
11195
  variables: {
10687
11196
  'default-padding': '16px',
@@ -10955,6 +11464,7 @@ class BaseReport {
10955
11464
  sequence: index,
10956
11465
  format: this.getFormatOfColumn(col),
10957
11466
  size: `${size}%`,
11467
+ xlsType: col.xlsType,
10958
11468
  };
10959
11469
  return Object.assign(Object.assign({}, result), { [col.name]: row });
10960
11470
  }, {});
@@ -11691,4 +12201,4 @@ class Report {
11691
12201
 
11692
12202
  const AutoNumeric = require('@zeedhi/autonumeric/dist/autoNumeric');
11693
12203
 
11694
- export { Alert, AlertService, ApexChart, AutoNumeric, Badge, Breadcrumbs, Button, ButtonGroup, CSVReport, Card, Carousel, Checkbox, CheckboxMultiple, ChildNotFoundError, Chip, CodeEditor, Col, CollapseCard, Column, Component, ComponentRender, Container, Currency, Dashboard, Date$1 as Date, DateRange, Dialog, DialogService, Divider, Dropdown, FileInput, Footer, Form, Frame, FramePage, Grid, GridColumn, GridColumnEditable, GridEditable, Header, Icon, Icons, Image, Increment, Input, Iterable, IterableColumnsButton, IterableColumnsButtonController, IterablePageComponent, IterablePageInfo, IterablePageSize, IterablePagination, List, ListGroup, ListItem, Loading, LoadingService, Login, LoginButton, MasterDetail, Menu, MenuButton, MenuGroup, MenuLink, MenuSeparator, Modal, ModalCloseButton, ModalService, Month, Number$1 as Number, PDFReport, Password, Progress, Radio, RangeSlider, Report, Row, Search, Select, SelectMultiple, SelectTree, SelectTreeMultiple, SpeedDial, Steppers, SvgMap, Switch, Tab, Table, Tabs, Tag, Text, TextInput, Textarea, Time, Toggleable, Tooltip, Tree, TreeDataStructure, TreeGrid, TreeGridEditable, WatchURL, XLS2Report, XLS3Report, XLSReport, initTheme };
12204
+ export { Alert, AlertService, ApexChart, AutoNumeric, Badge, Breadcrumbs, Button, ButtonGroup, CSVReport, Card, Carousel, Checkbox, CheckboxMultiple, ChildNotFoundError, Chip, CodeEditor, Col, CollapseCard, Column, Component, ComponentRender, Container, Currency, Dashboard, Date$1 as Date, DateRange, Dialog, DialogService, Divider, Dropdown, FileInput, Footer, Form, Frame, FramePage, Grid, GridColumn, GridColumnEditable, GridEditable, Header, Icon, Icons, Image, Increment, Input, Iterable, IterableColumnsButton, IterableColumnsButtonController, IterablePageComponent, IterablePageInfo, IterablePageSize, IterablePagination, List, ListGroup, ListItem, Loading, LoadingService, Login, LoginButton, MasterDetail, Menu, MenuButton, MenuGroup, MenuLink, MenuSeparator, Modal, ModalCloseButton, ModalService, Month, Number$1 as Number, PDFReport, Password, Progress, Radio, RangeSlider, Report, Row, Search, Select, SelectMultiple, SelectTree, SelectTreeMultiple, SelectableList, SpeedDial, Steppers, SvgMap, Switch, Tab, Table, Tabs, Tag, Text, TextInput, Textarea, Time, Toggleable, Tooltip, Tree, TreeDataStructure, TreeGrid, TreeGridEditable, WatchURL, XLS2Report, XLS3Report, XLSReport, initTheme };