@theseam/ui-common 0.4.24-beta.0 → 0.4.25

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 (131) hide show
  1. package/breadcrumbs/breadcrumbs/breadcrumbs.component.scss +1 -1
  2. package/datatable/datatable/datatable.component.d.ts +1 -10
  3. package/datatable/services/columns-manager.service.d.ts +0 -7
  4. package/datatable/utils/create-action-menu-column.d.ts +1 -1
  5. package/esm2020/breadcrumbs/breadcrumbs/breadcrumbs.component.mjs +2 -2
  6. package/esm2020/datatable/datatable/datatable.component.mjs +5 -21
  7. package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +3 -3
  8. package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +1 -1
  9. package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +1 -1
  10. package/esm2020/datatable/services/columns-manager.service.mjs +2 -27
  11. package/esm2020/datatable/utils/create-action-menu-column.mjs +3 -4
  12. package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +1 -1
  13. package/esm2020/datatable-dynamic/datatable-dynamic.component.mjs +1 -1
  14. package/esm2020/framework/base-layout/base-layout.component.mjs +4 -14
  15. package/esm2020/framework/base-layout/base-layout.module.mjs +1 -6
  16. package/esm2020/framework/base-layout/directives/base-layout-nav-toggle.directive.mjs +5 -21
  17. package/esm2020/framework/base-layout/index.mjs +1 -2
  18. package/esm2020/framework/public-api.mjs +1 -2
  19. package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +2 -2
  20. package/esm2020/framework/side-nav/side-nav-item/side-nav-item.component.mjs +67 -28
  21. package/esm2020/framework/side-nav/side-nav-toggle/side-nav-toggle.component.mjs +5 -12
  22. package/esm2020/framework/side-nav/side-nav.component.mjs +38 -116
  23. package/esm2020/framework/side-nav/side-nav.models.mjs +1 -1
  24. package/esm2020/framework/side-nav/side-nav.module.mjs +39 -9
  25. package/esm2020/framework/side-nav/side-nav.service.mjs +1 -1
  26. package/esm2020/framework/top-bar/index.mjs +1 -3
  27. package/esm2020/framework/top-bar/top-bar-item.directive.mjs +4 -10
  28. package/esm2020/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.mjs +4 -6
  29. package/esm2020/framework/top-bar/top-bar.component.mjs +11 -55
  30. package/esm2020/framework/top-bar/top-bar.module.mjs +5 -15
  31. package/esm2020/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.mjs +3 -3
  32. package/esm2020/layout/layout.service.mjs +2 -12
  33. package/esm2020/menu/menu-toggle.directive.mjs +2 -7
  34. package/esm2020/table-cell-types/table-cell-type-string/table-cell-type-string.component.mjs +2 -4
  35. package/esm2020/utils/geo-json/coerce-feature-collection.mjs +1 -1
  36. package/esm2020/utils/geo-json/is-feature-collection.validator.mjs +1 -1
  37. package/esm2020/utils/geo-json/is-only-geometry-types.mjs +1 -1
  38. package/esm2020/utils/geo-json/merge-polygons.mjs +1 -1
  39. package/esm2020/utils/geo-json/no-inner-rings.validator.mjs +1 -1
  40. package/esm2020/utils/geo-json/split-multi-polygons.mjs +1 -1
  41. package/fesm2015/theseam-ui-common-breadcrumbs.mjs +2 -2
  42. package/fesm2015/theseam-ui-common-breadcrumbs.mjs.map +1 -1
  43. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +2 -2
  44. package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  45. package/fesm2015/theseam-ui-common-datatable.mjs +11 -57
  46. package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
  47. package/fesm2015/theseam-ui-common-framework.mjs +156 -905
  48. package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
  49. package/fesm2015/theseam-ui-common-google-maps.mjs +2 -2
  50. package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
  51. package/fesm2015/theseam-ui-common-layout.mjs +2 -11
  52. package/fesm2015/theseam-ui-common-layout.mjs.map +1 -1
  53. package/fesm2015/theseam-ui-common-menu.mjs +1 -6
  54. package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
  55. package/fesm2015/theseam-ui-common-table-cell-types.mjs +1 -3
  56. package/fesm2015/theseam-ui-common-table-cell-types.mjs.map +1 -1
  57. package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
  58. package/fesm2020/theseam-ui-common-breadcrumbs.mjs +2 -2
  59. package/fesm2020/theseam-ui-common-breadcrumbs.mjs.map +1 -1
  60. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +2 -2
  61. package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  62. package/fesm2020/theseam-ui-common-datatable.mjs +11 -57
  63. package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
  64. package/fesm2020/theseam-ui-common-framework.mjs +156 -907
  65. package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
  66. package/fesm2020/theseam-ui-common-google-maps.mjs +2 -2
  67. package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
  68. package/fesm2020/theseam-ui-common-layout.mjs +2 -11
  69. package/fesm2020/theseam-ui-common-layout.mjs.map +1 -1
  70. package/fesm2020/theseam-ui-common-menu.mjs +1 -6
  71. package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
  72. package/fesm2020/theseam-ui-common-table-cell-types.mjs +1 -3
  73. package/fesm2020/theseam-ui-common-table-cell-types.mjs.map +1 -1
  74. package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
  75. package/framework/base-layout/base-layout.component.d.ts +2 -4
  76. package/framework/base-layout/base-layout.component.scss +10 -18
  77. package/framework/base-layout/base-layout.module.d.ts +10 -11
  78. package/framework/base-layout/directives/base-layout-nav-toggle.directive.d.ts +3 -8
  79. package/framework/base-layout/index.d.ts +0 -1
  80. package/framework/base-layout/styles/_variables.scss +0 -21
  81. package/framework/public-api.d.ts +0 -1
  82. package/framework/side-nav/side-nav-item/side-nav-item.component.d.ts +14 -7
  83. package/framework/side-nav/side-nav-item/side-nav-item.component.scss +5 -7
  84. package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +3 -5
  85. package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +6 -3
  86. package/framework/side-nav/side-nav.component.d.ts +1 -13
  87. package/framework/side-nav/side-nav.component.scss +1 -0
  88. package/framework/side-nav/side-nav.models.d.ts +1 -7
  89. package/framework/side-nav/side-nav.module.d.ts +9 -1
  90. package/framework/side-nav/styles/_themes/light/_variables.scss +14 -24
  91. package/framework/side-nav/styles/_themes/primary/_variables.scss +0 -8
  92. package/framework/top-bar/index.d.ts +0 -2
  93. package/framework/top-bar/top-bar-item.directive.d.ts +1 -4
  94. package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +2 -5
  95. package/framework/top-bar/top-bar.component.d.ts +3 -25
  96. package/framework/top-bar/top-bar.component.scss +2 -7
  97. package/framework/top-bar/top-bar.module.d.ts +8 -10
  98. package/layout/layout.service.d.ts +1 -9
  99. package/menu/menu-toggle.directive.d.ts +1 -2
  100. package/package.json +2 -2
  101. package/styles/vendor/ngx-datatable/_ngx-datatable.scss +14 -57
  102. package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +5 -33
  103. package/datatable/models/action-item-column-position.d.ts +0 -13
  104. package/esm2020/datatable/models/action-item-column-position.mjs +0 -5
  105. package/esm2020/framework/base-layout/directives/base-layout-side-bar-header.directive.mjs +0 -16
  106. package/esm2020/framework/nav/horizontal-nav/horizontal-nav.component.mjs +0 -55
  107. package/esm2020/framework/nav/index.mjs +0 -6
  108. package/esm2020/framework/nav/nav-item/nav-item.component.mjs +0 -227
  109. package/esm2020/framework/nav/nav-utils.mjs +0 -107
  110. package/esm2020/framework/nav/nav.models.mjs +0 -2
  111. package/esm2020/framework/nav/nav.module.mjs +0 -67
  112. package/esm2020/framework/nav/nav.service.mjs +0 -204
  113. package/esm2020/framework/top-bar/top-bar-compact-menu-btn-detail.directive.mjs +0 -16
  114. package/esm2020/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.mjs +0 -16
  115. package/framework/base-layout/directives/base-layout-side-bar-header.directive.d.ts +0 -9
  116. package/framework/nav/_nav-theme.scss +0 -4
  117. package/framework/nav/horizontal-nav/horizontal-nav.component.d.ts +0 -25
  118. package/framework/nav/horizontal-nav/horizontal-nav.component.scss +0 -50
  119. package/framework/nav/index.d.ts +0 -5
  120. package/framework/nav/nav-item/nav-item.component.d.ts +0 -74
  121. package/framework/nav/nav-item/nav-item.component.scss +0 -203
  122. package/framework/nav/nav-utils.d.ts +0 -20
  123. package/framework/nav/nav.models.d.ts +0 -77
  124. package/framework/nav/nav.module.d.ts +0 -17
  125. package/framework/nav/nav.service.d.ts +0 -27
  126. package/framework/nav/styles/_themes/light/_variables.scss +0 -56
  127. package/framework/nav/styles/_themes/primary/_variables.scss +0 -56
  128. package/framework/nav/styles/_utilities.scss +0 -3
  129. package/framework/nav/styles/_variables.scss +0 -2
  130. package/framework/top-bar/top-bar-compact-menu-btn-detail.directive.d.ts +0 -8
  131. package/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.d.ts +0 -8
@@ -142,19 +142,17 @@
142
142
  .datatable-header,
143
143
  .datatable-body {
144
144
  .datatable-row-left {
145
- background-color: $datatable-left-background;
146
- }
147
-
148
- .datatable-row-even .datatable-row-left {
149
- background-color: $datatable-left-row-even-background;
145
+ background-color: $datatable-background;
146
+ background-position: 100% 0;
147
+ background-repeat: repeat-y;
148
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAYAAAD5PA/NAAAAFklEQVQIHWPSkNeSBmJhTQVtbiDNCgASagIIuJX8OgAAAABJRU5ErkJggg==);
150
149
  }
151
150
 
152
151
  .datatable-row-right {
153
- background-color: $datatable-right-background;
154
- }
155
-
156
- .datatable-row-even .datatable-row-right {
157
- background-color: $datatable-right-row-even-background;
152
+ background-position: 0 0;
153
+ background-color: $datatable-background;
154
+ background-repeat: repeat-y;
155
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAYAAAD5PA/NAAAAFklEQVQI12PQkNdi1VTQ5gbSwkAsDQARLAIGtOSFUAAAAABJRU5ErkJggg==);
158
156
  }
159
157
  }
160
158
 
@@ -270,9 +268,6 @@
270
268
  color: $datatable-body-cell-color;
271
269
  font-size: $datatable-body-cell-font-size;
272
270
  font-weight: $datatable-body-cell-font-weight;
273
- .datatable-body-cell-label {
274
- height: 100%;
275
- }
276
271
  }
277
272
  .datatable-body-group-cell {
278
273
  vertical-align: top;
@@ -481,51 +476,13 @@
481
476
  // }
482
477
 
483
478
  .datatable-action-button {
484
- flex: 0 0 auto;
485
-
486
- @if $datatable-action-button-outline {
487
- @include button-outline-variant(
488
- $color: $datatable-action-button-outline-color,
489
- $color-hover: $datatable-action-button-outline-color-hover,
490
- $active-background: $datatable-action-button-outline-active-background,
491
- $active-border: $datatable-action-button-outline-active-border
492
- );
493
-
494
- // allow variable override for outline button bg
495
- background: $datatable-action-button-outline-background;
496
-
497
- } @else {
498
- @include button-variant(
499
- $background: $datatable-action-button-background,
500
- $border: $datatable-action-button-border,
501
- $hover-background: $datatable-action-button-hover-background,
502
- $hover-border: $datatable-action-button-hover-border,
503
- $active-background: $datatable-action-button-active-background,
504
- $active-border: $datatable-action-button-active-border
505
- );
506
-
507
- // allow variable override for solid button color
508
- color: $datatable-action-button-color;
509
-
510
- &:hover {
511
- color: $datatable-action-button-hover-color;
512
- }
513
-
514
- &:not(:disabled):not(.disabled):active {
515
- color: $datatable-action-button-active-color;
516
- }
517
- }
518
-
479
+ color: $datatable-action-button-color;
480
+ background-color: $datatable-action-button-background;
519
481
  box-shadow: $datatable-action-button-box-shadow;
520
- font-size: $datatable-action-button-font-size;
521
- line-height: $datatable-action-button-line-height;
522
-
523
- width: $datatable-action-button-width;
524
- height: $datatable-action-button-height;
525
-
526
- padding: $datatable-action-button-padding;
527
- border-radius: $datatable-action-button-border-radius;
528
- text-align: $datatable-action-button-text-align;
482
+ &:hover {
483
+ color: $datatable-action-button-hover-color;
484
+ background-color: $datatable-action-button-hover-background;
485
+ }
529
486
  }
530
487
 
531
488
  /**
@@ -10,12 +10,8 @@ $datatable-color: $body-color !default;
10
10
 
11
11
  // common datatable colors
12
12
  $datatable-background: $white !default;
13
- $datatable-row-even-background: rgba(0, 0, 0, 0.05) !default;
14
- $datatable-left-background: transparent !default;
15
- $datatable-left-row-even-background: $datatable-left-background !default;
16
- $datatable-right-background: transparent !default;
17
- $datatable-right-row-even-background: $datatable-right-background !default;
18
13
  $datatable-box-shadow: none !default;
14
+ $datatable-row-even-background: rgba(0, 0, 0, 0.05) !default;
19
15
 
20
16
  // default row and cell background colors
21
17
  $datatable-default-background: $white !default;
@@ -171,32 +167,8 @@ $datatable-summary-row-background: #ddd !default;
171
167
  $datatable-summary-row-background-hover: #ddd !default;
172
168
  $datatable-summary-row-font-weight: bold !default;
173
169
 
174
- // Action Menu Button Styles
175
- $datatable-action-button-background: $primary !default;
176
- $datatable-action-button-border: $datatable-action-button-background !default;
177
- $datatable-action-button-hover-background: darken($datatable-action-button-background, 7.5%) !default;
178
- $datatable-action-button-hover-border: darken($datatable-action-button-border, 10%) !default;
179
- $datatable-action-button-active-background: darken($datatable-action-button-background, 10%) !default;
180
- $datatable-action-button-active-border: darken($datatable-action-button-border, 12.5%) !default;
181
-
182
- $datatable-action-button-color: color-yiq($datatable-action-button-background) !default;
183
- $datatable-action-button-hover-color: color-yiq($datatable-action-button-hover-background) !default;
184
- $datatable-action-button-active-color: color-yiq($datatable-action-button-active-background) !default;
185
-
186
- $datatable-action-button-outline: false !default;
187
- $datatable-action-button-outline-color: $datatable-action-button-background !default;
188
- $datatable-action-button-outline-color-hover: color-yiq($datatable-action-button-outline-color) !default;
189
- $datatable-action-button-outline-active-background: $datatable-action-button-outline-color !default;
190
- $datatable-action-button-outline-active-border: $datatable-action-button-outline-color !default;
191
-
192
- $datatable-action-button-outline-background: transparent !default;
193
-
170
+ $datatable-action-button-color: $body-color !default;
171
+ $datatable-action-button-background: transparent !default;
194
172
  $datatable-action-button-box-shadow: none !default;
195
- $datatable-action-button-font-size: 20px !default;
196
- $datatable-action-button-line-height: 1 !default;
197
- $datatable-action-button-size: 30px !default;
198
- $datatable-action-button-width: $datatable-action-button-size !default;
199
- $datatable-action-button-height: $datatable-action-button-size !default;
200
- $datatable-action-button-padding: 0 !default;
201
- $datatable-action-button-border-radius: 100% !default;
202
- $datatable-action-button-text-align: center !default;
173
+ $datatable-action-button-hover-color: $primary !default;
174
+ $datatable-action-button-hover-background: $gray-300 !default;
@@ -1,13 +0,0 @@
1
- declare const ActionItemColumnPosition: readonly ["frozenLeft", "frozenRight", "staticLeft", "staticRight"];
2
- /**
3
- * If `frozenLeft`, action item column will be fixed to the left side of the table.
4
- *
5
- * If `frozenRight`, action item column will be fixed to the right side of the table.
6
- *
7
- * If `staticLeft`, action item column will be the first static column on the left side of the table.
8
- *
9
- * If `staticRight`, action item column will be the last static column on the right side of the table.
10
- */
11
- export type ActionItemColumnPosition = typeof ActionItemColumnPosition[number];
12
- export declare function isActionItemColumnPosition(input: unknown): input is ActionItemColumnPosition;
13
- export {};
@@ -1,5 +0,0 @@
1
- const ActionItemColumnPosition = ['frozenLeft', 'frozenRight', 'staticLeft', 'staticRight'];
2
- export function isActionItemColumnPosition(input) {
3
- return ActionItemColumnPosition.indexOf(input) != -1;
4
- }
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWl0ZW0tY29sdW1uLXBvc2l0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS9tb2RlbHMvYWN0aW9uLWl0ZW0tY29sdW1uLXBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQVUsQ0FBQTtBQWFwRyxNQUFNLFVBQVUsMEJBQTBCLENBQUMsS0FBYztJQUN2RCxPQUFPLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxLQUFpQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiA9IFsnZnJvemVuTGVmdCcsICdmcm96ZW5SaWdodCcsICdzdGF0aWNMZWZ0JywgJ3N0YXRpY1JpZ2h0J10gYXMgY29uc3RcblxuLyoqXG4gKiBJZiBgZnJvemVuTGVmdGAsIGFjdGlvbiBpdGVtIGNvbHVtbiB3aWxsIGJlIGZpeGVkIHRvIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHRhYmxlLlxuICpcbiAqIElmIGBmcm96ZW5SaWdodGAsIGFjdGlvbiBpdGVtIGNvbHVtbiB3aWxsIGJlIGZpeGVkIHRvIHRoZSByaWdodCBzaWRlIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiBJZiBgc3RhdGljTGVmdGAsIGFjdGlvbiBpdGVtIGNvbHVtbiB3aWxsIGJlIHRoZSBmaXJzdCBzdGF0aWMgY29sdW1uIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHRhYmxlLlxuICpcbiAqIElmIGBzdGF0aWNSaWdodGAsIGFjdGlvbiBpdGVtIGNvbHVtbiB3aWxsIGJlIHRoZSBsYXN0IHN0YXRpYyBjb2x1bW4gb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHRhYmxlLlxuICovXG5leHBvcnQgdHlwZSBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gPSB0eXBlb2YgQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uW251bWJlcl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbihpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiB7XG4gIHJldHVybiBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24uaW5kZXhPZihpbnB1dCBhcyBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24pICE9IC0xO1xufVxuIl19
@@ -1,16 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class BaseLayoutSideBarHeaderDirective {
4
- constructor(_elementRef) {
5
- this._elementRef = _elementRef;
6
- }
7
- }
8
- BaseLayoutSideBarHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: BaseLayoutSideBarHeaderDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
9
- BaseLayoutSideBarHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: BaseLayoutSideBarHeaderDirective, selector: "[seamBaseLayoutSideBarHeader]", ngImport: i0 });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: BaseLayoutSideBarHeaderDirective, decorators: [{
11
- type: Directive,
12
- args: [{
13
- selector: '[seamBaseLayoutSideBarHeader]'
14
- }]
15
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1sYXlvdXQtc2lkZS1iYXItaGVhZGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9mcmFtZXdvcmsvYmFzZS1sYXlvdXQvZGlyZWN0aXZlcy9iYXNlLWxheW91dC1zaWRlLWJhci1oZWFkZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUE7O0FBT3JELE1BQU0sT0FBTyxnQ0FBZ0M7SUFFM0MsWUFDUyxXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtJQUM1QixDQUFDOzs2SEFKTSxnQ0FBZ0M7aUhBQWhDLGdDQUFnQzsyRkFBaEMsZ0NBQWdDO2tCQUg1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwrQkFBK0I7aUJBQzFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgSGFzRWxlbWVudFJlZiB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2VhbUJhc2VMYXlvdXRTaWRlQmFySGVhZGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUxheW91dFNpZGVCYXJIZWFkZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBIYXNFbGVtZW50UmVmIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7IH1cblxufVxuIl19
@@ -1,55 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
- import { BehaviorSubject, Subject } from 'rxjs';
3
- import { shareReplay, switchMap } from 'rxjs/operators';
4
- import { TheSeamNavService } from '../nav.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../nav.service";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "../nav-item/nav-item.component";
9
- export class HorizontalNavComponent {
10
- get items() { return this._items.value; }
11
- set items(value) {
12
- this._items.next(value);
13
- }
14
- constructor(_nav) {
15
- this._nav = _nav;
16
- this._ngUnsubscribe = new Subject();
17
- this._items = new BehaviorSubject([]);
18
- this.hideEmptyIcon = true;
19
- this.hierLevel = 0;
20
- this.childAction = 'menu';
21
- this.expandAction = 'toggle';
22
- this.navItemExpanded = new EventEmitter();
23
- this.items$ = this._items.asObservable().pipe(switchMap(items => items ? this._nav.createItemsObservable(items) : []), shareReplay({ bufferSize: 1, refCount: true }));
24
- }
25
- ngOnDestroy() {
26
- this._ngUnsubscribe.next();
27
- this._ngUnsubscribe.complete();
28
- }
29
- _navItemExpanded(item, expanded) {
30
- this.navItemExpanded.emit({ navItem: item, expanded });
31
- }
32
- }
33
- HorizontalNavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: HorizontalNavComponent, deps: [{ token: i1.TheSeamNavService }], target: i0.ɵɵFactoryTarget.Component });
34
- HorizontalNavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: HorizontalNavComponent, selector: "seam-horizontal-nav", inputs: { items: "items", hideEmptyIcon: "hideEmptyIcon", hierLevel: "hierLevel", childAction: "childAction", expandAction: "expandAction" }, outputs: { navItemExpanded: "navItemExpanded" }, providers: [
35
- TheSeamNavService
36
- ], ngImport: i0, template: "<div class=\"nav-inner-wrapper\" class=\"nav-inner-wrapper-{{hierLevel}}\">\n <div class=\"nav-items-row\">\n <seam-nav-item *ngFor=\"let item of items$ | async\"\n class=\"flex-shrink-0\"\n [item]=\"item\"\n [itemType]=\"$any(item)?.itemType\"\n [icon]=\"$any(item)?.icon\"\n [label]=\"$any(item)?.label\"\n [link]=\"$any(item)?.link\"\n [badgeText]=\"$any(item)?.badge?.text\"\n [badgeTheme]=\"$any(item)?.badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(item)?.badge?.srContent\"\n [badgeTooltip]=\"$any(item)?.badge?.tooltip\"\n [queryParams]=\"$any(item)?.queryParams\"\n [children]=\"$any(item)?.children\"\n [active]=\"$any(item).__state?.active\"\n [expanded]=\"$any(item).__state?.expanded\"\n [focused]=\"$any(item).__state?.focused\"\n [hierLevel]=\"hierLevel\"\n [childAction]=\"childAction\"\n [expandAction]=\"expandAction\"\n (navItemExpanded)=\"_navItemExpanded(item, $event)\"\n [hideEmptyIcon]=\"hideEmptyIcon\">\n </seam-nav-item>\n </div>\n</div>\n", styles: ["seam-horizontal-nav,.seam-horizontal-nav{display:block;height:100%;position:relative;z-index:2}seam-horizontal-nav .nav-inner-wrapper,.seam-horizontal-nav .nav-inner-wrapper{background:none;height:100%}seam-horizontal-nav .nav-backdrop,.seam-horizontal-nav .nav-backdrop{background:rgba(52,58,64,.6);width:100vw;height:100vh}seam-horizontal-nav .nav-backdrop.nav-backdrop-hidden,.seam-horizontal-nav .nav-backdrop.nav-backdrop-hidden{display:none;width:0;height:0;padding:0;margin:0}seam-horizontal-nav .nav-content,.seam-horizontal-nav .nav-content{display:flex;flex-direction:column;height:100%;flex-wrap:nowrap}seam-horizontal-nav .nav-items-container,.seam-horizontal-nav .nav-items-container{display:flex;flex-direction:column;width:100%;flex:1 1 100%}seam-horizontal-nav .nav-items-row,.seam-horizontal-nav .nav-items-row{height:100%;display:flex;padding:.25rem .5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.NavItemComponent, selector: "seam-nav-item", inputs: ["item", "itemType", "icon", "hideEmptyIcon", "label", "active", "link", "queryParams", "children", "hierLevel", "indentSize", "expanded", "compact", "focused", "badgeText", "badgeTheme", "badgeSrContent", "badgeTooltip", "childAction", "expandAction"], outputs: ["navItemExpanded"], exportAs: ["seamNavItem"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: HorizontalNavComponent, decorators: [{
38
- type: Component,
39
- args: [{ selector: 'seam-horizontal-nav', providers: [
40
- TheSeamNavService
41
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"nav-inner-wrapper\" class=\"nav-inner-wrapper-{{hierLevel}}\">\n <div class=\"nav-items-row\">\n <seam-nav-item *ngFor=\"let item of items$ | async\"\n class=\"flex-shrink-0\"\n [item]=\"item\"\n [itemType]=\"$any(item)?.itemType\"\n [icon]=\"$any(item)?.icon\"\n [label]=\"$any(item)?.label\"\n [link]=\"$any(item)?.link\"\n [badgeText]=\"$any(item)?.badge?.text\"\n [badgeTheme]=\"$any(item)?.badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(item)?.badge?.srContent\"\n [badgeTooltip]=\"$any(item)?.badge?.tooltip\"\n [queryParams]=\"$any(item)?.queryParams\"\n [children]=\"$any(item)?.children\"\n [active]=\"$any(item).__state?.active\"\n [expanded]=\"$any(item).__state?.expanded\"\n [focused]=\"$any(item).__state?.focused\"\n [hierLevel]=\"hierLevel\"\n [childAction]=\"childAction\"\n [expandAction]=\"expandAction\"\n (navItemExpanded)=\"_navItemExpanded(item, $event)\"\n [hideEmptyIcon]=\"hideEmptyIcon\">\n </seam-nav-item>\n </div>\n</div>\n", styles: ["seam-horizontal-nav,.seam-horizontal-nav{display:block;height:100%;position:relative;z-index:2}seam-horizontal-nav .nav-inner-wrapper,.seam-horizontal-nav .nav-inner-wrapper{background:none;height:100%}seam-horizontal-nav .nav-backdrop,.seam-horizontal-nav .nav-backdrop{background:rgba(52,58,64,.6);width:100vw;height:100vh}seam-horizontal-nav .nav-backdrop.nav-backdrop-hidden,.seam-horizontal-nav .nav-backdrop.nav-backdrop-hidden{display:none;width:0;height:0;padding:0;margin:0}seam-horizontal-nav .nav-content,.seam-horizontal-nav .nav-content{display:flex;flex-direction:column;height:100%;flex-wrap:nowrap}seam-horizontal-nav .nav-items-container,.seam-horizontal-nav .nav-items-container{display:flex;flex-direction:column;width:100%;flex:1 1 100%}seam-horizontal-nav .nav-items-row,.seam-horizontal-nav .nav-items-row{height:100%;display:flex;padding:.25rem .5rem}\n"] }]
42
- }], ctorParameters: function () { return [{ type: i1.TheSeamNavService }]; }, propDecorators: { items: [{
43
- type: Input
44
- }], hideEmptyIcon: [{
45
- type: Input
46
- }], hierLevel: [{
47
- type: Input
48
- }], childAction: [{
49
- type: Input
50
- }], expandAction: [{
51
- type: Input
52
- }], navItemExpanded: [{
53
- type: Output
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1uYXYuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9uYXYvaG9yaXpvbnRhbC1uYXYvaG9yaXpvbnRhbC1uYXYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9uYXYvaG9yaXpvbnRhbC1uYXYvaG9yaXpvbnRhbC1uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBR3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7OztBQVlsRCxNQUFNLE9BQU8sc0JBQXNCO0lBS2pDLElBQ0ksS0FBSyxLQUFpQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUNwRCxJQUFJLEtBQUssQ0FBQyxLQUFpQjtRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBY0QsWUFDbUIsSUFBdUI7UUFBdkIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFyQnpCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQU83QyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUE7UUFHM0Msa0JBQWEsR0FBK0IsSUFBSSxDQUFBO1FBRWhELGNBQVMsR0FBRyxDQUFDLENBQUE7UUFFYixnQkFBVyxHQUF1QixNQUFNLENBQUE7UUFFeEMsaUJBQVksR0FBd0IsUUFBUSxDQUFBO1FBRTNDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUE7UUFLbEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDM0MsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDdkUsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDL0MsQ0FBQTtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFjLEVBQUUsUUFBaUI7UUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDeEQsQ0FBQzs7bUhBdkNVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLDZPQU50QjtRQUNULGlCQUFpQjtLQUNsQiwwQkNkSCwwakNBMEJBOzJGRFJhLHNCQUFzQjtrQkFWbEMsU0FBUzsrQkFDRSxxQkFBcUIsYUFHcEI7d0JBQ1QsaUJBQWlCO3FCQUNsQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTt3R0FRakMsS0FBSztzQkFEUixLQUFLO2dCQVFHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBJTmF2SXRlbSwgTmF2SXRlbUNoaWxkQWN0aW9uLCBOYXZJdGVtRXhwYW5kQWN0aW9uLCBOYXZJdGVtRXhwYW5kZWRFdmVudCB9IGZyb20gJy4uL25hdi5tb2RlbHMnXG5pbXBvcnQgeyBUaGVTZWFtTmF2U2VydmljZSB9IGZyb20gJy4uL25hdi5zZXJ2aWNlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWhvcml6b250YWwtbmF2JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtbmF2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaG9yaXpvbnRhbC1uYXYuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVGhlU2VhbU5hdlNlcnZpY2VcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbE5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oYXNIZWFkZXJUb2dnbGU6IEJvb2xlYW5JbnB1dFxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgQElucHV0KClcbiAgZ2V0IGl0ZW1zKCk6IElOYXZJdGVtW10geyByZXR1cm4gdGhpcy5faXRlbXMudmFsdWUgfVxuICBzZXQgaXRlbXModmFsdWU6IElOYXZJdGVtW10pIHtcbiAgICB0aGlzLl9pdGVtcy5uZXh0KHZhbHVlKVxuICB9XG4gIHByaXZhdGUgX2l0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJTmF2SXRlbVtdPihbXSlcbiAgcHVibGljIHJlYWRvbmx5IGl0ZW1zJDogT2JzZXJ2YWJsZTxJTmF2SXRlbVtdPlxuXG4gIEBJbnB1dCgpIGhpZGVFbXB0eUljb246IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsID0gdHJ1ZVxuXG4gIEBJbnB1dCgpIGhpZXJMZXZlbCA9IDBcblxuICBASW5wdXQoKSBjaGlsZEFjdGlvbjogTmF2SXRlbUNoaWxkQWN0aW9uID0gJ21lbnUnXG5cbiAgQElucHV0KCkgZXhwYW5kQWN0aW9uOiBOYXZJdGVtRXhwYW5kQWN0aW9uID0gJ3RvZ2dsZSdcblxuICBAT3V0cHV0KCkgbmF2SXRlbUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxOYXZJdGVtRXhwYW5kZWRFdmVudD4oKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25hdjogVGhlU2VhbU5hdlNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLl9pdGVtcy5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IGl0ZW1zID8gdGhpcy5fbmF2LmNyZWF0ZUl0ZW1zT2JzZXJ2YWJsZShpdGVtcykgOiBbXSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgIClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUubmV4dCgpXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICBfbmF2SXRlbUV4cGFuZGVkKGl0ZW06IElOYXZJdGVtLCBleHBhbmRlZDogYm9vbGVhbikge1xuICAgIHRoaXMubmF2SXRlbUV4cGFuZGVkLmVtaXQoeyBuYXZJdGVtOiBpdGVtLCBleHBhbmRlZCB9KVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJuYXYtaW5uZXItd3JhcHBlclwiIGNsYXNzPVwibmF2LWlubmVyLXdyYXBwZXIte3toaWVyTGV2ZWx9fVwiPlxuICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW1zLXJvd1wiPlxuICAgIDxzZWFtLW5hdi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zJCB8IGFzeW5jXCJcbiAgICAgIGNsYXNzPVwiZmxleC1zaHJpbmstMFwiXG4gICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgIFtpdGVtVHlwZV09XCIkYW55KGl0ZW0pPy5pdGVtVHlwZVwiXG4gICAgICBbaWNvbl09XCIkYW55KGl0ZW0pPy5pY29uXCJcbiAgICAgIFtsYWJlbF09XCIkYW55KGl0ZW0pPy5sYWJlbFwiXG4gICAgICBbbGlua109XCIkYW55KGl0ZW0pPy5saW5rXCJcbiAgICAgIFtiYWRnZVRleHRdPVwiJGFueShpdGVtKT8uYmFkZ2U/LnRleHRcIlxuICAgICAgW2JhZGdlVGhlbWVdPVwiJGFueShpdGVtKT8uYmFkZ2U/LnRoZW1lIHx8ICdkYW5nZXInXCJcbiAgICAgIFtiYWRnZVNyQ29udGVudF09XCIkYW55KGl0ZW0pPy5iYWRnZT8uc3JDb250ZW50XCJcbiAgICAgIFtiYWRnZVRvb2x0aXBdPVwiJGFueShpdGVtKT8uYmFkZ2U/LnRvb2x0aXBcIlxuICAgICAgW3F1ZXJ5UGFyYW1zXT1cIiRhbnkoaXRlbSk/LnF1ZXJ5UGFyYW1zXCJcbiAgICAgIFtjaGlsZHJlbl09XCIkYW55KGl0ZW0pPy5jaGlsZHJlblwiXG4gICAgICBbYWN0aXZlXT1cIiRhbnkoaXRlbSkuX19zdGF0ZT8uYWN0aXZlXCJcbiAgICAgIFtleHBhbmRlZF09XCIkYW55KGl0ZW0pLl9fc3RhdGU/LmV4cGFuZGVkXCJcbiAgICAgIFtmb2N1c2VkXT1cIiRhbnkoaXRlbSkuX19zdGF0ZT8uZm9jdXNlZFwiXG4gICAgICBbaGllckxldmVsXT1cImhpZXJMZXZlbFwiXG4gICAgICBbY2hpbGRBY3Rpb25dPVwiY2hpbGRBY3Rpb25cIlxuICAgICAgW2V4cGFuZEFjdGlvbl09XCJleHBhbmRBY3Rpb25cIlxuICAgICAgKG5hdkl0ZW1FeHBhbmRlZCk9XCJfbmF2SXRlbUV4cGFuZGVkKGl0ZW0sICRldmVudClcIlxuICAgICAgW2hpZGVFbXB0eUljb25dPVwiaGlkZUVtcHR5SWNvblwiPlxuICAgIDwvc2VhbS1uYXYtaXRlbT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,6 +0,0 @@
1
- export * from './nav-item/nav-item.component';
2
- export * from './horizontal-nav/horizontal-nav.component';
3
- export * from './nav.models';
4
- export * from './nav.module';
5
- export * from './nav-utils';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZnJhbWV3b3JrL25hdi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFBO0FBRTdDLGNBQWMsMkNBQTJDLENBQUE7QUFDekQsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25hdi1pdGVtL25hdi1pdGVtLmNvbXBvbmVudCdcblxuZXhwb3J0ICogZnJvbSAnLi9ob3Jpem9udGFsLW5hdi9ob3Jpem9udGFsLW5hdi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL25hdi5tb2RlbHMnXG5leHBvcnQgKiBmcm9tICcuL25hdi5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL25hdi11dGlscydcbiJdfQ==
@@ -1,227 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { animate, style, transition, trigger, } from '@angular/animations';
3
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
- import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
5
- import { BehaviorSubject, Subject } from 'rxjs';
6
- import { faAngleLeft } from '@fortawesome/free-solid-svg-icons';
7
- import { InputBoolean, InputNumber } from '@theseam/ui-common/core';
8
- import { MenuComponent } from '@theseam/ui-common/menu';
9
- import { notNullOrUndefined } from '@theseam/ui-common/utils';
10
- import { horizontalNavItemHasActiveChild } from '../nav-utils';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "../nav.service";
13
- import * as i2 from "@angular/common";
14
- import * as i3 from "@angular/router";
15
- import * as i4 from "@theseam/ui-common/icon";
16
- import * as i5 from "@angular/cdk/a11y";
17
- import * as i6 from "@ng-bootstrap/ng-bootstrap";
18
- import * as i7 from "@theseam/ui-common/menu";
19
- export class NavItemComponent {
20
- set link(value) { this._link.next(value); }
21
- get link() { return this._link.value; }
22
- set expanded(value) {
23
- this._expanded.next(coerceBooleanProperty(value));
24
- }
25
- get expanded() { return this._expanded.value; }
26
- set compact(value) { this._compact.next(coerceBooleanProperty(value)); }
27
- get compact() { return this._compact.value; }
28
- get badgeTooltip() { return this._badgeTooltip; }
29
- set badgeTooltip(value) {
30
- if (value !== null && value !== undefined) {
31
- if (typeof value === 'string') {
32
- this._badgeTooltip = {
33
- tooltip: value,
34
- placement: 'auto',
35
- disabled: false
36
- };
37
- }
38
- else {
39
- this._badgeTooltip = {
40
- ...value,
41
- placement: value.placement || 'auto',
42
- disabled: typeof value?.disabled === 'boolean'
43
- ? value.disabled
44
- : typeof value.tooltip !== 'string'
45
- };
46
- }
47
- }
48
- else {
49
- this._badgeTooltip = undefined;
50
- }
51
- }
52
- get _isActiveCssClass() { return this.active; }
53
- get _isChildActiveCssClass() { return this.hasActiveChild; }
54
- get _isExpandedCssClass() { return this.expanded; }
55
- get _isFocusedCssClass() { return this.focused; }
56
- get _attrDataHierLevel() { return this.hierLevel; }
57
- constructor(_nav) {
58
- this._nav = _nav;
59
- this._ngUnsubscribe = new Subject();
60
- this.faAngleLeft = faAngleLeft;
61
- this.active = false;
62
- this._link = new BehaviorSubject(undefined);
63
- this.link$ = this._link.asObservable();
64
- this.hierLevel = 0;
65
- this.indentSize = 10;
66
- this._expanded = new BehaviorSubject(false);
67
- this.expanded$ = this._expanded.asObservable();
68
- this._compact = new BehaviorSubject(false);
69
- this.compact$ = this._compact.asObservable();
70
- this.focused = false;
71
- this.badgeTheme = 'danger';
72
- this.childAction = 'menu';
73
- this.expandAction = 'toggle';
74
- this.navItemExpanded = new EventEmitter();
75
- }
76
- ngOnDestroy() {
77
- this._ngUnsubscribe.next();
78
- this._ngUnsubscribe.complete();
79
- }
80
- get hasChildren() {
81
- return Array.isArray(this.children) && this.children.length > 0;
82
- }
83
- get hasActiveChild() {
84
- if (notNullOrUndefined(this.item)) {
85
- return horizontalNavItemHasActiveChild(this.item);
86
- }
87
- return false;
88
- }
89
- get hasMenuToggle() {
90
- return this.hasChildren && this.childAction === 'menu';
91
- }
92
- get menuTpl() {
93
- return this.hasMenuToggle ? this._menu : undefined;
94
- }
95
- get hasExpandingChildren() {
96
- return this.hasChildren && this.childAction === 'expand';
97
- }
98
- _toggleChildren(event) {
99
- let ex = !this.expanded;
100
- if (this.expandAction === 'expandOnly') {
101
- ex = true;
102
- }
103
- this.expanded = ex;
104
- this.navItemExpanded.emit(this.expanded);
105
- if (this.item && this.expanded) {
106
- this._nav.setItemStateProp(this.item, 'focused', this.expanded);
107
- }
108
- // Prevents seam-menu from closing out when toggling child expand
109
- event.stopPropagation();
110
- }
111
- // Updates expanded state when user exits seam-menu
112
- _menuEvent(menuExpanded) {
113
- if (menuExpanded === false) {
114
- this.expanded = false;
115
- // TODO: figure out why closing seam-menu with expanded submenu messes up animation
116
- if (this._navItems && this._navItems.length) {
117
- this._navItems.forEach(navItem => {
118
- navItem.expanded = false;
119
- });
120
- }
121
- }
122
- }
123
- get showIconBlock() {
124
- return notNullOrUndefined(this.icon) || this.hideEmptyIcon !== true;
125
- }
126
- }
127
- NavItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NavItemComponent, deps: [{ token: i1.TheSeamNavService }], target: i0.ɵɵFactoryTarget.Component });
128
- NavItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: NavItemComponent, selector: "seam-nav-item", inputs: { item: "item", itemType: "itemType", icon: "icon", hideEmptyIcon: "hideEmptyIcon", label: "label", active: "active", link: "link", queryParams: "queryParams", children: "children", hierLevel: "hierLevel", indentSize: "indentSize", expanded: "expanded", compact: "compact", focused: "focused", badgeText: "badgeText", badgeTheme: "badgeTheme", badgeSrContent: "badgeSrContent", badgeTooltip: "badgeTooltip", childAction: "childAction", expandAction: "expandAction" }, outputs: { navItemExpanded: "navItemExpanded" }, host: { properties: { "class.seam-nav-item--active": "this._isActiveCssClass", "class.seam-nav-item--child-active": "this._isChildActiveCssClass", "class.seam-nav-item--expanded": "this._isExpandedCssClass", "class.seam-nav-item--focused": "this._isFocusedCssClass", "attr.data-hier-level": "this._attrDataHierLevel" } }, viewQueries: [{ propertyName: "_menu", first: true, predicate: MenuComponent, descendants: true }, { propertyName: "_navItems", predicate: NavItemComponent, descendants: true }], exportAs: ["seamNavItem"], ngImport: i0, template: "<div class=\"d-flex flex-row h-100\">\n <ng-container *ngIf=\"itemType === 'basic'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeBasic\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'link'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeLink\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'divider'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeDivider\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'title'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeTitle\"></ng-template>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"hasExpandingChildren\">\n <div class=\"nav--group nav--group--level-{{ hierLevel + 1 }}\"\n *ngIf=\"expanded$ | async\" @childGroupAnim>\n <ng-container *ngTemplateOutlet=\"navChildren\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #itemTypeBasic>\n <button class=\"nav-item btn nav-btn p-0 d-flex align-items-stretch flex-row text-decoration-none w-100\"\n cdkMonitorElementFocus\n (click)=\"_toggleChildren($event)\"\n [seamMenuToggle]=\"menuTpl\"\n (menuToggle)=\"_menuEvent($event)\"\n [attr.aria-expanded]=\"expanded$ | async\">\n <div class=\"nav-link d-flex flex-row align-items-center w-100\" [class.nav-link__compact]=\"compact\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n\n <div *ngIf=\"hasChildren && !compact\"\n class=\"btn nav-btn nav-item--toggle-btn-container d-flex align-items-center\">\n <seam-icon\n class=\"nav-item--toggle-btn\"\n [class.nav-item--toggle-btn-expanded]=\"expanded$ | async\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n </div>\n </button>\n</ng-template>\n\n<ng-template #itemTypeLink>\n <a *ngIf=\"link; else noLink\" class=\"nav-item nav-link d-flex flex-row w-100 align-items-center\"\n [class.nav-link__compact]=\"compact\"\n [routerLink]=\"link\"\n [queryParams]=\"queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </a>\n\n <ng-template #noLink>\n <a class=\"nav-item nav-link d-flex flex-row w-100 align-items-center\" [class.nav-link__compact]=\"compact\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n </a>\n </ng-template>\n\n <button *ngIf=\"hasChildren && !compact\"\n type=\"button\"\n class=\"btn nav-btn nav-item--toggle-btn-container\"\n (click)=\"_toggleChildren($event)\"\n [seamMenuToggle]=\"menuTpl\"\n (menuToggle)=\"_menuEvent($event)\"\n [attr.aria-expanded]=\"expanded$ | async\"\n cdkMonitorElementFocus>\n <seam-icon\n class=\"nav-item--toggle-btn\"\n [class.nav-item--toggle-btn-expanded]=\"expanded$ | async\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n <span class=\"sr-only\">Group Toggle</span>\n </button>\n</ng-template>\n\n<ng-template #itemTypeDivider>\n <div class=\"px-2 w-100\">\n <hr class=\"nav-item--divider\" />\n </div>\n</ng-template>\n\n<ng-template #itemTypeTitle>\n <ng-container *ngIf=\"!compact\">\n <span class=\"nav-item--title pt-1\" nav-item-label>{{ label }}</span>\n </ng-container>\n</ng-template>\n\n<ng-template #itemBadge>\n <ng-container *ngIf=\"badgeText\">\n <div class=\"badge-spacer flex-grow-1\" *ngIf=\"!compact\"></div>\n <div class=\"nav-item--badge\"\n [class.nav-item--badge-no-icon]=\"!icon\"\n [ngbTooltip]=\"$any(badgeTooltip)?.tooltip\"\n [tooltipClass]=\"$any(badgeTooltip)?.class\"\n [placement]=\"$any(badgeTooltip)?.placement\"\n [container]=\"$any(badgeTooltip)?.container\"\n [disableTooltip]=\"!badgeTooltip || !!$any(badgeTooltip)?.disabled\">\n <span class=\"badge badge-pill badge-{{ badgeTheme }}\">\n <ng-container *ngIf=\"!compact || !icon\">\n {{ badgeText }}\n </ng-container>\n <span *ngIf=\"badgeSrContent\">{{ badgeSrContent }}</span>\n </span>\n </div>\n </ng-container>\n</ng-template>\n\n<seam-menu #menu *ngIf=\"hasMenuToggle\">\n <ng-container *ngTemplateOutlet=\"navChildren\"></ng-container>\n</seam-menu>\n\n<ng-template #navChildren>\n <seam-nav-item *ngFor=\"let child of children\"\n [item]=\"child\"\n [hierLevel]=\"compact ? 0 : (hierLevel + 1)\"\n [compact]=\"compact\"\n [itemType]=\"$any(child).itemType\"\n [icon]=\"$any(child).icon\"\n [label]=\"$any(child).label\"\n [link]=\"$any(child).link\"\n [badgeText]=\"$any(child).badge?.text\"\n [badgeTheme]=\"$any(child).badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(child).badge?.srContent\"\n [badgeTooltip]=\"$any(child)?.badge?.tooltip\"\n [queryParams]=\"$any(child).queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [children]=\"$any(child)?.children\"\n [active]=\"$any(child).__state?.active\"\n [expanded]=\"$any(child).__state?.expanded\"\n [focused]=\"$any(child).__state?.focused\"\n childAction=\"expand\"\n [hideEmptyIcon]=\"hideEmptyIcon\">\n </seam-nav-item>\n</ng-template>\n\n", styles: ["seam-nav-item{display:block;transition:.25s ease-in-out background-color;text-align:inherit;border-radius:0;overflow:hidden;background:transparent;margin:0}seam-nav-item.seam-nav-item--expanded{background-color:transparent}seam-nav-item.seam-nav-item--expanded .nav-link{color:#000}seam-nav-item.seam-nav-item--child-active{background-color:#dae0e5}seam-nav-item.seam-nav-item--child-active .nav-link{color:#000}seam-nav-item.seam-nav-item--active{background-color:#dae0e5}seam-nav-item.seam-nav-item--active .active,seam-nav-item.seam-nav-item--active:active,seam-nav-item.seam-nav-item--active .nav-item.active:hover{background-color:#dae0e5}seam-nav-item.seam-nav-item--active .nav-item:hover{background-color:#e9ecef}seam-nav-item.seam-nav-item--active .nav-link{color:#000}seam-nav-item .badge{vertical-align:middle}seam-nav-item:not(.nav-item--icon) .nav-item--badge{pointer-events:all;margin-left:5px;margin-right:3px}seam-nav-item .nav-item--icon{position:relative;width:24px;max-width:24px;min-width:24px;height:24px;max-height:24px;min-height:24px;text-align:center;margin-right:.5rem}seam-nav-item .nav-item--icon .nav-item--badge{top:-4px;right:-4px;position:absolute}seam-nav-item .nav-item--icon .nav-item--badge .badge:empty{display:block;width:8px;height:8px;padding:0}seam-nav-item .nav-item--icon .nav-item--badge.nav-item--badge-no-icon{top:0;right:0}seam-nav-item .nav-item{transition:.25s ease-in-out background-color}seam-nav-item .nav-item:hover{background-color:#e9ecef}seam-nav-item .nav-item.active{pointer-events:none;cursor:default}seam-nav-item a.nav-item:not([href]):not([tabindex]){color:#000}seam-nav-item a.nav-item:not([href]):not([tabindex]):hover{background-color:transparent}seam-nav-item .nav-link{color:#000}seam-nav-item .nav-btn{font-weight:400;color:#000;text-decoration:none;border-radius:0;border:0 solid #dee2e6}seam-nav-item .nav-btn:hover{color:#000;text-decoration:underline}seam-nav-item .nav-btn:focus,seam-nav-item .nav-btn.focus{text-decoration:underline;box-shadow:none}seam-nav-item .nav-btn:disabled,seam-nav-item .nav-btn.disabled{color:#000;pointer-events:none}seam-nav-item .cdk-keyboard-focused{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}seam-nav-item .nav-item--toggle-btn-container{transition:.25s ease-in-out background-color;padding:0 .5rem}seam-nav-item button.nav-item--toggle-btn-container:hover{background-color:#e9ecef}seam-nav-item .nav-item--toggle-btn .svg-inline--fa{transition:.1s ease-in-out transform;transform:none}seam-nav-item .nav-item--toggle-btn.nav-item--toggle-btn-expanded .svg-inline--fa{transform:rotate(-90deg)}seam-nav-item .nav--group{will-change:height;overflow:hidden}seam-nav-item .nav--group--level-1{background-color:#eff1f4}seam-nav-item .nav--group--level-2{background-color:#e6eaed}seam-nav-item .nav--group--level-3{background-color:#dde2e7}seam-nav-item .nav--group--level-4{background-color:#d4dae1}seam-nav-item .nav--group--level-5{background-color:#cbd3da}seam-nav-item .nav--group--level-6{background-color:#c2cbd4}seam-nav-item .nav--group--level-7{background-color:#bac3cd}seam-nav-item .nav--group--level-8{background-color:#b1bcc7}seam-nav-item .nav--group--level-9{background-color:#a8b4c1}seam-nav-item .nav-item--divider{display:block;border-top:1px solid #dae0e5;width:100%}seam-nav-item .nav-item--title{color:#000;font-size:24px;padding-left:10px}seam-nav-item .sr-only{top:0;left:0}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "directive", type: i5.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i7.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i7.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuToggle", "menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: NavItemComponent, selector: "seam-nav-item", inputs: ["item", "itemType", "icon", "hideEmptyIcon", "label", "active", "link", "queryParams", "children", "hierLevel", "indentSize", "expanded", "compact", "focused", "badgeText", "badgeTheme", "badgeSrContent", "badgeTooltip", "childAction", "expandAction"], outputs: ["navItemExpanded"], exportAs: ["seamNavItem"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], animations: [
129
- trigger('childGroupAnim', [
130
- transition(':enter', [
131
- style({ height: 0 }),
132
- animate('0.2s ease-in-out', style({ height: '*' }))
133
- ]),
134
- transition(':leave', [
135
- style({ height: '*' }),
136
- animate('0.2s ease-in-out', style({ height: 0 }))
137
- ])
138
- ])
139
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
140
- __decorate([
141
- InputBoolean()
142
- ], NavItemComponent.prototype, "active", void 0);
143
- __decorate([
144
- InputNumber(0)
145
- ], NavItemComponent.prototype, "hierLevel", void 0);
146
- __decorate([
147
- InputNumber(10)
148
- ], NavItemComponent.prototype, "indentSize", void 0);
149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: NavItemComponent, decorators: [{
150
- type: Component,
151
- args: [{ selector: 'seam-nav-item', exportAs: 'seamNavItem', animations: [
152
- trigger('childGroupAnim', [
153
- transition(':enter', [
154
- style({ height: 0 }),
155
- animate('0.2s ease-in-out', style({ height: '*' }))
156
- ]),
157
- transition(':leave', [
158
- style({ height: '*' }),
159
- animate('0.2s ease-in-out', style({ height: 0 }))
160
- ])
161
- ])
162
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"d-flex flex-row h-100\">\n <ng-container *ngIf=\"itemType === 'basic'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeBasic\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'link'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeLink\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'divider'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeDivider\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'title'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeTitle\"></ng-template>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"hasExpandingChildren\">\n <div class=\"nav--group nav--group--level-{{ hierLevel + 1 }}\"\n *ngIf=\"expanded$ | async\" @childGroupAnim>\n <ng-container *ngTemplateOutlet=\"navChildren\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #itemTypeBasic>\n <button class=\"nav-item btn nav-btn p-0 d-flex align-items-stretch flex-row text-decoration-none w-100\"\n cdkMonitorElementFocus\n (click)=\"_toggleChildren($event)\"\n [seamMenuToggle]=\"menuTpl\"\n (menuToggle)=\"_menuEvent($event)\"\n [attr.aria-expanded]=\"expanded$ | async\">\n <div class=\"nav-link d-flex flex-row align-items-center w-100\" [class.nav-link__compact]=\"compact\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n\n <div *ngIf=\"hasChildren && !compact\"\n class=\"btn nav-btn nav-item--toggle-btn-container d-flex align-items-center\">\n <seam-icon\n class=\"nav-item--toggle-btn\"\n [class.nav-item--toggle-btn-expanded]=\"expanded$ | async\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n </div>\n </button>\n</ng-template>\n\n<ng-template #itemTypeLink>\n <a *ngIf=\"link; else noLink\" class=\"nav-item nav-link d-flex flex-row w-100 align-items-center\"\n [class.nav-link__compact]=\"compact\"\n [routerLink]=\"link\"\n [queryParams]=\"queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </a>\n\n <ng-template #noLink>\n <a class=\"nav-item nav-link d-flex flex-row w-100 align-items-center\" [class.nav-link__compact]=\"compact\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n </a>\n </ng-template>\n\n <button *ngIf=\"hasChildren && !compact\"\n type=\"button\"\n class=\"btn nav-btn nav-item--toggle-btn-container\"\n (click)=\"_toggleChildren($event)\"\n [seamMenuToggle]=\"menuTpl\"\n (menuToggle)=\"_menuEvent($event)\"\n [attr.aria-expanded]=\"expanded$ | async\"\n cdkMonitorElementFocus>\n <seam-icon\n class=\"nav-item--toggle-btn\"\n [class.nav-item--toggle-btn-expanded]=\"expanded$ | async\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n <span class=\"sr-only\">Group Toggle</span>\n </button>\n</ng-template>\n\n<ng-template #itemTypeDivider>\n <div class=\"px-2 w-100\">\n <hr class=\"nav-item--divider\" />\n </div>\n</ng-template>\n\n<ng-template #itemTypeTitle>\n <ng-container *ngIf=\"!compact\">\n <span class=\"nav-item--title pt-1\" nav-item-label>{{ label }}</span>\n </ng-container>\n</ng-template>\n\n<ng-template #itemBadge>\n <ng-container *ngIf=\"badgeText\">\n <div class=\"badge-spacer flex-grow-1\" *ngIf=\"!compact\"></div>\n <div class=\"nav-item--badge\"\n [class.nav-item--badge-no-icon]=\"!icon\"\n [ngbTooltip]=\"$any(badgeTooltip)?.tooltip\"\n [tooltipClass]=\"$any(badgeTooltip)?.class\"\n [placement]=\"$any(badgeTooltip)?.placement\"\n [container]=\"$any(badgeTooltip)?.container\"\n [disableTooltip]=\"!badgeTooltip || !!$any(badgeTooltip)?.disabled\">\n <span class=\"badge badge-pill badge-{{ badgeTheme }}\">\n <ng-container *ngIf=\"!compact || !icon\">\n {{ badgeText }}\n </ng-container>\n <span *ngIf=\"badgeSrContent\">{{ badgeSrContent }}</span>\n </span>\n </div>\n </ng-container>\n</ng-template>\n\n<seam-menu #menu *ngIf=\"hasMenuToggle\">\n <ng-container *ngTemplateOutlet=\"navChildren\"></ng-container>\n</seam-menu>\n\n<ng-template #navChildren>\n <seam-nav-item *ngFor=\"let child of children\"\n [item]=\"child\"\n [hierLevel]=\"compact ? 0 : (hierLevel + 1)\"\n [compact]=\"compact\"\n [itemType]=\"$any(child).itemType\"\n [icon]=\"$any(child).icon\"\n [label]=\"$any(child).label\"\n [link]=\"$any(child).link\"\n [badgeText]=\"$any(child).badge?.text\"\n [badgeTheme]=\"$any(child).badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(child).badge?.srContent\"\n [badgeTooltip]=\"$any(child)?.badge?.tooltip\"\n [queryParams]=\"$any(child).queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [children]=\"$any(child)?.children\"\n [active]=\"$any(child).__state?.active\"\n [expanded]=\"$any(child).__state?.expanded\"\n [focused]=\"$any(child).__state?.focused\"\n childAction=\"expand\"\n [hideEmptyIcon]=\"hideEmptyIcon\">\n </seam-nav-item>\n</ng-template>\n\n", styles: ["seam-nav-item{display:block;transition:.25s ease-in-out background-color;text-align:inherit;border-radius:0;overflow:hidden;background:transparent;margin:0}seam-nav-item.seam-nav-item--expanded{background-color:transparent}seam-nav-item.seam-nav-item--expanded .nav-link{color:#000}seam-nav-item.seam-nav-item--child-active{background-color:#dae0e5}seam-nav-item.seam-nav-item--child-active .nav-link{color:#000}seam-nav-item.seam-nav-item--active{background-color:#dae0e5}seam-nav-item.seam-nav-item--active .active,seam-nav-item.seam-nav-item--active:active,seam-nav-item.seam-nav-item--active .nav-item.active:hover{background-color:#dae0e5}seam-nav-item.seam-nav-item--active .nav-item:hover{background-color:#e9ecef}seam-nav-item.seam-nav-item--active .nav-link{color:#000}seam-nav-item .badge{vertical-align:middle}seam-nav-item:not(.nav-item--icon) .nav-item--badge{pointer-events:all;margin-left:5px;margin-right:3px}seam-nav-item .nav-item--icon{position:relative;width:24px;max-width:24px;min-width:24px;height:24px;max-height:24px;min-height:24px;text-align:center;margin-right:.5rem}seam-nav-item .nav-item--icon .nav-item--badge{top:-4px;right:-4px;position:absolute}seam-nav-item .nav-item--icon .nav-item--badge .badge:empty{display:block;width:8px;height:8px;padding:0}seam-nav-item .nav-item--icon .nav-item--badge.nav-item--badge-no-icon{top:0;right:0}seam-nav-item .nav-item{transition:.25s ease-in-out background-color}seam-nav-item .nav-item:hover{background-color:#e9ecef}seam-nav-item .nav-item.active{pointer-events:none;cursor:default}seam-nav-item a.nav-item:not([href]):not([tabindex]){color:#000}seam-nav-item a.nav-item:not([href]):not([tabindex]):hover{background-color:transparent}seam-nav-item .nav-link{color:#000}seam-nav-item .nav-btn{font-weight:400;color:#000;text-decoration:none;border-radius:0;border:0 solid #dee2e6}seam-nav-item .nav-btn:hover{color:#000;text-decoration:underline}seam-nav-item .nav-btn:focus,seam-nav-item .nav-btn.focus{text-decoration:underline;box-shadow:none}seam-nav-item .nav-btn:disabled,seam-nav-item .nav-btn.disabled{color:#000;pointer-events:none}seam-nav-item .cdk-keyboard-focused{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}seam-nav-item .nav-item--toggle-btn-container{transition:.25s ease-in-out background-color;padding:0 .5rem}seam-nav-item button.nav-item--toggle-btn-container:hover{background-color:#e9ecef}seam-nav-item .nav-item--toggle-btn .svg-inline--fa{transition:.1s ease-in-out transform;transform:none}seam-nav-item .nav-item--toggle-btn.nav-item--toggle-btn-expanded .svg-inline--fa{transform:rotate(-90deg)}seam-nav-item .nav--group{will-change:height;overflow:hidden}seam-nav-item .nav--group--level-1{background-color:#eff1f4}seam-nav-item .nav--group--level-2{background-color:#e6eaed}seam-nav-item .nav--group--level-3{background-color:#dde2e7}seam-nav-item .nav--group--level-4{background-color:#d4dae1}seam-nav-item .nav--group--level-5{background-color:#cbd3da}seam-nav-item .nav--group--level-6{background-color:#c2cbd4}seam-nav-item .nav--group--level-7{background-color:#bac3cd}seam-nav-item .nav--group--level-8{background-color:#b1bcc7}seam-nav-item .nav--group--level-9{background-color:#a8b4c1}seam-nav-item .nav-item--divider{display:block;border-top:1px solid #dae0e5;width:100%}seam-nav-item .nav-item--title{color:#000;font-size:24px;padding-left:10px}seam-nav-item .sr-only{top:0;left:0}\n"] }]
163
- }], ctorParameters: function () { return [{ type: i1.TheSeamNavService }]; }, propDecorators: { item: [{
164
- type: Input
165
- }], itemType: [{
166
- type: Input
167
- }], icon: [{
168
- type: Input
169
- }], hideEmptyIcon: [{
170
- type: Input
171
- }], label: [{
172
- type: Input
173
- }], active: [{
174
- type: Input
175
- }], link: [{
176
- type: Input
177
- }], queryParams: [{
178
- type: Input
179
- }], children: [{
180
- type: Input
181
- }], hierLevel: [{
182
- type: Input
183
- }], indentSize: [{
184
- type: Input
185
- }], expanded: [{
186
- type: Input
187
- }], compact: [{
188
- type: Input
189
- }], focused: [{
190
- type: Input
191
- }], badgeText: [{
192
- type: Input
193
- }], badgeTheme: [{
194
- type: Input
195
- }], badgeSrContent: [{
196
- type: Input
197
- }], badgeTooltip: [{
198
- type: Input
199
- }], childAction: [{
200
- type: Input
201
- }], expandAction: [{
202
- type: Input
203
- }], navItemExpanded: [{
204
- type: Output
205
- }], _isActiveCssClass: [{
206
- type: HostBinding,
207
- args: ['class.seam-nav-item--active']
208
- }], _isChildActiveCssClass: [{
209
- type: HostBinding,
210
- args: ['class.seam-nav-item--child-active']
211
- }], _isExpandedCssClass: [{
212
- type: HostBinding,
213
- args: ['class.seam-nav-item--expanded']
214
- }], _isFocusedCssClass: [{
215
- type: HostBinding,
216
- args: ['class.seam-nav-item--focused']
217
- }], _attrDataHierLevel: [{
218
- type: HostBinding,
219
- args: ['attr.data-hier-level']
220
- }], _menu: [{
221
- type: ViewChild,
222
- args: [MenuComponent]
223
- }], _navItems: [{
224
- type: ViewChildren,
225
- args: [NavItemComponent]
226
- }] } });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9uYXYvbmF2LWl0ZW0vbmF2LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2ZyYW1ld29yay9uYXYvbmF2LWl0ZW0vbmF2LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQTtBQUM1QixPQUFPLEVBQWdCLHFCQUFxQixFQUFlLE1BQU0sdUJBQXVCLENBQUE7QUFDeEYsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRS9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUUvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBSW5FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxjQUFjLENBQUE7Ozs7Ozs7OztBQXdCOUQsTUFBTSxPQUFPLGdCQUFnQjtJQXVCM0IsSUFDSSxJQUFJLENBQUMsS0FBZ0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQSxD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O2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVtQixNQUFNO3NCQUE5QixLQUFLO2dCQUdGLElBQUk7c0JBRFAsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRW1CLFNBQVM7c0JBQWpDLEtBQUs7Z0JBRW9CLFVBQVU7c0JBQW5DLEtBQUs7Z0JBR0YsUUFBUTtzQkFEWCxLQUFLO2dCQVNGLE9BQU87c0JBRFYsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0YsWUFBWTtzQkFEZixLQUFLO2dCQXlCRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFFeUMsaUJBQWlCO3NCQUFoRSxXQUFXO3VCQUFDLDZCQUE2QjtnQkFFWSxzQkFBc0I7c0JBQTNFLFdBQVc7dUJBQUMsbUNBQW1DO2dCQUVFLG1CQUFtQjtzQkFBcEUsV0FBVzt1QkFBQywrQkFBK0I7Z0JBRUssa0JBQWtCO3NCQUFsRSxXQUFXO3VCQUFDLDhCQUE4QjtnQkFFRixrQkFBa0I7c0JBQTFELFdBQVc7dUJBQUMsc0JBQXNCO2dCQUVULEtBQUs7c0JBQTlCLFNBQVM7dUJBQUMsYUFBYTtnQkFFUSxTQUFTO3NCQUF4QyxZQUFZO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFuaW1hdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5cbmltcG9ydCB7IGZhQW5nbGVMZWZ0IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJ1xuXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgdHlwZSB7IFNlYW1JY29uIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2ljb24nXG5pbXBvcnQgdHlwZSB7IFRoZW1lVHlwZXMgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vbW9kZWxzJ1xuXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL21lbnUnXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5pbXBvcnQgeyBob3Jpem9udGFsTmF2SXRlbUhhc0FjdGl2ZUNoaWxkIH0gZnJvbSAnLi4vbmF2LXV0aWxzJ1xuaW1wb3J0IHsgSU5hdkl0ZW0sIE5hdkl0ZW1CYWRnZVRvb2x0aXAsIE5hdkl0ZW1DaGlsZEFjdGlvbiwgTmF2SXRlbUV4cGFuZEFjdGlvbiB9IGZyb20gJy4uL25hdi5tb2RlbHMnXG5pbXBvcnQgeyBUaGVTZWFtTmF2U2VydmljZSB9IGZyb20gJy4uL25hdi5zZXJ2aWNlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLW5hdi1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmF2LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdzZWFtTmF2SXRlbScsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdjaGlsZEdyb3VwQW5pbScsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6IDAgfSksXG4gICAgICAgIGFuaW1hdGUoJzAuMnMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSksXG4gICAgICAgIGFuaW1hdGUoJzAuMnMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IGhlaWdodDogMCB9KSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTmF2SXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oaWVyTGV2ZWw6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pbmRlbnRTaXplOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXhwYW5kZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY29tcGFjdDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hY3RpdmU6IEJvb2xlYW5JbnB1dFxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgcmVhZG9ubHkgZmFBbmdsZUxlZnQgPSBmYUFuZ2xlTGVmdFxuXG4gIEBJbnB1dCgpIGl0ZW06IElOYXZJdGVtIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIGl0ZW1UeXBlOiAnZGl2aWRlcicgfCAnYmFzaWMnIHwgJ2xpbmsnIHwgJ2J1dHRvbicgfCAndGl0bGUnIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIGljb246IFNlYW1JY29uIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIGhpZGVFbXB0eUljb246IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgYWN0aXZlID0gZmFsc2VcblxuICBASW5wdXQoKVxuICBzZXQgbGluayh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkgeyB0aGlzLl9saW5rLm5leHQodmFsdWUpIH1cbiAgZ2V0IGxpbmsoKSB7IHJldHVybiB0aGlzLl9saW5rLnZhbHVlIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfbGluayA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbD4odW5kZWZpbmVkKVxuICBwdWJsaWMgcmVhZG9ubHkgbGluayQgPSB0aGlzLl9saW5rLmFzT2JzZXJ2YWJsZSgpXG5cbiAgQElucHV0KCkgcXVlcnlQYXJhbXM6IHsgW2s6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIGNoaWxkcmVuOiBJTmF2SXRlbVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBoaWVyTGV2ZWwgPSAwXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDEwKSBpbmRlbnRTaXplID0gMTBcblxuICBASW5wdXQoKVxuICBzZXQgZXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9leHBhbmRlZC5uZXh0KGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSkpXG4gIH1cbiAgZ2V0IGV4cGFuZGVkKCkgeyByZXR1cm4gdGhpcy5fZXhwYW5kZWQudmFsdWUgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9leHBhbmRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gIHB1YmxpYyByZWFkb25seSBleHBhbmRlZCQgPSB0aGlzLl9leHBhbmRlZC5hc09ic2VydmFibGUoKVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb21wYWN0KHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX2NvbXBhY3QubmV4dChjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpKSB9XG4gIGdldCBjb21wYWN0KCkgeyByZXR1cm4gdGhpcy5fY29tcGFjdC52YWx1ZSB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBhY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICBwdWJsaWMgcmVhZG9ubHkgY29tcGFjdCQgPSB0aGlzLl9jb21wYWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgQElucHV0KCkgZm9jdXNlZCA9IGZhbHNlXG5cbiAgQElucHV0KCkgYmFkZ2VUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIGJhZGdlVGhlbWU6IFRoZW1lVHlwZXMgfCB1bmRlZmluZWQgfCBudWxsID0gJ2RhbmdlcidcblxuICAvKipcbiAgICogQ29udGVudCB0byBwcm92aWRlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2d5LCBzdWNoIGFzIHNjcmVlbiByZWFkZXJzLlxuICAgKi9cbiAgQElucHV0KCkgYmFkZ2VTckNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKVxuICBnZXQgYmFkZ2VUb29sdGlwKCkgeyByZXR1cm4gdGhpcy5fYmFkZ2VUb29sdGlwIH1cbiAgc2V0IGJhZGdlVG9vbHRpcCh2YWx1ZTogc3RyaW5nIHwgTmF2SXRlbUJhZGdlVG9vbHRpcCB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5fYmFkZ2VUb29sdGlwID0ge1xuICAgICAgICAgIHRvb2x0aXA6IHZhbHVlLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2F1dG8nLFxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9iYWRnZVRvb2x0aXAgPSB7XG4gICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgcGxhY2VtZW50OiB2YWx1ZS5wbGFjZW1lbnQgfHwgJ2F1dG8nLFxuICAgICAgICAgIGRpc2FibGVkOiB0eXBlb2YgdmFsdWU/LmRpc2FibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8gdmFsdWUuZGlzYWJsZWRcbiAgICAgICAgICAgIDogdHlwZW9mIHZhbHVlLnRvb2x0aXAgIT09ICdzdHJpbmcnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYmFkZ2VUb29sdGlwID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2JhZGdlVG9vbHRpcDogTmF2SXRlbUJhZGdlVG9vbHRpcCB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBjaGlsZEFjdGlvbjogTmF2SXRlbUNoaWxkQWN0aW9uID0gJ21lbnUnXG5cbiAgQElucHV0KCkgZXhwYW5kQWN0aW9uOiBOYXZJdGVtRXhwYW5kQWN0aW9uID0gJ3RvZ2dsZSdcblxuICBAT3V0cHV0KCkgbmF2SXRlbUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWFtLW5hdi1pdGVtLS1hY3RpdmUnKSBnZXQgX2lzQWN0aXZlQ3NzQ2xhc3MoKSB7IHJldHVybiB0aGlzLmFjdGl2ZSB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWFtLW5hdi1pdGVtLS1jaGlsZC1hY3RpdmUnKSBnZXQgX2lzQ2hpbGRBY3RpdmVDc3NDbGFzcygpIHsgcmV0dXJuIHRoaXMuaGFzQWN0aXZlQ2hpbGQgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2VhbS1uYXYtaXRlbS0tZXhwYW5kZWQnKSBnZXQgX2lzRXhwYW5kZWRDc3NDbGFzcygpIHsgcmV0dXJuIHRoaXMuZXhwYW5kZWQgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2VhbS1uYXYtaXRlbS0tZm9jdXNlZCcpIGdldCBfaXNGb2N1c2VkQ3NzQ2xhc3MoKSB7IHJldHVybiB0aGlzLmZvY3VzZWQgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWhpZXItbGV2ZWwnKSBnZXQgX2F0dHJEYXRhSGllckxldmVsKCkgeyByZXR1cm4gdGhpcy5oaWVyTGV2ZWwgfVxuXG4gIEBWaWV3Q2hpbGQoTWVudUNvbXBvbmVudCkgX21lbnU/OiBNZW51Q29tcG9uZW50XG5cbiAgQFZpZXdDaGlsZHJlbihOYXZJdGVtQ29tcG9uZW50KSBfbmF2SXRlbXM/OiBOYXZJdGVtQ29tcG9uZW50W11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9uYXY6IFRoZVNlYW1OYXZTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKClcbiAgfVxuXG4gIGdldCBoYXNDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmNoaWxkcmVuKSAmJiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDBcbiAgfVxuXG4gIGdldCBoYXNBY3RpdmVDaGlsZCgpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHRoaXMuaXRlbSkpIHtcbiAgICAgIHJldHVybiBob3Jpem9udGFsTmF2SXRlbUhhc0FjdGl2ZUNoaWxkKHRoaXMuaXRlbSlcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXQgaGFzTWVudVRvZ2dsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNDaGlsZHJlbiAmJiB0aGlzLmNoaWxkQWN0aW9uID09PSAnbWVudSdcbiAgfVxuXG4gIGdldCBtZW51VHBsKCk6IE1lbnVDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmhhc01lbnVUb2dnbGUgPyB0aGlzLl9tZW51IDogdW5kZWZpbmVkXG4gIH1cblxuICBnZXQgaGFzRXhwYW5kaW5nQ2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ2hpbGRyZW4gJiYgdGhpcy5jaGlsZEFjdGlvbiA9PT0gJ2V4cGFuZCdcbiAgfVxuXG4gIHB1YmxpYyBfdG9nZ2xlQ2hpbGRyZW4oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGV4ID0gIXRoaXMuZXhwYW5kZWRcbiAgICBpZiAodGhpcy5leHBhbmRBY3Rpb24gPT09ICdleHBhbmRPbmx5Jykge1xuICAgICAgZXggPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRlZCA9IGV4XG4gICAgdGhpcy5uYXZJdGVtRXhwYW5kZWQuZW1pdCh0aGlzLmV4cGFuZGVkKVxuICAgIGlmICh0aGlzLml0ZW0gJiYgdGhpcy5leHBhbmRlZCkge1xuICAgICAgdGhpcy5fbmF2LnNldEl0ZW1TdGF0ZVByb3AodGhpcy5pdGVtLCAnZm9jdXNlZCcsIHRoaXMuZXhwYW5kZWQpXG4gICAgfVxuXG4gICAgLy8gUHJldmVudHMgc2VhbS1tZW51IGZyb20gY2xvc2luZyBvdXQgd2hlbiB0b2dnbGluZyBjaGlsZCBleHBhbmRcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9XG5cbiAgLy8gVXBkYXRlcyBleHBhbmRlZCBzdGF0ZSB3aGVuIHVzZXIgZXhpdHMgc2VhbS1tZW51XG4gIF9tZW51RXZlbnQobWVudUV4cGFuZGVkOiBhbnkpIHtcbiAgICBpZiAobWVudUV4cGFuZGVkID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2h5IGNsb3Npbmcgc2VhbS1tZW51IHdpdGggZXhwYW5kZWQgc3VibWVudSBtZXNzZXMgdXAgYW5pbWF0aW9uXG4gICAgICBpZiAodGhpcy5fbmF2SXRlbXMgJiYgdGhpcy5fbmF2SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX25hdkl0ZW1zLmZvckVhY2gobmF2SXRlbSA9PiB7XG4gICAgICAgICAgbmF2SXRlbS5leHBhbmRlZCA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dJY29uQmxvY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLmljb24pIHx8IHRoaXMuaGlkZUVtcHR5SWNvbiAhPT0gdHJ1ZVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgaC0xMDBcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1UeXBlID09PSAnYmFzaWMnXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UeXBlQmFzaWNcIj48L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1UeXBlID09PSAnbGluaydcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVR5cGVMaW5rXCI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVHlwZSA9PT0gJ2RpdmlkZXInXCI+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UeXBlRGl2aWRlclwiPjwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbVR5cGUgPT09ICd0aXRsZSdcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVR5cGVUaXRsZVwiPjwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFeHBhbmRpbmdDaGlsZHJlblwiPlxuICA8ZGl2IGNsYXNzPVwibmF2LS1ncm91cCBuYXYtLWdyb3VwLS1sZXZlbC17eyBoaWVyTGV2ZWwgKyAxIH19XCJcbiAgICAqbmdJZj1cImV4cGFuZGVkJCB8IGFzeW5jXCIgQGNoaWxkR3JvdXBBbmltPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuYXZDaGlsZHJlblwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1UeXBlQmFzaWM+XG4gIDxidXR0b24gY2xhc3M9XCJuYXYtaXRlbSBidG4gbmF2LWJ0biBwLTAgZC1mbGV4IGFsaWduLWl0ZW1zLXN0cmV0Y2ggZmxleC1yb3cgdGV4dC1kZWNvcmF0aW9uLW5vbmUgdy0xMDBcIlxuICAgIGNka01vbml0b3JFbGVtZW50Rm9jdXNcbiAgICAoY2xpY2spPVwiX3RvZ2dsZUNoaWxkcmVuKCRldmVudClcIlxuICAgIFtzZWFtTWVudVRvZ2dsZV09XCJtZW51VHBsXCJcbiAgICAobWVudVRvZ2dsZSk9XCJfbWVudUV2ZW50KCRldmVudClcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWQkIHwgYXN5bmNcIj5cbiAgICA8ZGl2IGNsYXNzPVwibmF2LWxpbmsgZC1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiIFtjbGFzcy5uYXYtbGlua19fY29tcGFjdF09XCJjb21wYWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tLWljb25cIiAqbmdJZj1cInNob3dJY29uQmxvY2tcIj5cbiAgICAgICAgPHNlYW0taWNvbiBbaWNvbl09XCJpY29uXCIgKm5nSWY9XCJpY29uXCI+PC9zZWFtLWljb24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wYWN0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1CYWRnZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFjb21wYWN0XCIgbmF2LWl0ZW0tbGFiZWw+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImNvbXBhY3RcIiBjbGFzcz1cInNyLW9ubHlcIiBuYXYtaXRlbS1sYWJlbD57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29tcGFjdFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbUJhZGdlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImhhc0NoaWxkcmVuICYmICFjb21wYWN0XCJcbiAgICAgIGNsYXNzPVwiYnRuIG5hdi1idG4gbmF2LWl0ZW0tLXRvZ2dsZS1idG4tY29udGFpbmVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxzZWFtLWljb25cbiAgICAgICAgY2xhc3M9XCJuYXYtaXRlbS0tdG9nZ2xlLWJ0blwiXG4gICAgICAgIFtjbGFzcy5uYXYtaXRlbS0tdG9nZ2xlLWJ0bi1leHBhbmRlZF09XCJleHBhbmRlZCQgfCBhc3luY1wiXG4gICAgICAgIFtpY29uXT1cImZhQW5nbGVMZWZ0XCJcbiAgICAgICAgdHlwZT5cbiAgICAgIDwvc2VhbS1pY29uPlxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVR5cGVMaW5rPlxuICA8YSAqbmdJZj1cImxpbms7IGVsc2Ugbm9MaW5rXCIgY2xhc3M9XCJuYXYtaXRlbSBuYXYtbGluayBkLWZsZXggZmxleC1yb3cgdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICBbY2xhc3MubmF2LWxpbmtfX2NvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgW3JvdXRlckxpbmtdPVwibGlua1wiXG4gICAgW3F1ZXJ5UGFyYW1zXT1cInF1ZXJ5UGFyYW1zXCJcbiAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcbiAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCI+XG4gICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLS1pY29uXCIgKm5nSWY9XCJzaG93SWNvbkJsb2NrXCI+XG4gICAgICA8c2VhbS1pY29uIFtpY29uXT1cImljb25cIiAqbmdJZj1cImljb25cIj48L3NlYW0taWNvbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wYWN0XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtQmFkZ2VcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCIhY29tcGFjdFwiIG5hdi1pdGVtLWxhYmVsPlxuICAgICAge3sgbGFiZWwgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJjb21wYWN0XCIgY2xhc3M9XCJzci1vbmx5XCIgbmF2LWl0ZW0tbGFiZWw+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb21wYWN0XCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbUJhZGdlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9hPlxuXG4gIDxuZy10ZW1wbGF0ZSAjbm9MaW5rPlxuICAgIDxhIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWxpbmsgZC1mbGV4IGZsZXgtcm93IHctMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiIFtjbGFzcy5uYXYtbGlua19fY29tcGFjdF09XCJjb21wYWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tLWljb25cIiAqbmdJZj1cInNob3dJY29uQmxvY2tcIj5cbiAgICAgICAgPHNlYW0taWNvbiBbaWNvbl09XCJpY29uXCIgKm5nSWY9XCJpY29uXCI+PC9zZWFtLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbXBhY3RcIiBuYXYtaXRlbS1sYWJlbD5cbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiY29tcGFjdFwiIGNsYXNzPVwic3Itb25seVwiIG5hdi1pdGVtLWxhYmVsPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgIDwvYT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8YnV0dG9uICpuZ0lmPVwiaGFzQ2hpbGRyZW4gJiYgIWNvbXBhY3RcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiYnRuIG5hdi1idG4gbmF2LWl0ZW0tLXRvZ2dsZS1idG4tY29udGFpbmVyXCJcbiAgICAoY2xpY2spPVwiX3RvZ2dsZUNoaWxkcmVuKCRldmVudClcIlxuICAgIFtzZWFtTWVudVRvZ2dsZV09XCJtZW51VHBsXCJcbiAgICAobWVudVRvZ2dsZSk9XCJfbWVudUV2ZW50KCRldmVudClcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWQkIHwgYXN5bmNcIlxuICAgIGNka01vbml0b3JFbGVtZW50Rm9jdXM+XG4gICAgPHNlYW0taWNvblxuICAgICAgY2xhc3M9XCJuYXYtaXRlbS0tdG9nZ2xlLWJ0blwiXG4gICAgICBbY2xhc3MubmF2LWl0ZW0tLXRvZ2dsZS1idG4tZXhwYW5kZWRdPVwiZXhwYW5kZWQkIHwgYXN5bmNcIlxuICAgICAgW2ljb25dPVwiZmFBbmdsZUxlZnRcIlxuICAgICAgdHlwZT5cbiAgICA8L3NlYW0taWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Hcm91cCBUb2dnbGU8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtVHlwZURpdmlkZXI+XG4gIDxkaXYgY2xhc3M9XCJweC0yIHctMTAwXCI+XG4gICAgPGhyIGNsYXNzPVwibmF2LWl0ZW0tLWRpdmlkZXJcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVR5cGVUaXRsZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb21wYWN0XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJuYXYtaXRlbS0tdGl0bGUgcHQtMVwiIG5hdi1pdGVtLWxhYmVsPnt7IGxhYmVsIH19PC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbUJhZGdlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmFkZ2VUZXh0XCI+XG4gICAgPGRpdiBjbGFzcz1cImJhZGdlLXNwYWNlciBmbGV4LWdyb3ctMVwiICpuZ0lmPVwiIWNvbXBhY3RcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tLWJhZGdlXCJcbiAgICAgIFtjbGFzcy5uYXYtaXRlbS0tYmFkZ2Utbm8taWNvbl09XCIhaWNvblwiXG4gICAgICBbbmdiVG9vbHRpcF09XCIkYW55KGJhZGdlVG9vbHRpcCk/LnRvb2x0aXBcIlxuICAgICAgW3Rvb2x0aXBDbGFzc109XCIkYW55KGJhZGdlVG9vbHRpcCk/LmNsYXNzXCJcbiAgICAgIFtwbGFjZW1lbnRdPVwiJGFueShiYWRnZVRvb2x0aXApPy5wbGFjZW1lbnRcIlxuICAgICAgW2NvbnRhaW5lcl09XCIkYW55KGJhZGdlVG9vbHRpcCk/LmNvbnRhaW5lclwiXG4gICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiIWJhZGdlVG9vbHRpcCB8fCAhISRhbnkoYmFkZ2VUb29sdGlwKT8uZGlzYWJsZWRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS17eyBiYWRnZVRoZW1lIH19XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29tcGFjdCB8fCAhaWNvblwiPlxuICAgICAgICAgIHt7IGJhZGdlVGV4dCB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJiYWRnZVNyQ29udGVudFwiPnt7IGJhZGdlU3JDb250ZW50IH19PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxzZWFtLW1lbnUgI21lbnUgKm5nSWY9XCJoYXNNZW51VG9nZ2xlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuYXZDaGlsZHJlblwiPjwvbmctY29udGFpbmVyPlxuPC9zZWFtLW1lbnU+XG5cbjxuZy10ZW1wbGF0ZSAjbmF2Q2hpbGRyZW4+XG4gIDxzZWFtLW5hdi1pdGVtICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBjaGlsZHJlblwiXG4gICAgW2l0ZW1dPVwiY2hpbGRcIlxuICAgIFtoaWVyTGV2ZWxdPVwiY29tcGFjdCA/IDAgOiAoaGllckxldmVsICsgMSlcIlxuICAgIFtjb21wYWN0XT1cImNvbXBhY3RcIlxuICAgIFtpdGVtVHlwZV09XCIkYW55KGNoaWxkKS5pdGVtVHlwZVwiXG4gICAgW2ljb25dPVwiJGFueShjaGlsZCkuaWNvblwiXG4gICAgW2xhYmVsXT1cIiRhbnkoY2hpbGQpLmxhYmVsXCJcbiAgICBbbGlua109XCIkYW55KGNoaWxkKS5saW5rXCJcbiAgICBbYmFkZ2VUZXh0XT1cIiRhbnkoY2hpbGQpLmJhZGdlPy50ZXh0XCJcbiAgICBbYmFkZ2VUaGVtZV09XCIkYW55KGNoaWxkKS5iYWRnZT8udGhlbWUgfHwgJ2RhbmdlcidcIlxuICAgIFtiYWRnZVNyQ29udGVudF09XCIkYW55KGNoaWxkKS5iYWRnZT8uc3JDb250ZW50XCJcbiAgICBbYmFkZ2VUb29sdGlwXT1cIiRhbnkoY2hpbGQpPy5iYWRnZT8udG9vbHRpcFwiXG4gICAgW3F1ZXJ5UGFyYW1zXT1cIiRhbnkoY2hpbGQpLnF1ZXJ5UGFyYW1zXCJcbiAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcbiAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCJcbiAgICBbY2hpbGRyZW5dPVwiJGFueShjaGlsZCk/LmNoaWxkcmVuXCJcbiAgICBbYWN0aXZlXT1cIiRhbnkoY2hpbGQpLl9fc3RhdGU/LmFjdGl2ZVwiXG4gICAgW2V4cGFuZGVkXT1cIiRhbnkoY2hpbGQpLl9fc3RhdGU/LmV4cGFuZGVkXCJcbiAgICBbZm9jdXNlZF09XCIkYW55KGNoaWxkKS5fX3N0YXRlPy5mb2N1c2VkXCJcbiAgICBjaGlsZEFjdGlvbj1cImV4cGFuZFwiXG4gICAgW2hpZGVFbXB0eUljb25dPVwiaGlkZUVtcHR5SWNvblwiPlxuICA8L3NlYW0tbmF2LWl0ZW0+XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=