@wavemaker/app-ng-runtime 11.4.0-next.28701 → 11.4.0-rc.5339

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 (92) hide show
  1. app-ng-runtime/build-task/basic/tree/tree.build.d.ts +1 -2
  2. app-ng-runtime/build-task/bundles/index.umd.js +7 -9
  3. app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
  4. app-ng-runtime/build-task/esm2015/basic/tree/tree.build.js +3 -4
  5. app-ng-runtime/build-task/esm2015/navigation/popover/popover.build.js +3 -3
  6. app-ng-runtime/build-task/fesm2015/index.js +7 -9
  7. app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
  8. app-ng-runtime/components/base/bundles/index.umd.js +7 -4
  9. app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
  10. app-ng-runtime/components/base/esm2015/utils/widget-utils.js +7 -4
  11. app-ng-runtime/components/base/esm2015/widgets/common/dialog/dialog.service.js +3 -3
  12. app-ng-runtime/components/base/fesm2015/index.js +8 -5
  13. app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
  14. app-ng-runtime/components/base/utils/widget-utils.d.ts +1 -1
  15. app-ng-runtime/components/basic/tree/bundles/index.umd.js +280 -256
  16. app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
  17. app-ng-runtime/components/basic/tree/esm2015/public_api.js +2 -2
  18. app-ng-runtime/components/basic/tree/esm2015/tree.component.js +322 -0
  19. app-ng-runtime/components/basic/tree/esm2015/tree.module.js +3 -3
  20. app-ng-runtime/components/basic/tree/fesm2015/index.js +260 -248
  21. app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
  22. app-ng-runtime/components/basic/tree/index.metadata.json +1 -1
  23. app-ng-runtime/components/basic/tree/public_api.d.ts +1 -1
  24. app-ng-runtime/components/basic/tree/tree.component.d.ts +34 -0
  25. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +39 -23
  26. app-ng-runtime/components/containers/tabs/bundles/index.umd.js.map +1 -1
  27. app-ng-runtime/components/containers/tabs/esm2015/tab-pane/tab-pane.component.js +8 -1
  28. app-ng-runtime/components/containers/tabs/esm2015/tabs.animator.js +33 -13
  29. app-ng-runtime/components/containers/tabs/fesm2015/index.js +40 -13
  30. app-ng-runtime/components/containers/tabs/fesm2015/index.js.map +1 -1
  31. app-ng-runtime/components/containers/tabs/tabs.animator.d.ts +5 -1
  32. app-ng-runtime/components/data/list/bundles/index.umd.js +51 -42
  33. app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
  34. app-ng-runtime/components/data/list/esm2015/list.component.js +51 -42
  35. app-ng-runtime/components/data/list/fesm2015/index.js +50 -41
  36. app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
  37. app-ng-runtime/components/data/list/index.metadata.json +1 -1
  38. app-ng-runtime/components/data/pagination/bundles/index.umd.js +21 -4
  39. app-ng-runtime/components/data/pagination/bundles/index.umd.js.map +1 -1
  40. app-ng-runtime/components/data/pagination/esm2015/pagination.component.js +22 -5
  41. app-ng-runtime/components/data/pagination/fesm2015/index.js +21 -4
  42. app-ng-runtime/components/data/pagination/fesm2015/index.js.map +1 -1
  43. app-ng-runtime/components/data/pagination/index.metadata.json +1 -1
  44. app-ng-runtime/components/data/pagination/pagination.component.d.ts +1 -0
  45. app-ng-runtime/components/data/table/bundles/index.umd.js +7 -0
  46. app-ng-runtime/components/data/table/bundles/index.umd.js.map +1 -1
  47. app-ng-runtime/components/data/table/esm2015/table.component.js +8 -1
  48. app-ng-runtime/components/data/table/fesm2015/index.js +7 -0
  49. app-ng-runtime/components/data/table/fesm2015/index.js.map +1 -1
  50. app-ng-runtime/components/data/table/index.metadata.json +1 -1
  51. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -0
  52. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +13 -4
  53. app-ng-runtime/components/dialogs/default/bundles/index.umd.js.map +1 -1
  54. app-ng-runtime/components/dialogs/default/esm2015/base-dialog.js +14 -6
  55. app-ng-runtime/components/dialogs/default/fesm2015/index.js +13 -5
  56. app-ng-runtime/components/dialogs/default/fesm2015/index.js.map +1 -1
  57. app-ng-runtime/components/dialogs/default/index.metadata.json +1 -1
  58. app-ng-runtime/components/input/epoch/bundles/index.umd.js +66 -29
  59. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  60. app-ng-runtime/components/input/epoch/date-time/date-time-picker.component.d.ts +1 -0
  61. app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +43 -25
  62. app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +3 -3
  63. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time-picker.component.js +31 -11
  64. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time.component.js +2 -2
  65. app-ng-runtime/components/input/epoch/fesm2015/index.js +75 -37
  66. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  67. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  68. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +3 -4
  69. app-ng-runtime/components/navigation/popover/bundles/index.umd.js.map +1 -1
  70. app-ng-runtime/components/navigation/popover/esm2015/popover.component.js +5 -6
  71. app-ng-runtime/components/navigation/popover/fesm2015/index.js +4 -5
  72. app-ng-runtime/components/navigation/popover/fesm2015/index.js.map +1 -1
  73. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +24 -6
  74. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js.map +1 -1
  75. app-ng-runtime/mobile/components/page/default/esm2015/page.directive.js +20 -3
  76. app-ng-runtime/mobile/components/page/default/fesm2015/index.js +19 -2
  77. app-ng-runtime/mobile/components/page/default/fesm2015/index.js.map +1 -1
  78. app-ng-runtime/mobile/components/page/default/index.metadata.json +1 -1
  79. app-ng-runtime/mobile/components/page/default/page.directive.d.ts +4 -1
  80. app-ng-runtime/package.json +1 -1
  81. app-ng-runtime/scripts/datatable/datatable.js +23 -23
  82. app-ng-runtime/scripts/tree-keyboard-navigation/keyboard-navigation.js +251 -0
  83. app-ng-runtime/variables/bundles/index.umd.js +14 -4
  84. app-ng-runtime/variables/bundles/index.umd.js.map +1 -1
  85. app-ng-runtime/variables/esm2015/manager/action/notification-action.manager.js +5 -6
  86. app-ng-runtime/variables/esm2015/service/variables.service.js +8 -1
  87. app-ng-runtime/variables/fesm2015/index.js +11 -5
  88. app-ng-runtime/variables/fesm2015/index.js.map +1 -1
  89. app-ng-runtime/variables/index.metadata.json +1 -1
  90. app-ng-runtime/variables/service/variables.service.d.ts +4 -0
  91. app-ng-runtime/components/basic/tree/esm2015/tree.directive.js +0 -310
  92. app-ng-runtime/components/basic/tree/tree.directive.d.ts +0 -35
@@ -1,7 +1,7 @@
1
1
  import { Component, Injector, Attribute, HostBinding, ContentChildren, NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { PROP_STRING, PROP_ANY, PROP_NUMBER, PROP_BOOLEAN, register, StylableComponent, styler, APPLY_STYLES_TYPE, provideAsWidgetRef, RedrawableDirective, createArrayFrom, WmComponentsModule } from '@wm/components/base';
4
- import { addClass, setCSSFromObj, setCSS, $appDigest, isMobileApp, noop, removeAttr, removeClass, appendNode, DynamicComponentRefProvider, StatePersistence } from '@wm/core';
4
+ import { setCSSFromObj, addClass, setCSS, $appDigest, isMobileApp, noop, removeAttr, removeClass, appendNode, DynamicComponentRefProvider, StatePersistence } from '@wm/core';
5
5
  import { SwipeAnimation } from '@swipey';
6
6
 
7
7
  class TabsAnimator extends SwipeAnimation {
@@ -9,19 +9,32 @@ class TabsAnimator extends SwipeAnimation {
9
9
  super();
10
10
  this.tabs = tabs;
11
11
  this._$el = $(this.tabs.getNativeElement()).find('>.tab-content');
12
- const childEls = this._$el.find('>[wmTabPane]');
13
- this._noOfTabs = childEls.length;
14
- const maxWidth = `${this._noOfTabs * 100}%`;
15
- addClass(this.tabs.getNativeElement(), 'has-transition');
16
- setCSSFromObj(this._$el[0], { maxWidth: maxWidth, width: maxWidth });
17
- const width = `${100 / this._noOfTabs}%`;
18
- for (const child of Array.from(childEls)) {
19
- setCSS(child, 'width', width);
20
- }
21
12
  this.init(this._$el);
22
13
  }
14
+ calibrate() {
15
+ const activeTabIndex = this.tabs.getActiveTabIndex();
16
+ const panes = this._$el.find('>.tab-pane');
17
+ let activeTabVisibleIndex = 0;
18
+ let noOfVisiblePanes = 0;
19
+ let visiblePanes = [];
20
+ panes.each((i, p) => {
21
+ if (!$(p).prop('hidden')) {
22
+ noOfVisiblePanes++;
23
+ if (i === activeTabIndex) {
24
+ activeTabVisibleIndex = noOfVisiblePanes - 1;
25
+ }
26
+ visiblePanes.push(p);
27
+ }
28
+ return true;
29
+ });
30
+ return {
31
+ activeTabIndex: activeTabVisibleIndex,
32
+ noOfTabs: noOfVisiblePanes,
33
+ panes: visiblePanes
34
+ };
35
+ }
23
36
  bounds() {
24
- const activeTabIndex = this.tabs.getActiveTabIndex(), w = this._$el.find('>.tab-pane').first().width(), noOfTabs = this._$el.find('>.tab-pane:visible').length, centerVal = -1 * activeTabIndex * w;
37
+ const { activeTabIndex, noOfTabs, panes } = this.calibrate(), w = $(panes[0]).width(), centerVal = -1 * activeTabIndex * w;
25
38
  this.clearContentFocus();
26
39
  return {
27
40
  strict: false,
@@ -49,8 +62,15 @@ class TabsAnimator extends SwipeAnimation {
49
62
  }
50
63
  }
51
64
  transitionTabIntoView() {
52
- const activeTabIndex = this.tabs.getActiveTabIndex();
53
- setCSS(this._$el[0], 'transform', `translate3d(${-1 * activeTabIndex / this._noOfTabs * 100}%, 0, 0)`);
65
+ const { activeTabIndex, noOfTabs, panes } = this.calibrate();
66
+ const maxWidth = `${noOfTabs * 100}%`;
67
+ setCSSFromObj(this._$el[0], { maxWidth: maxWidth, width: maxWidth });
68
+ addClass(this.tabs.getNativeElement(), 'has-transition');
69
+ const width = `${100 / noOfTabs}%`;
70
+ panes.forEach(p => {
71
+ setCSS(p, 'width', width);
72
+ });
73
+ setCSS(this._$el[0], 'transform', `translate3d(${-1 * activeTabIndex / noOfTabs * 100}%, 0, 0)`);
54
74
  }
55
75
  onUpper($event) {
56
76
  this.tabs.prev($event);
@@ -183,6 +203,7 @@ class TabPaneComponent extends StylableComponent {
183
203
  }
184
204
  }
185
205
  onPropertyChange(key, nv, ov) {
206
+ var _a;
186
207
  if (key === 'content') {
187
208
  if (this.isActive) {
188
209
  setTimeout(() => this.$lazyLoad(), 100);
@@ -195,6 +216,12 @@ class TabPaneComponent extends StylableComponent {
195
216
  if (this._isFirstLoad) {
196
217
  this.tabsRef.selectDefaultPaneByIndex(this.tabsRef.defaultpaneindex);
197
218
  }
219
+ else if (!nv && this.isActive) {
220
+ this.tabsRef.next();
221
+ }
222
+ else if (nv || !this.isActive) {
223
+ (_a = this.tabsRef.tabsAnimator) === null || _a === void 0 ? void 0 : _a.transitionTabIntoView();
224
+ }
198
225
  this._isFirstLoad = false;
199
226
  }
200
227
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../projects/components/widgets/containers/tabs/src/tabs.animator.ts","../../../../../projects/components/widgets/containers/tabs/src/tabs.props.ts","../../../../../projects/components/widgets/containers/tabs/src/tab-pane/tab-pane.props.ts","../../../../../projects/components/widgets/containers/tabs/src/tab-pane/tab-pane.component.ts","../../../../../projects/components/widgets/containers/tabs/src/tabs.component.ts","../../../../../projects/components/widgets/containers/tabs/src/tabs.module.ts","../../../../../projects/components/widgets/containers/tabs/src/index.ts"],"sourcesContent":["import { SwipeAnimation } from '@swipey';\n\nimport { $appDigest, addClass, setCSS, setCSSFromObj } from '@wm/core';\n\nimport { TabsComponent } from './tabs.component';\n\ndeclare const $;\n\nexport class TabsAnimator extends SwipeAnimation {\n\n private _$el;\n private _noOfTabs;\n\n public constructor(private tabs: TabsComponent) {\n super();\n this._$el = $(this.tabs.getNativeElement()).find('>.tab-content');\n const childEls = this._$el.find('>[wmTabPane]');\n this._noOfTabs = childEls.length;\n\n const maxWidth = `${this._noOfTabs * 100}%`;\n addClass(this.tabs.getNativeElement(), 'has-transition');\n setCSSFromObj(this._$el[0], {maxWidth: maxWidth, width: maxWidth});\n const width = `${100 / this._noOfTabs}%`;\n for (const child of Array.from(childEls)) {\n setCSS(child as HTMLElement, 'width', width);\n }\n this.init(this._$el);\n }\n\n public bounds() {\n const activeTabIndex = this.tabs.getActiveTabIndex(),\n w = this._$el.find('>.tab-pane').first().width(),\n noOfTabs = this._$el.find('>.tab-pane:visible').length,\n centerVal = -1 * activeTabIndex * w;\n this.clearContentFocus();\n return {\n strict: false,\n lower: activeTabIndex === noOfTabs - 1 ? 0 : -w,\n center: centerVal,\n upper: activeTabIndex === 0 ? centerVal : w\n };\n }\n\n public context() {\n return {\n 'w': this._$el.width()\n };\n }\n\n public animation() {\n return {\n 'transform': 'translate3d(${{ ($D + $d)/w * 100 + \\'%\\'}}, 0, 0)',\n '-webkit-transform': 'translate3d(${{ ($D + $d)/w * 100 + \\'%\\'}}, 0, 0)'\n };\n }\n /* WMS-18031 | On Tab Switch | Remove the Focus on the Existing Tab Contents */\n private clearContentFocus() {\n let activeTab = this._$el.find('>.tab-pane.active');\n if(activeTab.length && activeTab.find(document.activeElement).length){\n (document.activeElement as HTMLElement).blur();\n }\n }\n public transitionTabIntoView() {\n const activeTabIndex = this.tabs.getActiveTabIndex();\n setCSS(this._$el[0], 'transform', `translate3d(${-1 * activeTabIndex / this._noOfTabs * 100}%, 0, 0)`);\n }\n\n public onUpper($event?: Event) {\n this.tabs.prev($event);\n $appDigest();\n }\n\n public onLower($event?: Event) {\n this.tabs.next($event);\n $appDigest();\n }\n\n public threshold() {\n return 5;\n }\n}\n","import { isMobileApp } from '@wm/core';\n\nimport { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n const props = new Map(\n [\n ['class', PROP_STRING],\n ['dataset', PROP_ANY],\n ['defaultpaneindex', {value: 0, ...PROP_NUMBER}],\n ['justified', PROP_BOOLEAN],\n ['tabsposition', {value: 'top', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['nodatamessage', {value: 'No Data Found', ... PROP_STRING}],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['statehandler', {value: 'none', ...PROP_STRING}],\n ['transition', PROP_STRING],\n ['type', PROP_STRING]\n ]\n );\n if (isMobileApp()) {\n props.set('transition', {value: 'slide', ...PROP_STRING});\n }\n register('wm-tabs', props);\n};\n","import { PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register } from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-tabpane',\n new Map(\n [\n ['active', PROP_BOOLEAN], // internal property\n ['badgevalue', PROP_STRING],\n ['badgetype', {value: 'default', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['content', PROP_STRING],\n ['disabled', PROP_BOOLEAN],\n ['dynamicPaneIndex', PROP_NUMBER], // internal property\n ['heading', PROP_STRING],\n ['isdefaulttab', PROP_STRING],\n ['isdynamic', PROP_BOOLEAN], // internal property\n ['name', PROP_STRING],\n ['paneicon', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['smoothscroll', {value: false, ...PROP_BOOLEAN}],\n ['title', {value: 'Tab Title', ...PROP_STRING}]\n ]\n )\n );\n};\n","import { AfterViewInit, Attribute, Component, ContentChildren, HostBinding, Injector, OnInit } from '@angular/core';\n\nimport { noop, removeAttr } from '@wm/core';\n\nimport { APPLY_STYLES_TYPE, IWidgetConfig, provideAsWidgetRef, RedrawableDirective, styler, StylableComponent } from '@wm/components/base';\nimport { registerProps } from './tab-pane.props';\nimport { TabsComponent } from '../tabs.component';\n\nconst DEFAULT_CLS = 'tab-pane';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-tabpane',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: 'div[wmTabPane]',\n templateUrl: './tab-pane.component.html',\n providers: [\n provideAsWidgetRef(TabPaneComponent)\n ]\n})\nexport class TabPaneComponent extends StylableComponent implements OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n private _isFirstLoad: boolean = true;\n\n public $lazyLoad = noop;\n public name: string;\n public show: boolean;\n public smoothscroll: any;\n private isdynamic: boolean;\n\n @HostBinding('class.active') isActive = false;\n @HostBinding('class.disabled') disabled = false;\n\n // reference to the components which needs a redraw(eg, grid, chart) when the height of this component changes\n @ContentChildren(RedrawableDirective, {descendants: true}) reDrawableComponents;\n\n constructor(\n inj: Injector,\n private tabsRef: TabsComponent,\n @Attribute('heading') public heading,\n @Attribute('title') public title\n ) {\n super(inj, WIDGET_CONFIG);\n\n // title property here serves the purpose of heading.\n // TODO: make it common for all the widget.\n removeAttr(this.nativeElement, 'title');\n }\n\n // parent tabs component will call this method for the order of callbacks to be proper\n // order of callbacks - deselect, select, change\n public invokeOnSelectCallback($event?: Event) {\n this.invokeEventCallback('select', {$event});\n }\n\n public select($event?: Event) {\n // When called programatically $event won't be available\n if (this.isActive || this.disabled) {\n return;\n }\n\n this.isActive = true;\n this.$lazyLoad();\n this.redrawChildren();\n this.notifyParent($event);\n }\n\n tabpaneHeaderClick($event, paneIndex) {\n this.invokeEventCallback('headerclick', {$event, paneIndex});\n }\n\n public deselect() {\n if (this.isActive) {\n this.isActive = false;\n this.invokeEventCallback('deselect');\n }\n }\n\n public remove() {\n if (this.isActive) {\n this === this.tabsRef.panes.last ? this.tabsRef.prev() : this.tabsRef.next();\n }\n const availablePanes = this.tabsRef.panes.toArray();\n availablePanes.splice((this as any).tabsRef.getPaneIndexByRef(this), 1);\n this.tabsRef.panes.reset([...availablePanes]);\n this.nativeElement.remove();\n this.tabsRef.$element.find(`.tab-header[data-paneid='${this.$element.attr('widget-id')}'] a`).remove();\n }\n\n private redrawChildren() {\n setTimeout(() => {\n if (this.reDrawableComponents) {\n this.reDrawableComponents.forEach(c => c.redraw());\n }\n }, 100);\n }\n\n private notifyParent(evt?: Event) {\n this.tabsRef.notifyChange(this, evt);\n }\n\n // select next valid tab\n private handleSwipeLeft() {\n this.tabsRef.next();\n }\n\n // select prev valid tab\n private handleSwipeRight() {\n this.tabsRef.prev();\n }\n\n // select event is called manually\n protected handleEvent(node: HTMLElement, eventName: string, callback: Function, locals: any) {\n if (eventName !== 'select') {\n super.handleEvent(this.nativeElement, eventName, callback, locals);\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'content') {\n if (this.isActive) {\n setTimeout(() => this.$lazyLoad(), 100);\n }\n } else if (key === 'show') {\n // overridding the base component show propertyChangeHandler\n this.nativeElement.hidden = !nv;\n // setting default tab pane on pageload whenever show property is bindable\n if (this._isFirstLoad) {\n (this as any).tabsRef.selectDefaultPaneByIndex((this as any).tabsRef.defaultpaneindex);\n }\n this._isFirstLoad = false;\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.title = this.title || this.heading;\n }\n\n ngAfterViewInit() {\n styler(\n this.nativeElement.querySelector('.tab-body') as HTMLElement,\n this,\n APPLY_STYLES_TYPE.CONTAINER\n );\n super.ngAfterViewInit();\n if (this.isdynamic) {\n this.tabsRef.registerDynamicTab(this);\n }\n }\n}\n","import { AfterContentInit, AfterViewInit, Attribute, Component, ContentChildren, Injector, OnInit, QueryList } from '@angular/core';\n\nimport { addClass, appendNode, DynamicComponentRefProvider, noop, removeClass, StatePersistence } from '@wm/core';\nimport {\n APPLY_STYLES_TYPE,\n IWidgetConfig,\n provideAsWidgetRef,\n styler,\n StylableComponent,\n createArrayFrom\n} from '@wm/components/base';\n\nimport { TabsAnimator } from './tabs.animator';\nimport { registerProps } from './tabs.props';\nimport { TabPaneComponent } from './tab-pane/tab-pane.component';\n\ndeclare const _, $;\n\nconst DEFAULT_CLS = 'app-tabs clearfix';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-tabs',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: 'div[wmTabs]',\n templateUrl: './tabs.component.html',\n exportAs: 'wmTabs',\n providers: [\n provideAsWidgetRef(TabsComponent)\n ]\n})\nexport class TabsComponent extends StylableComponent implements AfterContentInit, OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n public defaultpaneindex: number;\n public transition: string;\n public tabsposition: string;\n public statehandler: any;\n private statePersistence: StatePersistence;\n\n public vertical: boolean;\n public justified: boolean;\n private activeTab: TabPaneComponent;\n private readonly promiseResolverFn: Function;\n private tabsAnimator: TabsAnimator;\n private _oldPaneIndex: number;\n private isPageLoadCall: boolean;\n private dynamicComponentProvider;\n private _dynamicContext;\n private dynamicPaneIndex;\n public dynamicTabs;\n public fieldDefs;\n public type;\n public nodatamessage;\n\n @ContentChildren(TabPaneComponent) panes: QueryList<TabPaneComponent>;\n\n constructor(\n inj: Injector,\n dynamicComponentProvider: DynamicComponentRefProvider,\n @Attribute('transition') _transition: string,\n @Attribute('tabsposition') _tabsPosition: string,\n statePersistence: StatePersistence,\n ) {\n // handle to the promise resolver\n let resolveFn: Function = noop;\n super(inj, WIDGET_CONFIG, new Promise(res => resolveFn = res));\n\n this.transition = _transition;\n this.tabsposition = _tabsPosition;\n this.statePersistence = statePersistence;\n this.dynamicComponentProvider = dynamicComponentProvider;\n this.dynamicTabs = [];\n this.dynamicPaneIndex = 0;\n\n this.promiseResolverFn = resolveFn;\n\n styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);\n\n }\n\n animateIn (element: HTMLElement) {\n const tabHeader = $(element);\n // when the animation is not present toggle the active class.\n tabHeader.siblings('.active').removeClass('active');\n tabHeader.addClass('active');\n\n const ul = this.nativeElement.querySelector('ul.nav.nav-tabs');\n\n // move the tabheader into the viewport\n const $prevHeaderEle = tabHeader.prev();\n if ($prevHeaderEle.length) {\n ul.scrollLeft = $prevHeaderEle[0].offsetLeft;\n } else {\n ul.scrollLeft = 0;\n }\n }\n\n /**\n * This method is used to register the dynamic panes.\n * After all panes are initialzed, update the querylist manually based on index.\n * @param paneRef - refrence of the tabpane\n */\n public registerDynamicTab(paneRef) {\n this.dynamicTabs.push(paneRef);\n const isLastPane = this.dynamicTabs.length === this.dynamicPaneIndex;\n if (isLastPane) {\n for (let i = 0; i < this.dynamicTabs.length; i++) {\n const newPaneRef = _.find(this.dynamicTabs, pane => pane.dynamicPaneIndex === i);\n const isPaneAlreadyExist = _.find(this.panes.toArray(), newPaneRef);\n if (!isPaneAlreadyExist) {\n this.panes.reset([...this.panes.toArray(), newPaneRef]);\n if (newPaneRef.active) {\n setTimeout(() => {\n newPaneRef.select();\n }, 20);\n }\n }\n }\n }\n }\n\n /**\n * This method is to add the tabpane dynamically\n * @param tabpanes - list of tabpanes\n */\n public addPane(tabpanes) {\n if (!_.isArray(tabpanes)) {\n tabpanes = [tabpanes];\n }\n const paneNamesList = [];\n _.forEach(tabpanes, (pane, index) => {\n const isPaneAlreadyCreated = _.find(this.panes.toArray(), {name: pane.name});\n const isPaneNameExist = _.indexOf(paneNamesList, pane.name);\n // If user tries to add tabpane with the same name which is already exists then do not create the pane\n if (isPaneAlreadyCreated || isPaneNameExist > 0) {\n console.warn(`The tab pane with name ${pane.name} already exists`);\n return;\n }\n\n let paramMarkup = '';\n let propsTmpl = '';\n this.dynamicPaneIndex++;\n const name = pane.name ? pane.name : `tabpane${this.panes.toArray().length + (index + 1)}`;\n paneNamesList.push(name);\n const partialParams = _.get(pane, 'params');\n\n _.forEach(pane, (value, key) => {\n if (key !== 'params') {\n propsTmpl = `${propsTmpl} ${key}=\"${value}\"`;\n }\n });\n\n _.forEach(partialParams, (value, key) => {\n paramMarkup = `${paramMarkup} <wm-param name=\"${key}\" value=\"${value}\"></wm-param>`;\n });\n const markup = `<wm-tabpane dynamicPaneIndex=\"${this.dynamicPaneIndex - 1}\" isdynamic=\"true\" name=\"${name}\" ${propsTmpl}>\n ${paramMarkup}\n </wm-tabpane>`;\n\n if (!this._dynamicContext) {\n this._dynamicContext = Object.create(this.viewParent);\n this._dynamicContext[this.getAttr('wmTab')] = this;\n }\n\n this.dynamicComponentProvider.addComponent(this.getNativeElement().querySelector('.tab-content'), markup, this._dynamicContext, {inj: this.inj});\n\n });\n return paneNamesList;\n }\n\n /**\n * This method is to remove the tabpane\n * @param paneIndex - index of the pane\n */\n public removePane(paneName) {\n const paneRef = this.getPaneRefByName(paneName);\n if (paneRef) {\n paneRef.remove();\n }\n }\n\n /**\n * TabPane children components invoke this method to communicate with the parent\n * if the evt argument is defined on-change callback will be invoked.\n */\n public notifyChange(paneRef: TabPaneComponent, evt: Event) {\n if (!this.isSelectableTab(paneRef)) {\n return;\n }\n\n let headerElement;\n // invoke deselect event callback on the preset active tab\n if (!_.isEmpty(this.activeTab)) {\n this.activeTab.deselect();\n }\n\n\n this.activeTab = paneRef.getWidget();\n const newPaneIndex = this.getPaneIndexByRef(paneRef);\n const mode = this.statePersistence.computeMode(this.statehandler);\n if (!this.isPageLoadCall && mode && mode.toLowerCase() !== 'none') {\n this.statePersistence.setWidgetState(this, this.activeTab.name);\n } else {\n this.defaultpaneindex = this.getPaneIndexByRef(paneRef);\n this.isPageLoadCall = false;\n }\n\n // invoke select callback on the selected tab\n paneRef.invokeOnSelectCallback(evt);\n\n // invoke change callback if the evt is present, select a tab programmatically will not have the event\n if (evt) {\n this.invokeEventCallback('change', {\n $event: evt,\n newPaneIndex: newPaneIndex,\n oldPaneIndex: this._oldPaneIndex || 0\n });\n }\n this._oldPaneIndex = newPaneIndex;\n\n if (evt) {\n headerElement = $(evt.target as HTMLElement).closest('li.tab-header');\n }\n if (!evt || !headerElement || !headerElement.length) {\n headerElement = this.nativeElement.querySelector(`li[data-paneid=${paneRef.widgetId}]`);\n const insideTabs = !!$(headerElement).closest('.app-tabs')\n .parent().closest('.app-tabs').length;\n if (!insideTabs) { \n $(headerElement).children().focus();\n }\n }\n this.animateIn(headerElement);\n\n // this.setTabsLeftPosition(this.getPaneIndexByRef(this.activeTab), this.panes.length);\n if (this.canSlide()) {\n if (!this.tabsAnimator) {\n this.tabsAnimator = new TabsAnimator(this);\n this.tabsAnimator.setGesturesEnabled(this.canSlide());\n }\n this.tabsAnimator.transitionTabIntoView();\n }\n }\n\n public goToTab(tabIndex) {\n if (this.isValidPaneIndex(tabIndex - 1)) {\n const tab = this.getPaneRefByIndex(tabIndex - 1);\n tab.select();\n }\n }\n\n private getPaneIndexByRef(paneRef: TabPaneComponent): number {\n return this.panes.toArray().indexOf(paneRef);\n }\n\n // Returns the active tab index from tabs.\n public getActiveTabIndex(): number {\n return _.findIndex(this.panes.toArray(), {isActive: true});\n }\n\n private isValidPaneIndex(index: number): boolean {\n return (index >= 0 && index < this.panes.length);\n }\n\n private getPaneRefByIndex(index: number): TabPaneComponent {\n return this.panes.toArray()[index];\n }\n\n private getPaneRefByName(name: string): TabPaneComponent {\n return _.find(this.panes.toArray(), {name: name});\n }\n\n // returns false if the pane is hidden or disabled\n private isSelectableTab(paneRef: TabPaneComponent): boolean {\n return paneRef.show && !paneRef.disabled;\n }\n\n private canSlide() {\n return this.transition === 'slide' && !this.vertical;\n }\n\n private getSelectableTabAfterIndex(index: number): TabPaneComponent {\n for (let i = index + 1; i < this.panes.length; i++) {\n const pane = this.getPaneRefByIndex(i);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n if (index === this.panes.length - 1) {\n const pane = this.getPaneRefByIndex(0);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n }\n\n private getSelectableTabBeforeIndex(index: number): TabPaneComponent {\n for (let i = index - 1; i >= 0; i--) {\n const pane = this.getPaneRefByIndex(i);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n if (index === 0) {\n const pane = this.getPaneRefByIndex(this.panes.length - 1);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n }\n\n // select next tab relative to the current active tab\n public next($event?: Event) {\n const pane = this.getSelectableTabAfterIndex(this.getActiveTabIndex());\n if (pane) {\n pane.select($event);\n }\n }\n\n // select prev tab relative to the current active tab\n public prev($event?: Event) {\n const pane = this.getSelectableTabBeforeIndex(this.getActiveTabIndex());\n if (pane) {\n pane.select($event);\n }\n }\n\n /**\n * this method will be invoked during the initialization of the component and on defaultpaneindex property change,\n * if the provided defaultpaneindex is not valid, find the first pane index which can be shown and select it\n */\n private selectDefaultPaneByIndex(index: number) {\n if (!this.isValidPaneIndex(index)) {\n return;\n }\n\n let paneRef = this.getPaneRefByIndex(index);\n if (!this.isSelectableTab(paneRef)) {\n paneRef = this.getSelectableTabAfterIndex(0);\n }\n if (paneRef) {\n paneRef.select();\n }\n }\n\n // update the postion of tab header\n private setTabsPosition() {\n const ul = this.nativeElement.children[0];\n\n this.vertical = (this.tabsposition === 'left' || this.tabsposition === 'right');\n\n removeClass(this.nativeElement, 'inverted');\n if (this.tabsposition === 'bottom' || this.tabsposition === 'right') {\n appendNode(ul as HTMLElement, this.nativeElement);\n addClass(this.nativeElement, 'inverted');\n }\n }\n\n private onDataChange(newVal) {\n this.fieldDefs = createArrayFrom(newVal);\n setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0));\n }\n\n onPropertyChange(key: string, nv: any, ov) {\n\n if (key === 'defaultpaneindex') {\n this.defaultpaneindex = nv;\n } else if (key === 'dataset') {\n this.onDataChange(nv);\n } else if (key === 'statehandler') {\n this.isPageLoadCall = true;\n const widgetState = this.statePersistence.getWidgetState(this);\n if (nv !== 'none' && widgetState) {\n const paneToSelect: any = this.panes.filter(function(pane) {\n return widgetState === pane.name;\n });\n if (!paneToSelect.length) {\n console.warn('Tab pane name ' + widgetState + ' in State is incorrect. Falling back to the default pane');\n setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0), 20);\n } else {\n const index = this.getPaneIndexByRef(paneToSelect[0]);\n setTimeout(() => this.selectDefaultPaneByIndex(index), 20);\n }\n } else {\n setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0), 20);\n }\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n registerTabsScroll() {\n setTimeout(() => {\n const $ul = this.$element.find('> ul');\n let $liPosition;\n\n const $li = $ul.children();\n $liPosition = $li.last().position();\n if ($liPosition && ($liPosition.left > $ul.width())) {\n $ul.on('mousewheel', (e) => {\n const left = $ul[0].scrollLeft,\n _delta = -1 * e.originalEvent.wheelDelta;\n e.stopPropagation();\n e.preventDefault();\n $ul.animate({scrollLeft: left + _delta}, {'duration': 10});\n });\n }\n });\n }\n onkeydown(event) {\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n this.prev();\n event.preventDefault();\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n this.next();\n event.preventDefault();\n break;\n default:\n break;\n }\n }\n\n ngAfterContentInit() {\n this.promiseResolverFn();\n super.ngAfterContentInit();\n this.setTabsPosition();\n this.panes.changes.subscribe( slides => {\n if (this.panes.length) {\n this.selectDefaultPaneByIndex(this.defaultpaneindex || 0);\n }\n });\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n this.registerTabsScroll();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\n\nimport { TabsComponent } from './tabs.component';\nimport { TabPaneComponent } from './tab-pane/tab-pane.component';\n\nconst components = [\n TabPaneComponent,\n TabsComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components],\n entryComponents: []\n})\nexport class TabsModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {registerProps as ɵb} from './tab-pane/tab-pane.props';\nexport {registerProps as ɵa} from './tabs.props';"],"names":["registerProps","DEFAULT_CLS","WIDGET_CONFIG"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../projects/components/widgets/containers/tabs/src/tabs.animator.ts","../../../../../projects/components/widgets/containers/tabs/src/tabs.props.ts","../../../../../projects/components/widgets/containers/tabs/src/tab-pane/tab-pane.props.ts","../../../../../projects/components/widgets/containers/tabs/src/tab-pane/tab-pane.component.ts","../../../../../projects/components/widgets/containers/tabs/src/tabs.component.ts","../../../../../projects/components/widgets/containers/tabs/src/tabs.module.ts","../../../../../projects/components/widgets/containers/tabs/src/index.ts"],"sourcesContent":["import { SwipeAnimation } from '@swipey';\n\nimport { $appDigest, addClass, setCSS, setCSSFromObj } from '@wm/core';\n\nimport { TabsComponent } from './tabs.component';\n\ndeclare const $;\n\nexport class TabsAnimator extends SwipeAnimation {\n\n private _$el;\n\n public constructor(private tabs: TabsComponent) {\n super();\n this._$el = $(this.tabs.getNativeElement()).find('>.tab-content');\n this.init(this._$el);\n }\n\n public calibrate() {\n const activeTabIndex = this.tabs.getActiveTabIndex();\n const panes = this._$el.find('>.tab-pane');\n let activeTabVisibleIndex = 0;\n let noOfVisiblePanes = 0;\n let visiblePanes = [];\n panes.each((i, p) => {\n if (!$(p).prop('hidden')) {\n noOfVisiblePanes++;\n if (i === activeTabIndex) {\n activeTabVisibleIndex = noOfVisiblePanes - 1;\n }\n visiblePanes.push(p);\n }\n return true;\n });\n return {\n activeTabIndex: activeTabVisibleIndex,\n noOfTabs: noOfVisiblePanes,\n panes: visiblePanes\n };\n }\n\n public bounds() {\n const {activeTabIndex, noOfTabs, panes} = this.calibrate(),\n w = $(panes[0]).width(),\n centerVal = -1 * activeTabIndex * w;\n this.clearContentFocus();\n return {\n strict: false,\n lower: activeTabIndex === noOfTabs - 1 ? 0 : -w,\n center: centerVal,\n upper: activeTabIndex === 0 ? centerVal : w\n };\n }\n\n public context() {\n return {\n 'w': this._$el.width()\n };\n }\n\n public animation() {\n return {\n 'transform': 'translate3d(${{ ($D + $d)/w * 100 + \\'%\\'}}, 0, 0)',\n '-webkit-transform': 'translate3d(${{ ($D + $d)/w * 100 + \\'%\\'}}, 0, 0)'\n };\n }\n /* WMS-18031 | On Tab Switch | Remove the Focus on the Existing Tab Contents */\n private clearContentFocus() {\n let activeTab = this._$el.find('>.tab-pane.active');\n if(activeTab.length && activeTab.find(document.activeElement).length){\n (document.activeElement as HTMLElement).blur();\n }\n }\n public transitionTabIntoView() {\n const {activeTabIndex, noOfTabs, panes} = this.calibrate();\n const maxWidth = `${noOfTabs * 100}%`;\n setCSSFromObj(this._$el[0], {maxWidth: maxWidth, width: maxWidth});\n addClass(this.tabs.getNativeElement(), 'has-transition');\n const width = `${100 / noOfTabs}%`;\n panes.forEach(p => {\n setCSS(p as any, 'width', width);\n });\n setCSS(this._$el[0], 'transform', `translate3d(${-1 * activeTabIndex / noOfTabs * 100}%, 0, 0)`);\n }\n\n public onUpper($event?: Event) {\n this.tabs.prev($event);\n $appDigest();\n }\n\n public onLower($event?: Event) {\n this.tabs.next($event);\n $appDigest();\n }\n\n public threshold() {\n return 5;\n }\n}\n","import { isMobileApp } from '@wm/core';\n\nimport { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n const props = new Map(\n [\n ['class', PROP_STRING],\n ['dataset', PROP_ANY],\n ['defaultpaneindex', {value: 0, ...PROP_NUMBER}],\n ['justified', PROP_BOOLEAN],\n ['tabsposition', {value: 'top', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['nodatamessage', {value: 'No Data Found', ... PROP_STRING}],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['statehandler', {value: 'none', ...PROP_STRING}],\n ['transition', PROP_STRING],\n ['type', PROP_STRING]\n ]\n );\n if (isMobileApp()) {\n props.set('transition', {value: 'slide', ...PROP_STRING});\n }\n register('wm-tabs', props);\n};\n","import { PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register } from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-tabpane',\n new Map(\n [\n ['active', PROP_BOOLEAN], // internal property\n ['badgevalue', PROP_STRING],\n ['badgetype', {value: 'default', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['content', PROP_STRING],\n ['disabled', PROP_BOOLEAN],\n ['dynamicPaneIndex', PROP_NUMBER], // internal property\n ['heading', PROP_STRING],\n ['isdefaulttab', PROP_STRING],\n ['isdynamic', PROP_BOOLEAN], // internal property\n ['name', PROP_STRING],\n ['paneicon', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['smoothscroll', {value: false, ...PROP_BOOLEAN}],\n ['title', {value: 'Tab Title', ...PROP_STRING}]\n ]\n )\n );\n};\n","import { AfterViewInit, Attribute, Component, ContentChildren, HostBinding, Injector, OnInit } from '@angular/core';\n\nimport { noop, removeAttr } from '@wm/core';\n\nimport { APPLY_STYLES_TYPE, IWidgetConfig, provideAsWidgetRef, RedrawableDirective, styler, StylableComponent } from '@wm/components/base';\nimport { registerProps } from './tab-pane.props';\nimport { TabsComponent } from '../tabs.component';\n\nconst DEFAULT_CLS = 'tab-pane';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-tabpane',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: 'div[wmTabPane]',\n templateUrl: './tab-pane.component.html',\n providers: [\n provideAsWidgetRef(TabPaneComponent)\n ]\n})\nexport class TabPaneComponent extends StylableComponent implements OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n private _isFirstLoad: boolean = true;\n\n public $lazyLoad = noop;\n public name: string;\n public show: boolean;\n public smoothscroll: any;\n private isdynamic: boolean;\n\n @HostBinding('class.active') isActive = false;\n @HostBinding('class.disabled') disabled = false;\n\n // reference to the components which needs a redraw(eg, grid, chart) when the height of this component changes\n @ContentChildren(RedrawableDirective, {descendants: true}) reDrawableComponents;\n\n constructor(\n inj: Injector,\n private tabsRef: TabsComponent,\n @Attribute('heading') public heading,\n @Attribute('title') public title\n ) {\n super(inj, WIDGET_CONFIG);\n\n // title property here serves the purpose of heading.\n // TODO: make it common for all the widget.\n removeAttr(this.nativeElement, 'title');\n }\n\n // parent tabs component will call this method for the order of callbacks to be proper\n // order of callbacks - deselect, select, change\n public invokeOnSelectCallback($event?: Event) {\n this.invokeEventCallback('select', {$event});\n }\n\n public select($event?: Event) {\n // When called programatically $event won't be available\n if (this.isActive || this.disabled) {\n return;\n }\n\n this.isActive = true;\n this.$lazyLoad();\n this.redrawChildren();\n this.notifyParent($event);\n }\n\n tabpaneHeaderClick($event, paneIndex) {\n this.invokeEventCallback('headerclick', {$event, paneIndex});\n }\n\n public deselect() {\n if (this.isActive) {\n this.isActive = false;\n this.invokeEventCallback('deselect');\n }\n }\n\n public remove() {\n if (this.isActive) {\n this === this.tabsRef.panes.last ? this.tabsRef.prev() : this.tabsRef.next();\n }\n const availablePanes = this.tabsRef.panes.toArray();\n availablePanes.splice((this as any).tabsRef.getPaneIndexByRef(this), 1);\n this.tabsRef.panes.reset([...availablePanes]);\n this.nativeElement.remove();\n this.tabsRef.$element.find(`.tab-header[data-paneid='${this.$element.attr('widget-id')}'] a`).remove();\n }\n\n private redrawChildren() {\n setTimeout(() => {\n if (this.reDrawableComponents) {\n this.reDrawableComponents.forEach(c => c.redraw());\n }\n }, 100);\n }\n\n private notifyParent(evt?: Event) {\n this.tabsRef.notifyChange(this, evt);\n }\n\n // select next valid tab\n private handleSwipeLeft() {\n this.tabsRef.next();\n }\n\n // select prev valid tab\n private handleSwipeRight() {\n this.tabsRef.prev();\n }\n\n // select event is called manually\n protected handleEvent(node: HTMLElement, eventName: string, callback: Function, locals: any) {\n if (eventName !== 'select') {\n super.handleEvent(this.nativeElement, eventName, callback, locals);\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'content') {\n if (this.isActive) {\n setTimeout(() => this.$lazyLoad(), 100);\n }\n } else if (key === 'show') {\n // overridding the base component show propertyChangeHandler\n this.nativeElement.hidden = !nv;\n // setting default tab pane on pageload whenever show property is bindable\n if (this._isFirstLoad) {\n (this as any).tabsRef.selectDefaultPaneByIndex((this as any).tabsRef.defaultpaneindex);\n } else if (!nv && this.isActive) {\n (this as any).tabsRef.next();\n } else if (nv || !this.isActive) {\n (this as any).tabsRef.tabsAnimator?.transitionTabIntoView();\n }\n this._isFirstLoad = false;\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.title = this.title || this.heading;\n }\n\n ngAfterViewInit() {\n styler(\n this.nativeElement.querySelector('.tab-body') as HTMLElement,\n this,\n APPLY_STYLES_TYPE.CONTAINER\n );\n super.ngAfterViewInit();\n if (this.isdynamic) {\n this.tabsRef.registerDynamicTab(this);\n }\n }\n}\n","import { AfterContentInit, AfterViewInit, Attribute, Component, ContentChildren, Injector, OnInit, QueryList } from '@angular/core';\n\nimport { addClass, appendNode, DynamicComponentRefProvider, noop, removeClass, StatePersistence } from '@wm/core';\nimport {\n APPLY_STYLES_TYPE,\n IWidgetConfig,\n provideAsWidgetRef,\n styler,\n StylableComponent,\n createArrayFrom\n} from '@wm/components/base';\n\nimport { TabsAnimator } from './tabs.animator';\nimport { registerProps } from './tabs.props';\nimport { TabPaneComponent } from './tab-pane/tab-pane.component';\n\ndeclare const _, $;\n\nconst DEFAULT_CLS = 'app-tabs clearfix';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-tabs',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n selector: 'div[wmTabs]',\n templateUrl: './tabs.component.html',\n exportAs: 'wmTabs',\n providers: [\n provideAsWidgetRef(TabsComponent)\n ]\n})\nexport class TabsComponent extends StylableComponent implements AfterContentInit, OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n public defaultpaneindex: number;\n public transition: string;\n public tabsposition: string;\n public statehandler: any;\n private statePersistence: StatePersistence;\n\n public vertical: boolean;\n public justified: boolean;\n private activeTab: TabPaneComponent;\n private readonly promiseResolverFn: Function;\n private tabsAnimator: TabsAnimator;\n private _oldPaneIndex: number;\n private isPageLoadCall: boolean;\n private dynamicComponentProvider;\n private _dynamicContext;\n private dynamicPaneIndex;\n public dynamicTabs;\n public fieldDefs;\n public type;\n public nodatamessage;\n\n @ContentChildren(TabPaneComponent) panes: QueryList<TabPaneComponent>;\n\n constructor(\n inj: Injector,\n dynamicComponentProvider: DynamicComponentRefProvider,\n @Attribute('transition') _transition: string,\n @Attribute('tabsposition') _tabsPosition: string,\n statePersistence: StatePersistence,\n ) {\n // handle to the promise resolver\n let resolveFn: Function = noop;\n super(inj, WIDGET_CONFIG, new Promise(res => resolveFn = res));\n\n this.transition = _transition;\n this.tabsposition = _tabsPosition;\n this.statePersistence = statePersistence;\n this.dynamicComponentProvider = dynamicComponentProvider;\n this.dynamicTabs = [];\n this.dynamicPaneIndex = 0;\n\n this.promiseResolverFn = resolveFn;\n\n styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);\n\n }\n\n animateIn (element: HTMLElement) {\n const tabHeader = $(element);\n // when the animation is not present toggle the active class.\n tabHeader.siblings('.active').removeClass('active');\n tabHeader.addClass('active');\n\n const ul = this.nativeElement.querySelector('ul.nav.nav-tabs');\n\n // move the tabheader into the viewport\n const $prevHeaderEle = tabHeader.prev();\n if ($prevHeaderEle.length) {\n ul.scrollLeft = $prevHeaderEle[0].offsetLeft;\n } else {\n ul.scrollLeft = 0;\n }\n }\n\n /**\n * This method is used to register the dynamic panes.\n * After all panes are initialzed, update the querylist manually based on index.\n * @param paneRef - refrence of the tabpane\n */\n public registerDynamicTab(paneRef) {\n this.dynamicTabs.push(paneRef);\n const isLastPane = this.dynamicTabs.length === this.dynamicPaneIndex;\n if (isLastPane) {\n for (let i = 0; i < this.dynamicTabs.length; i++) {\n const newPaneRef = _.find(this.dynamicTabs, pane => pane.dynamicPaneIndex === i);\n const isPaneAlreadyExist = _.find(this.panes.toArray(), newPaneRef);\n if (!isPaneAlreadyExist) {\n this.panes.reset([...this.panes.toArray(), newPaneRef]);\n if (newPaneRef.active) {\n setTimeout(() => {\n newPaneRef.select();\n }, 20);\n }\n }\n }\n }\n }\n\n /**\n * This method is to add the tabpane dynamically\n * @param tabpanes - list of tabpanes\n */\n public addPane(tabpanes) {\n if (!_.isArray(tabpanes)) {\n tabpanes = [tabpanes];\n }\n const paneNamesList = [];\n _.forEach(tabpanes, (pane, index) => {\n const isPaneAlreadyCreated = _.find(this.panes.toArray(), {name: pane.name});\n const isPaneNameExist = _.indexOf(paneNamesList, pane.name);\n // If user tries to add tabpane with the same name which is already exists then do not create the pane\n if (isPaneAlreadyCreated || isPaneNameExist > 0) {\n console.warn(`The tab pane with name ${pane.name} already exists`);\n return;\n }\n\n let paramMarkup = '';\n let propsTmpl = '';\n this.dynamicPaneIndex++;\n const name = pane.name ? pane.name : `tabpane${this.panes.toArray().length + (index + 1)}`;\n paneNamesList.push(name);\n const partialParams = _.get(pane, 'params');\n\n _.forEach(pane, (value, key) => {\n if (key !== 'params') {\n propsTmpl = `${propsTmpl} ${key}=\"${value}\"`;\n }\n });\n\n _.forEach(partialParams, (value, key) => {\n paramMarkup = `${paramMarkup} <wm-param name=\"${key}\" value=\"${value}\"></wm-param>`;\n });\n const markup = `<wm-tabpane dynamicPaneIndex=\"${this.dynamicPaneIndex - 1}\" isdynamic=\"true\" name=\"${name}\" ${propsTmpl}>\n ${paramMarkup}\n </wm-tabpane>`;\n\n if (!this._dynamicContext) {\n this._dynamicContext = Object.create(this.viewParent);\n this._dynamicContext[this.getAttr('wmTab')] = this;\n }\n\n this.dynamicComponentProvider.addComponent(this.getNativeElement().querySelector('.tab-content'), markup, this._dynamicContext, {inj: this.inj});\n\n });\n return paneNamesList;\n }\n\n /**\n * This method is to remove the tabpane\n * @param paneIndex - index of the pane\n */\n public removePane(paneName) {\n const paneRef = this.getPaneRefByName(paneName);\n if (paneRef) {\n paneRef.remove();\n }\n }\n\n /**\n * TabPane children components invoke this method to communicate with the parent\n * if the evt argument is defined on-change callback will be invoked.\n */\n public notifyChange(paneRef: TabPaneComponent, evt: Event) {\n if (!this.isSelectableTab(paneRef)) {\n return;\n }\n\n let headerElement;\n // invoke deselect event callback on the preset active tab\n if (!_.isEmpty(this.activeTab)) {\n this.activeTab.deselect();\n }\n\n\n this.activeTab = paneRef.getWidget();\n const newPaneIndex = this.getPaneIndexByRef(paneRef);\n const mode = this.statePersistence.computeMode(this.statehandler);\n if (!this.isPageLoadCall && mode && mode.toLowerCase() !== 'none') {\n this.statePersistence.setWidgetState(this, this.activeTab.name);\n } else {\n this.defaultpaneindex = this.getPaneIndexByRef(paneRef);\n this.isPageLoadCall = false;\n }\n\n // invoke select callback on the selected tab\n paneRef.invokeOnSelectCallback(evt);\n\n // invoke change callback if the evt is present, select a tab programmatically will not have the event\n if (evt) {\n this.invokeEventCallback('change', {\n $event: evt,\n newPaneIndex: newPaneIndex,\n oldPaneIndex: this._oldPaneIndex || 0\n });\n }\n this._oldPaneIndex = newPaneIndex;\n\n if (evt) {\n headerElement = $(evt.target as HTMLElement).closest('li.tab-header');\n }\n if (!evt || !headerElement || !headerElement.length) {\n headerElement = this.nativeElement.querySelector(`li[data-paneid=${paneRef.widgetId}]`);\n const insideTabs = !!$(headerElement).closest('.app-tabs')\n .parent().closest('.app-tabs').length;\n if (!insideTabs) { \n $(headerElement).children().focus();\n }\n }\n this.animateIn(headerElement);\n\n // this.setTabsLeftPosition(this.getPaneIndexByRef(this.activeTab), this.panes.length);\n if (this.canSlide()) {\n if (!this.tabsAnimator) {\n this.tabsAnimator = new TabsAnimator(this);\n this.tabsAnimator.setGesturesEnabled(this.canSlide());\n }\n this.tabsAnimator.transitionTabIntoView();\n }\n }\n\n public goToTab(tabIndex) {\n if (this.isValidPaneIndex(tabIndex - 1)) {\n const tab = this.getPaneRefByIndex(tabIndex - 1);\n tab.select();\n }\n }\n\n private getPaneIndexByRef(paneRef: TabPaneComponent): number {\n return this.panes.toArray().indexOf(paneRef);\n }\n\n // Returns the active tab index from tabs.\n public getActiveTabIndex(): number {\n return _.findIndex(this.panes.toArray(), {isActive: true});\n }\n\n private isValidPaneIndex(index: number): boolean {\n return (index >= 0 && index < this.panes.length);\n }\n\n private getPaneRefByIndex(index: number): TabPaneComponent {\n return this.panes.toArray()[index];\n }\n\n private getPaneRefByName(name: string): TabPaneComponent {\n return _.find(this.panes.toArray(), {name: name});\n }\n\n // returns false if the pane is hidden or disabled\n private isSelectableTab(paneRef: TabPaneComponent): boolean {\n return paneRef.show && !paneRef.disabled;\n }\n\n private canSlide() {\n return this.transition === 'slide' && !this.vertical;\n }\n\n private getSelectableTabAfterIndex(index: number): TabPaneComponent {\n for (let i = index + 1; i < this.panes.length; i++) {\n const pane = this.getPaneRefByIndex(i);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n if (index === this.panes.length - 1) {\n const pane = this.getPaneRefByIndex(0);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n }\n\n private getSelectableTabBeforeIndex(index: number): TabPaneComponent {\n for (let i = index - 1; i >= 0; i--) {\n const pane = this.getPaneRefByIndex(i);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n if (index === 0) {\n const pane = this.getPaneRefByIndex(this.panes.length - 1);\n if (this.isSelectableTab(pane)) {\n return pane;\n }\n }\n }\n\n // select next tab relative to the current active tab\n public next($event?: Event) {\n const pane = this.getSelectableTabAfterIndex(this.getActiveTabIndex());\n if (pane) {\n pane.select($event);\n }\n }\n\n // select prev tab relative to the current active tab\n public prev($event?: Event) {\n const pane = this.getSelectableTabBeforeIndex(this.getActiveTabIndex());\n if (pane) {\n pane.select($event);\n }\n }\n\n /**\n * this method will be invoked during the initialization of the component and on defaultpaneindex property change,\n * if the provided defaultpaneindex is not valid, find the first pane index which can be shown and select it\n */\n private selectDefaultPaneByIndex(index: number) {\n if (!this.isValidPaneIndex(index)) {\n return;\n }\n\n let paneRef = this.getPaneRefByIndex(index);\n if (!this.isSelectableTab(paneRef)) {\n paneRef = this.getSelectableTabAfterIndex(0);\n }\n if (paneRef) {\n paneRef.select();\n }\n }\n\n // update the postion of tab header\n private setTabsPosition() {\n const ul = this.nativeElement.children[0];\n\n this.vertical = (this.tabsposition === 'left' || this.tabsposition === 'right');\n\n removeClass(this.nativeElement, 'inverted');\n if (this.tabsposition === 'bottom' || this.tabsposition === 'right') {\n appendNode(ul as HTMLElement, this.nativeElement);\n addClass(this.nativeElement, 'inverted');\n }\n }\n\n private onDataChange(newVal) {\n this.fieldDefs = createArrayFrom(newVal);\n setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0));\n }\n\n onPropertyChange(key: string, nv: any, ov) {\n\n if (key === 'defaultpaneindex') {\n this.defaultpaneindex = nv;\n } else if (key === 'dataset') {\n this.onDataChange(nv);\n } else if (key === 'statehandler') {\n this.isPageLoadCall = true;\n const widgetState = this.statePersistence.getWidgetState(this);\n if (nv !== 'none' && widgetState) {\n const paneToSelect: any = this.panes.filter(function(pane) {\n return widgetState === pane.name;\n });\n if (!paneToSelect.length) {\n console.warn('Tab pane name ' + widgetState + ' in State is incorrect. Falling back to the default pane');\n setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0), 20);\n } else {\n const index = this.getPaneIndexByRef(paneToSelect[0]);\n setTimeout(() => this.selectDefaultPaneByIndex(index), 20);\n }\n } else {\n setTimeout(() => this.selectDefaultPaneByIndex(this.defaultpaneindex || 0), 20);\n }\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n registerTabsScroll() {\n setTimeout(() => {\n const $ul = this.$element.find('> ul');\n let $liPosition;\n\n const $li = $ul.children();\n $liPosition = $li.last().position();\n if ($liPosition && ($liPosition.left > $ul.width())) {\n $ul.on('mousewheel', (e) => {\n const left = $ul[0].scrollLeft,\n _delta = -1 * e.originalEvent.wheelDelta;\n e.stopPropagation();\n e.preventDefault();\n $ul.animate({scrollLeft: left + _delta}, {'duration': 10});\n });\n }\n });\n }\n onkeydown(event) {\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowUp':\n this.prev();\n event.preventDefault();\n break;\n\n case 'ArrowRight':\n case 'ArrowDown':\n this.next();\n event.preventDefault();\n break;\n default:\n break;\n }\n }\n\n ngAfterContentInit() {\n this.promiseResolverFn();\n super.ngAfterContentInit();\n this.setTabsPosition();\n this.panes.changes.subscribe( slides => {\n if (this.panes.length) {\n this.selectDefaultPaneByIndex(this.defaultpaneindex || 0);\n }\n });\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n this.registerTabsScroll();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { WmComponentsModule } from '@wm/components/base';\n\nimport { TabsComponent } from './tabs.component';\nimport { TabPaneComponent } from './tab-pane/tab-pane.component';\n\nconst components = [\n TabPaneComponent,\n TabsComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components],\n entryComponents: []\n})\nexport class TabsModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {registerProps as ɵb} from './tab-pane/tab-pane.props';\nexport {registerProps as ɵa} from './tabs.props';"],"names":["registerProps","DEFAULT_CLS","WIDGET_CONFIG"],"mappings":"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"}
@@ -3,8 +3,12 @@ import { TabsComponent } from './tabs.component';
3
3
  export declare class TabsAnimator extends SwipeAnimation {
4
4
  private tabs;
5
5
  private _$el;
6
- private _noOfTabs;
7
6
  constructor(tabs: TabsComponent);
7
+ calibrate(): {
8
+ activeTabIndex: number;
9
+ noOfTabs: number;
10
+ panes: any[];
11
+ };
8
12
  bounds(): {
9
13
  strict: boolean;
10
14
  lower: number;
@@ -1356,9 +1356,10 @@
1356
1356
  }
1357
1357
  };
1358
1358
  // Triggers after the sorting.
1359
- ListComponent.prototype.onUpdate = function (evt, ui) {
1359
+ ListComponent.prototype.onUpdate = function (evt, ui, presentIndex) {
1360
1360
  var data = this.fieldDefs;
1361
- var newIndex = ui.item.index();
1361
+ // If ui is not present then it is called from drag and drop using keyboard
1362
+ var newIndex = ui === undefined ? presentIndex : ui.item.index();
1362
1363
  var oldIndex = this.$ulEle.data('oldIndex');
1363
1364
  var minIndex = _.min([newIndex, oldIndex]);
1364
1365
  var maxIndex = _.max([newIndex, oldIndex]);
@@ -1462,7 +1463,7 @@
1462
1463
  return this.datasource.execute(operation, options);
1463
1464
  };
1464
1465
  ListComponent.prototype.handleKeyDown = function ($event, action) {
1465
- var _this = this;
1466
+ var _d, _e;
1466
1467
  $event.stopPropagation();
1467
1468
  if ($event.keyCode !== 13 && $event.keyCode !== 9 && !(($event.target.classList.contains('form-control') || $event.target.classList.contains('note-editable')) && $event.keyCode === 32)) {
1468
1469
  $event.preventDefault();
@@ -1505,27 +1506,20 @@
1505
1506
  }
1506
1507
  if (action === 'focusPrev') {
1507
1508
  if (this.isListElementMovable) {
1508
- var prev_1;
1509
1509
  presentIndex = presentIndex <= 0 ? 0 : (presentIndex);
1510
- this.lastSelectedItem = this.getListItemByIndex(presentIndex);
1511
1510
  if (presentIndex === 0) {
1512
- prev_1 = this.listItems.last;
1513
1511
  return;
1514
1512
  }
1515
- this.listItems.forEach(function ($liItem, idx) {
1516
- if (idx === presentIndex) {
1517
- prev_1.nativeElement.before($liItem.nativeElement);
1518
- _this.lastSelectedItem.nativeElement.focus();
1519
- var arr = _this.listItems.toArray();
1520
- var temp = arr[presentIndex];
1521
- arr[presentIndex] = arr[presentIndex - 1];
1522
- arr[presentIndex - 1] = temp;
1523
- _this.listItems.reset(arr);
1524
- _this.currentIndex = presentIndex;
1525
- _this.ariaText = "selected ";
1526
- }
1527
- prev_1 = $liItem;
1528
- });
1513
+ this.lastSelectedItem = this.getListItemByIndex(presentIndex);
1514
+ var prevElt = this.getListItemByIndex(presentIndex - 1);
1515
+ prevElt.nativeElement.before(this.lastSelectedItem.nativeElement);
1516
+ this.lastSelectedItem.nativeElement.focus();
1517
+ this.statePersistence.removeWidgetState(this, 'selectedItem');
1518
+ var arr = this.listItems.toArray();
1519
+ _d = __read([arr[presentIndex], arr[presentIndex - 1]], 2), arr[presentIndex - 1] = _d[0], arr[presentIndex] = _d[1];
1520
+ this.listItems.reset(arr);
1521
+ this.currentIndex = presentIndex;
1522
+ this.ariaText = "selected ";
1529
1523
  }
1530
1524
  else {
1531
1525
  presentIndex = presentIndex <= 0 ? 0 : (presentIndex - 1);
@@ -1537,27 +1531,20 @@
1537
1531
  }
1538
1532
  else if (action === 'focusNext') {
1539
1533
  if (this.isListElementMovable) {
1540
- var prev_2;
1541
1534
  presentIndex = presentIndex < (listItems.length - 1) ? (presentIndex) : (listItems.length - 1);
1542
- this.lastSelectedItem = this.getListItemByIndex(presentIndex);
1543
1535
  if (presentIndex === this.listItems.length - 1) {
1544
- prev_2 = this.listItems.first;
1545
1536
  return;
1546
1537
  }
1547
- this.listItems.forEach(function ($liItem, idx) {
1548
- if (idx === presentIndex + 1) {
1549
- prev_2.nativeElement.before($liItem.nativeElement);
1550
- _this.lastSelectedItem.nativeElement.focus();
1551
- var arr = _this.listItems.toArray();
1552
- var temp = arr[presentIndex + 1];
1553
- arr[presentIndex + 1] = arr[presentIndex];
1554
- arr[presentIndex] = temp;
1555
- _this.listItems.reset(arr);
1556
- _this.currentIndex = idx + 1;
1557
- _this.ariaText = "selected ";
1558
- }
1559
- prev_2 = $liItem;
1560
- });
1538
+ this.lastSelectedItem = this.getListItemByIndex(presentIndex);
1539
+ var nextElt = this.getListItemByIndex(presentIndex + 1);
1540
+ nextElt.nativeElement.after(this.lastSelectedItem.nativeElement);
1541
+ this.lastSelectedItem.nativeElement.focus();
1542
+ this.statePersistence.removeWidgetState(this, 'selectedItem');
1543
+ var arr = this.listItems.toArray();
1544
+ _e = __read([arr[presentIndex + 1], arr[presentIndex]], 2), arr[presentIndex] = _e[0], arr[presentIndex + 1] = _e[1];
1545
+ this.listItems.reset(arr);
1546
+ this.currentIndex = presentIndex + 2;
1547
+ this.ariaText = "selected ";
1561
1548
  }
1562
1549
  else {
1563
1550
  presentIndex = presentIndex < (listItems.length - 1) ? (presentIndex + 1) : (listItems.length - 1);
@@ -1583,12 +1570,13 @@
1583
1570
  this.isListElementMovable = !this.isListElementMovable;
1584
1571
  this.onItemClick($event, this.getListItemByIndex(presentIndex));
1585
1572
  this.currentIndex = presentIndex + 1;
1586
- var name = this.getListItemByIndex(presentIndex).item.name;
1587
1573
  if (this.isListElementMovable) {
1588
- this.ariaText = name + " grabbed, current position ";
1574
+ this.ariaText = "Item " + this.currentIndex + " grabbed, current position ";
1575
+ this.$ulEle.data('oldIndex', presentIndex);
1589
1576
  }
1590
1577
  else {
1591
- this.ariaText = name + " dropped, final position ";
1578
+ this.ariaText = "Item " + this.currentIndex + " dropped, final position ";
1579
+ this.onUpdate($event, undefined, presentIndex);
1592
1580
  }
1593
1581
  }
1594
1582
  };
@@ -1641,11 +1629,13 @@
1641
1629
  this.dataNavigator.maxResults = nv;
1642
1630
  }
1643
1631
  else if (key === 'enablereorder') {
1644
- if (nv) {
1632
+ if (nv && this.$ulEle) {
1633
+ this.$ulEle.attr('aria-describedby', this.titleId);
1645
1634
  this.configureDnD();
1646
1635
  this.$ulEle.sortable('enable');
1647
1636
  }
1648
1637
  else if (this.$ulEle && !nv) {
1638
+ this.$ulEle.removeAttr('aria-describedby');
1649
1639
  this.$ulEle.sortable('disable');
1650
1640
  }
1651
1641
  }
@@ -1815,9 +1805,18 @@
1815
1805
  _super.prototype.ngAfterViewInit.call(_this);
1816
1806
  _this.setUpCUDHandlers();
1817
1807
  _this.selectedItemWidgets = _this.multiselect ? [] : {};
1808
+ var ele = $(_this.nativeElement).find('.app-livelist-container');
1818
1809
  if (_this.enablereorder && !_this.groupby) {
1810
+ if (ele) {
1811
+ ele.attr('aria-describedby', _this.titleId);
1812
+ }
1819
1813
  _this.configureDnD();
1820
1814
  }
1815
+ if (!_this.enablereorder) {
1816
+ if (ele) {
1817
+ ele.removeAttr('aria-describedby');
1818
+ }
1819
+ }
1821
1820
  if (_this.groupby && _this.collapsible) {
1822
1821
  _this.handleHeaderClick = base.handleHeaderClick;
1823
1822
  _this.toggleAllHeaders = base.toggleAllHeaders.bind(undefined, _this);
@@ -1827,6 +1826,16 @@
1827
1826
  this.setupHandlers();
1828
1827
  var $ul = this.nativeElement.querySelector('ul.app-livelist-container');
1829
1828
  base.styler($ul, this, base.APPLY_STYLES_TYPE.SCROLLABLE_CONTAINER);
1829
+ if (this.enablereorder) {
1830
+ if ($ul) {
1831
+ $ul.setAttribute('aria-describedby', this.titleId);
1832
+ }
1833
+ }
1834
+ if (!this.enablereorder) {
1835
+ if ($ul) {
1836
+ $ul.removeAttribute('aria-describedby');
1837
+ }
1838
+ }
1830
1839
  if (core.isMobileApp() && $ul.querySelector('.app-list-item-action-panel')) {
1831
1840
  this._listAnimator = new ListAnimator(this);
1832
1841
  }
@@ -1848,7 +1857,7 @@
1848
1857
  ListComponent.decorators = [
1849
1858
  { type: core$1.Component, args: [{
1850
1859
  selector: 'div[wmList]',
1851
- template: "<div class=\"panel-heading\" *ngIf=\"title || subheading || iconclass\">\n <h3 class=\"panel-title\">\n <div class=\"pull-left\">\n <i class=\"app-icon panel-icon {{iconclass}}\" aria-hidden=\"true\" [hidden]=\"!iconclass\"></i>\n </div>\n <div class=\"pull-left\">\n <div class=\"heading\" [innerHTML]=\"title\"></div>\n <div class=\"description\" [innerHTML]=\"subheading\"></div>\n </div>\n </h3>\n</div>\n\n<nav class=\"app-datanavigator\" [attr.aria-disabled]=\"dataNavigator.isDisablePrevious\" aria-label=\"Page navigation\" *ngIf=\"navigation === 'Inline' && !noDataFound\">\n <ul class=\"pager\">\n <li class=\"previous\" [ngClass]=\"{'disabled': (dataNavigator ? dataNavigator.isDisablePrevious : true)}\">\n <a href=\"javascript:void(0);\" (click)=\"dataNavigator.navigatePage('prev', $event)\">\n <i class=\"wi wi-chevron-left\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Previous</span>\n </a>\n </li>\n </ul>\n</nav>\n<div *ngIf=\"navigation === 'Inline' && !noDataFound\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\"> {{'Item ' + dataNavigator.dn.currentPage + ' of ' + dataNavigator.pageCount }}</div>\n\n<div>\n <div id={{titleId}} class=\"sr-only\" *ngIf=\"enablereorder\">\n Press space bar to toggle drag drop mode, use arrow keys to move selected elements.\n </div>\n\n <div aria-live=\"assertive\" *ngIf=\"listItems && enablereorder && currentIndex\" class=\"sr-only\" >\n {{ariaText + currentIndex + ' of ' + listItems.length}}\n </div> \n</div>\n\n<ul [attr.tabindex]=\"tabindex\" [attr.aria-describedby] = \"titleId\" class=\"app-livelist-container clearfix {{direction === 'horizontal' ? 'app-horizontal-list': ''}} {{listclass}}\" role=\"list\"\n (keydown.enter)=\"handleKeyDown($event, 'select')\"\n\n (keydown.space)=\"handleKeyDown($event, 'space')\"\n\n (keydown.arrowup)=\"handleKeyDown($event, 'focusPrev')\"\n (keydown.arrowdown)=\"handleKeyDown($event, 'focusNext')\"\n (keydown.arrowleft)=\"handleKeyDown($event, 'focusPrev')\"\n (keydown.arrowright)=\"handleKeyDown($event, 'focusNext')\"\n\n (keydown.shift.arrowup)=\"handleKeyDown($event, 'selectPrev')\"\n (keydown.shift.arrowdown)=\"handleKeyDown($event, 'selectNext')\"\n (keydown.shift.arrowleft)=\"handleKeyDown($event, 'selectPrev')\"\n (keydown.shift.arrowright)=\"handleKeyDown($event, 'selectNext')\"\n [hidden]=\"noDataFound && !variableInflight\"\n>\n <ng-template [ngIf]=\"!groupby\" [ngIfElse]=\"groupedListTemplate\">\n <li *ngFor=\"let item of fieldDefs; index as $index; first as $first; last as $last;\" class=\"app-list-item {{direction === 'horizontal' ? '' : itemsPerRowClass}}\" [ngClass]=\"listItemRef.itemClass\"\n [wmListItem]=\"item\"\n #listItemRef=\"listItemRef\"\n [attr.tabindex]=\"tabindex\"\n role=\"listitem\">\n <ng-container [ngTemplateOutlet]=\"listTemplate\" [ngTemplateOutletContext]=\"{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}\"></ng-container>\n </li>\n </ng-template>\n <ng-container [ngTemplateOutlet]=\"listLeftActionTemplate\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"listRightActionTemplate\"></ng-container>\n</ul>\n\n<div class=\"no-data-msg\" *ngIf=\"noDataFound && !variableInflight\" [textContent]=\"nodatamessage\"></div>\n\n<div class=\"loading-data-msg\" *ngIf=\"variableInflight && !pulltorefresh\">\n <span>\n <i class=\"app-icon panel-icon fa-spin\" aria-hidden=\"true\" [ngClass]=\"loadingicon\"></i>\n <span class=\"sr-only\">Loading</span>\n <span class=\"loading-text\" [textContent]=\"loadingdatamsg\"></span>\n </span>\n</div>\n\n<nav class=\"app-datanavigator\" [attr.aria-disabled]=\"dataNavigator.isDisableNext\" *ngIf=\"navigation === 'Inline' && !noDataFound\">\n <ul class=\"pager\">\n <li class=\"next\" [ngClass]=\"{'disabled': (dataNavigator ? dataNavigator.isDisableNext : true)}\">\n <a href=\"javascript:void(0);\" (click)=\"dataNavigator.navigatePage('next', $event)\">\n <i class=\"wi wi-chevron-right\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Next</span>\n </a>\n </li>\n </ul>\n</nav>\n\n<div class=\"panel-footer\" *ngIf=\"navigation !== 'None'\" [hidden]=\"!showNavigation || (onDemandLoad && dataNavigator.isDisableNext) || (dataNavigator.dataSize <= pagesize) || (!dataNavigator.dataSize && !dataNavigator.datasource?.pagination?.next)\">\n <nav wmPagination\n navigationalign.bind=\"navigationalign\"\n navigation.bind=\"navControls\"\n showrecordcount.bind=\"showrecordcount\"\n maxsize.bind=\"maxsize\"\n boundarylinks.bind=\"boundarylinks\"\n forceellipses.bind=\"forceellipses\"\n directionlinks.bind=\"directionlinks\"\n show.bind=\"!onDemandLoad\"\n paginationchange.event=\"beforePaginationChange($event, $index)\"\n ></nav>\n <a *ngIf=\"onDemandLoad\" href=\"javascript:void(0);\"\n (click)=\"dataNavigator.navigatePage('next', $event)\"\n class=\"app-button btn btn-block\"\n [ngClass]=\"paginationclass\"\n [textContent]=\"ondemandmessage\"\n ></a>\n</div>\n\n<!--This template will be displayed when groupby is specified-->\n<ng-template #groupedListTemplate>\n <li *ngFor=\"let groupObj of groupedData\" class=\"app-list-item-group clearfix\">\n <ul [attr.tabindex]=\"tabindex\" class=\"list-group item-group\" [ngClass]=\"listclass\">\n <li class=\"app-list-item-header list-item list-group-header\" (click)=\"handleHeaderClick($event)\" [ngClass]=\"{'collapsible-content': collapsible}\">\n <h4>{{groupObj.key}}\n <div class=\"header-action\">\n <i class=\"app-icon wi action wi-chevron-up\" *ngIf=\"collapsible\"></i>\n <span *ngIf=\"showcount\" class=\"label label-default\">{{groupObj.data.length}}</span>\n </div>\n </h4>\n </li>\n <ul class=\"list-group clearfix {{direction === 'horizontal' ? 'app-horizontal-list': ''}}\">\n <li *ngFor=\"let item of groupObj.data; index as $index; first as $first; last as $last;\" [attr.tabindex]=\"tabindex\"\n class=\"app-list-item group-list-item {{itemsPerRowClass}}\"\n [ngClass]=\"listItemRef.itemClass\"\n [wmListItem]=\"item\" #listItemRef=\"listItemRef\">\n <ng-container [ngTemplateOutlet]=\"listTemplate\" [ngTemplateOutletContext]=\"{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}\"></ng-container>\n </li>\n </ul>\n </ul>\n </li>\n</ng-template>\n",
1860
+ template: "<div class=\"panel-heading\" *ngIf=\"title || subheading || iconclass\">\n <h3 class=\"panel-title\">\n <div class=\"pull-left\">\n <i class=\"app-icon panel-icon {{iconclass}}\" aria-hidden=\"true\" [hidden]=\"!iconclass\"></i>\n </div>\n <div class=\"pull-left\">\n <div class=\"heading\" [innerHTML]=\"title\"></div>\n <div class=\"description\" [innerHTML]=\"subheading\"></div>\n </div>\n </h3>\n</div>\n\n<div class=\"app-datanavigator\" [attr.aria-disabled]=\"dataNavigator.isDisablePrevious\" aria-label=\"Page navigation\" *ngIf=\"navigation === 'Inline' && !noDataFound\">\n <ul class=\"pager\">\n <li class=\"previous\" [ngClass]=\"{'disabled': (dataNavigator ? dataNavigator.isDisablePrevious : true)}\">\n <a href=\"javascript:void(0);\" (click)=\"dataNavigator.navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"dataNavigator.isDisablePrevious\">\n <i class=\"wi wi-chevron-left\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Go to Previous page {{dataNavigator.isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n </ul>\n</div>\n<div *ngIf=\"navigation === 'Inline' && !noDataFound\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\"> {{'Page ' + dataNavigator.dn.currentPage + ' of ' + dataNavigator.pageCount }}</div>\n\n<div>\n <div id={{titleId}} class=\"sr-only\" *ngIf=\"enablereorder\">\n Press space bar to toggle drag drop mode, use arrow keys to move selected elements.\n </div>\n\n <div aria-live=\"assertive\" *ngIf=\"listItems && enablereorder && currentIndex\" class=\"sr-only\" >\n {{ariaText + currentIndex + ' of ' + listItems.length}}\n </div>\n</div>\n\n<ul [attr.tabindex]=\"tabindex\" class=\"app-livelist-container clearfix {{direction === 'horizontal' ? 'app-horizontal-list': ''}} {{listclass}}\" role=\"list\"\n (keydown.enter)=\"handleKeyDown($event, 'select')\"\n\n (keydown.space)=\"handleKeyDown($event, 'space')\"\n\n (keydown.arrowup)=\"handleKeyDown($event, 'focusPrev')\"\n (keydown.arrowdown)=\"handleKeyDown($event, 'focusNext')\"\n (keydown.arrowleft)=\"handleKeyDown($event, 'focusPrev')\"\n (keydown.arrowright)=\"handleKeyDown($event, 'focusNext')\"\n\n (keydown.shift.arrowup)=\"handleKeyDown($event, 'selectPrev')\"\n (keydown.shift.arrowdown)=\"handleKeyDown($event, 'selectNext')\"\n (keydown.shift.arrowleft)=\"handleKeyDown($event, 'selectPrev')\"\n (keydown.shift.arrowright)=\"handleKeyDown($event, 'selectNext')\"\n [hidden]=\"noDataFound && !variableInflight\"\n>\n <ng-template [ngIf]=\"!groupby\" [ngIfElse]=\"groupedListTemplate\">\n <li *ngFor=\"let item of fieldDefs; index as $index; first as $first; last as $last;\" class=\"app-list-item {{direction === 'horizontal' ? '' : itemsPerRowClass}}\" [ngClass]=\"listItemRef.itemClass\"\n [wmListItem]=\"item\"\n #listItemRef=\"listItemRef\"\n [attr.tabindex]=\"tabindex\"\n role=\"listitem\">\n <ng-container [ngTemplateOutlet]=\"listTemplate\" [ngTemplateOutletContext]=\"{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}\"></ng-container>\n </li>\n </ng-template>\n <ng-container [ngTemplateOutlet]=\"listLeftActionTemplate\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"listRightActionTemplate\"></ng-container>\n</ul>\n\n<div class=\"no-data-msg\" *ngIf=\"noDataFound && !variableInflight\" [textContent]=\"nodatamessage\"></div>\n\n<div class=\"loading-data-msg\" *ngIf=\"variableInflight && !pulltorefresh\">\n <span>\n <i class=\"app-icon panel-icon fa-spin\" aria-hidden=\"true\" [ngClass]=\"loadingicon\"></i>\n <span class=\"sr-only\">Loading</span>\n <span class=\"loading-text\" [textContent]=\"loadingdatamsg\"></span>\n </span>\n</div>\n\n<div class=\"app-datanavigator\" [attr.aria-disabled]=\"dataNavigator.isDisableNext\" *ngIf=\"navigation === 'Inline' && !noDataFound\">\n <ul class=\"pager\">\n <li class=\"next\" [ngClass]=\"{'disabled': (dataNavigator ? dataNavigator.isDisableNext : true)}\">\n <a href=\"javascript:void(0);\" (click)=\"dataNavigator.navigatePage('next', $event)\"\n [attr.aria-disabled]=\"dataNavigator.isDisableNext\">\n <i class=\"wi wi-chevron-right\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Go to Next page {{dataNavigator.isDisableNext ? ', Disabled' : ''}}</span>\n </a>\n </li>\n </ul>\n</div>\n\n<div class=\"panel-footer\" *ngIf=\"navigation !== 'None'\" [hidden]=\"!showNavigation || (onDemandLoad && dataNavigator.isDisableNext) || (dataNavigator.dataSize <= pagesize) || (!dataNavigator.dataSize && !dataNavigator.datasource?.pagination?.next)\">\n <nav wmPagination\n navigationalign.bind=\"navigationalign\"\n navigation.bind=\"navControls\"\n showrecordcount.bind=\"showrecordcount\"\n maxsize.bind=\"maxsize\"\n boundarylinks.bind=\"boundarylinks\"\n forceellipses.bind=\"forceellipses\"\n directionlinks.bind=\"directionlinks\"\n show.bind=\"!onDemandLoad\"\n paginationchange.event=\"beforePaginationChange($event, $index)\"\n ></nav>\n <a *ngIf=\"onDemandLoad\" href=\"javascript:void(0);\"\n (click)=\"dataNavigator.navigatePage('next', $event)\"\n class=\"app-button btn btn-block\"\n [ngClass]=\"paginationclass\"\n [textContent]=\"ondemandmessage\"\n ></a>\n</div>\n\n<!--This template will be displayed when groupby is specified-->\n<ng-template #groupedListTemplate>\n <li *ngFor=\"let groupObj of groupedData\" class=\"app-list-item-group clearfix\">\n <ul [attr.tabindex]=\"tabindex\" class=\"list-group item-group\" [ngClass]=\"listclass\">\n <li class=\"app-list-item-header list-item list-group-header\" (click)=\"handleHeaderClick($event)\" [ngClass]=\"{'collapsible-content': collapsible}\">\n <h4>{{groupObj.key}}\n <div class=\"header-action\">\n <i class=\"app-icon wi action wi-chevron-up\" *ngIf=\"collapsible\"></i>\n <span *ngIf=\"showcount\" class=\"label label-default\">{{groupObj.data.length}}</span>\n </div>\n </h4>\n </li>\n <ul class=\"list-group clearfix {{direction === 'horizontal' ? 'app-horizontal-list': ''}}\">\n <li *ngFor=\"let item of groupObj.data; index as $index; first as $first; last as $last;\" [attr.tabindex]=\"tabindex\"\n class=\"app-list-item group-list-item {{itemsPerRowClass}}\"\n [ngClass]=\"listItemRef.itemClass\"\n [wmListItem]=\"item\" #listItemRef=\"listItemRef\">\n <ng-container [ngTemplateOutlet]=\"listTemplate\" [ngTemplateOutletContext]=\"{item: item, $index: $index, itemRef: listItemRef, $first: $first, $last: $last, currentItemWidgets: listItemRef.currentItemWidgets}\"></ng-container>\n </li>\n </ul>\n </ul>\n </li>\n</ng-template>\n",
1852
1861
  providers: [
1853
1862
  base.provideAsWidgetRef(ListComponent)
1854
1863
  ]