@theseam/ui-common 0.2.9 → 0.2.13

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 (365) hide show
  1. package/assets/vendor/intl-tel-input/js/utils.js +255 -254
  2. package/bundles/theseam-ui-common-asset-reader.umd.js +7 -9
  3. package/bundles/theseam-ui-common-asset-reader.umd.js.map +1 -1
  4. package/bundles/theseam-ui-common-breadcrumbs.umd.js +6 -8
  5. package/bundles/theseam-ui-common-breadcrumbs.umd.js.map +1 -1
  6. package/bundles/theseam-ui-common-buttons.umd.js +5 -5
  7. package/bundles/theseam-ui-common-buttons.umd.js.map +1 -1
  8. package/bundles/theseam-ui-common-card.umd.js +6 -6
  9. package/bundles/theseam-ui-common-card.umd.js.map +1 -1
  10. package/bundles/theseam-ui-common-checkbox.umd.js +4 -4
  11. package/bundles/theseam-ui-common-checkbox.umd.js.map +1 -1
  12. package/bundles/theseam-ui-common-confirm-dialog.umd.js +4 -4
  13. package/bundles/theseam-ui-common-confirm-dialog.umd.js.map +1 -1
  14. package/bundles/theseam-ui-common-core.umd.js +4 -4
  15. package/bundles/theseam-ui-common-core.umd.js.map +1 -1
  16. package/bundles/theseam-ui-common-data-exporter.umd.js +5 -5
  17. package/bundles/theseam-ui-common-data-filters.umd.js +9 -6
  18. package/bundles/theseam-ui-common-data-filters.umd.js.map +1 -1
  19. package/bundles/theseam-ui-common-datatable-dynamic.umd.js +7 -7
  20. package/bundles/theseam-ui-common-datatable-dynamic.umd.js.map +1 -1
  21. package/bundles/theseam-ui-common-datatable.umd.js +1353 -375
  22. package/bundles/theseam-ui-common-datatable.umd.js.map +1 -1
  23. package/bundles/theseam-ui-common-dynamic-component-loader.umd.js +5 -7
  24. package/bundles/theseam-ui-common-dynamic-component-loader.umd.js.map +1 -1
  25. package/bundles/theseam-ui-common-dynamic.umd.js +7 -9
  26. package/bundles/theseam-ui-common-dynamic.umd.js.map +1 -1
  27. package/bundles/theseam-ui-common-footer-bar.umd.js +3 -3
  28. package/bundles/theseam-ui-common-form-field-error.umd.js +5 -5
  29. package/bundles/theseam-ui-common-form-field-error.umd.js.map +1 -1
  30. package/bundles/theseam-ui-common-form-field.umd.js +5 -5
  31. package/bundles/theseam-ui-common-form-field.umd.js.map +1 -1
  32. package/bundles/theseam-ui-common-framework.umd.js +28 -30
  33. package/bundles/theseam-ui-common-framework.umd.js.map +1 -1
  34. package/bundles/theseam-ui-common-graphql.umd.js +958 -8
  35. package/bundles/theseam-ui-common-graphql.umd.js.map +1 -1
  36. package/bundles/theseam-ui-common-icon.umd.js +5 -5
  37. package/bundles/theseam-ui-common-icon.umd.js.map +1 -1
  38. package/bundles/theseam-ui-common-layout.umd.js +5 -7
  39. package/bundles/theseam-ui-common-layout.umd.js.map +1 -1
  40. package/bundles/theseam-ui-common-loading.umd.js +4 -4
  41. package/bundles/theseam-ui-common-menu.umd.js +5 -5
  42. package/bundles/theseam-ui-common-menu.umd.js.map +1 -1
  43. package/bundles/theseam-ui-common-modal.umd.js +6 -6
  44. package/bundles/theseam-ui-common-modal.umd.js.map +1 -1
  45. package/bundles/theseam-ui-common-models.umd.js +3 -3
  46. package/bundles/theseam-ui-common-popover.umd.js +4 -4
  47. package/bundles/theseam-ui-common-progress.umd.js +5 -5
  48. package/bundles/theseam-ui-common-progress.umd.js.map +1 -1
  49. package/bundles/theseam-ui-common-scrollbar.umd.js +7 -9
  50. package/bundles/theseam-ui-common-scrollbar.umd.js.map +1 -1
  51. package/bundles/theseam-ui-common-services.umd.js +6 -8
  52. package/bundles/theseam-ui-common-services.umd.js.map +1 -1
  53. package/bundles/theseam-ui-common-shared.umd.js +4 -4
  54. package/bundles/theseam-ui-common-shared.umd.js.map +1 -1
  55. package/bundles/theseam-ui-common-storage.umd.js +5 -7
  56. package/bundles/theseam-ui-common-storage.umd.js.map +1 -1
  57. package/bundles/theseam-ui-common-story-helpers.umd.js +4 -4
  58. package/bundles/theseam-ui-common-story-helpers.umd.js.map +1 -1
  59. package/bundles/theseam-ui-common-tabbed.umd.js +5 -5
  60. package/bundles/theseam-ui-common-tabbed.umd.js.map +1 -1
  61. package/bundles/theseam-ui-common-table-cell-type.umd.js +5 -7
  62. package/bundles/theseam-ui-common-table-cell-type.umd.js.map +1 -1
  63. package/bundles/theseam-ui-common-table-cell-types.umd.js +258 -32
  64. package/bundles/theseam-ui-common-table-cell-types.umd.js.map +1 -1
  65. package/bundles/theseam-ui-common-table.umd.js +5 -5
  66. package/bundles/theseam-ui-common-table.umd.js.map +1 -1
  67. package/bundles/theseam-ui-common-tel-input.umd.js +6 -6
  68. package/bundles/theseam-ui-common-tel-input.umd.js.map +1 -1
  69. package/bundles/theseam-ui-common-testing.umd.js +568 -0
  70. package/bundles/theseam-ui-common-testing.umd.js.map +1 -0
  71. package/bundles/theseam-ui-common-tiled-select.umd.js +56 -39
  72. package/bundles/theseam-ui-common-tiled-select.umd.js.map +1 -1
  73. package/bundles/theseam-ui-common-toggle-edit.umd.js +8 -10
  74. package/bundles/theseam-ui-common-toggle-edit.umd.js.map +1 -1
  75. package/bundles/theseam-ui-common-toggle-group.umd.js +4 -4
  76. package/bundles/theseam-ui-common-toggle-group.umd.js.map +1 -1
  77. package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js +5 -7
  78. package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js.map +1 -1
  79. package/bundles/theseam-ui-common-utils.umd.js +174 -81
  80. package/bundles/theseam-ui-common-utils.umd.js.map +1 -1
  81. package/bundles/theseam-ui-common-validators.umd.js +3 -3
  82. package/bundles/theseam-ui-common-viewers.umd.js +6 -8
  83. package/bundles/theseam-ui-common-viewers.umd.js.map +1 -1
  84. package/bundles/theseam-ui-common-widget.umd.js +18 -20
  85. package/bundles/theseam-ui-common-widget.umd.js.map +1 -1
  86. package/bundles/theseam-ui-common.umd.js +2 -2
  87. package/buttons/theseam-ui-common-buttons.metadata.json +1 -1
  88. package/card/theseam-ui-common-card.metadata.json +1 -1
  89. package/data-filters/data-filter.d.ts +10 -6
  90. package/data-filters/theseam-ui-common-data-filters.metadata.json +1 -1
  91. package/datatable/datatable/datatable.component.d.ts +48 -32
  92. package/datatable/datatable-column/datatable-column.component.d.ts +26 -25
  93. package/datatable/datatable-column-preferences/datatable-column-preferences.component.d.ts +7 -5
  94. package/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.d.ts +7 -1
  95. package/datatable/datatable-footer/datatable-footer-tpl.directive.d.ts +5 -0
  96. package/datatable/datatable-footer/datatable-footer.directive.d.ts +6 -0
  97. package/datatable/datatable-menu-bar/datatable-menu-bar.component.d.ts +1 -1
  98. package/datatable/directives/datatable-filter.directive.d.ts +1 -1
  99. package/datatable/models/columns-alteration.d.ts +61 -0
  100. package/datatable/models/columns-alterations/hide-column.columns-alteration.d.ts +15 -0
  101. package/datatable/models/columns-alterations/order.columns-alteration.d.ts +20 -0
  102. package/datatable/models/columns-alterations/sort.columns-alteration.d.ts +14 -0
  103. package/datatable/models/columns-alterations/width.columns-alteration.d.ts +16 -0
  104. package/datatable/models/datatable-accessor.d.ts +5 -3
  105. package/datatable/models/internal-column-props.d.ts +7 -0
  106. package/datatable/models/page-info.d.ts +12 -0
  107. package/datatable/models/preferences-accessor.d.ts +1 -1
  108. package/datatable/models/preferences.d.ts +11 -3
  109. package/datatable/models/sort-item.d.ts +2 -1
  110. package/datatable/public-api.d.ts +2 -0
  111. package/datatable/services/columns-alterations-manager.service.d.ts +39 -0
  112. package/datatable/services/columns-manager.service.d.ts +55 -0
  113. package/datatable/services/datatable-preferences.service.d.ts +10 -7
  114. package/datatable/theseam-ui-common-datatable.d.ts +2 -0
  115. package/datatable/theseam-ui-common-datatable.metadata.json +1 -1
  116. package/datatable/tokens/datatable-preferences-accessor.d.ts +2 -2
  117. package/datatable/utils/create-action-menu-column.d.ts +3 -0
  118. package/datatable/utils/create-checkbox-column.d.ts +3 -0
  119. package/datatable/utils/get-column-prop.d.ts +5 -0
  120. package/datatable/utils/map-columns-alterations-states.d.ts +2 -0
  121. package/datatable/utils/remove-unused-diffs.d.ts +7 -0
  122. package/datatable/utils/set-column-defaults.d.ts +2 -0
  123. package/datatable/utils/translate-templates.d.ts +2 -0
  124. package/datatable/utils/with-stored-column-info.d.ts +2 -2
  125. package/datatable-dynamic/theseam-ui-common-datatable-dynamic.metadata.json +1 -1
  126. package/esm2015/buttons/progress-circle-button/progress-circle-button.component.js +1 -1
  127. package/esm2015/card/card-action/card-action.component.js +1 -1
  128. package/esm2015/card/card-body/card-body.component.js +1 -1
  129. package/esm2015/data-filters/data-filter.js +5 -2
  130. package/esm2015/data-filters/filters/data-filter-search/data-filter-search.component.js +1 -1
  131. package/esm2015/data-filters/filters/data-filter-text/data-filter-text.component.js +1 -1
  132. package/esm2015/datatable/datatable/datatable.component.js +197 -211
  133. package/esm2015/datatable/datatable-action-menu/datatable-action-menu.component.js +1 -1
  134. package/esm2015/datatable/datatable-column/datatable-column.component.js +1 -1
  135. package/esm2015/datatable/datatable-column-preferences/datatable-column-preferences.component.js +42 -19
  136. package/esm2015/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.js +38 -4
  137. package/esm2015/datatable/datatable-export-button/datatable-export-button.component.js +1 -1
  138. package/esm2015/datatable/datatable-footer/datatable-footer-tpl.directive.js +15 -0
  139. package/esm2015/datatable/datatable-footer/datatable-footer.directive.js +18 -0
  140. package/esm2015/datatable/datatable-menu-bar/datatable-menu-bar.component.js +1 -1
  141. package/esm2015/datatable/datatable-menu-bar-column-center/datatable-menu-bar-column-center.component.js +1 -1
  142. package/esm2015/datatable/datatable-menu-bar-column-left/datatable-menu-bar-column-left.component.js +1 -1
  143. package/esm2015/datatable/datatable-menu-bar-column-right/datatable-menu-bar-column-right.component.js +1 -1
  144. package/esm2015/datatable/datatable-menu-bar-row/datatable-menu-bar-row.component.js +1 -1
  145. package/esm2015/datatable/datatable.module.js +7 -1
  146. package/esm2015/datatable/models/columns-alteration.js +38 -0
  147. package/esm2015/datatable/models/columns-alterations/hide-column.columns-alteration.js +38 -0
  148. package/esm2015/datatable/models/columns-alterations/order.columns-alteration.js +81 -0
  149. package/esm2015/datatable/models/columns-alterations/sort.columns-alteration.js +33 -0
  150. package/esm2015/datatable/models/columns-alterations/width.columns-alteration.js +41 -0
  151. package/esm2015/datatable/models/datatable-accessor.js +1 -1
  152. package/esm2015/datatable/models/internal-column-props.js +15 -0
  153. package/esm2015/datatable/models/page-info.js +1 -1
  154. package/esm2015/datatable/models/preferences-accessor.js +1 -1
  155. package/esm2015/datatable/models/preferences.js +6 -2
  156. package/esm2015/datatable/models/sort-item.js +1 -1
  157. package/esm2015/datatable/public-api.js +3 -1
  158. package/esm2015/datatable/services/columns-alterations-manager.service.js +134 -0
  159. package/esm2015/datatable/services/columns-manager.service.js +257 -0
  160. package/esm2015/datatable/services/datatable-preferences.service.js +78 -32
  161. package/esm2015/datatable/theseam-ui-common-datatable.js +3 -1
  162. package/esm2015/datatable/tokens/datatable-preferences-accessor.js +2 -2
  163. package/esm2015/datatable/utils/create-action-menu-column.js +18 -0
  164. package/esm2015/datatable/utils/create-checkbox-column.js +15 -0
  165. package/esm2015/datatable/utils/get-column-prop.js +9 -0
  166. package/esm2015/datatable/utils/map-columns-alterations-states.js +39 -0
  167. package/esm2015/datatable/utils/remove-unused-diffs.js +9 -0
  168. package/esm2015/datatable/utils/set-column-defaults.js +10 -0
  169. package/esm2015/datatable/utils/translate-templates.js +12 -0
  170. package/esm2015/datatable/utils/with-stored-column-info.js +1 -1
  171. package/esm2015/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.js +1 -1
  172. package/esm2015/datatable-dynamic/datatable-dynamic-filter-container/datatable-dynamic-filter-container.component.js +1 -1
  173. package/esm2015/datatable-dynamic/datatable-dynamic.component.js +1 -1
  174. package/esm2015/form-field/form-field.component.js +1 -1
  175. package/esm2015/form-field-error/form-field-error/form-field-error.component.js +1 -1
  176. package/esm2015/framework/base-layout/base-layout.component.js +1 -1
  177. package/esm2015/framework/dashboard/dashboard-widgets/dashboard-widgets.component.js +1 -1
  178. package/esm2015/framework/dynamic-router/hierarchy-router-outlet/hierarchy-router-outlet.component.js +1 -1
  179. package/esm2015/framework/schema-form-controls/schema-form-input/schema-form-input.component.js +1 -1
  180. package/esm2015/framework/schema-form-controls/schema-form-number/schema-form-number.component.js +1 -1
  181. package/esm2015/framework/schema-form-controls/schema-form-select/schema-form-select.component.js +1 -1
  182. package/esm2015/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.js +1 -1
  183. package/esm2015/framework/side-nav/side-nav-item/side-nav-item.component.js +3 -3
  184. package/esm2015/framework/side-nav/side-nav-toggle/side-nav-toggle.component.js +1 -1
  185. package/esm2015/framework/side-nav/side-nav.component.js +1 -1
  186. package/esm2015/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.js +1 -1
  187. package/esm2015/framework/top-bar/top-bar-title/top-bar-title.component.js +1 -1
  188. package/esm2015/framework/top-bar/top-bar.component.js +1 -1
  189. package/esm2015/graphql/datatable/create-page-info-observable.js +38 -0
  190. package/esm2015/graphql/datatable/datatable-graphql-query-ref.js +236 -0
  191. package/esm2015/graphql/datatable/datatable-graphql.service.js +35 -0
  192. package/esm2015/graphql/datatable/datatable-helpers.js +170 -0
  193. package/esm2015/graphql/datatable/get-page-info.js +11 -0
  194. package/esm2015/graphql/datatable/index.js +7 -0
  195. package/esm2015/graphql/datatable/map-filter-states.js +64 -0
  196. package/esm2015/graphql/datatable/map-page-info.js +14 -0
  197. package/esm2015/graphql/datatable/mapper-context.js +2 -0
  198. package/esm2015/graphql/models/gql-datatable-accessor.js +2 -0
  199. package/esm2015/graphql/models/index.js +2 -1
  200. package/esm2015/graphql/models/query-processing-config.js +1 -1
  201. package/esm2015/graphql/public-api.js +2 -1
  202. package/esm2015/graphql/utils/parse-hints.js +3 -3
  203. package/esm2015/icon/icon/icon.component.js +1 -1
  204. package/esm2015/loading/loading/loading.component.js +1 -1
  205. package/esm2015/menu/menu.component.js +1 -1
  206. package/esm2015/modal/modal-body/modal-body.component.js +1 -1
  207. package/esm2015/modal/modal-container/modal-container.component.js +1 -1
  208. package/esm2015/popover/popover/popover.component.js +1 -1
  209. package/esm2015/progress/progress-circle/progress-circle.component.js +1 -1
  210. package/esm2015/tabbed/tabbed.component.js +1 -1
  211. package/esm2015/table/table/table.component.js +1 -1
  212. package/esm2015/table-cell-types/public-api.js +8 -1
  213. package/esm2015/table-cell-types/table-cell-type-currency/table-cell-type-currency-config.js +2 -0
  214. package/esm2015/table-cell-types/table-cell-type-currency/table-cell-type-currency.component.js +74 -0
  215. package/esm2015/table-cell-types/table-cell-type-currency/table-cell-type-currency.js +2 -0
  216. package/esm2015/table-cell-types/table-cell-type-decimal/table-cell-type-decimal-config.js +1 -1
  217. package/esm2015/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.component.js +73 -0
  218. package/esm2015/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.js +2 -0
  219. package/esm2015/table-cell-types/table-cell-type-icon/table-cell-type-icon.component.js +1 -1
  220. package/esm2015/table-cell-types/table-cell-type-integer/table-cell-type-integer-config.js +1 -1
  221. package/esm2015/table-cell-types/table-cell-type-integer/table-cell-type-integer.component.js +71 -0
  222. package/esm2015/table-cell-types/table-cell-type-integer/table-cell-type-integer.js +2 -0
  223. package/esm2015/table-cell-types/table-cell-type-manifests.js +29 -17
  224. package/esm2015/table-cell-types/table-cell-type-progress-circle/table-cell-type-progress-circle.component.js +1 -1
  225. package/esm2015/table-cell-types/table-cell-types.module.js +9 -2
  226. package/esm2015/tel-input/tel-input/tel-input.component.js +1 -1
  227. package/esm2015/testing/current-tick-time.js +16 -0
  228. package/esm2015/testing/fake-toastr.js +29 -0
  229. package/esm2015/testing/get-harness.js +16 -0
  230. package/esm2015/testing/public-api.js +7 -0
  231. package/esm2015/testing/render-story.js +12 -0
  232. package/esm2015/testing/story-expect.js +39 -0
  233. package/esm2015/testing/theseam-ui-common-testing.js +5 -0
  234. package/esm2015/testing/tick-helper.js +74 -0
  235. package/esm2015/tiled-select/components/tiled-select/tiled-select.component.js +25 -17
  236. package/esm2015/tiled-select/components/tiled-select-tile/tiled-select-tile.component.js +5 -2
  237. package/esm2015/tiled-select/components/tiled-select-tile-icon/tiled-select-tile-icon.component.js +1 -1
  238. package/esm2015/tiled-select/public-api.js +2 -1
  239. package/esm2015/tiled-select/tiled-select.models.js +1 -1
  240. package/esm2015/tiled-select/tiled-select.module.js +4 -4
  241. package/esm2015/toggle-edit/toggle-edit-actions-container/toggle-edit-actions-container.component.js +1 -1
  242. package/esm2015/toggle-edit/toggle-edit.component.js +1 -1
  243. package/esm2015/utils/array-move.js +62 -0
  244. package/esm2015/utils/public-api.js +2 -1
  245. package/esm2015/utils/subscriber-count.js +31 -4
  246. package/esm2015/widget/widget/widget.component.js +1 -1
  247. package/esm2015/widget/widget-content-components/widget-button-group/widget-button-group.component.js +1 -1
  248. package/esm2015/widget/widget-content-components/widget-content-header/widget-content-header.component.js +1 -1
  249. package/esm2015/widget/widget-content-components/widget-empty-label/widget-empty-label.component.js +1 -1
  250. package/esm2015/widget/widget-content-components/widget-footer-link/widget-footer-link.component.js +1 -1
  251. package/esm2015/widget/widget-content-components/widget-footer-text/widget-footer-text.component.js +1 -1
  252. package/esm2015/widget/widget-content-components/widget-header-badge/widget-header-badge.component.js +1 -1
  253. package/esm2015/widget/widget-content-components/widget-tile/widget-tile-footer-item/widget-tile-footer-item.component.js +1 -1
  254. package/esm2015/widget/widget-content-components/widget-tile/widget-tile-group/widget-tile-group.component.js +1 -1
  255. package/esm2015/widget/widget-content-components/widget-tile/widget-tile.component.js +1 -1
  256. package/esm2015/widget/widget-content-components/widget-tile-list/widget-tile-list.component.js +1 -1
  257. package/esm2015/widget/widget-footer/widget-footer.component.js +1 -1
  258. package/fesm2015/theseam-ui-common-buttons.js +1 -1
  259. package/fesm2015/theseam-ui-common-card.js +2 -2
  260. package/fesm2015/theseam-ui-common-data-filters.js +6 -3
  261. package/fesm2015/theseam-ui-common-data-filters.js.map +1 -1
  262. package/fesm2015/theseam-ui-common-datatable-dynamic.js +3 -3
  263. package/fesm2015/theseam-ui-common-datatable.js +1136 -316
  264. package/fesm2015/theseam-ui-common-datatable.js.map +1 -1
  265. package/fesm2015/theseam-ui-common-form-field-error.js +1 -1
  266. package/fesm2015/theseam-ui-common-form-field.js +1 -1
  267. package/fesm2015/theseam-ui-common-framework.js +14 -14
  268. package/fesm2015/theseam-ui-common-framework.js.map +1 -1
  269. package/fesm2015/theseam-ui-common-graphql.js +555 -5
  270. package/fesm2015/theseam-ui-common-graphql.js.map +1 -1
  271. package/fesm2015/theseam-ui-common-icon.js +1 -1
  272. package/fesm2015/theseam-ui-common-loading.js +1 -1
  273. package/fesm2015/theseam-ui-common-menu.js +1 -1
  274. package/fesm2015/theseam-ui-common-modal.js +2 -2
  275. package/fesm2015/theseam-ui-common-popover.js +1 -1
  276. package/fesm2015/theseam-ui-common-progress.js +1 -1
  277. package/fesm2015/theseam-ui-common-tabbed.js +1 -1
  278. package/fesm2015/theseam-ui-common-table-cell-types.js +234 -22
  279. package/fesm2015/theseam-ui-common-table-cell-types.js.map +1 -1
  280. package/fesm2015/theseam-ui-common-table.js +1 -1
  281. package/fesm2015/theseam-ui-common-tel-input.js +1 -1
  282. package/fesm2015/theseam-ui-common-testing.js +191 -0
  283. package/fesm2015/theseam-ui-common-testing.js.map +1 -0
  284. package/fesm2015/theseam-ui-common-tiled-select.js +34 -21
  285. package/fesm2015/theseam-ui-common-tiled-select.js.map +1 -1
  286. package/fesm2015/theseam-ui-common-toggle-edit.js +2 -2
  287. package/fesm2015/theseam-ui-common-utils.js +92 -4
  288. package/fesm2015/theseam-ui-common-utils.js.map +1 -1
  289. package/fesm2015/theseam-ui-common-widget.js +12 -12
  290. package/form-field/theseam-ui-common-form-field.metadata.json +1 -1
  291. package/form-field-error/theseam-ui-common-form-field-error.metadata.json +1 -1
  292. package/framework/side-nav/side-nav-item/side-nav-item.component.scss +36 -9
  293. package/framework/theseam-ui-common-framework.metadata.json +1 -1
  294. package/graphql/datatable/create-page-info-observable.d.ts +4 -0
  295. package/graphql/datatable/datatable-graphql-query-ref.d.ts +65 -0
  296. package/graphql/datatable/datatable-graphql.service.d.ts +26 -0
  297. package/graphql/datatable/datatable-helpers.d.ts +12 -0
  298. package/graphql/datatable/get-page-info.d.ts +4 -0
  299. package/graphql/datatable/index.d.ts +6 -0
  300. package/graphql/datatable/map-filter-states.d.ts +18 -0
  301. package/graphql/datatable/map-page-info.d.ts +11 -0
  302. package/graphql/datatable/mapper-context.d.ts +6 -0
  303. package/graphql/models/gql-datatable-accessor.d.ts +9 -0
  304. package/graphql/models/index.d.ts +1 -0
  305. package/graphql/models/query-processing-config.d.ts +4 -0
  306. package/graphql/public-api.d.ts +1 -0
  307. package/graphql/theseam-ui-common-graphql.metadata.json +1 -1
  308. package/icon/theseam-ui-common-icon.metadata.json +1 -1
  309. package/loading/theseam-ui-common-loading.metadata.json +1 -1
  310. package/menu/theseam-ui-common-menu.metadata.json +1 -1
  311. package/modal/theseam-ui-common-modal.metadata.json +1 -1
  312. package/package.json +1 -1
  313. package/popover/theseam-ui-common-popover.metadata.json +1 -1
  314. package/progress/theseam-ui-common-progress.metadata.json +1 -1
  315. package/styles/common/_table.scss +0 -5
  316. package/styles/vendor/ngx-datatable/_ngx-datatable.scss +478 -87
  317. package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +174 -0
  318. package/styles/vendor/ngx-datatable/_themes/dark/_variables.scss +166 -0
  319. package/styles/vendor/ngx-datatable/_themes/material/_variables.scss +165 -0
  320. package/styles/vendor/ngx-datatable/_variables.scss +3 -0
  321. package/tabbed/theseam-ui-common-tabbed.metadata.json +1 -1
  322. package/table/theseam-ui-common-table.metadata.json +1 -1
  323. package/table-cell-types/public-api.d.ts +7 -0
  324. package/table-cell-types/table-cell-type-currency/table-cell-type-currency-config.d.ts +39 -0
  325. package/table-cell-types/table-cell-type-currency/table-cell-type-currency.component.d.ts +19 -0
  326. package/table-cell-types/table-cell-type-currency/table-cell-type-currency.d.ts +3 -0
  327. package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal-config.d.ts +31 -1
  328. package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.component.d.ts +19 -0
  329. package/table-cell-types/table-cell-type-decimal/table-cell-type-decimal.d.ts +3 -0
  330. package/table-cell-types/table-cell-type-integer/table-cell-type-integer-config.d.ts +23 -1
  331. package/table-cell-types/table-cell-type-integer/table-cell-type-integer.component.d.ts +19 -0
  332. package/table-cell-types/table-cell-type-integer/table-cell-type-integer.d.ts +3 -0
  333. package/table-cell-types/table-cell-type-manifests.d.ts +2 -1
  334. package/table-cell-types/theseam-ui-common-table-cell-types.metadata.json +1 -1
  335. package/tel-input/theseam-ui-common-tel-input.metadata.json +1 -1
  336. package/testing/current-tick-time.d.ts +13 -0
  337. package/testing/fake-toastr.d.ts +30 -0
  338. package/testing/get-harness.d.ts +7 -0
  339. package/testing/package.json +11 -0
  340. package/testing/public-api.d.ts +6 -0
  341. package/testing/render-story.d.ts +2 -0
  342. package/testing/story-expect.d.ts +5 -0
  343. package/{test-helpers/theseam-ui-common-test-helpers.d.ts → testing/theseam-ui-common-testing.d.ts} +0 -0
  344. package/testing/theseam-ui-common-testing.metadata.json +1 -0
  345. package/{test-helpers → testing}/tick-helper.d.ts +0 -0
  346. package/tiled-select/components/tiled-select/tiled-select.component.d.ts +7 -3
  347. package/tiled-select/components/tiled-select-tile/tiled-select-tile.component.d.ts +1 -0
  348. package/tiled-select/theseam-ui-common-tiled-select.metadata.json +1 -1
  349. package/tiled-select/tiled-select.models.d.ts +3 -1
  350. package/toggle-edit/theseam-ui-common-toggle-edit.metadata.json +1 -1
  351. package/utils/array-move.d.ts +49 -0
  352. package/utils/public-api.d.ts +1 -0
  353. package/utils/subscriber-count.d.ts +13 -1
  354. package/utils/theseam-ui-common-utils.metadata.json +1 -1
  355. package/widget/theseam-ui-common-widget.metadata.json +1 -1
  356. package/bundles/theseam-ui-common-test-helpers.umd.js +0 -94
  357. package/bundles/theseam-ui-common-test-helpers.umd.js.map +0 -1
  358. package/esm2015/test-helpers/public-api.js +0 -2
  359. package/esm2015/test-helpers/theseam-ui-common-test-helpers.js +0 -5
  360. package/esm2015/test-helpers/tick-helper.js +0 -74
  361. package/fesm2015/theseam-ui-common-test-helpers.js +0 -81
  362. package/fesm2015/theseam-ui-common-test-helpers.js.map +0 -1
  363. package/test-helpers/package.json +0 -11
  364. package/test-helpers/public-api.d.ts +0 -1
  365. package/test-helpers/theseam-ui-common-test-helpers.metadata.json +0 -1
@@ -0,0 +1,257 @@
1
+ import { Injectable, KeyValueDiffers } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, defer, EMPTY, of, Subject } from 'rxjs';
3
+ import { auditTime, map, shareReplay, startWith, switchMap } from 'rxjs/operators';
4
+ import { SelectionType, } from '@marklb/ngx-datatable';
5
+ import { hasProperty, notNullOrUndefined } from '@theseam/ui-common/utils';
6
+ import { createActionMenuColumn } from '../utils/create-action-menu-column';
7
+ import { createCheckboxColumn } from '../utils/create-checkbox-column';
8
+ import { getColumnProp } from '../utils/get-column-prop';
9
+ import { setColumnDefaults } from '../utils/set-column-defaults';
10
+ import { translateTemplateColumns } from '../utils/translate-templates';
11
+ import { DatatableColumnChangesService } from './datatable-column-changes.service';
12
+ var ColumnsTypes;
13
+ (function (ColumnsTypes) {
14
+ ColumnsTypes[ColumnsTypes["Input"] = 0] = "Input";
15
+ ColumnsTypes[ColumnsTypes["Template"] = 1] = "Template";
16
+ ColumnsTypes[ColumnsTypes["Result"] = 2] = "Result";
17
+ })(ColumnsTypes || (ColumnsTypes = {}));
18
+ export class ColumnsManagerService {
19
+ constructor(_differs, _columnChangesService) {
20
+ this._differs = _differs;
21
+ this._columnChangesService = _columnChangesService;
22
+ this._updateColumns = new Subject();
23
+ this._inputColumns = new BehaviorSubject([]);
24
+ this._templateColumns = new BehaviorSubject([]);
25
+ this._inpColDiffersMap = new Map();
26
+ this._tplColDiffersMap = new Map();
27
+ this._resultColDiffersMap = new Map();
28
+ const templateColumns$ = this._columnChangesService.columnInputChanges$.pipe(startWith(undefined), switchMap(() => {
29
+ return this._templateColumns.asObservable().pipe(map(translateTemplateColumns));
30
+ }));
31
+ this.columns$ = defer(() => {
32
+ let isFirst = true;
33
+ return combineLatest([
34
+ this._inputColumns.asObservable(),
35
+ templateColumns$,
36
+ this._updateColumns.asObservable().pipe(auditTime(0), startWith(undefined))
37
+ ]).pipe(switchMap(([inputColumns, templateColumns]) => {
38
+ const cols = this._mergeColumns(inputColumns, templateColumns);
39
+ const hasColumnsChanged = this._hasColumnsChanged(cols);
40
+ // TODO: Look for columns added/removed and remove the removed columns
41
+ // differs, not just changes to columns.
42
+ const hasAddedOrRemovedColumns = this._hasAddedOrRemovedColumns(cols);
43
+ // NOTE: Both checks need to be run, even though only one needs to be
44
+ // true, because their differs need to be called.
45
+ if (hasColumnsChanged || hasAddedOrRemovedColumns || isFirst) {
46
+ isFirst = false;
47
+ return of(cols);
48
+ }
49
+ return EMPTY;
50
+ }));
51
+ }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
52
+ }
53
+ setInputColumns(columns) {
54
+ this._inputColumns.next(columns);
55
+ }
56
+ setTemplateColumns(columns) {
57
+ this._templateColumns.next(columns);
58
+ }
59
+ setInternalColumnsGetter(getter) {
60
+ this._internalColumnsGetter = getter || undefined;
61
+ this._updateColumns.next(undefined);
62
+ }
63
+ setSelectionType(selectionType) {
64
+ const changed = this._selectionType !== selectionType;
65
+ this._selectionType = selectionType;
66
+ if (changed) {
67
+ this._updateColumns.next(undefined);
68
+ }
69
+ }
70
+ getSelectionType() {
71
+ return this._selectionType;
72
+ }
73
+ setRowActionItem(rowActionItem) {
74
+ const changed = this._rowActionItem !== rowActionItem;
75
+ this._rowActionItem = rowActionItem;
76
+ if (changed) {
77
+ this._updateColumns.next(undefined);
78
+ }
79
+ }
80
+ setActionMenuCellTpl(actionMenuCellTpl) {
81
+ const changed = this._actionMenuCellTpl !== actionMenuCellTpl;
82
+ this._actionMenuCellTpl = actionMenuCellTpl;
83
+ if (changed) {
84
+ this._updateColumns.next(undefined);
85
+ }
86
+ }
87
+ setBlankHeaderTpl(blankHeaderTpl) {
88
+ const changed = this._blankHeaderTpl !== blankHeaderTpl;
89
+ this._blankHeaderTpl = blankHeaderTpl;
90
+ if (changed) {
91
+ this._updateColumns.next(undefined);
92
+ }
93
+ }
94
+ setTreeToggleTpl(treeToggleTpl) {
95
+ const changed = this._treeToggleTpl !== treeToggleTpl;
96
+ this._treeToggleTpl = treeToggleTpl;
97
+ if (changed) {
98
+ this._updateColumns.next(undefined);
99
+ }
100
+ }
101
+ setHeaderTpl(headerTpl) {
102
+ const changed = this._headerTpl !== headerTpl;
103
+ this._headerTpl = headerTpl;
104
+ if (changed) {
105
+ this._updateColumns.next(undefined);
106
+ }
107
+ }
108
+ setCellTypeSelectorTpl(cellTypeSelectorTpl) {
109
+ const changed = this._cellTypeSelectorTpl !== cellTypeSelectorTpl;
110
+ this._cellTypeSelectorTpl = cellTypeSelectorTpl;
111
+ if (changed) {
112
+ this._updateColumns.next(undefined);
113
+ }
114
+ }
115
+ _mergeColumns(inputColumns, templateColumns) {
116
+ const cols = [];
117
+ // Add the first column checkbox if 'checkbox' selection is enabled.
118
+ if (this._shouldAddCheckboxColumn()) {
119
+ cols.push(createCheckboxColumn());
120
+ }
121
+ // Column needs to be provided in the inputColumns, so iterate the
122
+ // inputColumns.
123
+ for (const inpCol of inputColumns) {
124
+ const prop = getColumnProp(inpCol);
125
+ if (!notNullOrUndefined(prop)) {
126
+ throw Error(`Column may have 'prop' or 'name' defined.`);
127
+ }
128
+ const internalCol = this._getInternalColumn(prop);
129
+ const inpColDif = this._getColDif(inpCol, ColumnsTypes.Input);
130
+ if (notNullOrUndefined(inpColDif)) {
131
+ this._updateColDif(inpColDif, internalCol, inpCol);
132
+ }
133
+ const tplCol = this._findColumnByProp(prop, templateColumns);
134
+ if (tplCol !== undefined) {
135
+ const tplColDif = this._getColDif(tplCol, ColumnsTypes.Template);
136
+ if (notNullOrUndefined(tplColDif)) {
137
+ this._updateColDif(tplColDif, internalCol, tplCol);
138
+ }
139
+ }
140
+ const _col = Object.assign(Object.assign(Object.assign({}, (internalCol || {})), inpCol), (tplCol || {}));
141
+ if (this._shouldAddTreeToggleColumn(_col)) {
142
+ _col.treeToggleTemplate = this._treeToggleTpl;
143
+ }
144
+ if (this._shouldAddHeaderTemplate(_col)) {
145
+ _col.headerTemplate = this._headerTpl;
146
+ }
147
+ if (this._shouldAddCellTypeSelectorTpl(_col)) {
148
+ _col.cellTemplate = this._cellTypeSelectorTpl;
149
+ }
150
+ cols.push(_col);
151
+ }
152
+ if (this._shouldAddRowActionColumn()) {
153
+ cols.push(createActionMenuColumn(this._actionMenuCellTpl, this._blankHeaderTpl));
154
+ }
155
+ // Make sure the default for any missing props are set.
156
+ // TODO: Determine if this should be done earlier, because I don't like
157
+ // how this is done after dif checks.
158
+ setColumnDefaults(cols);
159
+ return cols;
160
+ }
161
+ _getInternalColumns() {
162
+ if (this._internalColumnsGetter === undefined) {
163
+ return undefined;
164
+ }
165
+ return this._internalColumnsGetter();
166
+ }
167
+ _getInternalColumn(prop) {
168
+ const internalCols = this._getInternalColumns();
169
+ if (internalCols === undefined) {
170
+ return undefined;
171
+ }
172
+ return internalCols.find(c => getColumnProp(c) === prop);
173
+ }
174
+ _findColumnByProp(prop, columns) {
175
+ return columns.find(c => getColumnProp(c) === prop);
176
+ }
177
+ _getDifMapForColumnsType(columnsType) {
178
+ switch (columnsType) {
179
+ case ColumnsTypes.Input: return this._inpColDiffersMap;
180
+ case ColumnsTypes.Template: return this._tplColDiffersMap;
181
+ case ColumnsTypes.Result: return this._resultColDiffersMap;
182
+ }
183
+ }
184
+ _getColumnDiffer(prop, colsType) {
185
+ const difMap = this._getDifMapForColumnsType(colsType);
186
+ if (difMap === null) {
187
+ throw Error(`Invalid columns type.`);
188
+ }
189
+ if (!difMap.has(prop)) {
190
+ difMap.set(prop, this._differs.find({}).create());
191
+ }
192
+ const differ = difMap.get(prop);
193
+ if (differ === undefined) {
194
+ throw Error(`Differ not found. New differ should have been created.`);
195
+ }
196
+ return differ;
197
+ }
198
+ _getColDif(col, colsType) {
199
+ const prop = getColumnProp(col);
200
+ if (prop === undefined) {
201
+ throw Error(`Column prop not found.`);
202
+ }
203
+ return this._getColumnDiffer(prop, colsType).diff(col);
204
+ }
205
+ _updateColDif(colDif, internalColumn, col) {
206
+ colDif.forEachRemovedItem(r => {
207
+ if (internalColumn && internalColumn.hasOwnProperty(r.key)) {
208
+ const k = r.key;
209
+ delete internalColumn[k];
210
+ }
211
+ });
212
+ colDif.forEachAddedItem(r => col[r.key] = r.currentValue);
213
+ colDif.forEachChangedItem(r => col[r.key] = r.currentValue);
214
+ }
215
+ _hasAddedOrRemovedColumns(columns) {
216
+ if (!this._colPropsDiffer) {
217
+ this._colPropsDiffer = this._differs.find([]).create();
218
+ }
219
+ const props = columns.map(c => getColumnProp(c));
220
+ return this._colPropsDiffer.diff(props) !== null;
221
+ }
222
+ _hasColumnsChanged(columns) {
223
+ let colChanged = false;
224
+ for (const col of columns) {
225
+ const resultDif = this._getColDif(col, ColumnsTypes.Result);
226
+ if (resultDif) {
227
+ // NOTE: Can't return early, because the differs need to be updated.
228
+ colChanged = true;
229
+ }
230
+ }
231
+ return colChanged;
232
+ }
233
+ _shouldAddCheckboxColumn() {
234
+ return this._selectionType === SelectionType.checkbox;
235
+ }
236
+ _shouldAddRowActionColumn() {
237
+ return this._rowActionItem !== undefined;
238
+ }
239
+ _shouldAddTreeToggleColumn(column) {
240
+ return column.isTreeColumn !== undefined && column.isTreeColumn &&
241
+ (!hasProperty(column, 'treeToggleTemplate') || !notNullOrUndefined(column.treeToggleTemplate));
242
+ }
243
+ _shouldAddHeaderTemplate(column) {
244
+ return !hasProperty(column, 'headerTemplate');
245
+ }
246
+ _shouldAddCellTypeSelectorTpl(column) {
247
+ return hasProperty(column, 'cellType');
248
+ }
249
+ }
250
+ ColumnsManagerService.decorators = [
251
+ { type: Injectable }
252
+ ];
253
+ ColumnsManagerService.ctorParameters = () => [
254
+ { type: KeyValueDiffers },
255
+ { type: DatatableColumnChangesService }
256
+ ];
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLGVBQWUsRUFBZSxNQUFNLGVBQWUsQ0FBQTtBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVsRixPQUFPLEVBSUwsYUFBYSxHQUdkLE1BQU0sdUJBQXVCLENBQUE7QUFFOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBSzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUVsRixJQUFLLFlBSUo7QUFKRCxXQUFLLFlBQVk7SUFDZixpREFBSyxDQUFBO0lBQ0wsdURBQVEsQ0FBQTtJQUNSLG1EQUFNLENBQUE7QUFDUixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUFLRCxNQUFNLE9B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QUE7WUFDM0QsSUFBSSxTQUFTLEVBQUU7Z0JBQ2Isb0VBQW9FO2dCQUNwRSxVQUFVLEdBQUcsSUFBSSxDQUFBO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxhQUFhLENBQUMsUUFBUSxDQUFBO0lBQ3ZELENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQTtJQUMxQyxDQUFDO0lBRU8sMEJBQTBCLENBQUMsTUFBOEI7UUFDL0QsT0FBTyxNQUFNLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsWUFBWTtZQUM3RCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtJQUNsRyxDQUFDO0lBRU8sd0JBQXdCLENBQUMsTUFBOEI7UUFDN0QsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRU8sNkJBQTZCLENBQUMsTUFBOEI7UUFDbEUsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7OztZQXRVRixVQUFVOzs7WUFqQzJDLGVBQWU7WUF1QjVELDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEtleVZhbHVlQ2hhbmdlcywgS2V5VmFsdWVEaWZmZXIsIEtleVZhbHVlRGlmZmVycywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWZlciwgRU1QVFksIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGF1ZGl0VGltZSwgbWFwLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHtcbiAgRGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGUsXG4gIERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgRGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlLFxuICBTZWxlY3Rpb25UeXBlLFxuICBUYWJsZUNvbHVtbixcbiAgVGFibGVDb2x1bW5Qcm9wLFxufSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5cbmltcG9ydCB7IGhhc1Byb3BlcnR5LCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRhdGFibGUtcm93LWFjdGlvbi1pdGVtLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uJ1xuaW1wb3J0IHsgY3JlYXRlQWN0aW9uTWVudUNvbHVtbiB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZS1hY3Rpb24tbWVudS1jb2x1bW4nXG5pbXBvcnQgeyBjcmVhdGVDaGVja2JveENvbHVtbiB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZS1jaGVja2JveC1jb2x1bW4nXG5pbXBvcnQgeyBnZXRDb2x1bW5Qcm9wIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWNvbHVtbi1wcm9wJ1xuaW1wb3J0IHsgc2V0Q29sdW1uRGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zZXQtY29sdW1uLWRlZmF1bHRzJ1xuaW1wb3J0IHsgdHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNsYXRlLXRlbXBsYXRlcydcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhdGFibGUtY29sdW1uLWNoYW5nZXMuc2VydmljZSdcblxuZW51bSBDb2x1bW5zVHlwZXMge1xuICBJbnB1dCxcbiAgVGVtcGxhdGUsXG4gIFJlc3VsdCxcbn1cblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxDb2x1bW5zR2V0dGVyID0gKCkgPT4gVGFibGVDb2x1bW5bXVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sdW1uc01hbmFnZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXBkYXRlQ29sdW1ucyA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dENvbHVtbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT4oW10pXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbXBsYXRlQ29sdW1ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10+KFtdKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RwbENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3VsdENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgX2NvbFByb3BzRGlmZmVyPzogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+XG5cbiAgcHJpdmF0ZSBfaW50ZXJuYWxDb2x1bW5zR2V0dGVyPzogSW50ZXJuYWxDb2x1bW5zR2V0dGVyXG5cbiAgcHJpdmF0ZSBfc2VsZWN0aW9uVHlwZTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9yb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2FjdGlvbk1lbnVDZWxsVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2JsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX3RyZWVUb2dnbGVUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9oZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIGEgY29sdW1ucyBjaGFuZ2VkIG9iZXJ2YWJsZSwgdG8gbWFrZSBjaGFuZ2VzIG1vcmUgcHJlZGljdGFibGUuXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkNoYW5nZXNTZXJ2aWNlOiBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgKSB7XG4gICAgY29uc3QgdGVtcGxhdGVDb2x1bW5zJCA9IHRoaXMuX2NvbHVtbkNoYW5nZXNTZXJ2aWNlLmNvbHVtbklucHV0Q2hhbmdlcyQucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlQ29sdW1ucy5hc09ic2VydmFibGUoKS5waXBlKG1hcCh0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMpKVxuICAgICAgfSlcbiAgICApXG5cbiAgICB0aGlzLmNvbHVtbnMkID0gZGVmZXIoKCkgPT4ge1xuICAgICAgbGV0IGlzRmlyc3QgPSB0cnVlXG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuX2lucHV0Q29sdW1ucy5hc09ic2VydmFibGUoKSxcbiAgICAgICAgdGVtcGxhdGVDb2x1bW5zJCxcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5hc09ic2VydmFibGUoKS5waXBlKGF1ZGl0VGltZSgwKSwgc3RhcnRXaXRoKHVuZGVmaW5lZCkpXG4gICAgICBdKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKFsgaW5wdXRDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMgXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLl9tZXJnZUNvbHVtbnMoaW5wdXRDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMpXG5cbiAgICAgICAgICBjb25zdCBoYXNDb2x1bW5zQ2hhbmdlZCA9IHRoaXMuX2hhc0NvbHVtbnNDaGFuZ2VkKGNvbHMpXG5cbiAgICAgICAgICAvLyBUT0RPOiBMb29rIGZvciBjb2x1bW5zIGFkZGVkL3JlbW92ZWQgYW5kIHJlbW92ZSB0aGUgcmVtb3ZlZCBjb2x1bW5zXG4gICAgICAgICAgLy8gZGlmZmVycywgbm90IGp1c3QgY2hhbmdlcyB0byBjb2x1bW5zLlxuICAgICAgICAgIGNvbnN0IGhhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyA9IHRoaXMuX2hhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyhjb2xzKVxuXG4gICAgICAgICAgLy8gTk9URTogQm90aCBjaGVja3MgbmVlZCB0byBiZSBydW4sIGV2ZW4gdGhvdWdoIG9ubHkgb25lIG5lZWRzIHRvIGJlXG4gICAgICAgICAgLy8gdHJ1ZSwgYmVjYXVzZSB0aGVpciBkaWZmZXJzIG5lZWQgdG8gYmUgY2FsbGVkLlxuICAgICAgICAgIGlmIChoYXNDb2x1bW5zQ2hhbmdlZCB8fCBoYXNBZGRlZE9yUmVtb3ZlZENvbHVtbnMgfHwgaXNGaXJzdCkge1xuICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICByZXR1cm4gb2YoY29scylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gRU1QVFlcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfSkucGlwZShcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRDb2x1bW5zKGNvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0Q29sdW1ucy5uZXh0KGNvbHVtbnMpXG4gIH1cblxuICBwdWJsaWMgc2V0VGVtcGxhdGVDb2x1bW5zKGNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdKTogdm9pZCB7XG4gICAgdGhpcy5fdGVtcGxhdGVDb2x1bW5zLm5leHQoY29sdW1ucylcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnRlcm5hbENvbHVtbnNHZXR0ZXIoZ2V0dGVyOiBJbnRlcm5hbENvbHVtbnNHZXR0ZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5faW50ZXJuYWxDb2x1bW5zR2V0dGVyID0gZ2V0dGVyIHx8IHVuZGVmaW5lZFxuICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uVHlwZShzZWxlY3Rpb25UeXBlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3NlbGVjdGlvblR5cGUgIT09IHNlbGVjdGlvblR5cGVcbiAgICB0aGlzLl9zZWxlY3Rpb25UeXBlID0gc2VsZWN0aW9uVHlwZVxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb25UeXBlKCk6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlXG4gIH1cblxuICBwdWJsaWMgc2V0Um93QWN0aW9uSXRlbShyb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3Jvd0FjdGlvbkl0ZW0gIT09IHJvd0FjdGlvbkl0ZW1cbiAgICB0aGlzLl9yb3dBY3Rpb25JdGVtID0gcm93QWN0aW9uSXRlbVxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25NZW51Q2VsbFRwbChhY3Rpb25NZW51Q2VsbFRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCAhPT0gYWN0aW9uTWVudUNlbGxUcGxcbiAgICB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCA9IGFjdGlvbk1lbnVDZWxsVHBsXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEJsYW5rSGVhZGVyVHBsKGJsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2JsYW5rSGVhZGVyVHBsICE9PSBibGFua0hlYWRlclRwbFxuICAgIHRoaXMuX2JsYW5rSGVhZGVyVHBsID0gYmxhbmtIZWFkZXJUcGxcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5uZXh0KHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VHJlZVRvZ2dsZVRwbCh0cmVlVG9nZ2xlVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fdHJlZVRvZ2dsZVRwbCAhPT0gdHJlZVRvZ2dsZVRwbFxuICAgIHRoaXMuX3RyZWVUb2dnbGVUcGwgPSB0cmVlVG9nZ2xlVHBsXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEhlYWRlclRwbChoZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5faGVhZGVyVHBsICE9PSBoZWFkZXJUcGxcbiAgICB0aGlzLl9oZWFkZXJUcGwgPSBoZWFkZXJUcGxcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5uZXh0KHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0Q2VsbFR5cGVTZWxlY3RvclRwbChjZWxsVHlwZVNlbGVjdG9yVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgIT09IGNlbGxUeXBlU2VsZWN0b3JUcGxcbiAgICB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsID0gY2VsbFR5cGVTZWxlY3RvclRwbFxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX21lcmdlQ29sdW1ucyhcbiAgICBpbnB1dENvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSxcbiAgICB0ZW1wbGF0ZUNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdXG4gICk6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB7XG4gICAgY29uc3QgY29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdID0gW11cblxuICAgIC8vIEFkZCB0aGUgZmlyc3QgY29sdW1uIGNoZWNrYm94IGlmICdjaGVja2JveCcgc2VsZWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgaWYgKHRoaXMuX3Nob3VsZEFkZENoZWNrYm94Q29sdW1uKCkpIHtcbiAgICAgIGNvbHMucHVzaChjcmVhdGVDaGVja2JveENvbHVtbigpKVxuICAgIH1cblxuICAgIC8vIENvbHVtbiBuZWVkcyB0byBiZSBwcm92aWRlZCBpbiB0aGUgaW5wdXRDb2x1bW5zLCBzbyBpdGVyYXRlIHRoZVxuICAgIC8vIGlucHV0Q29sdW1ucy5cbiAgICBmb3IgKGNvbnN0IGlucENvbCBvZiBpbnB1dENvbHVtbnMpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBnZXRDb2x1bW5Qcm9wKGlucENvbClcbiAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByb3ApKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBDb2x1bW4gbWF5IGhhdmUgJ3Byb3AnIG9yICduYW1lJyBkZWZpbmVkLmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGludGVybmFsQ29sID0gdGhpcy5fZ2V0SW50ZXJuYWxDb2x1bW4ocHJvcClcblxuICAgICAgY29uc3QgaW5wQ29sRGlmID0gdGhpcy5fZ2V0Q29sRGlmKGlucENvbCwgQ29sdW1uc1R5cGVzLklucHV0KVxuICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChpbnBDb2xEaWYpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbERpZihpbnBDb2xEaWYsIGludGVybmFsQ29sLCBpbnBDb2wpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRwbENvbCA9IHRoaXMuX2ZpbmRDb2x1bW5CeVByb3AocHJvcCwgdGVtcGxhdGVDb2x1bW5zKVxuICAgICAgaWYgKHRwbENvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHRwbENvbERpZiA9IHRoaXMuX2dldENvbERpZih0cGxDb2wsIENvbHVtbnNUeXBlcy5UZW1wbGF0ZSlcbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0cGxDb2xEaWYpKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQ29sRGlmKHRwbENvbERpZiwgaW50ZXJuYWxDb2wsIHRwbENvbClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBfY29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uID0ge1xuICAgICAgICAuLi4oaW50ZXJuYWxDb2wgfHwge30pLFxuICAgICAgICAuLi5pbnBDb2wsXG4gICAgICAgIC8vIFRPRE86IFJldGhpbmsgdGhpcywgYmVjYXVzZSBJIGRvbid0IGtub3cgaWYgdGhpcyBpcyBjb3JyZWN0LlxuICAgICAgICAuLi4odHBsQ29sIGFzIGFueSB8fCB7fSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nob3VsZEFkZFRyZWVUb2dnbGVDb2x1bW4oX2NvbCkpIHtcbiAgICAgICAgX2NvbC50cmVlVG9nZ2xlVGVtcGxhdGUgPSB0aGlzLl90cmVlVG9nZ2xlVHBsXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zaG91bGRBZGRIZWFkZXJUZW1wbGF0ZShfY29sKSkge1xuICAgICAgICBfY29sLmhlYWRlclRlbXBsYXRlID0gdGhpcy5faGVhZGVyVHBsXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zaG91bGRBZGRDZWxsVHlwZVNlbGVjdG9yVHBsKF9jb2wpKSB7XG4gICAgICAgIF9jb2wuY2VsbFRlbXBsYXRlID0gdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbFxuICAgICAgfVxuXG4gICAgICBjb2xzLnB1c2goX2NvbClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hvdWxkQWRkUm93QWN0aW9uQ29sdW1uKCkpIHtcbiAgICAgIGNvbHMucHVzaChjcmVhdGVBY3Rpb25NZW51Q29sdW1uKHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsLCB0aGlzLl9ibGFua0hlYWRlclRwbCkpXG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBkZWZhdWx0IGZvciBhbnkgbWlzc2luZyBwcm9wcyBhcmUgc2V0LlxuICAgIC8vIFRPRE86IERldGVybWluZSBpZiB0aGlzIHNob3VsZCBiZSBkb25lIGVhcmxpZXIsIGJlY2F1c2UgSSBkb24ndCBsaWtlXG4gICAgLy8gaG93IHRoaXMgaXMgZG9uZSBhZnRlciBkaWYgY2hlY2tzLlxuICAgIHNldENvbHVtbkRlZmF1bHRzKGNvbHMpXG5cbiAgICByZXR1cm4gY29sc1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW50ZXJuYWxDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLl9pbnRlcm5hbENvbHVtbnNHZXR0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbENvbHVtbnNHZXR0ZXIoKVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW50ZXJuYWxDb2x1bW4ocHJvcDogVGFibGVDb2x1bW5Qcm9wKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGludGVybmFsQ29scyA9IHRoaXMuX2dldEludGVybmFsQ29sdW1ucygpXG5cbiAgICBpZiAoaW50ZXJuYWxDb2xzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJuYWxDb2xzLmZpbmQoYyA9PiBnZXRDb2x1bW5Qcm9wKGMpID09PSBwcm9wKVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZENvbHVtbkJ5UHJvcDxUIGV4dGVuZHMgVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB8IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudD4oXG4gICAgcHJvcDogVGFibGVDb2x1bW5Qcm9wLFxuICAgIGNvbHVtbnM6IFRbXVxuICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKGMgPT4gZ2V0Q29sdW1uUHJvcChjKSA9PT0gcHJvcClcbiAgfVxuXG4gIHByaXZhdGUgX2dldERpZk1hcEZvckNvbHVtbnNUeXBlKGNvbHVtbnNUeXBlOiBDb2x1bW5zVHlwZXMpOiBNYXA8VGFibGVDb2x1bW5Qcm9wLCBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4+ICB7XG4gICAgc3dpdGNoIChjb2x1bW5zVHlwZSkge1xuICAgICAgY2FzZSBDb2x1bW5zVHlwZXMuSW5wdXQ6IHJldHVybiB0aGlzLl9pbnBDb2xEaWZmZXJzTWFwXG4gICAgICBjYXNlIENvbHVtbnNUeXBlcy5UZW1wbGF0ZTogcmV0dXJuIHRoaXMuX3RwbENvbERpZmZlcnNNYXBcbiAgICAgIGNhc2UgQ29sdW1uc1R5cGVzLlJlc3VsdDogcmV0dXJuIHRoaXMuX3Jlc3VsdENvbERpZmZlcnNNYXBcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb2x1bW5EaWZmZXIocHJvcDogVGFibGVDb2x1bW5Qcm9wLCBjb2xzVHlwZTogQ29sdW1uc1R5cGVzKTogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBkaWZNYXAgPSB0aGlzLl9nZXREaWZNYXBGb3JDb2x1bW5zVHlwZShjb2xzVHlwZSlcbiAgICBpZiAoZGlmTWFwID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBjb2x1bW5zIHR5cGUuYClcbiAgICB9XG5cbiAgICBpZiAoIWRpZk1hcC5oYXMocHJvcCkpIHtcbiAgICAgIGRpZk1hcC5zZXQocHJvcCwgdGhpcy5fZGlmZmVycy5maW5kKHt9KS5jcmVhdGUoKSlcbiAgICB9XG5cbiAgICBjb25zdCBkaWZmZXIgPSBkaWZNYXAuZ2V0KHByb3ApXG4gICAgaWYgKGRpZmZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRGlmZmVyIG5vdCBmb3VuZC4gTmV3IGRpZmZlciBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQuYClcbiAgICB9XG5cbiAgICByZXR1cm4gZGlmZmVyXG4gIH1cblxuICBwcml2YXRlIF9nZXRDb2xEaWYoXG4gICAgY29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIHwgRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgIGNvbHNUeXBlOiBDb2x1bW5zVHlwZXNcbiAgKTogS2V5VmFsdWVDaGFuZ2VzPHN0cmluZywgYW55PiB8IG51bGwge1xuICAgIGNvbnN0IHByb3AgPSBnZXRDb2x1bW5Qcm9wKGNvbClcbiAgICBpZiAocHJvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcihgQ29sdW1uIHByb3Agbm90IGZvdW5kLmApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2dldENvbHVtbkRpZmZlcihwcm9wLCBjb2xzVHlwZSkuZGlmZihjb2wpXG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDb2xEaWYoXG4gICAgY29sRGlmOiBLZXlWYWx1ZUNoYW5nZXM8c3RyaW5nLCBhbnk+LFxuICAgIGludGVybmFsQ29sdW1uOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCxcbiAgICBjb2w6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfCBEYXRhdGFibGVDb2x1bW5Db21wb25lbnRcbiAgKTogdm9pZCB7XG4gICAgY29sRGlmLmZvckVhY2hSZW1vdmVkSXRlbShyID0+IHtcbiAgICAgIGlmIChpbnRlcm5hbENvbHVtbiAmJiBpbnRlcm5hbENvbHVtbi5oYXNPd25Qcm9wZXJ0eShyLmtleSkpIHtcbiAgICAgICAgY29uc3QgayA9IHIua2V5IGFzIGtleW9mIFRhYmxlQ29sdW1uXG4gICAgICAgIGRlbGV0ZSBpbnRlcm5hbENvbHVtbltrXVxuICAgICAgfVxuICAgIH0pXG4gICAgY29sRGlmLmZvckVhY2hBZGRlZEl0ZW0ociA9PiAoY29sIGFzIGFueSlbci5rZXldID0gci5jdXJyZW50VmFsdWUpXG4gICAgY29sRGlmLmZvckVhY2hDaGFuZ2VkSXRlbShyID0+IChjb2wgYXMgYW55KVtyLmtleV0gPSByLmN1cnJlbnRWYWx1ZSlcbiAgfVxuXG4gIHByaXZhdGUgX2hhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyhjb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX2NvbFByb3BzRGlmZmVyKSB7XG4gICAgICB0aGlzLl9jb2xQcm9wc0RpZmZlciA9IHRoaXMuX2RpZmZlcnMuZmluZChbXSkuY3JlYXRlKClcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IGNvbHVtbnMubWFwKGMgPT4gZ2V0Q29sdW1uUHJvcChjKSlcbiAgICByZXR1cm4gdGhpcy5fY29sUHJvcHNEaWZmZXIuZGlmZihwcm9wcykgIT09IG51bGxcbiAgfVxuXG4gIHByaXZhdGUgX2hhc0NvbHVtbnNDaGFuZ2VkKGNvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSk6IGJvb2xlYW4ge1xuICAgIGxldCBjb2xDaGFuZ2VkID0gZmFsc2VcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCByZXN1bHREaWYgPSB0aGlzLl9nZXRDb2xEaWYoY29sLCBDb2x1bW5zVHlwZXMuUmVzdWx0KVxuICAgICAgaWYgKHJlc3VsdERpZikge1xuICAgICAgICAvLyBOT1RFOiBDYW4ndCByZXR1cm4gZWFybHksIGJlY2F1c2UgdGhlIGRpZmZlcnMgbmVlZCB0byBiZSB1cGRhdGVkLlxuICAgICAgICBjb2xDaGFuZ2VkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sQ2hhbmdlZFxuICB9XG5cbiAgcHJpdmF0ZSBfc2hvdWxkQWRkQ2hlY2tib3hDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGUgPT09IFNlbGVjdGlvblR5cGUuY2hlY2tib3hcbiAgfVxuXG4gIHByaXZhdGUgX3Nob3VsZEFkZFJvd0FjdGlvbkNvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcm93QWN0aW9uSXRlbSAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICBwcml2YXRlIF9zaG91bGRBZGRUcmVlVG9nZ2xlQ29sdW1uKGNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2x1bW4uaXNUcmVlQ29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmlzVHJlZUNvbHVtbiAmJlxuICAgICAgKCFoYXNQcm9wZXJ0eShjb2x1bW4sICd0cmVlVG9nZ2xlVGVtcGxhdGUnKSB8fCAhbm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbi50cmVlVG9nZ2xlVGVtcGxhdGUpKVxuICB9XG5cbiAgcHJpdmF0ZSBfc2hvdWxkQWRkSGVhZGVyVGVtcGxhdGUoY29sdW1uOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFoYXNQcm9wZXJ0eShjb2x1bW4sICdoZWFkZXJUZW1wbGF0ZScpXG4gIH1cblxuICBwcml2YXRlIF9zaG91bGRBZGRDZWxsVHlwZVNlbGVjdG9yVHBsKGNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBoYXNQcm9wZXJ0eShjb2x1bW4sICdjZWxsVHlwZScpXG4gIH1cblxufVxuIl19
@@ -1,18 +1,21 @@
1
1
  import { Inject, Injectable, isDevMode, Optional } from '@angular/core';
2
2
  import { of, Subject } from 'rxjs';
3
3
  import { map, shareReplay, startWith, switchMap, take, tap } from 'rxjs/operators';
4
- import { hasProperty } from '@theseam/ui-common/utils';
4
+ import { notNullOrUndefined } from '@theseam/ui-common/utils';
5
+ import { EMPTY_DATATABLE_PREFERENCES } from '../models/preferences';
5
6
  import { THESEAM_DATATABLE_PREFERENCES_ACCESSOR } from '../tokens/datatable-preferences-accessor';
6
- import { withStoredColumnInfo } from '../utils/with-stored-column-info';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../tokens/datatable-preferences-accessor";
9
+ // TODO: Add per key status
9
10
  export class DatatablePreferencesService {
10
11
  constructor(_prefsAccessor) {
11
12
  this._prefsAccessor = _prefsAccessor;
12
13
  this._tablePrefsMap = new Map();
13
14
  this._pending = false;
15
+ this._loaded = false;
14
16
  }
15
17
  get pending() { return this._pending; }
18
+ get loaded() { return this._loaded; }
16
19
  preferences(preferenceKey) {
17
20
  let prefs = this._tablePrefsMap.get(preferenceKey);
18
21
  if (!prefs) {
@@ -27,16 +30,17 @@ export class DatatablePreferencesService {
27
30
  }
28
31
  _createObservable(refreshSubject, prefKey) {
29
32
  if (!this._prefsAccessor) {
30
- return of({});
33
+ return of(EMPTY_DATATABLE_PREFERENCES);
31
34
  }
32
- const accessor = (key) => this._prefsAccessor ? this._prefsAccessor.get(key) : of('{}');
33
- return refreshSubject.pipe(startWith({}), switchMap(() => accessor(prefKey).pipe(map(v => {
35
+ const accessor = (key) => this._prefsAccessor ? this._prefsAccessor.get(key) : of(JSON.stringify(EMPTY_DATATABLE_PREFERENCES));
36
+ return refreshSubject.pipe(startWith(undefined), switchMap(() => accessor(prefKey).pipe(map(v => {
34
37
  if (!v) {
35
38
  return null;
36
39
  }
37
40
  // TODO: Add a schema validator and migration tool to avoid parsing issues.
38
41
  try {
39
- return JSON.parse(v);
42
+ // return JSON.parse(v) as TheSeamDatatablePreferences
43
+ return this._descerializePreferences(v);
40
44
  }
41
45
  catch (error) {
42
46
  if (isDevMode()) {
@@ -44,7 +48,12 @@ export class DatatablePreferencesService {
44
48
  }
45
49
  return null;
46
50
  }
47
- }), map(v => !!v ? v : {}))), shareReplay(1));
51
+ }), map(v => notNullOrUndefined(v) ? v : EMPTY_DATATABLE_PREFERENCES),
52
+ // tap(v => console.log('preferences$', v)),
53
+ tap(() => {
54
+ this._pending = false;
55
+ this._loaded = true;
56
+ }))), shareReplay({ bufferSize: 1, refCount: true }));
48
57
  }
49
58
  refresh(preferenceKey) {
50
59
  const prefs = this._tablePrefsMap.get(preferenceKey);
@@ -60,7 +69,40 @@ export class DatatablePreferencesService {
60
69
  // out of order updates. This shouldn't be an issue, with how fast preferences
61
70
  // will most likely be changing, but it could happen in situations, such as
62
71
  // network issues.
63
- setColumnPreference(preferenceKey, column) {
72
+ // public setColumnPreference(preferenceKey: string, column: TheSeamDatatablePreferencesColumn): void {
73
+ // if (!this._prefsAccessor) {
74
+ // return
75
+ // }
76
+ // this._pending = true
77
+ // this.preferences(preferenceKey).pipe(
78
+ // map(prefs => {
79
+ // // Making the preferences immutable may not be necessary, but for now
80
+ // // this obj->str->obj will work as a naive clone.
81
+ // const columns = JSON.parse(JSON.stringify(prefs.columns || []))
82
+ // const _colPref = columns.find((c: any) => c.prop === column.prop)
83
+ // // console.log('has', _colPref)
84
+ // if (_colPref) {
85
+ // // console.log('hasProperty(column, "width"))', hasProperty(column, 'width'))
86
+ // if (hasProperty(column, 'width')) { _colPref.width = column.width }
87
+ // if (hasProperty(column, 'canAutoResize')) { _colPref.canAutoResize = column.canAutoResize }
88
+ // if (hasProperty(column, 'hidden')) { _colPref.hidden = column.hidden }
89
+ // } else {
90
+ // columns.push({ ...column })
91
+ // }
92
+ // const newPrefs: TheSeamDatatablePreferences = { ...prefs, columns }
93
+ // return newPrefs
94
+ // }),
95
+ // // tap(v => console.log('newPrefs', v)),
96
+ // take(1),
97
+ // switchMap(newPrefs => this._prefsAccessor
98
+ // ? this._prefsAccessor.update(preferenceKey, JSON.stringify(newPrefs))
99
+ // : of(newPrefs)
100
+ // ),
101
+ // tap(() => this.refresh(preferenceKey))
102
+ // )
103
+ // .subscribe()
104
+ // }
105
+ setAlterations(preferenceKey, alterations) {
64
106
  if (!this._prefsAccessor) {
65
107
  return;
66
108
  }
@@ -68,25 +110,20 @@ export class DatatablePreferencesService {
68
110
  this.preferences(preferenceKey).pipe(map(prefs => {
69
111
  // Making the preferences immutable may not be necessary, but for now
70
112
  // this obj->str->obj will work as a naive clone.
71
- const columns = JSON.parse(JSON.stringify(prefs.columns || []));
72
- const _colPref = columns.find((c) => c.prop === column.prop);
73
- // console.log('has', _colPref)
74
- if (_colPref) {
75
- // console.log('hasProperty(column, "width"))', hasProperty(column, 'width'))
76
- if (hasProperty(column, 'width')) {
77
- _colPref.width = column.width;
78
- }
79
- if (hasProperty(column, 'canAutoResize')) {
80
- _colPref.canAutoResize = column.canAutoResize;
81
- }
82
- if (hasProperty(column, 'hidden')) {
83
- _colPref.hidden = column.hidden;
84
- }
85
- }
86
- else {
87
- columns.push(Object.assign({}, column));
88
- }
89
- const newPrefs = Object.assign(Object.assign({}, prefs), { columns });
113
+ // const columns = JSON.parse(JSON.stringify(prefs.columns || []))
114
+ // const _colPref = columns.find((c: any) => c.prop === column.prop)
115
+ // // console.log('has', _colPref)
116
+ // if (_colPref) {
117
+ // // console.log('hasProperty(column, "width"))', hasProperty(column, 'width'))
118
+ // if (hasProperty(column, 'width')) { _colPref.width = column.width }
119
+ // if (hasProperty(column, 'canAutoResize')) { _colPref.canAutoResize = column.canAutoResize }
120
+ // if (hasProperty(column, 'hidden')) { _colPref.hidden = column.hidden }
121
+ // } else {
122
+ // columns.push({ ...column })
123
+ // }
124
+ // const newPrefs: TheSeamDatatablePreferences = { ...prefs, columns }
125
+ // return newPrefs
126
+ const newPrefs = Object.assign(Object.assign({}, EMPTY_DATATABLE_PREFERENCES), { alterations });
90
127
  return newPrefs;
91
128
  }),
92
129
  // tap(v => console.log('newPrefs', v)),
@@ -95,10 +132,19 @@ export class DatatablePreferencesService {
95
132
  : of(newPrefs)), tap(() => this.refresh(preferenceKey)))
96
133
  .subscribe();
97
134
  }
98
- withColumnPreferences(preferenceKey, columns) {
99
- return this.preferences(preferenceKey).pipe(startWith({}), map(preferences => preferences && preferences.columns
100
- ? withStoredColumnInfo(columns, preferences.columns)
101
- : columns));
135
+ // public withColumnPreferences<T>(preferenceKey: string, columns: T[]): Observable<T[]> {
136
+ // return this.preferences(preferenceKey).pipe(
137
+ // startWith(EMPTY_DATATABLE_PREFERENCES),
138
+ // map(preferences => preferences && preferences.columns
139
+ // ? withStoredColumnInfo(columns, preferences.columns) as T[]
140
+ // : columns
141
+ // )
142
+ // )
143
+ // }
144
+ _descerializePreferences(serialized) {
145
+ const prefs = JSON.parse(serialized);
146
+ // TODO: Implement migration
147
+ return prefs;
102
148
  }
103
149
  }
104
150
  DatatablePreferencesService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DatatablePreferencesService_Factory() { return new DatatablePreferencesService(i0.ɵɵinject(i1.THESEAM_DATATABLE_PREFERENCES_ACCESSOR, 8)); }, token: DatatablePreferencesService, providedIn: "root" });
@@ -110,4 +156,4 @@ DatatablePreferencesService.decorators = [
110
156
  DatatablePreferencesService.ctorParameters = () => [
111
157
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [THESEAM_DATATABLE_PREFERENCES_ACCESSOR,] }] }
112
158
  ];
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL3NlcnZpY2VzL2RhdGF0YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDdkUsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBR3RELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDBDQUEwQyxDQUFBO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBOzs7QUFVdkUsTUFBTSxPQUFPLDJCQUEyQjtJQU90QyxZQUNzRSxjQUFxRDtRQUFyRCxtQkFBYyxHQUFkLGNBQWMsQ0FBdUM7UUFOMUcsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBMEMsQ0FBQTtRQUMzRSxhQUFRLEdBQUcsS0FBSyxDQUFBO0lBTXBCLENBQUM7SUFKTCxJQUFXLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBTXRDLFdBQVcsQ0FBQyxhQUFxQjtRQUN0QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtZQUMxQyxLQUFLLEdBQUc7Z0JBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDO2dCQUNqRSxPQUFPLEVBQUUsY0FBYzthQUN4QixDQUFBO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFBO1NBQzlDO1FBQ0QsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFBO0lBQ3pCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxjQUE2QixFQUFFLE9BQWU7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDZDtRQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFzQixFQUFFLENBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFL0QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUN4QixTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ04sT0FBTyxJQUFJLENBQUE7YUFDWjtZQUVELDJFQUEyRTtZQUMzRSxJQUFJO2dCQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQWlDLENBQUE7YUFDckQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFJLFNBQVMsRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7aUJBQ3JCO2dCQUNELE9BQU8sSUFBSSxDQUFBO2FBQ1o7UUFDSCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUd2QixDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUE7SUFDSCxDQUFDO0lBRU0sT0FBTyxDQUFDLGFBQXFCO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3BELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7WUFDcEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtTQUNyQjtJQUNILENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsMkNBQTJDO0lBQzNDLEVBQUU7SUFDRiwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLDJFQUEyRTtJQUMzRSxrQkFBa0I7SUFDWCxtQkFBbUIsQ0FBQyxhQUFxQixFQUFFLE1BQTBDO1FBQzFGLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE9BQU07U0FDUDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUNsQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixxRUFBcUU7WUFDckUsaURBQWlEO1lBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDL0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDakUsK0JBQStCO1lBQy9CLElBQUksUUFBUSxFQUFFO2dCQUNaLDZFQUE2RTtnQkFDN0UsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtpQkFBRTtnQkFDbkUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxFQUFFO29CQUFFLFFBQVEsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQTtpQkFBRTtnQkFDM0YsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO29CQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtpQkFBRTthQUN2RTtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxtQkFBTSxNQUFNLEVBQUcsQ0FBQTthQUM1QjtZQUNELE1BQU0sUUFBUSxtQ0FBc0MsS0FBSyxLQUFFLE9BQU8sR0FBRSxDQUFBO1lBQ3BFLE9BQU8sUUFBUSxDQUFBO1FBQ2pCLENBQUMsQ0FBQztRQUNGLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQ2YsRUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUN2QzthQUNBLFNBQVMsRUFBRSxDQUFBO0lBQ2QsQ0FBQztJQUVNLHFCQUFxQixDQUFJLGFBQXFCLEVBQUUsT0FBWTtRQUNqRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUN6QyxTQUFTLENBQUMsRUFBa0MsQ0FBQyxFQUM3QyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU87WUFDbkQsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFRO1lBQzNELENBQUMsQ0FBQyxPQUFPLENBQ1YsQ0FDRixDQUFBO0lBQ0gsQ0FBQzs7OztZQXZIRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs0Q0FTSSxRQUFRLFlBQUksTUFBTSxTQUFDLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgaXNEZXZNb2RlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IGhhc1Byb3BlcnR5IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuaW1wb3J0IHsgSVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlcywgSVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc0NvbHVtbiB9IGZyb20gJy4uL21vZGVscy9wcmVmZXJlbmNlcydcbmltcG9ydCB0eXBlIHsgSVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc0FjY2Vzc29yIH0gZnJvbSAnLi4vbW9kZWxzL3ByZWZlcmVuY2VzLWFjY2Vzc29yJ1xuaW1wb3J0IHsgVEhFU0VBTV9EQVRBVEFCTEVfUFJFRkVSRU5DRVNfQUNDRVNTT1IgfSBmcm9tICcuLi90b2tlbnMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLWFjY2Vzc29yJ1xuaW1wb3J0IHsgd2l0aFN0b3JlZENvbHVtbkluZm8gfSBmcm9tICcuLi91dGlscy93aXRoLXN0b3JlZC1jb2x1bW4taW5mbydcblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YXRhYmxlUHJlZmVyZW5jZXNNYXBSZWNvcmQge1xuICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPElUaGVTZWFtRGF0YXRhYmxlUHJlZmVyZW5jZXM+XG4gIHJlZnJlc2g6IFN1YmplY3Q8dm9pZD5cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVByZWZzTWFwID0gbmV3IE1hcDxzdHJpbmcsIElEYXRhdGFibGVQcmVmZXJlbmNlc01hcFJlY29yZD4oKVxuICBwcml2YXRlIF9wZW5kaW5nID0gZmFsc2VcblxuICBwdWJsaWMgZ2V0IHBlbmRpbmcoKSB7IHJldHVybiB0aGlzLl9wZW5kaW5nIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRVNFQU1fREFUQVRBQkxFX1BSRUZFUkVOQ0VTX0FDQ0VTU09SKSBwcml2YXRlIF9wcmVmc0FjY2Vzc29yPzogSVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc0FjY2Vzc29yXG4gICkgeyB9XG5cbiAgcHVibGljIHByZWZlcmVuY2VzKHByZWZlcmVuY2VLZXk6IHN0cmluZyk6IE9ic2VydmFibGU8SVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlcz4ge1xuICAgIGxldCBwcmVmcyA9IHRoaXMuX3RhYmxlUHJlZnNNYXAuZ2V0KHByZWZlcmVuY2VLZXkpXG4gICAgaWYgKCFwcmVmcykge1xuICAgICAgY29uc3QgcmVmcmVzaFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gICAgICBwcmVmcyA9IHtcbiAgICAgICAgb2JzZXJ2YWJsZTogdGhpcy5fY3JlYXRlT2JzZXJ2YWJsZShyZWZyZXNoU3ViamVjdCwgcHJlZmVyZW5jZUtleSksXG4gICAgICAgIHJlZnJlc2g6IHJlZnJlc2hTdWJqZWN0XG4gICAgICB9XG4gICAgICB0aGlzLl90YWJsZVByZWZzTWFwLnNldChwcmVmZXJlbmNlS2V5LCBwcmVmcylcbiAgICB9XG4gICAgcmV0dXJuIHByZWZzLm9ic2VydmFibGVcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU9ic2VydmFibGUocmVmcmVzaFN1YmplY3Q6IFN1YmplY3Q8dm9pZD4sIHByZWZLZXk6IHN0cmluZyk6IE9ic2VydmFibGU8SVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlcz4ge1xuICAgIGlmICghdGhpcy5fcHJlZnNBY2Nlc3Nvcikge1xuICAgICAgcmV0dXJuIG9mKHt9KVxuICAgIH1cblxuICAgIGNvbnN0IGFjY2Vzc29yID0gKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+ID0+XG4gICAgICB0aGlzLl9wcmVmc0FjY2Vzc29yID8gdGhpcy5fcHJlZnNBY2Nlc3Nvci5nZXQoa2V5KSA6IG9mKCd7fScpXG5cbiAgICByZXR1cm4gcmVmcmVzaFN1YmplY3QucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh7fSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gYWNjZXNzb3IocHJlZktleSkucGlwZShcbiAgICAgICAgbWFwKHYgPT4ge1xuICAgICAgICAgIGlmICghdikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUT0RPOiBBZGQgYSBzY2hlbWEgdmFsaWRhdG9yIGFuZCBtaWdyYXRpb24gdG9vbCB0byBhdm9pZCBwYXJzaW5nIGlzc3Vlcy5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodikgYXMgSVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgbWFwKHYgPT4gISF2ID8gdiA6IHt9KSxcbiAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3ByZWZlcmVuY2VzJCcsIHYpKVxuICAgICAgICAvLyB0YXAodiA9PiB0aGlzLl9wZW5kaW5nID0gZmFsc2UpXG4gICAgICApKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuICB9XG5cbiAgcHVibGljIHJlZnJlc2gocHJlZmVyZW5jZUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJlZnMgPSB0aGlzLl90YWJsZVByZWZzTWFwLmdldChwcmVmZXJlbmNlS2V5KVxuICAgIGlmIChwcmVmcykge1xuICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWVcbiAgICAgIHByZWZzLnJlZnJlc2gubmV4dCgpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogSW1wcm92ZSB0aGlzIHVwZGF0aW5nIHRvIGJlIG1vcmUgZ2VuZXJpYywgc28gd2UgY2FuIHF1aWNrbHkgYWRkXG4gIC8vIGVkaXRzIGZvciBkaWZmZXJlbnQgcHJlZmVyZW5jZSBzY2hlbWEncy5cbiAgLy9cbiAgLy8gVE9ETzogRGVjaWRlIGlmIGEgc2VuZCBxdWV1ZS9tZXJnaW5nIG9mIHBlbmRpbmcgcXVldWUgaXMgbmVlZGVkIHRvIGF2b2lkXG4gIC8vIG91dCBvZiBvcmRlciB1cGRhdGVzLiBUaGlzIHNob3VsZG4ndCBiZSBhbiBpc3N1ZSwgd2l0aCBob3cgZmFzdCBwcmVmZXJlbmNlc1xuICAvLyB3aWxsIG1vc3QgbGlrZWx5IGJlIGNoYW5naW5nLCBidXQgaXQgY291bGQgaGFwcGVuIGluIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAgLy8gbmV0d29yayBpc3N1ZXMuXG4gIHB1YmxpYyBzZXRDb2x1bW5QcmVmZXJlbmNlKHByZWZlcmVuY2VLZXk6IHN0cmluZywgY29sdW1uOiBJVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzQ29sdW1uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wcmVmc0FjY2Vzc29yKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZVxuICAgIHRoaXMucHJlZmVyZW5jZXMocHJlZmVyZW5jZUtleSkucGlwZShcbiAgICAgIG1hcChwcmVmcyA9PiB7XG4gICAgICAgIC8vIE1ha2luZyB0aGUgcHJlZmVyZW5jZXMgaW1tdXRhYmxlIG1heSBub3QgYmUgbmVjZXNzYXJ5LCBidXQgZm9yIG5vd1xuICAgICAgICAvLyB0aGlzIG9iai0+c3RyLT5vYmogd2lsbCB3b3JrIGFzIGEgbmFpdmUgY2xvbmUuXG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByZWZzLmNvbHVtbnMgfHwgW10pKVxuICAgICAgICBjb25zdCBfY29sUHJlZiA9IGNvbHVtbnMuZmluZCgoYzogYW55KSA9PiBjLnByb3AgPT09IGNvbHVtbi5wcm9wKVxuICAgICAgICAvLyBjb25zb2xlLmxvZygnaGFzJywgX2NvbFByZWYpXG4gICAgICAgIGlmIChfY29sUHJlZikge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdoYXNQcm9wZXJ0eShjb2x1bW4sIFwid2lkdGhcIikpJywgaGFzUHJvcGVydHkoY29sdW1uLCAnd2lkdGgnKSlcbiAgICAgICAgICBpZiAoaGFzUHJvcGVydHkoY29sdW1uLCAnd2lkdGgnKSkgeyBfY29sUHJlZi53aWR0aCA9IGNvbHVtbi53aWR0aCB9XG4gICAgICAgICAgaWYgKGhhc1Byb3BlcnR5KGNvbHVtbiwgJ2NhbkF1dG9SZXNpemUnKSkgeyBfY29sUHJlZi5jYW5BdXRvUmVzaXplID0gY29sdW1uLmNhbkF1dG9SZXNpemUgfVxuICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eShjb2x1bW4sICdoaWRkZW4nKSkgeyBfY29sUHJlZi5oaWRkZW4gPSBjb2x1bW4uaGlkZGVuIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zLnB1c2goeyAuLi5jb2x1bW4gfSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdQcmVmczogSVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlcyA9IHsgLi4ucHJlZnMsIGNvbHVtbnMgfVxuICAgICAgICByZXR1cm4gbmV3UHJlZnNcbiAgICAgIH0pLFxuICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ25ld1ByZWZzJywgdikpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcChuZXdQcmVmcyA9PiB0aGlzLl9wcmVmc0FjY2Vzc29yXG4gICAgICAgID8gdGhpcy5fcHJlZnNBY2Nlc3Nvci51cGRhdGUocHJlZmVyZW5jZUtleSwgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKVxuICAgICAgICA6IG9mKG5ld1ByZWZzKVxuICAgICAgKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnJlZnJlc2gocHJlZmVyZW5jZUtleSkpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKVxuICB9XG5cbiAgcHVibGljIHdpdGhDb2x1bW5QcmVmZXJlbmNlczxUPihwcmVmZXJlbmNlS2V5OiBzdHJpbmcsIGNvbHVtbnM6IFRbXSk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMucHJlZmVyZW5jZXMocHJlZmVyZW5jZUtleSkucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh7fSBhcyBJVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzKSxcbiAgICAgIG1hcChwcmVmZXJlbmNlcyA9PiBwcmVmZXJlbmNlcyAmJiBwcmVmZXJlbmNlcy5jb2x1bW5zXG4gICAgICAgID8gd2l0aFN0b3JlZENvbHVtbkluZm8oY29sdW1ucywgcHJlZmVyZW5jZXMuY29sdW1ucykgYXMgVFtdXG4gICAgICAgIDogY29sdW1uc1xuICAgICAgKVxuICAgIClcbiAgfVxuXG59XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL3NlcnZpY2VzL2RhdGF0YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDdkUsT0FBTyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbEYsT0FBTyxFQUFlLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFrRSxNQUFNLHVCQUF1QixDQUFBO0FBRW5JLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDBDQUEwQyxDQUFBOzs7QUFTakcsMkJBQTJCO0FBSzNCLE1BQU0sT0FBTywyQkFBMkI7SUFTdEMsWUFDc0UsY0FBb0Q7UUFBcEQsbUJBQWMsR0FBZCxjQUFjLENBQXNDO1FBUnpHLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUE7UUFDM0UsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFBO0lBT25CLENBQUM7SUFMTCxJQUFXLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBQzdDLElBQVcsTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFNcEMsV0FBVyxDQUFDLGFBQXFCO1FBQ3RDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENB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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FDZixFQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxFQUFFLENBQUE7SUFDaEIsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixpREFBaUQ7SUFDakQsOENBQThDO0lBQzlDLDREQUE0RDtJQUM1RCxvRUFBb0U7SUFDcEUsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUVJLHdCQUF3QixDQUFDLFVBQWtCO1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFcEMsNEJBQTRCO1FBRTVCLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQzs7OztZQTlLRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs0Q0FXSSxRQUFRLFlBQUksTUFBTSxTQUFDLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgaXNEZXZNb2RlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IGhhc1Byb3BlcnR5LCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5pbXBvcnQgeyBFTVBUWV9EQVRBVEFCTEVfUFJFRkVSRU5DRVMsIFRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlcywgVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3ByZWZlcmVuY2VzJ1xuaW1wb3J0IHR5cGUgeyBUaGVTZWFtRGF0YXRhYmxlUHJlZmVyZW5jZXNBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9wcmVmZXJlbmNlcy1hY2Nlc3NvcidcbmltcG9ydCB7IFRIRVNFQU1fREFUQVRBQkxFX1BSRUZFUkVOQ0VTX0FDQ0VTU09SIH0gZnJvbSAnLi4vdG9rZW5zL2RhdGF0YWJsZS1wcmVmZXJlbmNlcy1hY2Nlc3NvcidcbmltcG9ydCB7IHdpdGhTdG9yZWRDb2x1bW5JbmZvIH0gZnJvbSAnLi4vdXRpbHMvd2l0aC1zdG9yZWQtY29sdW1uLWluZm8nXG5pbXBvcnQgeyBDb2x1bW5zQWx0ZXJhdGlvblN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbidcblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YXRhYmxlUHJlZmVyZW5jZXNNYXBSZWNvcmQge1xuICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlcz5cbiAgcmVmcmVzaDogU3ViamVjdDx2b2lkPlxufVxuXG4vLyBUT0RPOiBBZGQgcGVyIGtleSBzdGF0dXNcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVByZWZzTWFwID0gbmV3IE1hcDxzdHJpbmcsIElEYXRhdGFibGVQcmVmZXJlbmNlc01hcFJlY29yZD4oKVxuICBwcml2YXRlIF9wZW5kaW5nID0gZmFsc2VcbiAgcHJpdmF0ZSBfbG9hZGVkID0gZmFsc2VcblxuICBwdWJsaWMgZ2V0IHBlbmRpbmcoKSB7IHJldHVybiB0aGlzLl9wZW5kaW5nIH1cbiAgcHVibGljIGdldCBsb2FkZWQoKSB7IHJldHVybiB0aGlzLl9sb2FkZWQgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVEhFU0VBTV9EQVRBVEFCTEVfUFJFRkVSRU5DRVNfQUNDRVNTT1IpIHByaXZhdGUgX3ByZWZzQWNjZXNzb3I/OiBUaGVTZWFtRGF0YXRhYmxlUHJlZmVyZW5jZXNBY2Nlc3NvclxuICApIHsgfVxuXG4gIHB1YmxpYyBwcmVmZXJlbmNlcyhwcmVmZXJlbmNlS2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlcz4ge1xuICAgIGxldCBwcmVmcyA9IHRoaXMuX3RhYmxlUHJlZnNNYXAuZ2V0KHByZWZlcmVuY2VLZXkpXG4gICAgaWYgKCFwcmVmcykge1xuICAgICAgY29uc3QgcmVmcmVzaFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gICAgICBwcmVmcyA9IHtcbiAgICAgICAgb2JzZXJ2YWJsZTogdGhpcy5fY3JlYXRlT2JzZXJ2YWJsZShyZWZyZXNoU3ViamVjdCwgcHJlZmVyZW5jZUtleSksXG4gICAgICAgIHJlZnJlc2g6IHJlZnJlc2hTdWJqZWN0XG4gICAgICB9XG4gICAgICB0aGlzLl90YWJsZVByZWZzTWFwLnNldChwcmVmZXJlbmNlS2V5LCBwcmVmcylcbiAgICB9XG4gICAgcmV0dXJuIHByZWZzLm9ic2VydmFibGVcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU9ic2VydmFibGUocmVmcmVzaFN1YmplY3Q6IFN1YmplY3Q8dm9pZD4sIHByZWZLZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzPiB7XG4gICAgaWYgKCF0aGlzLl9wcmVmc0FjY2Vzc29yKSB7XG4gICAgICByZXR1cm4gb2YoRU1QVFlfREFUQVRBQkxFX1BSRUZFUkVOQ0VTKVxuICAgIH1cblxuICAgIGNvbnN0IGFjY2Vzc29yID0gKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+ID0+XG4gICAgICB0aGlzLl9wcmVmc0FjY2Vzc29yID8gdGhpcy5fcHJlZnNBY2Nlc3Nvci5nZXQoa2V5KSA6IG9mKEpTT04uc3RyaW5naWZ5KEVNUFRZX0RBVEFUQUJMRV9QUkVGRVJFTkNFUykpXG5cbiAgICByZXR1cm4gcmVmcmVzaFN1YmplY3QucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGFjY2Vzc29yKHByZWZLZXkpLnBpcGUoXG4gICAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVE9ETzogQWRkIGEgc2NoZW1hIHZhbGlkYXRvciBhbmQgbWlncmF0aW9uIHRvb2wgdG8gYXZvaWQgcGFyc2luZyBpc3N1ZXMuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHJldHVybiBKU09OLnBhcnNlKHYpIGFzIFRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rlc2NlcmlhbGl6ZVByZWZlcmVuY2VzKHYpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAodiA9PiBub3ROdWxsT3JVbmRlZmluZWQodikgPyB2IDogRU1QVFlfREFUQVRBQkxFX1BSRUZFUkVOQ0VTKSxcbiAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3ByZWZlcmVuY2VzJCcsIHYpKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICApKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKVxuICB9XG5cbiAgcHVibGljIHJlZnJlc2gocHJlZmVyZW5jZUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcHJlZnMgPSB0aGlzLl90YWJsZVByZWZzTWFwLmdldChwcmVmZXJlbmNlS2V5KVxuICAgIGlmIChwcmVmcykge1xuICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWVcbiAgICAgIHByZWZzLnJlZnJlc2gubmV4dCgpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogSW1wcm92ZSB0aGlzIHVwZGF0aW5nIHRvIGJlIG1vcmUgZ2VuZXJpYywgc28gd2UgY2FuIHF1aWNrbHkgYWRkXG4gIC8vIGVkaXRzIGZvciBkaWZmZXJlbnQgcHJlZmVyZW5jZSBzY2hlbWEncy5cbiAgLy9cbiAgLy8gVE9ETzogRGVjaWRlIGlmIGEgc2VuZCBxdWV1ZS9tZXJnaW5nIG9mIHBlbmRpbmcgcXVldWUgaXMgbmVlZGVkIHRvIGF2b2lkXG4gIC8vIG91dCBvZiBvcmRlciB1cGRhdGVzLiBUaGlzIHNob3VsZG4ndCBiZSBhbiBpc3N1ZSwgd2l0aCBob3cgZmFzdCBwcmVmZXJlbmNlc1xuICAvLyB3aWxsIG1vc3QgbGlrZWx5IGJlIGNoYW5naW5nLCBidXQgaXQgY291bGQgaGFwcGVuIGluIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAgLy8gbmV0d29yayBpc3N1ZXMuXG4gIC8vIHB1YmxpYyBzZXRDb2x1bW5QcmVmZXJlbmNlKHByZWZlcmVuY2VLZXk6IHN0cmluZywgY29sdW1uOiBUaGVTZWFtRGF0YXRhYmxlUHJlZmVyZW5jZXNDb2x1bW4pOiB2b2lkIHtcbiAgLy8gICBpZiAoIXRoaXMuX3ByZWZzQWNjZXNzb3IpIHtcbiAgLy8gICAgIHJldHVyblxuICAvLyAgIH1cblxuICAvLyAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlXG4gIC8vICAgdGhpcy5wcmVmZXJlbmNlcyhwcmVmZXJlbmNlS2V5KS5waXBlKFxuICAvLyAgICAgbWFwKHByZWZzID0+IHtcbiAgLy8gICAgICAgLy8gTWFraW5nIHRoZSBwcmVmZXJlbmNlcyBpbW11dGFibGUgbWF5IG5vdCBiZSBuZWNlc3NhcnksIGJ1dCBmb3Igbm93XG4gIC8vICAgICAgIC8vIHRoaXMgb2JqLT5zdHItPm9iaiB3aWxsIHdvcmsgYXMgYSBuYWl2ZSBjbG9uZS5cbiAgLy8gICAgICAgY29uc3QgY29sdW1ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHJlZnMuY29sdW1ucyB8fCBbXSkpXG4gIC8vICAgICAgIGNvbnN0IF9jb2xQcmVmID0gY29sdW1ucy5maW5kKChjOiBhbnkpID0+IGMucHJvcCA9PT0gY29sdW1uLnByb3ApXG4gIC8vICAgICAgIC8vIGNvbnNvbGUubG9nKCdoYXMnLCBfY29sUHJlZilcbiAgLy8gICAgICAgaWYgKF9jb2xQcmVmKSB7XG4gIC8vICAgICAgICAgLy8gY29uc29sZS5sb2coJ2hhc1Byb3BlcnR5KGNvbHVtbiwgXCJ3aWR0aFwiKSknLCBoYXNQcm9wZXJ0eShjb2x1bW4sICd3aWR0aCcpKVxuICAvLyAgICAgICAgIGlmIChoYXNQcm9wZXJ0eShjb2x1bW4sICd3aWR0aCcpKSB7IF9jb2xQcmVmLndpZHRoID0gY29sdW1uLndpZHRoIH1cbiAgLy8gICAgICAgICBpZiAoaGFzUHJvcGVydHkoY29sdW1uLCAnY2FuQXV0b1Jlc2l6ZScpKSB7IF9jb2xQcmVmLmNhbkF1dG9SZXNpemUgPSBjb2x1bW4uY2FuQXV0b1Jlc2l6ZSB9XG4gIC8vICAgICAgICAgaWYgKGhhc1Byb3BlcnR5KGNvbHVtbiwgJ2hpZGRlbicpKSB7IF9jb2xQcmVmLmhpZGRlbiA9IGNvbHVtbi5oaWRkZW4gfVxuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIGNvbHVtbnMucHVzaCh7IC4uLmNvbHVtbiB9KVxuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNvbnN0IG5ld1ByZWZzOiBUaGVTZWFtRGF0YXRhYmxlUHJlZmVyZW5jZXMgPSB7IC4uLnByZWZzLCBjb2x1bW5zIH1cbiAgLy8gICAgICAgcmV0dXJuIG5ld1ByZWZzXG4gIC8vICAgICB9KSxcbiAgLy8gICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCduZXdQcmVmcycsIHYpKSxcbiAgLy8gICAgIHRha2UoMSksXG4gIC8vICAgICBzd2l0Y2hNYXAobmV3UHJlZnMgPT4gdGhpcy5fcHJlZnNBY2Nlc3NvclxuICAvLyAgICAgICA/IHRoaXMuX3ByZWZzQWNjZXNzb3IudXBkYXRlKHByZWZlcmVuY2VLZXksIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSlcbiAgLy8gICAgICAgOiBvZihuZXdQcmVmcylcbiAgLy8gICAgICksXG4gIC8vICAgICB0YXAoKCkgPT4gdGhpcy5yZWZyZXNoKHByZWZlcmVuY2VLZXkpKVxuICAvLyAgIClcbiAgLy8gICAuc3Vic2NyaWJlKClcbiAgLy8gfVxuXG4gIHB1YmxpYyBzZXRBbHRlcmF0aW9ucyhwcmVmZXJlbmNlS2V5OiBzdHJpbmcsIGFsdGVyYXRpb25zOiBDb2x1bW5zQWx0ZXJhdGlvblN0YXRlW10pOiB2b2lkIHtcbiAgICAgIGlmICghdGhpcy5fcHJlZnNBY2Nlc3Nvcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWVcbiAgICAgIHRoaXMucHJlZmVyZW5jZXMocHJlZmVyZW5jZUtleSkucGlwZShcbiAgICAgICAgbWFwKHByZWZzID0+IHtcbiAgICAgICAgICAvLyBNYWtpbmcgdGhlIHByZWZlcmVuY2VzIGltbXV0YWJsZSBtYXkgbm90IGJlIG5lY2Vzc2FyeSwgYnV0IGZvciBub3dcbiAgICAgICAgICAvLyB0aGlzIG9iai0+c3RyLT5vYmogd2lsbCB3b3JrIGFzIGEgbmFpdmUgY2xvbmUuXG4gICAgICAgICAgLy8gY29uc3QgY29sdW1ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHJlZnMuY29sdW1ucyB8fCBbXSkpXG4gICAgICAgICAgLy8gY29uc3QgX2NvbFByZWYgPSBjb2x1bW5zLmZpbmQoKGM6IGFueSkgPT4gYy5wcm9wID09PSBjb2x1bW4ucHJvcClcbiAgICAgICAgICAvLyAvLyBjb25zb2xlLmxvZygnaGFzJywgX2NvbFByZWYpXG4gICAgICAgICAgLy8gaWYgKF9jb2xQcmVmKSB7XG4gICAgICAgICAgLy8gICAvLyBjb25zb2xlLmxvZygnaGFzUHJvcGVydHkoY29sdW1uLCBcIndpZHRoXCIpKScsIGhhc1Byb3BlcnR5KGNvbHVtbiwgJ3dpZHRoJykpXG4gICAgICAgICAgLy8gICBpZiAoaGFzUHJvcGVydHkoY29sdW1uLCAnd2lkdGgnKSkgeyBfY29sUHJlZi53aWR0aCA9IGNvbHVtbi53aWR0aCB9XG4gICAgICAgICAgLy8gICBpZiAoaGFzUHJvcGVydHkoY29sdW1uLCAnY2FuQXV0b1Jlc2l6ZScpKSB7IF9jb2xQcmVmLmNhbkF1dG9SZXNpemUgPSBjb2x1bW4uY2FuQXV0b1Jlc2l6ZSB9XG4gICAgICAgICAgLy8gICBpZiAoaGFzUHJvcGVydHkoY29sdW1uLCAnaGlkZGVuJykpIHsgX2NvbFByZWYuaGlkZGVuID0gY29sdW1uLmhpZGRlbiB9XG4gICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAvLyAgIGNvbHVtbnMucHVzaCh7IC4uLmNvbHVtbiB9KVxuICAgICAgICAgIC8vIH1cbiAgICAgICAgICAvLyBjb25zdCBuZXdQcmVmczogVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzID0geyAuLi5wcmVmcywgY29sdW1ucyB9XG4gICAgICAgICAgLy8gcmV0dXJuIG5ld1ByZWZzXG5cbiAgICAgICAgICBjb25zdCBuZXdQcmVmczogVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzID0ge1xuICAgICAgICAgICAgLi4uRU1QVFlfREFUQVRBQkxFX1BSRUZFUkVOQ0VTLFxuICAgICAgICAgICAgYWx0ZXJhdGlvbnNcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ld1ByZWZzXG4gICAgICAgIH0pLFxuICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnbmV3UHJlZnMnLCB2KSksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcChuZXdQcmVmcyA9PiB0aGlzLl9wcmVmc0FjY2Vzc29yXG4gICAgICAgICAgPyB0aGlzLl9wcmVmc0FjY2Vzc29yLnVwZGF0ZShwcmVmZXJlbmNlS2V5LCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpXG4gICAgICAgICAgOiBvZihuZXdQcmVmcylcbiAgICAgICAgKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMucmVmcmVzaChwcmVmZXJlbmNlS2V5KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICB9XG5cbiAgLy8gcHVibGljIHdpdGhDb2x1bW5QcmVmZXJlbmNlczxUPihwcmVmZXJlbmNlS2V5OiBzdHJpbmcsIGNvbHVtbnM6IFRbXSk6IE9ic2VydmFibGU8VFtdPiB7XG4gIC8vICAgcmV0dXJuIHRoaXMucHJlZmVyZW5jZXMocHJlZmVyZW5jZUtleSkucGlwZShcbiAgLy8gICAgIHN0YXJ0V2l0aChFTVBUWV9EQVRBVEFCTEVfUFJFRkVSRU5DRVMpLFxuICAvLyAgICAgbWFwKHByZWZlcmVuY2VzID0+IHByZWZlcmVuY2VzICYmIHByZWZlcmVuY2VzLmNvbHVtbnNcbiAgLy8gICAgICAgPyB3aXRoU3RvcmVkQ29sdW1uSW5mbyhjb2x1bW5zLCBwcmVmZXJlbmNlcy5jb2x1bW5zKSBhcyBUW11cbiAgLy8gICAgICAgOiBjb2x1bW5zXG4gIC8vICAgICApXG4gIC8vICAgKVxuICAvLyB9XG5cbiAgcHJpdmF0ZSBfZGVzY2VyaWFsaXplUHJlZmVyZW5jZXMoc2VyaWFsaXplZDogc3RyaW5nKTogVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzIHtcbiAgICBjb25zdCBwcmVmcyA9IEpTT04ucGFyc2Uoc2VyaWFsaXplZClcblxuICAgIC8vIFRPRE86IEltcGxlbWVudCBtaWdyYXRpb25cblxuICAgIHJldHVybiBwcmVmc1xuICB9XG5cbn1cbiJdfQ==
@@ -2,5 +2,7 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './public-api';
5
+ export { ColumnsAlterationsManagerService as ɵc } from './services/columns-alterations-manager.service';
6
+ export { ColumnsManagerService as ɵb } from './services/columns-manager.service';
5
7
  export { THESEAM_DATATABLE_ACCESSOR as ɵa } from './tokens/datatable-accessor';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlc2VhbS11aS1jb21tb24tZGF0YXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS90aGVzZWFtLXVpLWNvbW1vbi1kYXRhdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsMEJBQTBCLElBQUksRUFBRSxFQUFDLE1BQU0sNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG5cbmV4cG9ydCB7VEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IgYXMgybVhfSBmcm9tICcuL3Rva2Vucy9kYXRhdGFibGUtYWNjZXNzb3InOyJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlc2VhbS11aS1jb21tb24tZGF0YXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS90aGVzZWFtLXVpLWNvbW1vbi1kYXRhdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsZ0NBQWdDLElBQUksRUFBRSxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFDdEcsT0FBTyxFQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQy9FLE9BQU8sRUFBQywwQkFBMEIsSUFBSSxFQUFFLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcblxuZXhwb3J0IHtDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSBhcyDJtWN9IGZyb20gJy4vc2VydmljZXMvY29sdW1ucy1hbHRlcmF0aW9ucy1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0IHtDb2x1bW5zTWFuYWdlclNlcnZpY2UgYXMgybVifSBmcm9tICcuL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlJztcbmV4cG9ydCB7VEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IgYXMgybVhfSBmcm9tICcuL3Rva2Vucy9kYXRhdGFibGUtYWNjZXNzb3InOyJdfQ==
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- export const THESEAM_DATATABLE_PREFERENCES_ACCESSOR = new InjectionToken('ITheSeamDatatablePreferencesAccessor');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXByZWZlcmVuY2VzLWFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS90b2tlbnMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLWFjY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFJOUMsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsSUFBSSxjQUFjLENBQ3RFLHNDQUFzQyxDQUN2QyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5pbXBvcnQgeyBJVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzQWNjZXNzb3IgfSBmcm9tICcuLi9tb2RlbHMvcHJlZmVyZW5jZXMtYWNjZXNzb3InXG5cbmV4cG9ydCBjb25zdCBUSEVTRUFNX0RBVEFUQUJMRV9QUkVGRVJFTkNFU19BQ0NFU1NPUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJVGhlU2VhbURhdGF0YWJsZVByZWZlcmVuY2VzQWNjZXNzb3I+KFxuICAnSVRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc0FjY2Vzc29yJ1xuKVxuIl19
2
+ export const THESEAM_DATATABLE_PREFERENCES_ACCESSOR = new InjectionToken('TheSeamDatatablePreferencesAccessor');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXByZWZlcmVuY2VzLWFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS90b2tlbnMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLWFjY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFJOUMsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsSUFBSSxjQUFjLENBQ3RFLHFDQUFxQyxDQUN0QyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlUHJlZmVyZW5jZXNBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9wcmVmZXJlbmNlcy1hY2Nlc3NvcidcblxuZXhwb3J0IGNvbnN0IFRIRVNFQU1fREFUQVRBQkxFX1BSRUZFUkVOQ0VTX0FDQ0VTU09SID0gbmV3IEluamVjdGlvblRva2VuPFRoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc0FjY2Vzc29yPihcbiAgJ1RoZVNlYW1EYXRhdGFibGVQcmVmZXJlbmNlc0FjY2Vzc29yJ1xuKVxuIl19
@@ -0,0 +1,18 @@
1
+ export const ACTION_MENU_COLUMN_PROP = '$$__actionMenu__';
2
+ export function createActionMenuColumn(cellTemplate, headerTemplate) {
3
+ return {
4
+ prop: ACTION_MENU_COLUMN_PROP,
5
+ name: '',
6
+ width: 50,
7
+ minWidth: 50,
8
+ maxWidth: 50,
9
+ resizeable: false,
10
+ sortable: false,
11
+ draggable: false,
12
+ // TODO: Fix column auto sizing with fixed column and cell overlay before enabling.
13
+ // frozenRight: true,
14
+ cellTemplate,
15
+ headerTemplate,
16
+ };
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWFjdGlvbi1tZW51LWNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvdXRpbHMvY3JlYXRlLWFjdGlvbi1tZW51LWNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQTtBQUV6RCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFlBQWlCLEVBQ2pCLGNBQW1CO0lBRW5CLE9BQU87UUFDTCxJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLElBQUksRUFBRSxFQUFFO1FBQ1IsS0FBSyxFQUFFLEVBQUU7UUFDVCxRQUFRLEVBQUUsRUFBRTtRQUNaLFFBQVEsRUFBRSxFQUFFO1FBQ1osVUFBVSxFQUFFLEtBQUs7UUFDakIsUUFBUSxFQUFFLEtBQUs7UUFDZixTQUFTLEVBQUUsS0FBSztRQUNoQixtRkFBbUY7UUFDbkYscUJBQXFCO1FBQ3JCLFlBQVk7UUFDWixjQUFjO0tBQ2YsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbidcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9NRU5VX0NPTFVNTl9QUk9QID0gJyQkX19hY3Rpb25NZW51X18nXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25NZW51Q29sdW1uKFxuICBjZWxsVGVtcGxhdGU6IGFueSxcbiAgaGVhZGVyVGVtcGxhdGU6IGFueVxuKTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB7XG4gIHJldHVybiB7XG4gICAgcHJvcDogQUNUSU9OX01FTlVfQ09MVU1OX1BST1AsXG4gICAgbmFtZTogJycsXG4gICAgd2lkdGg6IDUwLFxuICAgIG1pbldpZHRoOiA1MCxcbiAgICBtYXhXaWR0aDogNTAsXG4gICAgcmVzaXplYWJsZTogZmFsc2UsXG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgLy8gVE9ETzogRml4IGNvbHVtbiBhdXRvIHNpemluZyB3aXRoIGZpeGVkIGNvbHVtbiBhbmQgY2VsbCBvdmVybGF5IGJlZm9yZSBlbmFibGluZy5cbiAgICAvLyBmcm96ZW5SaWdodDogdHJ1ZSxcbiAgICBjZWxsVGVtcGxhdGUsXG4gICAgaGVhZGVyVGVtcGxhdGUsXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ export const CHECKBOX_COLUMN_PROP = '$$__checkbox__';
2
+ export function createCheckboxColumn() {
3
+ return {
4
+ prop: CHECKBOX_COLUMN_PROP,
5
+ name: '',
6
+ width: 40,
7
+ sortable: false,
8
+ canAutoResize: false,
9
+ draggable: false,
10
+ resizeable: false,
11
+ headerCheckboxable: true,
12
+ checkboxable: true,
13
+ };
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNoZWNrYm94LWNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvdXRpbHMvY3JlYXRlLWNoZWNrYm94LWNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQTtBQUVwRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU87UUFDTCxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLElBQUksRUFBRSxFQUFFO1FBQ1IsS0FBSyxFQUFFLEVBQUU7UUFDVCxRQUFRLEVBQUUsS0FBSztRQUNmLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbidcblxuZXhwb3J0IGNvbnN0IENIRUNLQk9YX0NPTFVNTl9QUk9QID0gJyQkX19jaGVja2JveF9fJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlY2tib3hDb2x1bW4oKTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB7XG4gIHJldHVybiB7XG4gICAgcHJvcDogQ0hFQ0tCT1hfQ09MVU1OX1BST1AsXG4gICAgbmFtZTogJycsXG4gICAgd2lkdGg6IDQwLFxuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICBjYW5BdXRvUmVzaXplOiBmYWxzZSxcbiAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgIHJlc2l6ZWFibGU6IGZhbHNlLFxuICAgIGhlYWRlckNoZWNrYm94YWJsZTogdHJ1ZSxcbiAgICBjaGVja2JveGFibGU6IHRydWUsXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { camelCase } from '@marklb/ngx-datatable';
2
+ import { notNullOrUndefined } from '@theseam/ui-common/utils';
3
+ export function getColumnProp(col) {
4
+ if (!notNullOrUndefined(col.prop) && col.name) {
5
+ return camelCase(col.name);
6
+ }
7
+ return col.prop === null ? undefined : col.prop;
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvbHVtbi1wcm9wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS91dGlscy9nZXQtY29sdW1uLXByb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0MsTUFBTSx1QkFBdUIsQ0FBQTtBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUU3RCxNQUFNLFVBQVUsYUFBYSxDQUMzQixHQUFNO0lBRU4sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO1FBQzdDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUMzQjtJQUVELE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQTtBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FtZWxDYXNlLCBUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW5Qcm9wIH0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Qcm9wPFQgZXh0ZW5kcyB7IHByb3A/OiBUYWJsZUNvbHVtblByb3AgfCBudWxsLCBuYW1lPzogc3RyaW5nIHwgbnVsbCB9PihcbiAgY29sOiBUXG4pOiBUYWJsZUNvbHVtblByb3AgfCB1bmRlZmluZWQge1xuICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChjb2wucHJvcCkgJiYgY29sLm5hbWUpIHtcbiAgICByZXR1cm4gY2FtZWxDYXNlKGNvbC5uYW1lKVxuICB9XG5cbiAgcmV0dXJuIGNvbC5wcm9wID09PSBudWxsID8gdW5kZWZpbmVkIDogY29sLnByb3Bcbn1cbiJdfQ==