@fundamental-ngx/core 0.36.0-rc.43 → 0.36.0-rc.44

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 (133) 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 +2 -2
  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/table/directives/table-body.directive.mjs +3 -3
  23. package/esm2020/table/directives/table-cell.directive.mjs +96 -37
  24. package/esm2020/table/directives/table-row.directive.mjs +45 -12
  25. package/esm2020/table/fd-table.interface.mjs +1 -1
  26. package/esm2020/table/table.component.mjs +74 -17
  27. package/esm2020/utils/directives/initial-focus/initial-focus.directive.mjs +13 -40
  28. package/esm2020/utils/public_api.mjs +2 -1
  29. package/esm2020/utils/services/tabbable-element.service.mjs +41 -0
  30. package/facets/package.json +1 -1
  31. package/feed-input/package.json +1 -1
  32. package/feed-list-item/package.json +1 -1
  33. package/fesm2015/fundamental-ngx-core-table.mjs +453 -298
  34. package/fesm2015/fundamental-ngx-core-table.mjs.map +1 -1
  35. package/fesm2015/fundamental-ngx-core-utils.mjs +49 -39
  36. package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  37. package/fesm2020/fundamental-ngx-core-table.mjs +454 -308
  38. package/fesm2020/fundamental-ngx-core-table.mjs.map +1 -1
  39. package/fesm2020/fundamental-ngx-core-utils.mjs +46 -36
  40. package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  41. package/file-uploader/package.json +1 -1
  42. package/fixed-card-layout/package.json +1 -1
  43. package/flexible-column-layout/package.json +1 -1
  44. package/form/package.json +1 -1
  45. package/formatted-text/package.json +1 -1
  46. package/grid-list/package.json +1 -1
  47. package/icon/package.json +1 -1
  48. package/illustrated-message/package.json +1 -1
  49. package/infinite-scroll/package.json +1 -1
  50. package/info-label/package.json +1 -1
  51. package/inline-help/package.json +1 -1
  52. package/input-group/package.json +1 -1
  53. package/layout-grid/package.json +1 -1
  54. package/layout-panel/package.json +1 -1
  55. package/link/package.json +1 -1
  56. package/list/package.json +1 -1
  57. package/menu/package.json +1 -1
  58. package/message-box/package.json +1 -1
  59. package/message-strip/package.json +1 -1
  60. package/message-toast/package.json +1 -1
  61. package/micro-process-flow/package.json +1 -1
  62. package/mobile-mode/package.json +1 -1
  63. package/multi-input/package.json +1 -1
  64. package/nested-list/package.json +1 -1
  65. package/notification/package.json +1 -1
  66. package/object-identifier/package.json +1 -1
  67. package/object-marker/package.json +1 -1
  68. package/object-number/package.json +1 -1
  69. package/object-status/package.json +1 -1
  70. package/overflow-layout/package.json +4 -4
  71. package/package.json +2 -2
  72. package/pagination/package.json +1 -1
  73. package/panel/package.json +1 -1
  74. package/popover/package.json +1 -1
  75. package/product-switch/package.json +1 -1
  76. package/progress-indicator/package.json +1 -1
  77. package/quick-view/package.json +1 -1
  78. package/radio/package.json +1 -1
  79. package/rating-indicator/package.json +1 -1
  80. package/resizable-card-layout/package.json +1 -1
  81. package/scroll-spy/package.json +1 -1
  82. package/scrollbar/package.json +1 -1
  83. package/segmented-button/package.json +1 -1
  84. package/select/package.json +1 -1
  85. package/shared/package.json +1 -1
  86. package/shellbar/package.json +1 -1
  87. package/side-navigation/package.json +1 -1
  88. package/slider/package.json +1 -1
  89. package/split-button/package.json +1 -1
  90. package/splitter/package.json +1 -1
  91. package/status-indicator/package.json +1 -1
  92. package/step-input/package.json +1 -1
  93. package/switch/package.json +1 -1
  94. package/table/directives/table-body.directive.d.ts +2 -2
  95. package/table/directives/table-cell.directive.d.ts +48 -26
  96. package/table/directives/table-row.directive.d.ts +25 -10
  97. package/table/esm2020/directives/table-body.directive.mjs +3 -3
  98. package/table/esm2020/directives/table-cell.directive.mjs +96 -37
  99. package/table/esm2020/directives/table-row.directive.mjs +45 -12
  100. package/table/esm2020/fd-table.interface.mjs +1 -1
  101. package/table/esm2020/table.component.mjs +74 -17
  102. package/table/fd-table.interface.d.ts +4 -0
  103. package/table/fesm2015/fundamental-ngx-core-table.mjs +453 -298
  104. package/table/fesm2015/fundamental-ngx-core-table.mjs.map +1 -1
  105. package/table/fesm2020/fundamental-ngx-core-table.mjs +454 -308
  106. package/table/fesm2020/fundamental-ngx-core-table.mjs.map +1 -1
  107. package/table/package.json +1 -1
  108. package/table/table.component.d.ts +22 -6
  109. package/tabs/package.json +1 -1
  110. package/text/package.json +1 -1
  111. package/theming/package.json +1 -1
  112. package/tile/package.json +1 -1
  113. package/time/package.json +1 -1
  114. package/time-picker/package.json +1 -1
  115. package/timeline/package.json +1 -1
  116. package/title/package.json +1 -1
  117. package/token/package.json +1 -1
  118. package/toolbar/package.json +1 -1
  119. package/tree/package.json +1 -1
  120. package/upload-collection/package.json +1 -1
  121. package/utils/directives/initial-focus/initial-focus.directive.d.ts +4 -9
  122. package/utils/esm2020/directives/initial-focus/initial-focus.directive.mjs +13 -40
  123. package/utils/esm2020/public_api.mjs +2 -1
  124. package/utils/esm2020/services/tabbable-element.service.mjs +41 -0
  125. package/utils/fesm2015/fundamental-ngx-core-utils.mjs +49 -39
  126. package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  127. package/utils/fesm2020/fundamental-ngx-core-utils.mjs +46 -36
  128. package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  129. package/utils/package.json +1 -1
  130. package/utils/public_api.d.ts +1 -0
  131. package/utils/services/tabbable-element.service.d.ts +11 -0
  132. package/vertical-navigation/package.json +1 -1
  133. package/wizard/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/action-bar",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/action-sheet",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/alert",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/avatar",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/avatar-group",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
package/bar/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/bar",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/breadcrumb",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/busy-indicator",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/button",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/calendar",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
package/card/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/card",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/carousel",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/checkbox",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/combobox",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/content-density",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0",
7
7
  "rxjs": "7.5.6",
8
8
  "@angular/cdk": "14.0.2",
9
- "@fundamental-ngx/core/utils": "0.36.0-rc.43"
9
+ "@fundamental-ngx/core/utils": "0.36.0-rc.44"
10
10
  },
11
11
  "dependencies": {
12
12
  "tslib": "^2.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/date-picker",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/datetime",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/datetime-picker",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dialog",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dynamic-page",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dynamic-side-content",
3
- "version": "0.36.0-rc.43",
3
+ "version": "0.36.0-rc.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
@@ -4,9 +4,9 @@ export class TableBodyDirective {
4
4
  constructor() {
5
5
  /** @hidden */
6
6
  this.fdTableBodyClass = true;
7
- /** Whether or not to show the table body's horizontal borders */
7
+ /** Whether to show the table body's horizontal borders */
8
8
  this.noBorderX = false;
9
- /** Whether or not to show the table body's vertical borders */
9
+ /** Whether to show the table body's vertical borders */
10
10
  this.noBorderY = false;
11
11
  }
12
12
  }
@@ -31,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
31
31
  }, {
32
32
  type: Input
33
33
  }] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90YWJsZS9kaXJlY3RpdmVzL3RhYmxlLWJvZHkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUlJLGNBQWM7UUFFZCxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFeEIsaUVBQWlFO1FBR2pFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsK0RBQStEO1FBRy9ELGNBQVMsR0FBRyxLQUFLLENBQUM7S0FDckI7OytHQWRZLGtCQUFrQjttR0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdDQUFnQztpQkFDN0M7OEJBSUcsZ0JBQWdCO3NCQURmLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU1uQyxTQUFTO3NCQUZSLFdBQVc7dUJBQUMsNkNBQTZDOztzQkFDekQsS0FBSztnQkFNTixTQUFTO3NCQUZSLFdBQVc7dUJBQUMsMkNBQTJDOztzQkFDdkQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkVGFibGVCb2R5XSwgW2ZkLXRhYmxlLWJvZHldJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUJvZHlEaXJlY3RpdmUge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZV9fYm9keScpXG4gICAgZmRUYWJsZUJvZHlDbGFzcyA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgdGFibGUgYm9keSdzIGhvcml6b250YWwgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2JvZHktLW5vLWhvcml6b250YWwtYm9yZGVycycpXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlclggPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSB0YWJsZSBib2R5J3MgdmVydGljYWwgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2JvZHktLW5vLXZlcnRpY2FsLWJvcmRlcnMnKVxuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJZID0gZmFsc2U7XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90YWJsZS9kaXJlY3RpdmVzL3RhYmxlLWJvZHkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUlJLGNBQWM7UUFFZCxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFeEIsMkRBQTJEO1FBRzNELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIseURBQXlEO1FBR3pELGNBQVMsR0FBRyxLQUFLLENBQUM7S0FDckI7OytHQWRZLGtCQUFrQjttR0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBSDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdDQUFnQztpQkFDN0M7OEJBSUcsZ0JBQWdCO3NCQURmLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU1uQyxTQUFTO3NCQUZSLFdBQVc7dUJBQUMsNkNBQTZDOztzQkFDekQsS0FBSztnQkFNTixTQUFTO3NCQUZSLFdBQVc7dUJBQUMsMkNBQTJDOztzQkFDdkQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkVGFibGVCb2R5XSwgW2ZkLXRhYmxlLWJvZHldJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUJvZHlEaXJlY3RpdmUge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZV9fYm9keScpXG4gICAgZmRUYWJsZUJvZHlDbGFzcyA9IHRydWU7XG5cbiAgICAvKiogIFdoZXRoZXIgdG8gc2hvdyB0aGUgdGFibGUgYm9keSdzIGhvcml6b250YWwgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2JvZHktLW5vLWhvcml6b250YWwtYm9yZGVycycpXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlclggPSBmYWxzZTtcblxuICAgIC8qKiAgV2hldGhlciB0byBzaG93IHRoZSB0YWJsZSBib2R5J3MgdmVydGljYWwgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2JvZHktLW5vLXZlcnRpY2FsLWJvcmRlcnMnKVxuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJZID0gZmFsc2U7XG59XG4iXX0=
@@ -1,38 +1,44 @@
1
1
  import { LiveAnnouncer } from '@angular/cdk/a11y';
2
- import { Directive, ElementRef, HostBinding, Input, QueryList, ContentChildren, forwardRef, Optional } from '@angular/core';
2
+ import { Directive, ElementRef, HostBinding, Input, QueryList, ContentChildren, forwardRef, Optional, HostListener } from '@angular/core';
3
3
  import { CheckboxComponent } from '@fundamental-ngx/core/checkbox';
4
- import { fromEvent, Subject, takeUntil } from 'rxjs';
4
+ import { DestroyedService, TabbableElementService } from '@fundamental-ngx/core/utils';
5
5
  import { FdTable } from '../fd-table.interface';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/cdk/a11y";
8
- import * as i2 from "../fd-table.interface";
8
+ import * as i2 from "@fundamental-ngx/core/utils";
9
+ import * as i3 from "../fd-table.interface";
9
10
  export class TableCellDirective {
10
- constructor(elementRef, _liveAnnouncer, _table) {
11
+ /** @hidden */
12
+ constructor(elementRef, _liveAnnouncer, _onDestroy$, _tabbableElementService, _table) {
11
13
  this.elementRef = elementRef;
12
14
  this._liveAnnouncer = _liveAnnouncer;
15
+ this._onDestroy$ = _onDestroy$;
16
+ this._tabbableElementService = _tabbableElementService;
13
17
  this._table = _table;
14
- /** Whether or not to show the table cell's horizontal borders */
18
+ /** Whether to show the table cell's horizontal borders */
15
19
  this.noBorderX = false;
16
- /** Whether or not to show the table cell's vertical borders */
20
+ /** Whether to show the table cell's vertical borders */
17
21
  this.noBorderY = false;
18
- /** Whether or not the table cell is activable */
22
+ /** Whether the table cell is activable */
19
23
  this.activable = false;
20
- /** Whether or not the table cell is hoverable */
24
+ /** Whether the table cell is hoverable */
21
25
  this.hoverable = false;
22
- /** Whether or not the table cell's width should fit to content */
26
+ /** Whether the table cell's width should fit to content */
23
27
  this.fitContent = false;
24
- /** Whether or not the table cell shouldn't have padding on sides */
28
+ /** Whether the table cell shouldn't have padding on sides */
25
29
  this.noPadding = false;
26
- /** Whether or not the table cell indicates that there is no data */
30
+ /** Whether the table cell indicates that there is no data */
27
31
  this.noData = false;
28
- /** Function, that creates a string to be announced by screenreader whenever cell receives focus */
32
+ /** Function, that creates a string to be announced by screen-reader whenever cell receives focus */
29
33
  this.cellFocusedEventAnnouncer = this._defaultCellFocusedEventAnnouncer;
30
34
  /** @hidden */
31
35
  this._fdTableCellClass = true;
32
36
  /** @hidden */
33
- this._onDestroy$ = new Subject();
37
+ this._tabbableElements = new Map();
38
+ /** @hidden */
39
+ this._canBeFocused = true;
34
40
  }
35
- /** Whether or not the table cell is focusable */
41
+ /** Whether the table cell is focusable */
36
42
  set focusable(value) {
37
43
  this._focusable = value;
38
44
  }
@@ -46,8 +52,9 @@ export class TableCellDirective {
46
52
  get tabindex() {
47
53
  return this._tabindex ?? (this.focusable ? 0 : null);
48
54
  }
49
- ngOnDestroy() {
50
- this._onDestroy$.next();
55
+ /** @hidden */
56
+ get _cellTabIndex() {
57
+ return this._canBeFocused ? this.tabindex : -1;
51
58
  }
52
59
  /** @hidden */
53
60
  ngAfterContentInit() {
@@ -58,19 +65,6 @@ export class TableCellDirective {
58
65
  if (this.noData) {
59
66
  cell.setAttribute('colspan', '100%');
60
67
  }
61
- fromEvent(cell, 'focusin')
62
- .pipe(takeUntil(this._onDestroy$))
63
- .subscribe(() => {
64
- const data = this.getCellPosition();
65
- if (!data) {
66
- return;
67
- }
68
- this._liveAnnouncer.clear();
69
- this._liveAnnouncer.announce(this.cellFocusedEventAnnouncer(data));
70
- });
71
- fromEvent(cell, 'keydown')
72
- .pipe(takeUntil(this._onDestroy$))
73
- .subscribe((event) => this._table?._onCellKeydown(event, this));
74
68
  }
75
69
  /** Returns row and col indexes for the cell */
76
70
  getCellPosition() {
@@ -94,19 +88,75 @@ export class TableCellDirective {
94
88
  origin: section
95
89
  };
96
90
  }
91
+ /**
92
+ * Toggles focusable state of the cell.
93
+ * @param canFocus When `false`, disables any tabbable element inside cell.
94
+ */
95
+ toggleFocusableState(canFocus) {
96
+ this._canBeFocused = canFocus;
97
+ if (!canFocus) {
98
+ this._disableTabbableElements();
99
+ }
100
+ else {
101
+ this._enableTabbableElements();
102
+ }
103
+ }
104
+ /** @hidden */
105
+ _disableTabbableElements() {
106
+ // Since we cannot select by tabindex attribute (links, inputs, buttons might not have one but still can be focusable),
107
+ // Select all elements from the cell and filter by tabIndex property.
108
+ Array.from(this.elementRef.nativeElement.querySelectorAll('*'))
109
+ .filter((elm) => elm.tabIndex >= 0)
110
+ .forEach((elm) => {
111
+ this._tabbableElements.set(elm, elm.tabIndex);
112
+ elm.tabIndex = -1;
113
+ });
114
+ }
115
+ /** @hidden */
116
+ _enableTabbableElements() {
117
+ // If there's no elements in map, skip action.
118
+ if (this._tabbableElements.size === 0) {
119
+ return;
120
+ }
121
+ this._tabbableElements.forEach((tabIndex, element) => {
122
+ element.tabIndex = tabIndex;
123
+ });
124
+ this._canBeFocused = false;
125
+ }
126
+ /** @hidden */
127
+ _onFocus() {
128
+ this._table?._setCurrentFocusableCell(this);
129
+ this._enableTabbableElements();
130
+ const tabbableElement = this._tabbableElementService.getTabbableElement(this.elementRef.nativeElement, false, true);
131
+ tabbableElement?.focus();
132
+ }
133
+ /** @hidden */
134
+ async _onFocusIn() {
135
+ const data = this.getCellPosition();
136
+ if (!data) {
137
+ return;
138
+ }
139
+ this._liveAnnouncer.clear();
140
+ await this._liveAnnouncer.announce(this.cellFocusedEventAnnouncer(data));
141
+ }
142
+ /** @hidden */
143
+ _onKeyDown(event) {
144
+ this._table?._onCellKeydown(event, this);
145
+ }
97
146
  /** @hidden */
98
147
  _defaultCellFocusedEventAnnouncer(data) {
99
148
  return `Column ${data.col + 1} of ${data.totalCols}, row: ${data.row + 1} of ${data.totalRows}`;
100
149
  }
101
150
  }
102
- TableCellDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableCellDirective, deps: [{ token: i0.ElementRef }, { token: i1.LiveAnnouncer }, { token: i2.FdTable, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
103
- TableCellDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: { noBorderX: "noBorderX", noBorderY: "noBorderY", activable: "activable", focusable: "focusable", tabindex: "tabindex", hoverable: "hoverable", fitContent: "fitContent", noPadding: "noPadding", noData: "noData", key: "key", cellFocusedEventAnnouncer: "cellFocusedEventAnnouncer" }, host: { properties: { "class.fd-table__cell--no-horizontal-border": "this.noBorderX", "class.fd-table__cell--no-vertical-border": "this.noBorderY", "class.fd-table__cell--activable": "this.activable", "class.fd-table__cell--focusable": "this.focusable", "attr.tabindex": "this.tabindex", "class.fd-table__cell--hoverable": "this.hoverable", "class.fd-table__cell--fit-content": "this.fitContent", "class.fd-table__cell--no-padding": "this.noPadding", "class.fd-table__cell--no-data": "this.noData", "class.fd-table__cell": "this._fdTableCellClass" } }, queries: [{ propertyName: "_checkboxes", predicate: i0.forwardRef(function () { return CheckboxComponent; }) }], ngImport: i0 });
151
+ TableCellDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableCellDirective, deps: [{ token: i0.ElementRef }, { token: i1.LiveAnnouncer }, { token: i2.DestroyedService }, { token: i2.TabbableElementService }, { token: i3.FdTable, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
152
+ TableCellDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: { noBorderX: "noBorderX", noBorderY: "noBorderY", activable: "activable", focusable: "focusable", tabindex: "tabindex", hoverable: "hoverable", fitContent: "fitContent", noPadding: "noPadding", noData: "noData", key: "key", cellFocusedEventAnnouncer: "cellFocusedEventAnnouncer" }, host: { listeners: { "focus": "_onFocus()", "focusin": "_onFocusIn()", "keydown": "_onKeyDown($event)" }, properties: { "class.fd-table__cell--no-horizontal-border": "this.noBorderX", "class.fd-table__cell--no-vertical-border": "this.noBorderY", "class.fd-table__cell--activable": "this.activable", "class.fd-table__cell--focusable": "this.focusable", "class.fd-table__cell--hoverable": "this.hoverable", "class.fd-table__cell--fit-content": "this.fitContent", "class.fd-table__cell--no-padding": "this.noPadding", "class.fd-table__cell--no-data": "this.noData", "class.fd-table__cell": "this._fdTableCellClass", "attr.tabindex": "this._cellTabIndex" } }, providers: [DestroyedService, TabbableElementService], queries: [{ propertyName: "_checkboxes", predicate: i0.forwardRef(function () { return CheckboxComponent; }) }], ngImport: i0 });
104
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableCellDirective, decorators: [{
105
154
  type: Directive,
106
155
  args: [{
107
- selector: '[fdTableCell], [fd-table-cell]'
156
+ selector: '[fdTableCell], [fd-table-cell]',
157
+ providers: [DestroyedService, TabbableElementService]
108
158
  }]
109
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.LiveAnnouncer }, { type: i2.FdTable, decorators: [{
159
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.LiveAnnouncer }, { type: i2.DestroyedService }, { type: i2.TabbableElementService }, { type: i3.FdTable, decorators: [{
110
160
  type: Optional
111
161
  }] }]; }, propDecorators: { noBorderX: [{
112
162
  type: HostBinding,
@@ -129,9 +179,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
129
179
  }, {
130
180
  type: Input
131
181
  }], tabindex: [{
132
- type: HostBinding,
133
- args: ['attr.tabindex']
134
- }, {
135
182
  type: Input
136
183
  }], hoverable: [{
137
184
  type: HostBinding,
@@ -163,5 +210,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
163
210
  }], _fdTableCellClass: [{
164
211
  type: HostBinding,
165
212
  args: ['class.fd-table__cell']
213
+ }], _cellTabIndex: [{
214
+ type: HostBinding,
215
+ args: ['attr.tabindex']
216
+ }], _onFocus: [{
217
+ type: HostListener,
218
+ args: ['focus']
219
+ }], _onFocusIn: [{
220
+ type: HostListener,
221
+ args: ['focusin']
222
+ }], _onKeyDown: [{
223
+ type: HostListener,
224
+ args: ['keydown', ['$event']]
166
225
  }] } });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90YWJsZS9kaXJlY3RpdmVzL3RhYmxlLWNlbGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUVWLFFBQVEsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBS2hELE1BQU0sT0FBTyxrQkFBa0I7SUFtRjNCLFlBQ29CLFVBQW1DLEVBQ2xDLGNBQTZCLEVBQ2pCLE1BQWdCO1FBRjdCLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFyRmpELGlFQUFpRTtRQUdqRSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLCtEQUErRDtRQUcvRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGlEQUFpRDtRQUdqRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBOEJsQixpREFBaUQ7UUFHakQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixtRUFBbUU7UUFHbkUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixvRUFBb0U7UUFHcEUsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixvRUFBb0U7UUFHcEUsV0FBTSxHQUFHLEtBQUssQ0FB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O3NCQUM5QyxLQUFLO2dCQU1OLE1BQU07c0JBRkwsV0FBVzt1QkFBQywrQkFBK0I7O3NCQUMzQyxLQUFLO2dCQUtOLEdBQUc7c0JBREYsS0FBSztnQkFLTix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBS04sV0FBVztzQkFEVixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFLcEQsaUJBQWlCO3NCQURoQixXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBmb3J3YXJkUmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NoZWNrYm94JztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRmRUYWJsZSB9IGZyb20gJy4uL2ZkLXRhYmxlLmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkVGFibGVDZWxsXSwgW2ZkLXRhYmxlLWNlbGxdJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNlbGxEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IHRoZSB0YWJsZSBjZWxsJ3MgaG9yaXpvbnRhbCBib3JkZXJzICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZV9fY2VsbC0tbm8taG9yaXpvbnRhbC1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJYID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgdGFibGUgY2VsbCdzIHZlcnRpY2FsIGJvcmRlcnMgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlX19jZWxsLS1uby12ZXJ0aWNhbC1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJZID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdGhlIHRhYmxlIGNlbGwgaXMgYWN0aXZhYmxlICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZV9fY2VsbC0tYWN0aXZhYmxlJylcbiAgICBASW5wdXQoKVxuICAgIGFjdGl2YWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBjZWxsIGlzIGZvY3VzYWJsZSAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2NlbGwtLWZvY3VzYWJsZScpXG4gICAgQElucHV0KClcbiAgICBzZXQgZm9jdXNhYmxlKHZhbHVlOiBOdWxsYWJsZTxib29sZWFuPikge1xuICAgICAgICB0aGlzLl9mb2N1c2FibGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZm9jdXNhYmxlKCk6IE51bGxhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzYWJsZSA/PyB0aGlzLl90YWJsZT8uYWxsQ2VsbHNGb2N1c2FibGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c2FibGU6IE51bGxhYmxlPGJvb2xlYW4+O1xuXG4gICAgLyoqIFRhYmluZGV4IGF0dHJpYnV0ZSBmb3IgdGhlIGNlbGwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRhYmluZGV4KHZhbHVlOiBOdWxsYWJsZTxOdW1iZXJJbnB1dD4pIHtcbiAgICAgICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgdGFiaW5kZXgoKTogTnVsbGFibGU8TnVtYmVySW5wdXQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4ID8/ICh0aGlzLmZvY3VzYWJsZSA/IDAgOiBudWxsKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RhYmluZGV4OiBOdWxsYWJsZTxOdW1iZXJJbnB1dD47XG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdGhlIHRhYmxlIGNlbGwgaXMgaG92ZXJhYmxlICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZV9fY2VsbC0taG92ZXJhYmxlJylcbiAgICBASW5wdXQoKVxuICAgIGhvdmVyYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBjZWxsJ3Mgd2lkdGggc2hvdWxkIGZpdCB0byBjb250ZW50ICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2NlbGwtLWZpdC1jb250ZW50JylcbiAgICBASW5wdXQoKVxuICAgIGZpdENvbnRlbnQgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgdGFibGUgY2VsbCBzaG91bGRuJ3QgaGF2ZSBwYWRkaW5nIG9uIHNpZGVzICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZV9fY2VsbC0tbm8tcGFkZGluZycpXG4gICAgQElucHV0KClcbiAgICBub1BhZGRpbmcgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgdGFibGUgY2VsbCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyBkYXRhICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZV9fY2VsbC0tbm8tZGF0YScpXG4gICAgQElucHV0KClcbiAgICBub0RhdGEgPSBmYWxzZTtcblxuICAgIC8qKiBLZXkgb2YgY2VsbCBlbGVtZW50LCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBjZWxsIHdpdGggY2VydGFpbiBjb2x1bW4gKi9cbiAgICBASW5wdXQoKVxuICAgIGtleTogc3RyaW5nO1xuXG4gICAgLyoqIEZ1bmN0aW9uLCB0aGF0IGNyZWF0ZXMgYSBzdHJpbmcgdG8gYmUgYW5ub3VuY2VkIGJ5IHNjcmVlbnJlYWRlciB3aGVuZXZlciBjZWxsIHJlY2VpdmVzIGZvY3VzICovXG4gICAgQElucHV0KClcbiAgICBjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyOiAoZGF0YTogVGFibGVDZWxsUG9zaXRpb24pID0+IHN0cmluZyA9IHRoaXMuX2RlZmF1bHRDZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hDb21wb25lbnQpKVxuICAgIF9jaGVja2JveGVzOiBRdWVyeUxpc3Q8Q2hlY2tib3hDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlX19jZWxsJylcbiAgICBfZmRUYWJsZUNlbGxDbGFzcyA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfdGFibGU/OiBGZFRhYmxlXG4gICAgKSB7fVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNrYm94ZXMgJiYgdGhpcy5fY2hlY2tib3hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnZmQtdGFibGVfX2NlbGwtLWNoZWNrYm94Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ub0RhdGEpIHtcbiAgICAgICAgICAgIGNlbGwuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgJzEwMCUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyb21FdmVudChjZWxsLCAnZm9jdXNpbicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRDZWxsUG9zaXRpb24oKTtcblxuICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fbGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodGhpcy5jZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyKGRhdGEpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50PihjZWxsLCAna2V5ZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fdGFibGU/Ll9vbkNlbGxLZXlkb3duKGV2ZW50LCB0aGlzKSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgcm93IGFuZCBjb2wgaW5kZXhlcyBmb3IgdGhlIGNlbGwgKi9cbiAgICBnZXRDZWxsUG9zaXRpb24oKTogVGFibGVDZWxsUG9zaXRpb24gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBwYXJlbnRSb3cgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAoIShwYXJlbnRSb3cgaW5zdGFuY2VvZiBIVE1MVGFibGVSb3dFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBwYXJlbnRSb3cucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCEoc2VjdGlvbiBpbnN0YW5jZW9mIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd3MgPSBzZWN0aW9uLmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBjb2xzID0gcGFyZW50Um93LmNoaWxkcmVuO1xuXG4gICAgICAgIGNvbnN0IHJvdyA9IFsuLi4ocm93cyBhcyBhbnkgYXMgRWxlbWVudFtdKV0uaW5kZXhPZihwYXJlbnRSb3cpO1xuICAgICAgICBjb25zdCBjb2wgPSBbLi4uKGNvbHMgYXMgYW55IGFzIEVsZW1lbnRbXSldLmluZGV4T2YodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgdG90YWxSb3dzOiByb3dzLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsQ29sczogY29scy5sZW5ndGgsXG4gICAgICAgICAgICBvcmlnaW46IHNlY3Rpb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHRDZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyKGRhdGE6IFRhYmxlQ2VsbFBvc2l0aW9uKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBDb2x1bW4gJHtkYXRhLmNvbCArIDF9IG9mICR7ZGF0YS50b3RhbENvbHN9LCByb3c6ICR7ZGF0YS5yb3cgKyAxfSBvZiAke2RhdGEudG90YWxSb3dzfWA7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ2VsbFBvc2l0aW9uIHtcbiAgICByb3c6IG51bWJlcjtcbiAgICBjb2w6IG51bWJlcjtcbiAgICB0b3RhbFJvd3M6IG51bWJlcjtcbiAgICB0b3RhbENvbHM6IG51bWJlcjtcbiAgICBvcmlnaW46IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50O1xufVxuIl19
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90YWJsZS9kaXJlY3RpdmVzL3RhYmxlLWNlbGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFFBQVEsRUFDUixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQWNoRCxNQUFNLE9BQU8sa0JBQWtCO0lBMkYzQixjQUFjO0lBQ2QsWUFDb0IsVUFBbUMsRUFDbEMsY0FBNkIsRUFDN0IsV0FBNkIsRUFDN0IsdUJBQStDLEVBQ25DLE1BQWdCO1FBSjdCLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3Qiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBQ25DLFdBQU0sR0FBTixNQUFNLENBQVU7UUFoR2pELDBEQUEwRDtRQUcxRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLHdEQUF3RDtRQUd4RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLDBDQUEwQztRQUcxQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBdUJsQiwwQ0FBMEM7UUFHMUMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQiw0REFBNEQ7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QUFTO3NCQUZSLFdBQVc7dUJBQUMsMENBQTBDOztzQkFDdEQsS0FBSztnQkFNTixTQUFTO3NCQUZSLFdBQVc7dUJBQUMsaUNBQWlDOztzQkFDN0MsS0FBSztnQkFNRixTQUFTO3NCQUZaLFdBQVc7dUJBQUMsaUNBQWlDOztzQkFDN0MsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBWU4sU0FBUztzQkFGUixXQUFXO3VCQUFDLGlDQUFpQzs7c0JBQzdDLEtBQUs7Z0JBTU4sVUFBVTtzQkFGVCxXQUFXO3VCQUFDLG1DQUFtQzs7c0JBQy9DLEtBQUs7Z0JBTU4sU0FBUztzQkFGUixXQUFXO3VCQUFDLGtDQUFrQzs7c0JBQzlDLEtBQUs7Z0JBTU4sTUFBTTtzQkFGTCxXQUFXO3VCQUFDLCtCQUErQjs7c0JBQzNDLEtBQUs7Z0JBS04sR0FBRztzQkFERixLQUFLO2dCQUtOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFLTixXQUFXO3NCQURWLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUtwRCxpQkFBaUI7c0JBRGhCLFdBQVc7dUJBQUMsc0JBQXNCO2dCQWlCdkIsYUFBYTtzQkFEeEIsV0FBVzt1QkFBQyxlQUFlO2dCQTJGcEIsUUFBUTtzQkFEZixZQUFZO3VCQUFDLE9BQU87Z0JBZ0JQLFVBQVU7c0JBRHZCLFlBQVk7dUJBQUMsU0FBUztnQkFjZixVQUFVO3NCQURqQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBmb3J3YXJkUmVmLFxuICAgIE9wdGlvbmFsLFxuICAgIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NoZWNrYm94JztcbmltcG9ydCB7IERlc3Ryb3llZFNlcnZpY2UsIFRhYmJhYmxlRWxlbWVudFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEZkVGFibGUgfSBmcm9tICcuLi9mZC10YWJsZS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ2VsbFBvc2l0aW9uIHtcbiAgICByb3c6IG51bWJlcjtcbiAgICBjb2w6IG51bWJlcjtcbiAgICB0b3RhbFJvd3M6IG51bWJlcjtcbiAgICB0b3RhbENvbHM6IG51bWJlcjtcbiAgICBvcmlnaW46IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50O1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZFRhYmxlQ2VsbF0sIFtmZC10YWJsZS1jZWxsXScsXG4gICAgcHJvdmlkZXJzOiBbRGVzdHJveWVkU2VydmljZSwgVGFiYmFibGVFbGVtZW50U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDZWxsRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdGFibGUgY2VsbCdzIGhvcml6b250YWwgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2NlbGwtLW5vLWhvcml6b250YWwtYm9yZGVyJylcbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdGFibGUgY2VsbCdzIHZlcnRpY2FsIGJvcmRlcnMgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlX19jZWxsLS1uby12ZXJ0aWNhbC1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJZID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdGFibGUgY2VsbCBpcyBhY3RpdmFibGUgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlX19jZWxsLS1hY3RpdmFibGUnKVxuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZhYmxlID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdGFibGUgY2VsbCBpcyBmb2N1c2FibGUgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlX19jZWxsLS1mb2N1c2FibGUnKVxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGZvY3VzYWJsZSh2YWx1ZTogTnVsbGFibGU8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy5fZm9jdXNhYmxlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGZvY3VzYWJsZSgpOiBOdWxsYWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb2N1c2FibGUgPz8gdGhpcy5fdGFibGU/LmFsbENlbGxzRm9jdXNhYmxlO1xuICAgIH1cblxuICAgIC8qKiBUYWJpbmRleCBhdHRyaWJ1dGUgZm9yIHRoZSBjZWxsICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGFiaW5kZXgodmFsdWU6IE51bGxhYmxlPE51bWJlcklucHV0Pikge1xuICAgICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCB0YWJpbmRleCgpOiBOdWxsYWJsZTxOdW1iZXJJbnB1dD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXggPz8gKHRoaXMuZm9jdXNhYmxlID8gMCA6IG51bGwpO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0YWJsZSBjZWxsIGlzIGhvdmVyYWJsZSAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2NlbGwtLWhvdmVyYWJsZScpXG4gICAgQElucHV0KClcbiAgICBob3ZlcmFibGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0YWJsZSBjZWxsJ3Mgd2lkdGggc2hvdWxkIGZpdCB0byBjb250ZW50ICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2NlbGwtLWZpdC1jb250ZW50JylcbiAgICBASW5wdXQoKVxuICAgIGZpdENvbnRlbnQgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0YWJsZSBjZWxsIHNob3VsZG4ndCBoYXZlIHBhZGRpbmcgb24gc2lkZXMgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlX19jZWxsLS1uby1wYWRkaW5nJylcbiAgICBASW5wdXQoKVxuICAgIG5vUGFkZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhYmxlIGNlbGwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbm8gZGF0YSAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2NlbGwtLW5vLWRhdGEnKVxuICAgIEBJbnB1dCgpXG4gICAgbm9EYXRhID0gZmFsc2U7XG5cbiAgICAvKiogS2V5IG9mIGNlbGwgZWxlbWVudCwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgY2VsbCB3aXRoIGNlcnRhaW4gY29sdW1uICovXG4gICAgQElucHV0KClcbiAgICBrZXk6IHN0cmluZztcblxuICAgIC8qKiBGdW5jdGlvbiwgdGhhdCBjcmVhdGVzIGEgc3RyaW5nIHRvIGJlIGFubm91bmNlZCBieSBzY3JlZW4tcmVhZGVyIHdoZW5ldmVyIGNlbGwgcmVjZWl2ZXMgZm9jdXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNlbGxGb2N1c2VkRXZlbnRBbm5vdW5jZXI6IChkYXRhOiBUYWJsZUNlbGxQb3NpdGlvbikgPT4gc3RyaW5nID0gdGhpcy5fZGVmYXVsdENlbGxGb2N1c2VkRXZlbnRBbm5vdW5jZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbXBvbmVudCkpXG4gICAgX2NoZWNrYm94ZXM6IFF1ZXJ5TGlzdDxDaGVja2JveENvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGVfX2NlbGwnKVxuICAgIF9mZFRhYmxlQ2VsbENsYXNzID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGFiYmFibGVFbGVtZW50cyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNhYmxlOiBOdWxsYWJsZTxib29sZWFuPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGFiaW5kZXg6IE51bGxhYmxlPE51bWJlcklucHV0PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FuQmVGb2N1c2VkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwcml2YXRlIGdldCBfY2VsbFRhYkluZGV4KCk6IE51bGxhYmxlPE51bWJlcklucHV0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW5CZUZvY3VzZWQgPyB0aGlzLnRhYmluZGV4IDogLTE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJiYWJsZUVsZW1lbnRTZXJ2aWNlOiBUYWJiYWJsZUVsZW1lbnRTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF90YWJsZT86IEZkVGFibGVcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGVja2JveGVzICYmIHRoaXMuX2NoZWNrYm94ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2ZkLXRhYmxlX19jZWxsLS1jaGVja2JveCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubm9EYXRhKSB7XG4gICAgICAgICAgICBjZWxsLnNldEF0dHJpYnV0ZSgnY29sc3BhbicsICcxMDAlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyByb3cgYW5kIGNvbCBpbmRleGVzIGZvciB0aGUgY2VsbCAqL1xuICAgIGdldENlbGxQb3NpdGlvbigpOiBUYWJsZUNlbGxQb3NpdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudFJvdyA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICghKHBhcmVudFJvdyBpbnN0YW5jZW9mIEhUTUxUYWJsZVJvd0VsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHBhcmVudFJvdy5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAoIShzZWN0aW9uIGluc3RhbmNlb2YgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93cyA9IHNlY3Rpb24uY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGNvbHMgPSBwYXJlbnRSb3cuY2hpbGRyZW47XG5cbiAgICAgICAgY29uc3Qgcm93ID0gWy4uLihyb3dzIGFzIGFueSBhcyBFbGVtZW50W10pXS5pbmRleE9mKHBhcmVudFJvdyk7XG4gICAgICAgIGNvbnN0IGNvbCA9IFsuLi4oY29scyBhcyBhbnkgYXMgRWxlbWVudFtdKV0uaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3csXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICB0b3RhbFJvd3M6IHJvd3MubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxDb2xzOiBjb2xzLmxlbmd0aCxcbiAgICAgICAgICAgIG9yaWdpbjogc2VjdGlvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgZm9jdXNhYmxlIHN0YXRlIG9mIHRoZSBjZWxsLlxuICAgICAqIEBwYXJhbSBjYW5Gb2N1cyBXaGVuIGBmYWxzZWAsIGRpc2FibGVzIGFueSB0YWJiYWJsZSBlbGVtZW50IGluc2lkZSBjZWxsLlxuICAgICAqL1xuICAgIHRvZ2dsZUZvY3VzYWJsZVN0YXRlKGNhbkZvY3VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbkJlRm9jdXNlZCA9IGNhbkZvY3VzO1xuXG4gICAgICAgIGlmICghY2FuRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVUYWJiYWJsZUVsZW1lbnRzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbmFibGVUYWJiYWJsZUVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVUYWJiYWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgICAgICAvLyBTaW5jZSB3ZSBjYW5ub3Qgc2VsZWN0IGJ5IHRhYmluZGV4IGF0dHJpYnV0ZSAobGlua3MsIGlucHV0cywgYnV0dG9ucyBtaWdodCBub3QgaGF2ZSBvbmUgYnV0IHN0aWxsIGNhbiBiZSBmb2N1c2FibGUpLFxuICAgICAgICAvLyBTZWxlY3QgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGNlbGwgYW5kIGZpbHRlciBieSB0YWJJbmRleCBwcm9wZXJ0eS5cbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignKicpKVxuICAgICAgICAgICAgLmZpbHRlcigoZWxtKSA9PiBlbG0udGFiSW5kZXggPj0gMClcbiAgICAgICAgICAgIC5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJiYWJsZUVsZW1lbnRzLnNldChlbG0sIGVsbS50YWJJbmRleCk7XG4gICAgICAgICAgICAgICAgZWxtLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VuYWJsZVRhYmJhYmxlRWxlbWVudHMoKTogdm9pZCB7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZWxlbWVudHMgaW4gbWFwLCBza2lwIGFjdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuX3RhYmJhYmxlRWxlbWVudHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RhYmJhYmxlRWxlbWVudHMuZm9yRWFjaCgodGFiSW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQudGFiSW5kZXggPSB0YWJJbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2NhbkJlRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHByaXZhdGUgX29uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlPy5fc2V0Q3VycmVudEZvY3VzYWJsZUNlbGwodGhpcyk7XG4gICAgICAgIHRoaXMuX2VuYWJsZVRhYmJhYmxlRWxlbWVudHMoKTtcblxuICAgICAgICBjb25zdCB0YWJiYWJsZUVsZW1lbnQgPSB0aGlzLl90YWJiYWJsZUVsZW1lbnRTZXJ2aWNlLmdldFRhYmJhYmxlRWxlbWVudChcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGFiYmFibGVFbGVtZW50Py5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXNpbicpXG4gICAgcHJpdmF0ZSBhc3luYyBfb25Gb2N1c0luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRDZWxsUG9zaXRpb24oKTtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xpdmVBbm5vdW5jZXIuY2xlYXIoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSh0aGlzLmNlbGxGb2N1c2VkRXZlbnRBbm5vdW5jZXIoZGF0YSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBfb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlPy5fb25DZWxsS2V5ZG93bihldmVudCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0Q2VsbEZvY3VzZWRFdmVudEFubm91bmNlcihkYXRhOiBUYWJsZUNlbGxQb3NpdGlvbik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgQ29sdW1uICR7ZGF0YS5jb2wgKyAxfSBvZiAke2RhdGEudG90YWxDb2xzfSwgcm93OiAke2RhdGEucm93ICsgMX0gb2YgJHtkYXRhLnRvdGFsUm93c31gO1xuICAgIH1cbn1cbiJdfQ==