@fundamental-ngx/core 0.35.2-rc.32 → 0.35.2-rc.35

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 (103) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/package.json +1 -1
  13. package/checkbox/package.json +1 -1
  14. package/combobox/package.json +1 -1
  15. package/content-density/package.json +3 -3
  16. package/date-picker/package.json +1 -1
  17. package/datetime/package.json +1 -1
  18. package/datetime-picker/package.json +1 -1
  19. package/dialog/package.json +1 -1
  20. package/dynamic-page/package.json +1 -1
  21. package/dynamic-side-content/package.json +1 -1
  22. package/esm2020/product-switch/product-switch-body/product-switch-body.component.mjs +8 -1
  23. package/facets/package.json +1 -1
  24. package/feed-input/package.json +1 -1
  25. package/feed-list-item/package.json +1 -1
  26. package/fesm2015/fundamental-ngx-core-product-switch.mjs +8 -1
  27. package/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  28. package/fesm2020/fundamental-ngx-core-product-switch.mjs +8 -1
  29. package/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  30. package/file-uploader/package.json +1 -1
  31. package/fixed-card-layout/package.json +1 -1
  32. package/flexible-column-layout/package.json +1 -1
  33. package/form/package.json +1 -1
  34. package/formatted-text/package.json +1 -1
  35. package/grid-list/package.json +1 -1
  36. package/icon/package.json +1 -1
  37. package/illustrated-message/package.json +1 -1
  38. package/infinite-scroll/package.json +1 -1
  39. package/info-label/package.json +1 -1
  40. package/inline-help/package.json +1 -1
  41. package/input-group/package.json +1 -1
  42. package/layout-grid/package.json +1 -1
  43. package/layout-panel/package.json +1 -1
  44. package/link/package.json +1 -1
  45. package/list/package.json +1 -1
  46. package/menu/package.json +1 -1
  47. package/message-box/package.json +1 -1
  48. package/message-strip/package.json +1 -1
  49. package/message-toast/package.json +1 -1
  50. package/micro-process-flow/package.json +1 -1
  51. package/mobile-mode/package.json +1 -1
  52. package/multi-input/package.json +1 -1
  53. package/nested-list/package.json +1 -1
  54. package/notification/package.json +1 -1
  55. package/object-identifier/package.json +1 -1
  56. package/object-marker/package.json +1 -1
  57. package/object-number/package.json +1 -1
  58. package/object-status/package.json +1 -1
  59. package/overflow-layout/package.json +13 -13
  60. package/package.json +1 -1
  61. package/pagination/package.json +1 -1
  62. package/panel/package.json +1 -1
  63. package/popover/package.json +1 -1
  64. package/product-switch/esm2020/product-switch-body/product-switch-body.component.mjs +8 -1
  65. package/product-switch/fesm2015/fundamental-ngx-core-product-switch.mjs +8 -1
  66. package/product-switch/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  67. package/product-switch/fesm2020/fundamental-ngx-core-product-switch.mjs +8 -1
  68. package/product-switch/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  69. package/product-switch/package.json +1 -1
  70. package/progress-indicator/package.json +1 -1
  71. package/quick-view/package.json +1 -1
  72. package/radio/package.json +1 -1
  73. package/rating-indicator/package.json +1 -1
  74. package/resizable-card-layout/package.json +1 -1
  75. package/scroll-spy/package.json +1 -1
  76. package/scrollbar/package.json +1 -1
  77. package/segmented-button/package.json +1 -1
  78. package/select/package.json +1 -1
  79. package/shared/package.json +1 -1
  80. package/shellbar/package.json +1 -1
  81. package/side-navigation/package.json +1 -1
  82. package/slider/package.json +1 -1
  83. package/split-button/package.json +1 -1
  84. package/splitter/package.json +1 -1
  85. package/status-indicator/package.json +1 -1
  86. package/step-input/package.json +1 -1
  87. package/switch/package.json +1 -1
  88. package/table/package.json +1 -1
  89. package/tabs/package.json +1 -1
  90. package/text/package.json +1 -1
  91. package/theming/package.json +1 -1
  92. package/tile/package.json +1 -1
  93. package/time/package.json +1 -1
  94. package/time-picker/package.json +1 -1
  95. package/timeline/package.json +1 -1
  96. package/title/package.json +1 -1
  97. package/token/package.json +1 -1
  98. package/toolbar/package.json +1 -1
  99. package/tree/package.json +1 -1
  100. package/upload-collection/package.json +1 -1
  101. package/utils/package.json +1 -1
  102. package/vertical-navigation/package.json +1 -1
  103. package/wizard/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/formatted-text",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/grid-list",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/icon/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/icon",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/illustrated-message",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/infinite-scroll",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/info-label",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/inline-help",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/input-group",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/layout-grid",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/layout-panel",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/link/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/link",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/list/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/list",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/menu/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/menu",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/message-box",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/message-strip",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/message-toast",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/micro-process-flow",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/mobile-mode",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/multi-input",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/nested-list",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/notification",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/object-identifier",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/object-marker",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/object-number",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/object-status",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/overflow-layout",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0",
7
7
  "@angular/cdk": "~13.2.4",
8
- "@fundamental-ngx/core/utils": "0.35.2-rc.32",
8
+ "@fundamental-ngx/core/utils": "0.35.2-rc.35",
9
9
  "rxjs": "7.5.4",
10
- "@fundamental-ngx/core/shared": "0.35.2-rc.32",
10
+ "@fundamental-ngx/core/shared": "0.35.2-rc.35",
11
11
  "core-js": "3.21.1",
12
12
  "zone.js": "0.11.4",
13
13
  "@angular/platform-browser-dynamic": "~13.2.4",
@@ -17,16 +17,16 @@
17
17
  "@angular/platform-browser": "~13.2.4",
18
18
  "lodash-es": "4.17.21",
19
19
  "focus-trap": "6.7.3",
20
- "@fundamental-ngx/core/popover": "0.35.2-rc.32",
21
- "@fundamental-ngx/core/notification": "0.35.2-rc.32",
22
- "@fundamental-ngx/core/button": "0.35.2-rc.32",
23
- "@fundamental-ngx/core/content-density": "0.35.2-rc.32",
24
- "@fundamental-ngx/core/icon": "0.35.2-rc.32",
25
- "@fundamental-ngx/core/mobile-mode": "0.35.2-rc.32",
26
- "@fundamental-ngx/core/dialog": "0.35.2-rc.32",
27
- "@fundamental-ngx/core/bar": "0.35.2-rc.32",
28
- "@fundamental-ngx/core/title": "0.35.2-rc.32",
29
- "@fundamental-ngx/core/busy-indicator": "0.35.2-rc.32"
20
+ "@fundamental-ngx/core/popover": "0.35.2-rc.35",
21
+ "@fundamental-ngx/core/notification": "0.35.2-rc.35",
22
+ "@fundamental-ngx/core/button": "0.35.2-rc.35",
23
+ "@fundamental-ngx/core/content-density": "0.35.2-rc.35",
24
+ "@fundamental-ngx/core/icon": "0.35.2-rc.35",
25
+ "@fundamental-ngx/core/mobile-mode": "0.35.2-rc.35",
26
+ "@fundamental-ngx/core/dialog": "0.35.2-rc.35",
27
+ "@fundamental-ngx/core/bar": "0.35.2-rc.35",
28
+ "@fundamental-ngx/core/title": "0.35.2-rc.35",
29
+ "@fundamental-ngx/core/busy-indicator": "0.35.2-rc.35"
30
30
  },
31
31
  "dependencies": {
32
32
  "tslib": "^2.0.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "description": "Fundamental Library for Angular - core",
6
6
  "license": "Apache-2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/pagination",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/panel",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/popover",
3
- "version": "0.35.2-rc.32",
3
+ "version": "0.35.2-rc.35",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -94,6 +94,13 @@ export class ProductSwitchBodyComponent {
94
94
  _handleNoListKeydown(event, target, i) {
95
95
  const previousElementSibling = target.previousElementSibling;
96
96
  const nextElementSibling = target.nextElementSibling;
97
+ if (i === this.products.length - 1 &&
98
+ (KeyUtil.isKeyCode(event, RIGHT_ARROW) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && this._isRtl))) {
99
+ while (target.previousElementSibling) {
100
+ target = target.previousElementSibling;
101
+ }
102
+ target.focus();
103
+ }
97
104
  if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {
98
105
  this._isRtl ? nextElementSibling?.focus() : previousElementSibling?.focus();
99
106
  }
@@ -167,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
167
174
  }], itemClicked: [{
168
175
  type: Output
169
176
  }] } });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zd2l0Y2gtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wcm9kdWN0LXN3aXRjaC9wcm9kdWN0LXN3aXRjaC1ib2R5L3Byb2R1Y3Qtc3dpdGNoLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvZHVjdC1zd2l0Y2gvcHJvZHVjdC1zd2l0Y2gtYm9keS9wcm9kdWN0LXN3aXRjaC1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQUl0RCxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQVM3QixNQUFNLE9BQU8sMEJBQTBCO0lBOEJuQyxZQUNZLGNBQTZCLEVBQ1IsV0FBdUIsRUFDbkMsSUFBdUI7UUFGaEMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDUixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtR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MEJBQTBCO2tCQVB0QyxTQUFTOytCQUNJLHdCQUF3QixpQkFHbkIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBa0MxQyxRQUFROzRFQTdCYixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLRyxjQUFjO3NCQUR0QixNQUFNO2dCQUtFLFdBQVc7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFNQQUNFLCBUQUIsIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGZERyb3BFdmVudCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBLZXlVdGlsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcblxuaW1wb3J0IHsgUHJvZHVjdFN3aXRjaEl0ZW0gfSBmcm9tICcuL3Byb2R1Y3Qtc3dpdGNoLml0ZW0nO1xuXG5jb25zdCBjb250YWluZXJXaWR0aFB4U21hbGxNb2RlID0gNTg4O1xuY29uc3QgY29udGFpbmVyV2lkdGhQeCA9IDc3NjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1wcm9kdWN0LXN3aXRjaC1ib2R5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1zd2l0Y2gtYm9keS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1zd2l0Y2gtYm9keS5jb21wb25lbnQuc2NzcycsICcuLi8uLi91dGlscy9kcmFnLWFuZC1kcm9wL2RyYWctYW5kLWRyb3Auc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdFN3aXRjaEJvZHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIERlZmluZXMgaWYgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0IHN3aXRjaCovXG4gICAgQElucHV0KClcbiAgICBkcmFnQW5kRHJvcEVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqIFRoZSBwcm9kdWN0IHN3aXRjaCdzIHByb2R1Y3QgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBwcm9kdWN0czogUHJvZHVjdFN3aXRjaEl0ZW1bXTtcblxuICAgIC8qKiBEZWZpbmVzIGlmIHRoZSBwcm9kdWN0IHN3aXRjaGVyIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gbGlzdCBtb2RlLCBubyBtYXR0ZXIgd2hhdCBpcyB0aGUgc2l6ZSBvZiB3aW5kb3cgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcmNlTGlzdE1vZGUgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gb24gcHJvZHVjdHMgYXJyYXkgY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcHJvZHVjdHNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gcHJvZHVjdCBjbGljayAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGl0ZW1DbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RNb2RlOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1J0bCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3ZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuc3Vic2NyaWJlKChpc1J0bCkgPT4gKHRoaXMuX2lzUnRsID0gaXNSdGwpKSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbm5lcldpZHRoIH0gPSA8V2luZG93PmV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1NpemUoaW5uZXJXaWR0aCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrU2l6ZSh3aWR0aCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1DbGljayhpdGVtOiBQcm9kdWN0U3dpdGNoSXRlbSwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0KSA9PiAocHJvZHVjdC5zZWxlY3RlZCA9IHByb2R1Y3QgPT09IGl0ZW0pKTtcblxuICAgICAgICB0aGlzLml0ZW1DbGlja2VkLmVtaXQoKTtcbiAgICAgICAgaWYgKGl0ZW0uY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGl0ZW0uY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQgb24gcHJvZHVjdHMgY2hhbmdlICovXG4gICAgX3Byb2R1Y3RTd2l0Y2hJdGVtc0NoYW5nZUhhbmRsZShkcm9wRXZlbnQ6IEZkRHJvcEV2ZW50PFByb2R1Y3RTd2l0Y2hJdGVtPik6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2R1Y3RzQ2hhbmdlLmVtaXQoZHJvcEV2ZW50Lml0ZW1zKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0cyA9IGRyb3BFdmVudC5pdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9rZXlEb3duSGFuZGxlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQ7XG5cbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0YXJnZXQuY2xpY2soKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNMaXN0TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBpID0gQXJyYXkuZnJvbSh0YXJnZXQucGFyZW50RWxlbWVudD8uY2hpbGRyZW4gPz8gW10pLmluZGV4T2YodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU5vTGlzdEtleWRvd24oZXZlbnQsIHRhcmdldCwgaSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNMaXN0TW9kZSgpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRE9XTl9BUlJPVywgVVBfQVJST1ddKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTGlzdEFycm93VXBEb3duKGV2ZW50LCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNTbWFsbE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3RzPy5sZW5ndGggPCA3O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzTGlzdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9saXN0TW9kZSB8fCB0aGlzLmZvcmNlTGlzdE1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja1NpemUod2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXNTbWFsbE1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy5fbGlzdE1vZGUgPSB3aWR0aCA8IGNvbnRhaW5lcldpZHRoUHhTbWFsbE1vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0TW9kZSA9IHdpZHRoIDwgY29udGFpbmVyV2lkdGhQeDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU5vTGlzdEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2aW91c0VsZW1lbnRTaWJsaW5nID0gPEhUTUxFbGVtZW50PnRhcmdldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICBjb25zdCBuZXh0RWxlbWVudFNpYmxpbmcgPSA8SFRNTEVsZW1lbnQ+dGFyZ2V0Lm5leHRFbGVtZW50U2libGluZztcblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLl9pc1J0bCA/IG5leHRFbGVtZW50U2libGluZz8uZm9jdXMoKSA6IHByZXZpb3VzRWxlbWVudFNpYmxpbmc/LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5faXNSdGwgPyBwcmV2aW91c0VsZW1lbnRTaWJsaW5nPy5mb2N1cygpIDogbmV4dEVsZW1lbnRTaWJsaW5nPy5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRE9XTl9BUlJPVywgVVBfQVJST1ddKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvZHVjdHMubGVuZ3RoID49IDcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVOb0xpc3RNb3JlVGhhblNldmVuKGV2ZW50LCB0YXJnZXQsIGkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2R1Y3RzLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVOb0xpc3RMZXNzVGhhblNldmVuKGV2ZW50LCB0YXJnZXQsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVOb0xpc3RNb3JlVGhhblNldmVuKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBpOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4QnlDb2x1bW4gPSA0O1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRhcmdldC5wYXJlbnRFbGVtZW50Py5jaGlsZHJlbjtcblxuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAoPEhUTUxFbGVtZW50PmNoaWxkcmVuW2kgKyBuZXh0SW5kZXhCeUNvbHVtbl0pPy5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+Y2hpbGRyZW5baSAtIG5leHRJbmRleEJ5Q29sdW1uXSk/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU5vTGlzdExlc3NUaGFuU2V2ZW4oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXh0SW5kZXhCeUNvbHVtbiA9IDM7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ/LmNoaWxkcmVuO1xuXG4gICAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+Y2hpbGRyZW5baSArIG5leHRJbmRleEJ5Q29sdW1uXSk/LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5jaGlsZHJlbltpIC0gbmV4dEluZGV4QnlDb2x1bW5dKT8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlTGlzdEFycm93VXBEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcgPSA8SFRNTEVsZW1lbnQ+dGFyZ2V0LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGNvbnN0IG5leHRFbGVtZW50U2libGluZyA9IDxIVE1MRWxlbWVudD50YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc0xpc3RNb2RlKCkgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpICYmIG5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgbmV4dEVsZW1lbnRTaWJsaW5nLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNMaXN0TW9kZSgpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykgJiYgcHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50U2libGluZy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtcHJvZHVjdC1zd2l0Y2hfX2JvZHlcIlxuICAgIFtjbGFzcy5mZC1wcm9kdWN0LXN3aXRjaF9fYm9keS0tY29sLTNdPVwiX2lzU21hbGxNb2RlKCkgJiYgIV9pc0xpc3RNb2RlKClcIlxuICAgIFtjbGFzcy5mZC1wcm9kdWN0LXN3aXRjaF9fYm9keS0tbW9iaWxlXT1cIl9pc0xpc3RNb2RlKClcIlxuPlxuICAgIDx1bFxuICAgICAgICBmZC1kbmQtbGlzdFxuICAgICAgICBjbGFzcz1cImZkLXByb2R1Y3Qtc3dpdGNoX19saXN0XCJcbiAgICAgICAgW2l0ZW1zXT1cInByb2R1Y3RzXCJcbiAgICAgICAgW2dyaWRNb2RlXT1cIiFfaXNMaXN0TW9kZSgpXCJcbiAgICAgICAgKGl0ZW1Ecm9wcGVkKT1cIl9wcm9kdWN0U3dpdGNoSXRlbXNDaGFuZ2VIYW5kbGUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgIGZkLWRuZC1pdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0c1wiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wcm9kdWN0LXN3aXRjaF9faXRlbVwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwicHJvZHVjdC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJfa2V5RG93bkhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfaXRlbUNsaWNrKHByb2R1Y3QsICRldmVudClcIlxuICAgICAgICAgICAgW2RyYWdnYWJsZV09XCIhcHJvZHVjdC5kaXNhYmxlZERyYWdBbmREcm9wICYmIGRyYWdBbmREcm9wRW5hYmxlZFwiXG4gICAgICAgICAgICBbc3RpY2tJblBsYWNlXT1cIiEhcHJvZHVjdC5zdGlja1RvUG9zaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtcHJvZHVjdC1zd2l0Y2hfX2ljb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJwcm9kdWN0Lmljb24gPyAnc2FwLWljb24tLScgKyBwcm9kdWN0Lmljb24gOiAnJ1wiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXByb2R1Y3Qtc3dpdGNoX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXByb2R1Y3Qtc3dpdGNoX190aXRsZVwiPnt7IHByb2R1Y3QudGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5zdWJ0aXRsZVwiIGNsYXNzPVwiZmQtcHJvZHVjdC1zd2l0Y2hfX3N1YnRpdGxlXCI+e3sgcHJvZHVjdC5zdWJ0aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgPC91bD5cbjwvZGl2PlxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zd2l0Y2gtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wcm9kdWN0LXN3aXRjaC9wcm9kdWN0LXN3aXRjaC1ib2R5L3Byb2R1Y3Qtc3dpdGNoLWJvZHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcHJvZHVjdC1zd2l0Y2gvcHJvZHVjdC1zd2l0Y2gtYm9keS9wcm9kdWN0LXN3aXRjaC1ib2R5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQWUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQUl0RCxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQVM3QixNQUFNLE9BQU8sMEJBQTBCO0lBOEJuQyxZQUNZLGNBQTZCLEVBQ1IsV0FBdUIsRUFDbkMsSUFBdUI7UUFGaEMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDUixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNuQyxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQWhDNUMsaUZBQWlGO1FBRWpGLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQU0xQiw2R0FBNkc7UUFFN0csa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsNENBQTRDO1FBRW5DLG1CQUFjLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7UUFFekUscUNBQXFDO1FBRTVCLGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFLcEUsY0FBYztRQUNOLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFdkIsY0FBYztRQUNOLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQU16QyxDQUFDO0lBRUosY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFXLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO0lBQ2QsVUFBVSxDQUFDLElBQXVCLEVBQUUsS0FBaUI7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLCtCQUErQixDQUFDLFNBQXlDO1FBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWM7SUFDZCxjQUFjLENBQUMsS0FBb0I7UUFDL0IsTUFBTSxNQUFNLEdBQWdCLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUMxQjtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUMxQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbEI7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9DO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUMvRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUFZO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDaEQsQ0FBQztJQUVELGNBQWM7SUFDTixVQUFVLENBQUMsS0FBYTtRQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssR0FBRyx5QkFBeUIsQ0FBQztTQUN0RDthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7U0FDN0M7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO0lBQ04sb0JBQW9CLENBQUMsS0FBb0IsRUFBRSxNQUFtQixFQUFFLENBQVM7UUFDN0UsTUFBTSxzQkFBc0IsR0FBZ0IsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQzFFLE1BQU0sa0JBQWtCLEdBQWdCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUVsRSxJQUNJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDbEc7WUFDRSxPQUFvQixNQUFNLENBQUMsc0JBQXNCLEVBQUU7Z0JBQy9DLE1BQU0sR0FBZ0IsTUFBTSxDQUFDLHNCQUFzQixDQUFDO2FBQ3ZEO1lBQ0QsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDL0U7YUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMvRTthQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUN6RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0o7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLDBCQUEwQixDQUFDLEtBQW9CLEVBQUUsTUFBbUIsRUFBRSxDQUFTO1FBQ25GLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO1FBRWhELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQ3hCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMzRDtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDdEIsUUFBUSxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQzNEO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTiwwQkFBMEIsQ0FBQyxLQUFvQixFQUFFLE1BQW1CLEVBQUUsQ0FBUztRQUNuRixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztRQUVoRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN4QixRQUFRLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDM0Q7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3RCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMzRDtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sc0JBQXNCLENBQUMsS0FBb0IsRUFBRSxNQUFtQjtRQUNwRSxNQUFNLHNCQUFzQixHQUFnQixNQUFNLENBQUMsc0JBQXNCLENBQUM7UUFDMUUsTUFBTSxrQkFBa0IsR0FBZ0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1FBRWxFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLGtCQUFrQixFQUFFO1lBQ2xGLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzlCO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksc0JBQXNCLEVBQUU7WUFDM0Ysc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbEM7SUFDTCxDQUFDOzt1SEF4TFEsMEJBQTBCOzJHQUExQiwwQkFBMEIscVBDL0J2QyxzMkNBbUNBOzJGREphLDBCQUEwQjtrQkFQdEMsU0FBUzsrQkFDSSx3QkFBd0IsaUJBR25CLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQWtDMUMsUUFBUTs0RUE3QmIsa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS0csY0FBYztzQkFEdEIsTUFBTTtnQkFLRSxXQUFXO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRSwgVEFCLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmREcm9wRXZlbnQsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5cbmltcG9ydCB7IFByb2R1Y3RTd2l0Y2hJdGVtIH0gZnJvbSAnLi9wcm9kdWN0LXN3aXRjaC5pdGVtJztcblxuY29uc3QgY29udGFpbmVyV2lkdGhQeFNtYWxsTW9kZSA9IDU4ODtcbmNvbnN0IGNvbnRhaW5lcldpZHRoUHggPSA3NzY7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcHJvZHVjdC1zd2l0Y2gtYm9keScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtc3dpdGNoLWJvZHkuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3Qtc3dpdGNoLWJvZHkuY29tcG9uZW50LnNjc3MnLCAnLi4vLi4vdXRpbHMvZHJhZy1hbmQtZHJvcC9kcmFnLWFuZC1kcm9wLnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTd2l0Y2hCb2R5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBEZWZpbmVzIGlmIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gcHJvZHVjdCBzd2l0Y2gqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJhZ0FuZERyb3BFbmFibGVkID0gdHJ1ZTtcblxuICAgIC8qKiBUaGUgcHJvZHVjdCBzd2l0Y2gncyBwcm9kdWN0IGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvZHVjdHM6IFByb2R1Y3RTd2l0Y2hJdGVtW107XG5cbiAgICAvKiogRGVmaW5lcyBpZiB0aGUgcHJvZHVjdCBzd2l0Y2hlciBzaG91bGQgYmUgZGlzcGxheWVkIGluIGxpc3QgbW9kZSwgbm8gbWF0dGVyIHdoYXQgaXMgdGhlIHNpemUgb2Ygd2luZG93ICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZUxpc3RNb2RlID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIG9uIHByb2R1Y3RzIGFycmF5IGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHByb2R1Y3RzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIHByb2R1Y3QgY2xpY2sgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0TW9kZTogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNSdGwgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF92aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fcnRsU2VydmljZT8ucnRsLnN1YnNjcmliZSgoaXNSdGwpID0+ICh0aGlzLl9pc1J0bCA9IGlzUnRsKSkpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5uZXJXaWR0aCB9ID0gPFdpbmRvdz5ldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTaXplKGlubmVyV2lkdGgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSB0aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICB0aGlzLl9jaGVja1NpemUod2lkdGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtQ2xpY2soaXRlbTogUHJvZHVjdFN3aXRjaEl0ZW0sIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4gKHByb2R1Y3Quc2VsZWN0ZWQgPSBwcm9kdWN0ID09PSBpdGVtKSk7XG5cbiAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5lbWl0KCk7XG4gICAgICAgIGlmIChpdGVtLmNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpdGVtLmNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIG9uIHByb2R1Y3RzIGNoYW5nZSAqL1xuICAgIF9wcm9kdWN0U3dpdGNoSXRlbXNDaGFuZ2VIYW5kbGUoZHJvcEV2ZW50OiBGZERyb3BFdmVudDxQcm9kdWN0U3dpdGNoSXRlbT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0c0NoYW5nZS5lbWl0KGRyb3BFdmVudC5pdGVtcyk7XG4gICAgICAgIHRoaXMucHJvZHVjdHMgPSBkcm9wRXZlbnQuaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfa2V5RG93bkhhbmRsZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xuXG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzTGlzdE1vZGUoKSkge1xuICAgICAgICAgICAgY29uc3QgaSA9IEFycmF5LmZyb20odGFyZ2V0LnBhcmVudEVsZW1lbnQ/LmNoaWxkcmVuID8/IFtdKS5pbmRleE9mKHRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVOb0xpc3RLZXlkb3duKGV2ZW50LCB0YXJnZXQsIGkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzTGlzdE1vZGUoKSAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0RPV05fQVJST1csIFVQX0FSUk9XXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUxpc3RBcnJvd1VwRG93bihldmVudCwgdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU21hbGxNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9kdWN0cz8ubGVuZ3RoIDwgNztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0xpc3RNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGlzdE1vZGUgfHwgdGhpcy5mb3JjZUxpc3RNb2RlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hlY2tTaXplKHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU21hbGxNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RNb2RlID0gd2lkdGggPCBjb250YWluZXJXaWR0aFB4U21hbGxNb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGlzdE1vZGUgPSB3aWR0aCA8IGNvbnRhaW5lcldpZHRoUHg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVOb0xpc3RLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBpOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNFbGVtZW50U2libGluZyA9IDxIVE1MRWxlbWVudD50YXJnZXQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgY29uc3QgbmV4dEVsZW1lbnRTaWJsaW5nID0gPEhUTUxFbGVtZW50PnRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSA9PT0gdGhpcy5wcm9kdWN0cy5sZW5ndGggLSAxICYmXG4gICAgICAgICAgICAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSB8fCAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpICYmIHRoaXMuX2lzUnRsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB3aGlsZSAoPEhUTUxFbGVtZW50PnRhcmdldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gPEhUTUxFbGVtZW50PnRhcmdldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICB0aGlzLl9pc1J0bCA/IG5leHRFbGVtZW50U2libGluZz8uZm9jdXMoKSA6IHByZXZpb3VzRWxlbWVudFNpYmxpbmc/LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSkge1xuICAgICAgICAgICAgdGhpcy5faXNSdGwgPyBwcmV2aW91c0VsZW1lbnRTaWJsaW5nPy5mb2N1cygpIDogbmV4dEVsZW1lbnRTaWJsaW5nPy5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRE9XTl9BUlJPVywgVVBfQVJST1ddKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvZHVjdHMubGVuZ3RoID49IDcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVOb0xpc3RNb3JlVGhhblNldmVuKGV2ZW50LCB0YXJnZXQsIGkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2R1Y3RzLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVOb0xpc3RMZXNzVGhhblNldmVuKGV2ZW50LCB0YXJnZXQsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVOb0xpc3RNb3JlVGhhblNldmVuKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBpOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4QnlDb2x1bW4gPSA0O1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRhcmdldC5wYXJlbnRFbGVtZW50Py5jaGlsZHJlbjtcblxuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAoPEhUTUxFbGVtZW50PmNoaWxkcmVuW2kgKyBuZXh0SW5kZXhCeUNvbHVtbl0pPy5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+Y2hpbGRyZW5baSAtIG5leHRJbmRleEJ5Q29sdW1uXSk/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU5vTGlzdExlc3NUaGFuU2V2ZW4oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXh0SW5kZXhCeUNvbHVtbiA9IDM7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ/LmNoaWxkcmVuO1xuXG4gICAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+Y2hpbGRyZW5baSArIG5leHRJbmRleEJ5Q29sdW1uXSk/LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5jaGlsZHJlbltpIC0gbmV4dEluZGV4QnlDb2x1bW5dKT8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlTGlzdEFycm93VXBEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcgPSA8SFRNTEVsZW1lbnQ+dGFyZ2V0LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgIGNvbnN0IG5leHRFbGVtZW50U2libGluZyA9IDxIVE1MRWxlbWVudD50YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc0xpc3RNb2RlKCkgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpICYmIG5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgbmV4dEVsZW1lbnRTaWJsaW5nLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNMaXN0TW9kZSgpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykgJiYgcHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50U2libGluZy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtcHJvZHVjdC1zd2l0Y2hfX2JvZHlcIlxuICAgIFtjbGFzcy5mZC1wcm9kdWN0LXN3aXRjaF9fYm9keS0tY29sLTNdPVwiX2lzU21hbGxNb2RlKCkgJiYgIV9pc0xpc3RNb2RlKClcIlxuICAgIFtjbGFzcy5mZC1wcm9kdWN0LXN3aXRjaF9fYm9keS0tbW9iaWxlXT1cIl9pc0xpc3RNb2RlKClcIlxuPlxuICAgIDx1bFxuICAgICAgICBmZC1kbmQtbGlzdFxuICAgICAgICBjbGFzcz1cImZkLXByb2R1Y3Qtc3dpdGNoX19saXN0XCJcbiAgICAgICAgW2l0ZW1zXT1cInByb2R1Y3RzXCJcbiAgICAgICAgW2dyaWRNb2RlXT1cIiFfaXNMaXN0TW9kZSgpXCJcbiAgICAgICAgKGl0ZW1Ecm9wcGVkKT1cIl9wcm9kdWN0U3dpdGNoSXRlbXNDaGFuZ2VIYW5kbGUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgIGZkLWRuZC1pdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBwcm9kdWN0c1wiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1wcm9kdWN0LXN3aXRjaF9faXRlbVwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwicHJvZHVjdC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJfa2V5RG93bkhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfaXRlbUNsaWNrKHByb2R1Y3QsICRldmVudClcIlxuICAgICAgICAgICAgW2RyYWdnYWJsZV09XCIhcHJvZHVjdC5kaXNhYmxlZERyYWdBbmREcm9wICYmIGRyYWdBbmREcm9wRW5hYmxlZFwiXG4gICAgICAgICAgICBbc3RpY2tJblBsYWNlXT1cIiEhcHJvZHVjdC5zdGlja1RvUG9zaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtcHJvZHVjdC1zd2l0Y2hfX2ljb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJwcm9kdWN0Lmljb24gPyAnc2FwLWljb24tLScgKyBwcm9kdWN0Lmljb24gOiAnJ1wiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXByb2R1Y3Qtc3dpdGNoX190ZXh0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLXByb2R1Y3Qtc3dpdGNoX190aXRsZVwiPnt7IHByb2R1Y3QudGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5zdWJ0aXRsZVwiIGNsYXNzPVwiZmQtcHJvZHVjdC1zd2l0Y2hfX3N1YnRpdGxlXCI+e3sgcHJvZHVjdC5zdWJ0aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgPC91bD5cbjwvZGl2PlxuIl19
@@ -9,7 +9,7 @@ import { CommonModule } from '@angular/common';
9
9
  import * as i2$1 from '@fundamental-ngx/core/utils';
10
10
  import { KeyUtil, DragAndDropModule } from '@fundamental-ngx/core/utils';
11
11
  import { DragDropModule } from '@angular/cdk/drag-drop';
12
- import { TAB, ENTER, SPACE, DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';
12
+ import { TAB, ENTER, SPACE, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW } from '@angular/cdk/keycodes';
13
13
  import { Subscription } from 'rxjs';
14
14
  import * as i1$1 from '@angular/cdk/scrolling';
15
15
 
@@ -125,6 +125,13 @@ class ProductSwitchBodyComponent {
125
125
  _handleNoListKeydown(event, target, i) {
126
126
  const previousElementSibling = target.previousElementSibling;
127
127
  const nextElementSibling = target.nextElementSibling;
128
+ if (i === this.products.length - 1 &&
129
+ (KeyUtil.isKeyCode(event, RIGHT_ARROW) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && this._isRtl))) {
130
+ while (target.previousElementSibling) {
131
+ target = target.previousElementSibling;
132
+ }
133
+ target.focus();
134
+ }
128
135
  if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {
129
136
  this._isRtl ? nextElementSibling === null || nextElementSibling === void 0 ? void 0 : nextElementSibling.focus() : previousElementSibling === null || previousElementSibling === void 0 ? void 0 : previousElementSibling.focus();
130
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-product-switch.mjs","sources":["../../../../../libs/core/src/lib/product-switch/product-switch/product-switch.component.ts","../../../../../libs/core/src/lib/product-switch/product-switch/product-switch.component.html","../../../../../libs/core/src/lib/product-switch/product-switch-body/product-switch-body.component.ts","../../../../../libs/core/src/lib/product-switch/product-switch-body/product-switch-body.component.html","../../../../../libs/core/src/lib/product-switch/product-switch.module.ts","../../../../../libs/core/src/lib/product-switch/fundamental-ngx-core-product-switch.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { BasePopoverClass } from '@fundamental-ngx/core/popover';\n\n@Component({\n selector: 'fd-product-switch',\n templateUrl: './product-switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductSwitchComponent extends BasePopoverClass {\n @Input()\n placement: Placement = 'bottom-end';\n\n /** Input to set the aria label */\n @Input()\n ariaLabel = 'Product Switch';\n\n /** Whether the product switch is disabled. */\n @Input()\n disabled = false;\n}\n","<div class=\"fd-product-switch\">\n <fd-popover\n [placement]=\"placement\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [(isOpen)]=\"isOpen\"\n (isOpenChange)=\"isOpenChange.emit($event)\"\n [disabled]=\"disabled\"\n [triggers]=\"triggers\"\n [focusTrapped]=\"false\"\n [focusAutoCapture]=\"true\"\n [noArrow]=\"noArrow\"\n >\n <fd-popover-control>\n <button\n fd-button\n [attr.aria-label]=\"ariaLabel\"\n [attr.title]=\"ariaLabel\"\n class=\"fd-shellbar__button\"\n glyph=\"grid\"\n fdType=\"transparent\"\n ></button>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { Subscription } from 'rxjs';\n\nimport { FdDropEvent, RtlService } from '@fundamental-ngx/core/utils';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\n\nimport { ProductSwitchItem } from './product-switch.item';\n\nconst containerWidthPxSmallMode = 588;\nconst containerWidthPx = 776;\n\n@Component({\n selector: 'fd-product-switch-body',\n templateUrl: './product-switch-body.component.html',\n styleUrls: ['./product-switch-body.component.scss', '../../utils/drag-and-drop/drag-and-drop.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductSwitchBodyComponent implements OnInit, OnDestroy {\n /** Defines if drag and drop functionality should be included in product switch*/\n @Input()\n dragAndDropEnabled = true;\n\n /** The product switch's product items. */\n @Input()\n products: ProductSwitchItem[];\n\n /** Defines if the product switcher should be displayed in list mode, no matter what is the size of window */\n @Input()\n forceListMode = false;\n\n /** Event thrown on products array change */\n @Output()\n readonly productsChange: EventEmitter<any[]> = new EventEmitter<any[]>();\n\n /** Event emitted on product click */\n @Output()\n readonly itemClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n private _listMode: boolean;\n\n /** @hidden */\n private _isRtl = false;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n constructor(\n private _viewportRuler: ViewportRuler,\n @Optional() private readonly _rtlService: RtlService,\n private readonly _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._subscriptions.add(this._rtlService?.rtl.subscribe((isRtl) => (this._isRtl = isRtl)));\n this._subscriptions.add(\n this._viewportRuler.change().subscribe((event) => {\n const { innerWidth } = <Window>event.target;\n this._checkSize(innerWidth);\n })\n );\n\n const { width } = this._viewportRuler.getViewportSize();\n this._checkSize(width);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _itemClick(item: ProductSwitchItem, event: MouseEvent): void {\n this.products.forEach((product) => (product.selected = product === item));\n\n this.itemClicked.emit();\n if (item.callback) {\n item.callback(event);\n }\n }\n\n /** Method called on products change */\n _productSwitchItemsChangeHandle(dropEvent: FdDropEvent<ProductSwitchItem>): void {\n this.productsChange.emit(dropEvent.items);\n this.products = dropEvent.items;\n }\n\n /** @hidden */\n _keyDownHandle(event: KeyboardEvent): void {\n const target = <HTMLElement>event.target;\n\n if (!KeyUtil.isKeyCode(event, TAB)) {\n event.preventDefault();\n }\n\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n target.click();\n } else if (!this._isListMode()) {\n const i = Array.from(target.parentElement?.children ?? []).indexOf(target);\n this._handleNoListKeydown(event, target, i);\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n this._handleListArrowUpDown(event, target);\n }\n }\n\n /** @hidden */\n _isSmallMode(): boolean {\n return this.products?.length < 7;\n }\n\n /** @hidden */\n _isListMode(): boolean {\n return this._listMode || this.forceListMode;\n }\n\n /** @hidden */\n private _checkSize(width: number): void {\n if (this._isSmallMode()) {\n this._listMode = width < containerWidthPxSmallMode;\n } else {\n this._listMode = width < containerWidthPx;\n }\n\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _handleNoListKeydown(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const previousElementSibling = <HTMLElement>target.previousElementSibling;\n const nextElementSibling = <HTMLElement>target.nextElementSibling;\n\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this._isRtl ? nextElementSibling?.focus() : previousElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this._isRtl ? previousElementSibling?.focus() : nextElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n if (this.products.length >= 7) {\n this._handleNoListMoreThanSeven(event, target, i);\n } else if (this.products.length < 7) {\n this._handleNoListLessThanSeven(event, target, i);\n }\n }\n }\n\n /** @hidden */\n private _handleNoListMoreThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 4;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleNoListLessThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 3;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleListArrowUpDown(event: KeyboardEvent, target: HTMLElement): void {\n const previousElementSibling = <HTMLElement>target.previousElementSibling;\n const nextElementSibling = <HTMLElement>target.nextElementSibling;\n\n if (this._isListMode() && KeyUtil.isKeyCode(event, DOWN_ARROW) && nextElementSibling) {\n nextElementSibling.focus();\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, UP_ARROW) && previousElementSibling) {\n previousElementSibling.focus();\n }\n }\n}\n","<div\n class=\"fd-product-switch__body\"\n [class.fd-product-switch__body--col-3]=\"_isSmallMode() && !_isListMode()\"\n [class.fd-product-switch__body--mobile]=\"_isListMode()\"\n>\n <ul\n fd-dnd-list\n class=\"fd-product-switch__list\"\n [items]=\"products\"\n [gridMode]=\"!_isListMode()\"\n (itemDropped)=\"_productSwitchItemsChangeHandle($event)\"\n >\n <li\n fd-dnd-item\n *ngFor=\"let product of products\"\n tabindex=\"0\"\n class=\"fd-product-switch__item\"\n [class.selected]=\"product.selected\"\n (keydown)=\"_keyDownHandle($event)\"\n (click)=\"_itemClick(product, $event)\"\n [draggable]=\"!product.disabledDragAndDrop && dragAndDropEnabled\"\n [stickInPlace]=\"!!product.stickToPosition\"\n >\n <i\n role=\"presentation\"\n class=\"fd-product-switch__icon\"\n [class]=\"product.icon ? 'sap-icon--' + product.icon : ''\"\n ></i>\n <div class=\"fd-product-switch__text\">\n <div class=\"fd-product-switch__title\">{{ product.title }}</div>\n <div *ngIf=\"product.subtitle\" class=\"fd-product-switch__subtitle\">{{ product.subtitle }}</div>\n </div>\n </li>\n </ul>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ProductSwitchComponent } from './product-switch/product-switch.component';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { CommonModule } from '@angular/common';\nimport { DragAndDropModule } from '@fundamental-ngx/core/utils';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ProductSwitchBodyComponent } from './product-switch-body/product-switch-body.component';\n\n@NgModule({\n imports: [PopoverModule, CommonModule, ButtonModule, DragAndDropModule, DragDropModule],\n declarations: [ProductSwitchComponent, ProductSwitchBodyComponent],\n exports: [ProductSwitchComponent, ProductSwitchBodyComponent]\n})\nexport class ProductSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;MAUa,+BAA+B,gBAAgB;IAL5D;;QAOI,cAAS,GAAc,YAAY,CAAC;;QAIpC,cAAS,GAAG,gBAAgB,CAAC;;QAI7B,aAAQ,GAAG,KAAK,CAAC;KACpB;;mHAXY,sBAAsB;uGAAtB,sBAAsB,kKCVnC,u5BA4BA;2FDlBa,sBAAsB;kBALlC,SAAS;+BACI,mBAAmB,mBAEZ,uBAAuB,CAAC,MAAM;8BAI/C,SAAS;sBADR,KAAK;gBAKN,SAAS;sBADR,KAAK;gBAKN,QAAQ;sBADP,KAAK;;;AEEV,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,MAAM,gBAAgB,GAAG,GAAG,CAAC;MAShB,0BAA0B;IA8BnC,YACY,cAA6B,EACR,WAAuB,EACnC,IAAuB;QAFhC,mBAAc,GAAd,cAAc,CAAe;QACR,gBAAW,GAAX,WAAW,CAAY;QACnC,SAAI,GAAJ,IAAI,CAAmB;;QA9B5C,uBAAkB,GAAG,IAAI,CAAC;;QAQ1B,kBAAa,GAAG,KAAK,CAAC;;QAIb,mBAAc,GAAwB,IAAI,YAAY,EAAS,CAAC;;QAIhE,gBAAW,GAAuB,IAAI,YAAY,EAAQ,CAAC;;QAM5D,WAAM,GAAG,KAAK,CAAC;;QAGf,mBAAc,GAAG,IAAI,YAAY,EAAE,CAAC;KAMxC;;IAGJ,QAAQ;;QACJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,WAAW,0CAAE,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,cAAc,CAAC,GAAG,CACnB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK;YACzC,MAAM,EAAE,UAAU,EAAE,GAAW,KAAK,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SAC/B,CAAC,CACL,CAAC;QAEF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;;IAGD,WAAW;QACP,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACrC;;IAGD,UAAU,CAAC,IAAuB,EAAE,KAAiB;QACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,MAAM,OAAO,CAAC,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACxB;KACJ;;IAGD,+BAA+B,CAAC,SAAyC;QACrE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC;KACnC;;IAGD,cAAc,CAAC,KAAoB;;QAC/B,MAAM,MAAM,GAAgB,KAAK,CAAC,MAAM,CAAC;QAEzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAChC,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE;YAC1C,MAAM,CAAC,KAAK,EAAE,CAAC;SAClB;aAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAA,MAAA,MAAM,CAAC,aAAa,0CAAE,QAAQ,mCAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3E,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;SAC/C;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;YAC/E,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SAC9C;KACJ;;IAGD,YAAY;;QACR,OAAO,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,CAAC;KACpC;;IAGD,WAAW;QACP,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC;KAC/C;;IAGO,UAAU,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACrB,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,yBAAyB,CAAC;SACtD;aAAM;YACH,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,gBAAgB,CAAC;SAC7C;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;KAC5B;;IAGO,oBAAoB,CAAC,KAAoB,EAAE,MAAmB,EAAE,CAAS;QAC7E,MAAM,sBAAsB,GAAgB,MAAM,CAAC,sBAAsB,CAAC;QAC1E,MAAM,kBAAkB,GAAgB,MAAM,CAAC,kBAAkB,CAAC;QAElE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YACtC,IAAI,CAAC,MAAM,GAAG,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,KAAK,EAAE,GAAG,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,EAAE,CAAC;SAC/E;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;YAC9C,IAAI,CAAC,MAAM,GAAG,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,KAAK,EAAE,GAAG,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,KAAK,EAAE,CAAC;SAC/E;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;YACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC3B,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;aACrD;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;aACrD;SACJ;KACJ;;IAGO,0BAA0B,CAAC,KAAoB,EAAE,MAAmB,EAAE,CAAS;;QACnF,MAAM,iBAAiB,GAAG,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,QAAQ,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YACxB,MAAA,QAAQ,CAAC,CAAC,GAAG,iBAAiB,CAAE,0CAAE,KAAK,EAAE,CAAC;SAC3D;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YACtB,MAAA,QAAQ,CAAC,CAAC,GAAG,iBAAiB,CAAE,0CAAE,KAAK,EAAE,CAAC;SAC3D;KACJ;;IAGO,0BAA0B,CAAC,KAAoB,EAAE,MAAmB,EAAE,CAAS;;QACnF,MAAM,iBAAiB,GAAG,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,QAAQ,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YACxB,MAAA,QAAQ,CAAC,CAAC,GAAG,iBAAiB,CAAE,0CAAE,KAAK,EAAE,CAAC;SAC3D;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YACtB,MAAA,QAAQ,CAAC,CAAC,GAAG,iBAAiB,CAAE,0CAAE,KAAK,EAAE,CAAC;SAC3D;KACJ;;IAGO,sBAAsB,CAAC,KAAoB,EAAE,MAAmB;QACpE,MAAM,sBAAsB,GAAgB,MAAM,CAAC,sBAAsB,CAAC;QAC1E,MAAM,kBAAkB,GAAgB,MAAM,CAAC,kBAAkB,CAAC;QAElE,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,kBAAkB,EAAE;YAClF,kBAAkB,CAAC,KAAK,EAAE,CAAC;SAC9B;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,sBAAsB,EAAE;YAC3F,sBAAsB,CAAC,KAAK,EAAE,CAAC;SAClC;KACJ;;uHA9KQ,0BAA0B;2GAA1B,0BAA0B,qPC/BvC,s2CAmCA;2FDJa,0BAA0B;kBAPtC,SAAS;+BACI,wBAAwB,iBAGnB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM;;;8BAkC1C,QAAQ;;yBA7Bb,kBAAkB;sBADjB,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,aAAa;sBADZ,KAAK;gBAKG,cAAc;sBADtB,MAAM;gBAKE,WAAW;sBADnB,MAAM;;;MEnCE,mBAAmB;;gHAAnB,mBAAmB;iHAAnB,mBAAmB,iBAHb,sBAAsB,EAAE,0BAA0B,aADvD,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,aAE5E,sBAAsB,EAAE,0BAA0B;iHAEnD,mBAAmB,YAJnB,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,CAAC;2FAI9E,mBAAmB;kBAL/B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,CAAC;oBACvF,YAAY,EAAE,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;oBAClE,OAAO,EAAE,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;iBAChE;;;ACbD;;;;;;"}
1
+ {"version":3,"file":"fundamental-ngx-core-product-switch.mjs","sources":["../../../../../libs/core/src/lib/product-switch/product-switch/product-switch.component.ts","../../../../../libs/core/src/lib/product-switch/product-switch/product-switch.component.html","../../../../../libs/core/src/lib/product-switch/product-switch-body/product-switch-body.component.ts","../../../../../libs/core/src/lib/product-switch/product-switch-body/product-switch-body.component.html","../../../../../libs/core/src/lib/product-switch/product-switch.module.ts","../../../../../libs/core/src/lib/product-switch/fundamental-ngx-core-product-switch.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { BasePopoverClass } from '@fundamental-ngx/core/popover';\n\n@Component({\n selector: 'fd-product-switch',\n templateUrl: './product-switch.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductSwitchComponent extends BasePopoverClass {\n @Input()\n placement: Placement = 'bottom-end';\n\n /** Input to set the aria label */\n @Input()\n ariaLabel = 'Product Switch';\n\n /** Whether the product switch is disabled. */\n @Input()\n disabled = false;\n}\n","<div class=\"fd-product-switch\">\n <fd-popover\n [placement]=\"placement\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [(isOpen)]=\"isOpen\"\n (isOpenChange)=\"isOpenChange.emit($event)\"\n [disabled]=\"disabled\"\n [triggers]=\"triggers\"\n [focusTrapped]=\"false\"\n [focusAutoCapture]=\"true\"\n [noArrow]=\"noArrow\"\n >\n <fd-popover-control>\n <button\n fd-button\n [attr.aria-label]=\"ariaLabel\"\n [attr.title]=\"ariaLabel\"\n class=\"fd-shellbar__button\"\n glyph=\"grid\"\n fdType=\"transparent\"\n ></button>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { Subscription } from 'rxjs';\n\nimport { FdDropEvent, RtlService } from '@fundamental-ngx/core/utils';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\n\nimport { ProductSwitchItem } from './product-switch.item';\n\nconst containerWidthPxSmallMode = 588;\nconst containerWidthPx = 776;\n\n@Component({\n selector: 'fd-product-switch-body',\n templateUrl: './product-switch-body.component.html',\n styleUrls: ['./product-switch-body.component.scss', '../../utils/drag-and-drop/drag-and-drop.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductSwitchBodyComponent implements OnInit, OnDestroy {\n /** Defines if drag and drop functionality should be included in product switch*/\n @Input()\n dragAndDropEnabled = true;\n\n /** The product switch's product items. */\n @Input()\n products: ProductSwitchItem[];\n\n /** Defines if the product switcher should be displayed in list mode, no matter what is the size of window */\n @Input()\n forceListMode = false;\n\n /** Event thrown on products array change */\n @Output()\n readonly productsChange: EventEmitter<any[]> = new EventEmitter<any[]>();\n\n /** Event emitted on product click */\n @Output()\n readonly itemClicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n private _listMode: boolean;\n\n /** @hidden */\n private _isRtl = false;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n constructor(\n private _viewportRuler: ViewportRuler,\n @Optional() private readonly _rtlService: RtlService,\n private readonly _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._subscriptions.add(this._rtlService?.rtl.subscribe((isRtl) => (this._isRtl = isRtl)));\n this._subscriptions.add(\n this._viewportRuler.change().subscribe((event) => {\n const { innerWidth } = <Window>event.target;\n this._checkSize(innerWidth);\n })\n );\n\n const { width } = this._viewportRuler.getViewportSize();\n this._checkSize(width);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _itemClick(item: ProductSwitchItem, event: MouseEvent): void {\n this.products.forEach((product) => (product.selected = product === item));\n\n this.itemClicked.emit();\n if (item.callback) {\n item.callback(event);\n }\n }\n\n /** Method called on products change */\n _productSwitchItemsChangeHandle(dropEvent: FdDropEvent<ProductSwitchItem>): void {\n this.productsChange.emit(dropEvent.items);\n this.products = dropEvent.items;\n }\n\n /** @hidden */\n _keyDownHandle(event: KeyboardEvent): void {\n const target = <HTMLElement>event.target;\n\n if (!KeyUtil.isKeyCode(event, TAB)) {\n event.preventDefault();\n }\n\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n target.click();\n } else if (!this._isListMode()) {\n const i = Array.from(target.parentElement?.children ?? []).indexOf(target);\n this._handleNoListKeydown(event, target, i);\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n this._handleListArrowUpDown(event, target);\n }\n }\n\n /** @hidden */\n _isSmallMode(): boolean {\n return this.products?.length < 7;\n }\n\n /** @hidden */\n _isListMode(): boolean {\n return this._listMode || this.forceListMode;\n }\n\n /** @hidden */\n private _checkSize(width: number): void {\n if (this._isSmallMode()) {\n this._listMode = width < containerWidthPxSmallMode;\n } else {\n this._listMode = width < containerWidthPx;\n }\n\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _handleNoListKeydown(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const previousElementSibling = <HTMLElement>target.previousElementSibling;\n const nextElementSibling = <HTMLElement>target.nextElementSibling;\n\n if (\n i === this.products.length - 1 &&\n (KeyUtil.isKeyCode(event, RIGHT_ARROW) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && this._isRtl))\n ) {\n while (<HTMLElement>target.previousElementSibling) {\n target = <HTMLElement>target.previousElementSibling;\n }\n target.focus();\n }\n\n if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n this._isRtl ? nextElementSibling?.focus() : previousElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n this._isRtl ? previousElementSibling?.focus() : nextElementSibling?.focus();\n } else if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n if (this.products.length >= 7) {\n this._handleNoListMoreThanSeven(event, target, i);\n } else if (this.products.length < 7) {\n this._handleNoListLessThanSeven(event, target, i);\n }\n }\n }\n\n /** @hidden */\n private _handleNoListMoreThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 4;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleNoListLessThanSeven(event: KeyboardEvent, target: HTMLElement, i: number): void {\n const nextIndexByColumn = 3;\n const children = target.parentElement?.children;\n\n if (!children) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n (<HTMLElement>children[i + nextIndexByColumn])?.focus();\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n (<HTMLElement>children[i - nextIndexByColumn])?.focus();\n }\n }\n\n /** @hidden */\n private _handleListArrowUpDown(event: KeyboardEvent, target: HTMLElement): void {\n const previousElementSibling = <HTMLElement>target.previousElementSibling;\n const nextElementSibling = <HTMLElement>target.nextElementSibling;\n\n if (this._isListMode() && KeyUtil.isKeyCode(event, DOWN_ARROW) && nextElementSibling) {\n nextElementSibling.focus();\n } else if (this._isListMode() && KeyUtil.isKeyCode(event, UP_ARROW) && previousElementSibling) {\n previousElementSibling.focus();\n }\n }\n}\n","<div\n class=\"fd-product-switch__body\"\n [class.fd-product-switch__body--col-3]=\"_isSmallMode() && !_isListMode()\"\n [class.fd-product-switch__body--mobile]=\"_isListMode()\"\n>\n <ul\n fd-dnd-list\n class=\"fd-product-switch__list\"\n [items]=\"products\"\n [gridMode]=\"!_isListMode()\"\n (itemDropped)=\"_productSwitchItemsChangeHandle($event)\"\n >\n <li\n fd-dnd-item\n *ngFor=\"let product of products\"\n tabindex=\"0\"\n class=\"fd-product-switch__item\"\n [class.selected]=\"product.selected\"\n (keydown)=\"_keyDownHandle($event)\"\n (click)=\"_itemClick(product, $event)\"\n [draggable]=\"!product.disabledDragAndDrop && dragAndDropEnabled\"\n [stickInPlace]=\"!!product.stickToPosition\"\n >\n <i\n role=\"presentation\"\n class=\"fd-product-switch__icon\"\n [class]=\"product.icon ? 'sap-icon--' + product.icon : ''\"\n ></i>\n <div class=\"fd-product-switch__text\">\n <div class=\"fd-product-switch__title\">{{ product.title }}</div>\n <div *ngIf=\"product.subtitle\" class=\"fd-product-switch__subtitle\">{{ product.subtitle }}</div>\n </div>\n </li>\n </ul>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ProductSwitchComponent } from './product-switch/product-switch.component';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { CommonModule } from '@angular/common';\nimport { DragAndDropModule } from '@fundamental-ngx/core/utils';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ProductSwitchBodyComponent } from './product-switch-body/product-switch-body.component';\n\n@NgModule({\n imports: [PopoverModule, CommonModule, ButtonModule, DragAndDropModule, DragDropModule],\n declarations: [ProductSwitchComponent, ProductSwitchBodyComponent],\n exports: [ProductSwitchComponent, ProductSwitchBodyComponent]\n})\nexport class ProductSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { CommonModule } from '@angular/common';
9
9
  import * as i2$1 from '@fundamental-ngx/core/utils';
10
10
  import { KeyUtil, DragAndDropModule } from '@fundamental-ngx/core/utils';
11
11
  import { DragDropModule } from '@angular/cdk/drag-drop';
12
- import { TAB, ENTER, SPACE, DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';
12
+ import { TAB, ENTER, SPACE, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW } from '@angular/cdk/keycodes';
13
13
  import * as i1$1 from '@angular/cdk/scrolling';
14
14
  import { Subscription } from 'rxjs';
15
15
 
@@ -122,6 +122,13 @@ class ProductSwitchBodyComponent {
122
122
  _handleNoListKeydown(event, target, i) {
123
123
  const previousElementSibling = target.previousElementSibling;
124
124
  const nextElementSibling = target.nextElementSibling;
125
+ if (i === this.products.length - 1 &&
126
+ (KeyUtil.isKeyCode(event, RIGHT_ARROW) || (KeyUtil.isKeyCode(event, LEFT_ARROW) && this._isRtl))) {
127
+ while (target.previousElementSibling) {
128
+ target = target.previousElementSibling;
129
+ }
130
+ target.focus();
131
+ }
125
132
  if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {
126
133
  this._isRtl ? nextElementSibling?.focus() : previousElementSibling?.focus();
127
134
  }