@sisense/sdk-ui-angular 1.33.0 → 2.0.0

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 (154) hide show
  1. package/dist/ai/lib/component-wrapper-helpers/context-connectors.d.ts +2 -2
  2. package/dist/ai/lib/components/chatbot.component.d.ts +2 -8
  3. package/dist/ai/lib/components/get-nlg-insights.component.d.ts +2 -8
  4. package/dist/ai/lib/sdk-ai.module.d.ts +0 -2
  5. package/dist/ai/lib/sdk-ui-core-exports.d.ts +1 -1
  6. package/dist/ai/lib/services/ai.service.d.ts +12 -8
  7. package/dist/ai/public-api.d.ts +2 -2
  8. package/dist/esm2020/ai/lib/component-wrapper-helpers/context-connectors.mjs +15 -9
  9. package/dist/esm2020/ai/lib/components/chatbot.component.mjs +9 -16
  10. package/dist/esm2020/ai/lib/components/get-nlg-insights.component.mjs +9 -16
  11. package/dist/esm2020/ai/lib/sdk-ai.module.mjs +2 -4
  12. package/dist/esm2020/ai/lib/sdk-ui-core-exports.mjs +1 -1
  13. package/dist/esm2020/ai/lib/services/ai.service.mjs +4 -9
  14. package/dist/esm2020/ai/public-api.mjs +3 -3
  15. package/dist/esm2020/lib/component-wrapper-helpers/context-connectors.mjs +60 -36
  16. package/dist/esm2020/lib/components/charts/area-chart.component.mjs +1 -2
  17. package/dist/esm2020/lib/components/charts/area-range-chart.component.mjs +1 -3
  18. package/dist/esm2020/lib/components/charts/areamap-chart.component.mjs +1 -2
  19. package/dist/esm2020/lib/components/charts/bar-chart.component.mjs +1 -2
  20. package/dist/esm2020/lib/components/charts/boxplot-chart.component.mjs +1 -2
  21. package/dist/esm2020/lib/components/charts/chart.component.mjs +8 -10
  22. package/dist/esm2020/lib/components/charts/column-chart.component.mjs +1 -2
  23. package/dist/esm2020/lib/components/charts/funnel-chart.component.mjs +1 -2
  24. package/dist/esm2020/lib/components/charts/index.mjs +13 -13
  25. package/dist/esm2020/lib/components/charts/indicator-chart.component.mjs +1 -2
  26. package/dist/esm2020/lib/components/charts/line-chart.component.mjs +1 -2
  27. package/dist/esm2020/lib/components/charts/pie-chart.component.mjs +1 -2
  28. package/dist/esm2020/lib/components/charts/pivot-table.component.mjs +8 -9
  29. package/dist/esm2020/lib/components/charts/polar-chart.component.mjs +1 -2
  30. package/dist/esm2020/lib/components/charts/scatter-chart.component.mjs +1 -2
  31. package/dist/esm2020/lib/components/charts/scattermap-chart.component.mjs +1 -1
  32. package/dist/esm2020/lib/components/charts/sunburst-chart.component.mjs +1 -2
  33. package/dist/esm2020/lib/components/charts/table.component.mjs +8 -10
  34. package/dist/esm2020/lib/components/charts/treemap-chart.component.mjs +1 -2
  35. package/dist/esm2020/lib/components/context-menu.component.mjs +9 -9
  36. package/dist/esm2020/lib/components/dashboard/dashboard-by-id.component.mjs +8 -9
  37. package/dist/esm2020/lib/components/dashboard/dashboard.component.mjs +10 -10
  38. package/dist/esm2020/lib/components/dashboard/index.mjs +2 -2
  39. package/dist/esm2020/lib/components/drilldown-breadcrumbs.component.mjs +8 -9
  40. package/dist/esm2020/lib/components/filters/criteria-filter-tile.component.mjs +8 -9
  41. package/dist/esm2020/lib/components/filters/date-range-filter-tile.component.mjs +8 -9
  42. package/dist/esm2020/lib/components/filters/filter-tile.component.mjs +147 -0
  43. package/dist/esm2020/lib/components/filters/index.mjs +4 -3
  44. package/dist/esm2020/lib/components/filters/member-filter-tile.component.mjs +9 -10
  45. package/dist/esm2020/lib/components/filters/relative-date-filter-tile.component.mjs +8 -9
  46. package/dist/esm2020/lib/components/index.mjs +4 -4
  47. package/dist/esm2020/lib/components/widgets/chart-widget.component.mjs +9 -11
  48. package/dist/esm2020/lib/components/widgets/drilldown-widget.component.mjs +19 -23
  49. package/dist/esm2020/lib/components/widgets/index.mjs +5 -5
  50. package/dist/esm2020/lib/components/widgets/pivot-table-widget.component.mjs +8 -9
  51. package/dist/esm2020/lib/components/widgets/table-widget.component.mjs +8 -9
  52. package/dist/esm2020/lib/components/widgets/widget-by-id.component.mjs +8 -9
  53. package/dist/esm2020/lib/components/widgets/widget.component.mjs +168 -0
  54. package/dist/esm2020/lib/decorators/decorators.module.mjs +1 -1
  55. package/dist/esm2020/lib/decorators/index.mjs +2 -2
  56. package/dist/esm2020/lib/decorators/trackable.decorator.mjs +2 -2
  57. package/dist/esm2020/lib/helpers/dashboard-props-preact-translator.mjs +14 -0
  58. package/dist/esm2020/lib/helpers/event-emitter-with-has-listeners.mjs +31 -0
  59. package/dist/esm2020/lib/helpers/index.mjs +2 -0
  60. package/dist/esm2020/lib/helpers/widget-props-preact-translator.mjs +37 -0
  61. package/dist/esm2020/lib/sdk-ui-core-exports.mjs +1 -1
  62. package/dist/esm2020/lib/sdk-ui.module.mjs +13 -10
  63. package/dist/esm2020/lib/services/dashboard.service.mjs +86 -2
  64. package/dist/esm2020/lib/services/hierarchy.service.mjs +1 -1
  65. package/dist/esm2020/lib/services/index.mjs +4 -4
  66. package/dist/esm2020/lib/services/plugins.service.mjs +1 -1
  67. package/dist/esm2020/lib/services/query.service.mjs +35 -6
  68. package/dist/esm2020/lib/services/sisense-context.service.mjs +1 -1
  69. package/dist/esm2020/lib/services/theme.service.mjs +2 -2
  70. package/dist/esm2020/lib/services/widget.service.mjs +1 -1
  71. package/dist/esm2020/lib/types/chart-event-props.mjs +1 -1
  72. package/dist/esm2020/lib/types/dashboard-config.mjs +1 -1
  73. package/dist/esm2020/lib/types/data-point.mjs +1 -1
  74. package/dist/esm2020/lib/types/filter-event-props.mjs +2 -0
  75. package/dist/esm2020/lib/types/index.mjs +4 -3
  76. package/dist/esm2020/lib/utilities/dashboard-helpers.mjs +2 -15
  77. package/dist/esm2020/lib/utilities/dashboard-model-translator.mjs +1 -1
  78. package/dist/esm2020/lib/utilities/widget-model-translator.mjs +1 -1
  79. package/dist/esm2020/public-api.mjs +4 -4
  80. package/dist/esm2020/version.mjs +2 -2
  81. package/dist/fesm2015/sisense-sdk-ui-angular-ai.mjs +32 -49
  82. package/dist/fesm2015/sisense-sdk-ui-angular-ai.mjs.map +1 -1
  83. package/dist/fesm2015/sisense-sdk-ui-angular.mjs +2545 -2221
  84. package/dist/fesm2015/sisense-sdk-ui-angular.mjs.map +1 -1
  85. package/dist/fesm2020/sisense-sdk-ui-angular-ai.mjs +32 -47
  86. package/dist/fesm2020/sisense-sdk-ui-angular-ai.mjs.map +1 -1
  87. package/dist/fesm2020/sisense-sdk-ui-angular.mjs +2571 -2216
  88. package/dist/fesm2020/sisense-sdk-ui-angular.mjs.map +1 -1
  89. package/dist/lib/component-wrapper-helpers/context-connectors.d.ts +5 -5
  90. package/dist/lib/components/charts/area-chart.component.d.ts +1 -3
  91. package/dist/lib/components/charts/area-range-chart.component.d.ts +1 -4
  92. package/dist/lib/components/charts/areamap-chart.component.d.ts +5 -8
  93. package/dist/lib/components/charts/bar-chart.component.d.ts +1 -3
  94. package/dist/lib/components/charts/boxplot-chart.component.d.ts +7 -9
  95. package/dist/lib/components/charts/chart.component.d.ts +4 -6
  96. package/dist/lib/components/charts/column-chart.component.d.ts +1 -3
  97. package/dist/lib/components/charts/funnel-chart.component.d.ts +1 -3
  98. package/dist/lib/components/charts/index.d.ts +12 -12
  99. package/dist/lib/components/charts/indicator-chart.component.d.ts +3 -5
  100. package/dist/lib/components/charts/line-chart.component.d.ts +1 -3
  101. package/dist/lib/components/charts/pie-chart.component.d.ts +1 -3
  102. package/dist/lib/components/charts/pivot-table.component.d.ts +1 -1
  103. package/dist/lib/components/charts/polar-chart.component.d.ts +1 -3
  104. package/dist/lib/components/charts/scatter-chart.component.d.ts +7 -9
  105. package/dist/lib/components/charts/scattermap-chart.component.d.ts +5 -7
  106. package/dist/lib/components/charts/sunburst-chart.component.d.ts +1 -3
  107. package/dist/lib/components/charts/table.component.d.ts +1 -3
  108. package/dist/lib/components/charts/treemap-chart.component.d.ts +1 -3
  109. package/dist/lib/components/context-menu.component.d.ts +1 -1
  110. package/dist/lib/components/dashboard/dashboard-by-id.component.d.ts +2 -2
  111. package/dist/lib/components/dashboard/dashboard.component.d.ts +7 -2
  112. package/dist/lib/components/dashboard/index.d.ts +1 -1
  113. package/dist/lib/components/drilldown-breadcrumbs.component.d.ts +1 -1
  114. package/dist/lib/components/filters/criteria-filter-tile.component.d.ts +1 -1
  115. package/dist/lib/components/filters/date-range-filter-tile.component.d.ts +1 -1
  116. package/dist/lib/components/filters/filter-tile.component.d.ts +125 -0
  117. package/dist/lib/components/filters/index.d.ts +3 -2
  118. package/dist/lib/components/filters/member-filter-tile.component.d.ts +2 -2
  119. package/dist/lib/components/filters/relative-date-filter-tile.component.d.ts +1 -1
  120. package/dist/lib/components/index.d.ts +3 -3
  121. package/dist/lib/components/widgets/chart-widget.component.d.ts +5 -7
  122. package/dist/lib/components/widgets/drilldown-widget.component.d.ts +3 -13
  123. package/dist/lib/components/widgets/index.d.ts +4 -4
  124. package/dist/lib/components/widgets/pivot-table-widget.component.d.ts +1 -1
  125. package/dist/lib/components/widgets/table-widget.component.d.ts +1 -1
  126. package/dist/lib/components/widgets/widget-by-id.component.d.ts +1 -2
  127. package/dist/lib/components/widgets/widget.component.d.ts +209 -0
  128. package/dist/lib/decorators/index.d.ts +1 -1
  129. package/dist/lib/helpers/dashboard-props-preact-translator.d.ts +4 -0
  130. package/dist/lib/helpers/event-emitter-with-has-listeners.d.ts +24 -0
  131. package/dist/lib/helpers/index.d.ts +1 -0
  132. package/dist/lib/helpers/widget-props-preact-translator.d.ts +4 -0
  133. package/dist/lib/sdk-ui-core-exports.d.ts +1 -1
  134. package/dist/lib/sdk-ui.module.d.ts +20 -20
  135. package/dist/lib/services/dashboard.service.d.ts +79 -1
  136. package/dist/lib/services/hierarchy.service.d.ts +1 -1
  137. package/dist/lib/services/index.d.ts +3 -3
  138. package/dist/lib/services/plugins.service.d.ts +1 -1
  139. package/dist/lib/services/query.service.d.ts +17 -8
  140. package/dist/lib/services/sisense-context.service.d.ts +1 -1
  141. package/dist/lib/services/theme.service.d.ts +1 -1
  142. package/dist/lib/types/chart-event-props.d.ts +9 -10
  143. package/dist/lib/types/dashboard-config.d.ts +1 -1
  144. package/dist/lib/types/data-point.d.ts +18 -11
  145. package/dist/lib/types/filter-event-props.d.ts +35 -0
  146. package/dist/lib/types/index.d.ts +3 -2
  147. package/dist/lib/utilities/dashboard-helpers.d.ts +1 -12
  148. package/dist/lib/utilities/widget-model-translator.d.ts +2 -2
  149. package/dist/package.json +4 -4
  150. package/dist/public-api.d.ts +4 -4
  151. package/dist/version.d.ts +1 -1
  152. package/package.json +10 -10
  153. package/dist/esm2020/lib/components/widgets/dashboard-widget.component.mjs +0 -118
  154. package/dist/lib/components/widgets/dashboard-widget.component.d.ts +0 -120
@@ -301,4 +301,4 @@ const textWidgetProps = widgetModelTranslator.toTextWidgetProps(widgetModel);
301
301
  export function toTextWidgetProps(widgetModel) {
302
302
  return widgetModelTranslatorPreact.toTextWidgetProps(widgetModel);
303
303
  }
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1vZGVsLXRyYW5zbGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxpdGllcy93aWRnZXQtbW9kZWwtdHJhbnNsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wscUJBQXFCLElBQUksMkJBQTJCLEdBR3JELE1BQU0sd0JBQXdCLENBQUM7QUFVaEM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxXQUF3QixFQUFzQixFQUFFO0lBQ25GLE9BQU8sMkJBQTJCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxXQUF3QixFQUEyQixFQUFFO0lBQzdGLE9BQU8sMkJBQTJCLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFdBQXdCO0lBQ25ELE9BQU8sMkJBQTJCLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxXQUF3QjtJQUNuRCxPQUFPLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUF3QjtJQUN4RCxPQUFPLDJCQUEyQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQXdCO0lBQ3pELE9BQU8sMkJBQTJCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxXQUF3QjtJQUM5RCxPQUFPLDJCQUEyQixDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsV0FBd0I7SUFDeEQsT0FBTywyQkFBMkIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgd2lkZ2V0TW9kZWxUcmFuc2xhdG9yIGFzIHdpZGdldE1vZGVsVHJhbnNsYXRvclByZWFjdCxcbiAgdHlwZSBXaWRnZXRNb2RlbCxcbiAgdHlwZSBUZXh0V2lkZ2V0UHJvcHMsXG59IGZyb20gJ0BzaXNlbnNlL3Nkay11aS1wcmVhY3QnO1xuaW1wb3J0IHsgRXhlY3V0ZVBpdm90UXVlcnlQYXJhbXMsIEV4ZWN1dGVRdWVyeVBhcmFtcyB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIENoYXJ0UHJvcHMsXG4gIENoYXJ0V2lkZ2V0UHJvcHMsXG4gIFBpdm90VGFibGVQcm9wcyxcbiAgUGl2b3RUYWJsZVdpZGdldFByb3BzLFxuICBUYWJsZVByb3BzLFxufSBmcm9tICcuLi9jb21wb25lbnRzJztcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEge0BsaW5rIFdpZGdldE1vZGVsfSB0byB0aGUgcGFyYW1ldGVycyBmb3IgZXhlY3V0aW5nIGEgcXVlcnkgZm9yIHRoZSB3aWRnZXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG5jb25zdCB3aWRnZXRNb2RlbCA9IGF3YWl0IHdpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0TW9kZWwoe1xuICBkYXNoYm9hcmRPaWQ6ICd5b3VyLWRhc2hib2FyZC1vaWQnLFxuICB3aWRnZXRPaWQ6ICd5b3VyLXdpZGdldC1vaWQnXG59KTtcbmNvbnN0IGV4ZWN1dGVRdWVyeVBhcmFtcyA9IHdpZGdldE1vZGVsVHJhbnNsYXRvci50b0V4ZWN1dGVRdWVyeVBhcmFtcyh3aWRnZXRNb2RlbCk7XG5jb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHF1ZXJ5U2VydmljZS5leGVjdXRlUXVlcnkoZXhlY3V0ZVF1ZXJ5UGFyYW1zKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdldHRpbmcgcGl2b3QgcXVlcnkuXG4gKiBVc2Uge0BsaW5rIHRvRXhlY3V0ZVBpdm90UXVlcnlQYXJhbXN9IGluc3RlYWQgZm9yIGdldHRpbmcgcXVlcnkgcGFyYW1ldGVycyBmb3IgdGhlIHBpdm90IHdpZGdldC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRvRXhlY3V0ZVF1ZXJ5UGFyYW1zID0gKHdpZGdldE1vZGVsOiBXaWRnZXRNb2RlbCk6IEV4ZWN1dGVRdWVyeVBhcmFtcyA9PiB7XG4gIHJldHVybiB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QudG9FeGVjdXRlUXVlcnlQYXJhbXMod2lkZ2V0TW9kZWwpO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEge0BsaW5rIFdpZGdldE1vZGVsfSB0byB0aGUgcGFyYW1ldGVycyBmb3IgZXhlY3V0aW5nIGEgcXVlcnkgZm9yIHRoZSBwaXZvdCB3aWRnZXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG5jb25zdCB3aWRnZXRNb2RlbCA9IGF3YWl0IHdpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0TW9kZWwoe1xuICBkYXNoYm9hcmRPaWQ6ICd5b3VyLWRhc2hib2FyZC1vaWQnLFxuICB3aWRnZXRPaWQ6ICd5b3VyLXdpZGdldC1vaWQnXG59KTtcbmNvbnN0IGV4ZWN1dGVQaXZvdFF1ZXJ5UGFyYW1zID0gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLnRvRXhlY3V0ZVBpdm90UXVlcnlQYXJhbXMod2lkZ2V0TW9kZWwpO1xuY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeVNlcnZpY2UuZXhlY3V0ZVBpdm90UXVlcnkoZXhlY3V0ZVF1ZXJ5UGFyYW1zKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IHRoaXMgbWV0aG9kIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBnZXR0aW5nIHBpdm90IHF1ZXJ5LlxuICogVXNlIHtAbGluayB0b0V4ZWN1dGVRdWVyeVBhcmFtc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBxdWVyeSBwYXJhbWV0ZXJzIGZvciBub24tcGl2b3Qgd2lkZ2V0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IHRvRXhlY3V0ZVBpdm90UXVlcnlQYXJhbXMgPSAod2lkZ2V0TW9kZWw6IFdpZGdldE1vZGVsKTogRXhlY3V0ZVBpdm90UXVlcnlQYXJhbXMgPT4ge1xuICByZXR1cm4gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yUHJlYWN0LnRvRXhlY3V0ZVBpdm90UXVlcnlQYXJhbXMod2lkZ2V0TW9kZWwpO1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEge0BsaW5rIFdpZGdldE1vZGVsfSB0byB0aGUgcHJvcHMgZm9yIHJlbmRlcmluZyBhIGNoYXJ0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG48Y3Nkay1jaGFydFxuICAqbmdJZj1cImNoYXJ0UHJvcHNcIlxuICBbY2hhcnRUeXBlXT1cImNoYXJ0UHJvcHMuY2hhcnRUeXBlXCJcbiAgW2RhdGFTZXRdPVwiY2hhcnRQcm9wcy5kYXRhU2V0XCJcbiAgW2RhdGFPcHRpb25zXT1cImNoYXJ0UHJvcHMuZGF0YU9wdGlvbnNcIlxuICBbZmlsdGVyc109XCJjaGFydFByb3BzLmZpbHRlcnNcIlxuICBbaGlnaGxpZ2h0c109XCJjaGFydFByb3BzLmhpZ2hsaWdodHNcIlxuICBbc3R5bGVPcHRpb25zXT1cImNoYXJ0UHJvcHMuc3R5bGVPcHRpb25zXCJcbi8+XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0eXBlIENoYXJ0UHJvcHNcbiAgV2lkZ2V0U2VydmljZSxcbiAgd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLFxufSBmcm9tICdAc2lzZW5zZS9zZGstdWktYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1leGFtcGxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4YW1wbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leGFtcGxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEV4YW1wbGVDb21wb25lbnQge1xuICBjaGFydFByb3BzOiBDaGFydFByb3BzIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdpZGdldE1vZGVsID0gYXdhaXQgd2lkZ2V0U2VydmljZS5nZXRXaWRnZXRNb2RlbCh7XG4gICAgICBkYXNoYm9hcmRPaWQ6ICd5b3VyLWRhc2hib2FyZC1vaWQnLFxuICAgICAgd2lkZ2V0T2lkOiAneW91ci13aWRnZXQtb2lkJ1xuICAgIH0pO1xuICAgIHRoaXMuY2hhcnRQcm9wcyA9IHdpZGdldE1vZGVsVHJhbnNsYXRvci50b0NoYXJ0UHJvcHMod2lkZ2V0TW9kZWwpO1xuICB9XG59XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBwaXZvdCB3aWRnZXRzLlxuICogVXNlIHtAbGluayB0b1Bpdm90VGFibGVQcm9wc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBwcm9wcyBmb3IgdGhlIHtAbGluayBQaXZvdFRhYmxlQ29tcG9uZW50fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2hhcnRQcm9wcyh3aWRnZXRNb2RlbDogV2lkZ2V0TW9kZWwpOiBDaGFydFByb3BzIHtcbiAgcmV0dXJuIHdpZGdldE1vZGVsVHJhbnNsYXRvclByZWFjdC50b0NoYXJ0UHJvcHMod2lkZ2V0TW9kZWwpO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSB7QGxpbmsgV2lkZ2V0TW9kZWx9IHRvIHRoZSBwcm9wcyBmb3IgcmVuZGVyaW5nIGEgdGFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbjxjc2RrLXRhYmxlXG4gICpuZ0lmPVwidGFibGVQcm9wc1wiXG4gIFtkYXRhU2V0XT1cInRhYmxlUHJvcHMuZGF0YVNldFwiXG4gIFtkYXRhT3B0aW9uc109XCJ0YWJsZVByb3BzLmRhdGFPcHRpb25zXCJcbiAgW2ZpbHRlcnNdPVwidGFibGVQcm9wcy5maWx0ZXJzXCJcbiAgW3N0eWxlT3B0aW9uc109XCJ0YWJsZVByb3BzLnN0eWxlT3B0aW9uc1wiXG4vPlxuICogYGBgXG4gKlxuICogYGBgdHNcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgdHlwZSBUYWJsZVByb3BzXG4gIFdpZGdldFNlcnZpY2UsXG4gIHdpZGdldE1vZGVsVHJhbnNsYXRvcixcbn0gZnJvbSAnQHNpc2Vuc2Uvc2RrLXVpLWFuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZXhhbXBsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9leGFtcGxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZXhhbXBsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFeGFtcGxlQ29tcG9uZW50IHtcbiAgdGFibGVQcm9wczogVGFibGVQcm9wcyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB3aWRnZXRNb2RlbCA9IGF3YWl0IHdpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0TW9kZWwoe1xuICAgICAgZGFzaGJvYXJkT2lkOiAneW91ci1kYXNoYm9hcmQtb2lkJyxcbiAgICAgIHdpZGdldE9pZDogJ3lvdXItd2lkZ2V0LW9pZCdcbiAgICB9KTtcbiAgICB0aGlzLnRhYmxlUHJvcHMgPSB3aWRnZXRNb2RlbFRyYW5zbGF0b3IudG9UYWJsZVByb3BzKHdpZGdldE1vZGVsKTtcbiAgfVxufVxuICogYGBgXG4gKlxuICogTm90ZTogdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgY2hhcnQgYW5kIHBpdm90IHdpZGdldHMuXG4gKiBVc2Uge0BsaW5rIHRvQ2hhcnRQcm9wc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBwcm9wcyBmb3IgdGhlIHtAbGluayBDaGFydENvbXBvbmVudH0uXG4gKiBVc2Uge0BsaW5rIHRvUGl2b3RUYWJsZVByb3BzfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHByb3BzIGZvciB0aGUge0BsaW5rIFBpdm90VGFibGVDb21wb25lbnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UYWJsZVByb3BzKHdpZGdldE1vZGVsOiBXaWRnZXRNb2RlbCk6IFRhYmxlUHJvcHMge1xuICByZXR1cm4gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yUHJlYWN0LnRvVGFibGVQcm9wcyh3aWRnZXRNb2RlbCk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIHtAbGluayBXaWRnZXRNb2RlbH0gdG8gdGhlIHByb3BzIGZvciByZW5kZXJpbmcgYSBwaXZvdCB0YWJsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuPGNzZGstcGl2b3QtdGFibGVcbiAgKm5nSWY9XCJwaXZvdFRhYmxlUHJvcHNcIlxuICBbZGF0YVNldF09XCJwaXZvdFRhYmxlUHJvcHMuZGF0YVNldFwiXG4gIFtkYXRhT3B0aW9uc109XCJwaXZvdFRhYmxlUHJvcHMuZGF0YU9wdGlvbnNcIlxuICBbZmlsdGVyc109XCJwaXZvdFRhYmxlUHJvcHMuZmlsdGVyc1wiXG4gIFtzdHlsZU9wdGlvbnNdPVwicGl2b3RUYWJsZVByb3BzLnN0eWxlT3B0aW9uc1wiXG4vPlxuICogYGBgXG4gKlxuICogYGBgdHNcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgdHlwZSBQaXZvdFRhYmxlUHJvcHNcbiAgV2lkZ2V0U2VydmljZSxcbiAgd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLFxufSBmcm9tICdAc2lzZW5zZS9zZGstdWktYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1leGFtcGxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4YW1wbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leGFtcGxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEV4YW1wbGVDb21wb25lbnQge1xuICBwaXZvdFRhYmxlUHJvcHM6IFBpdm90VGFibGVQcm9wcyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB3aWRnZXRNb2RlbCA9IGF3YWl0IHdpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0TW9kZWwoe1xuICAgICAgZGFzaGJvYXJkT2lkOiAneW91ci1kYXNoYm9hcmQtb2lkJyxcbiAgICAgIHdpZGdldE9pZDogJ3lvdXItd2lkZ2V0LW9pZCdcbiAgICB9KTtcbiAgICB0aGlzLnBpdm90VGFibGVQcm9wcyA9IHdpZGdldE1vZGVsVHJhbnNsYXRvci50b1Bpdm90VGFibGVQcm9wcyh3aWRnZXRNb2RlbCk7XG4gIH1cbn1cbiAqIGBgYFxuICpcbiAqIE5vdGU6IHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGNoYXJ0IG9yIHRhYmxlIHdpZGdldHMuXG4gKiBVc2Uge0BsaW5rIHRvQ2hhcnRQcm9wc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBwcm9wcyBmb3IgdGhlIHtAbGluayBDaGFydENvbXBvbmVudH0uXG4gKiBVc2Uge0BsaW5rIHRvVGFibGVQcm9wc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBwcm9wcyBmb3IgdGhlIHtAbGluayBUYWJsZUNvbXBvbmVudH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Bpdm90VGFibGVQcm9wcyh3aWRnZXRNb2RlbDogV2lkZ2V0TW9kZWwpOiBQaXZvdFRhYmxlUHJvcHMge1xuICByZXR1cm4gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yUHJlYWN0LnRvUGl2b3RUYWJsZVByb3BzKHdpZGdldE1vZGVsKTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEge0BsaW5rIFdpZGdldE1vZGVsfSB0byB0aGUgcHJvcHMgZm9yIHJlbmRlcmluZyBhIGNoYXJ0IHdpZGdldC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuPGNzZGstY2hhcnQtd2lkZ2V0XG4gICpuZ0lmPVwiY2hhcnRXaWRnZXRQcm9wc1wiXG4gIFtjaGFydFR5cGVdPVwiY2hhcnRXaWRnZXRQcm9wcy5jaGFydFR5cGVcIlxuICBbZGF0YVNvdXJjZV09XCJjaGFydFdpZGdldFByb3BzLmRhdGFTb3VyY2VcIlxuICBbZGF0YU9wdGlvbnNdPVwiY2hhcnRXaWRnZXRQcm9wcy5kYXRhT3B0aW9uc1wiXG4gIFtmaWx0ZXJzXT1cImNoYXJ0V2lkZ2V0UHJvcHMuZmlsdGVyc1wiXG4gIFtoaWdobGlnaHRzXT1cImNoYXJ0V2lkZ2V0UHJvcHMuaGlnaGxpZ2h0c1wiXG4gIFtzdHlsZU9wdGlvbnNdPVwiY2hhcnRXaWRnZXRQcm9wcy5zdHlsZU9wdGlvbnNcIlxuLz5cbiAqIGBgYFxuICpcbiAqIGBgYHRzXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIHR5cGUgQ2hhcnRXaWRnZXRQcm9wc1xuICBXaWRnZXRTZXJ2aWNlLFxuICB3aWRnZXRNb2RlbFRyYW5zbGF0b3IsXG59IGZyb20gJ0BzaXNlbnNlL3Nkay11aS1hbmd1bGFyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4YW1wbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhhbXBsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4YW1wbGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhhbXBsZUNvbXBvbmVudCB7XG4gIGNoYXJ0V2lkZ2V0UHJvcHM6IENoYXJ0V2lkZ2V0UHJvcHMgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2lkZ2V0TW9kZWwgPSBhd2FpdCB3aWRnZXRTZXJ2aWNlLmdldFdpZGdldE1vZGVsKHtcbiAgICAgIGRhc2hib2FyZE9pZDogJ3lvdXItZGFzaGJvYXJkLW9pZCcsXG4gICAgICB3aWRnZXRPaWQ6ICd5b3VyLXdpZGdldC1vaWQnXG4gICAgfSk7XG4gICAgdGhpcy5jaGFydFdpZGdldFByb3BzID0gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLnRvQ2hhcnRXaWRnZXRQcm9wcyh3aWRnZXRNb2RlbCk7XG4gIH1cbn1cbiAqIGBgYFxuICpcbiAqIE5vdGU6IHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBpdm90IHdpZGdldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NoYXJ0V2lkZ2V0UHJvcHMod2lkZ2V0TW9kZWw6IFdpZGdldE1vZGVsKTogQ2hhcnRXaWRnZXRQcm9wcyB7XG4gIHJldHVybiB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QudG9DaGFydFdpZGdldFByb3BzKHdpZGdldE1vZGVsKTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEge0BsaW5rIFdpZGdldE1vZGVsfSB0byB0aGUgcHJvcHMgZm9yIHJlbmRlcmluZyBhIHBpdm90IHRhYmxlIHdpZGdldC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuPGNzZGstcGl2b3QtdGFibGUtd2lkZ2V0XG4gICpuZ0lmPVwicGl2b3RXaWRnZXRQcm9wc1wiXG4gIFtkYXRhU2V0XT1cInBpdm90V2lkZ2V0UHJvcHMuZGF0YVNldFwiXG4gIFtkYXRhT3B0aW9uc109XCJwaXZvdFdpZGdldFByb3BzLmRhdGFPcHRpb25zXCJcbiAgW2ZpbHRlcnNdPVwicGl2b3RXaWRnZXRQcm9wcy5maWx0ZXJzXCJcbiAgW3N0eWxlT3B0aW9uc109XCJwaXZvdFdpZGdldFByb3BzLnN0eWxlT3B0aW9uc1wiXG4vPlxuICogYGBgXG4gKlxuICogYGBgdHNcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgdHlwZSBQaXZvdFRhYmxlV2lkZ2V0UHJvcHNcbiAgV2lkZ2V0U2VydmljZSxcbiAgd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLFxufSBmcm9tICdAc2lzZW5zZS9zZGstdWktYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1leGFtcGxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4YW1wbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leGFtcGxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEV4YW1wbGVDb21wb25lbnQge1xuICBwaXZvdFdpZGdldFByb3BzOiBQaXZvdFRhYmxlV2lkZ2V0UHJvcHMgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2lkZ2V0TW9kZWwgPSBhd2FpdCB3aWRnZXRTZXJ2aWNlLmdldFdpZGdldE1vZGVsKHtcbiAgICAgIGRhc2hib2FyZE9pZDogJ3lvdXItZGFzaGJvYXJkLW9pZCcsXG4gICAgICB3aWRnZXRPaWQ6ICd5b3VyLXdpZGdldC1vaWQnXG4gICAgfSk7XG4gICAgdGhpcy5waXZvdFdpZGdldFByb3BzID0gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLnRvUGl2b3RUYWJsZVdpZGdldFByb3BzKHdpZGdldE1vZGVsKTtcbiAgfVxufVxuICogYGBgXG4gKlxuICogTm90ZTogdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgY2hhcnQgb3IgdGFibGUgd2lkZ2V0cy5cbiAqIFVzZSB7QGxpbmsgdG9DaGFydFdpZGdldFByb3BzfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHByb3BzIGZvciB0aGUge0BsaW5rIENoYXJ0V2lkZ2V0Q29tcG9uZW50fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGl2b3RUYWJsZVdpZGdldFByb3BzKHdpZGdldE1vZGVsOiBXaWRnZXRNb2RlbCk6IFBpdm90VGFibGVXaWRnZXRQcm9wcyB7XG4gIHJldHVybiB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QudG9QaXZvdFRhYmxlV2lkZ2V0UHJvcHMod2lkZ2V0TW9kZWwpO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSB7QGxpbmsgV2lkZ2V0TW9kZWx9IHRvIHRoZSBwcm9wcyBmb3IgcmVuZGVyaW5nIGEgdGV4dCB3aWRnZXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG5jb25zdCB3aWRnZXRNb2RlbCA9IGF3YWl0IHdpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0TW9kZWwoe1xuICBkYXNoYm9hcmRPaWQ6ICd5b3VyLWRhc2hib2FyZC1vaWQnLFxuICB3aWRnZXRPaWQ6ICd5b3VyLXdpZGdldC1vaWQnXG59KTtcbmNvbnN0IHRleHRXaWRnZXRQcm9wcyA9IHdpZGdldE1vZGVsVHJhbnNsYXRvci50b1RleHRXaWRnZXRQcm9wcyh3aWRnZXRNb2RlbCk7XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBjaGFydCBvciBwaXZvdCB3aWRnZXRzLlxuICogVXNlIHtAbGluayB0b0NoYXJ0V2lkZ2V0UHJvcHN9IGluc3RlYWQgZm9yIGdldHRpbmcgcHJvcHMgZm9yIHRoZSB7QGxpbmsgQ2hhcnRXaWRnZXRDb21wb25lbnR9LlxuICogVXNlIHtAbGluayB0b1Bpdm90VGFibGVXaWRnZXRQcm9wc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBwcm9wcyBmb3IgdGhlIHBpdm90IHRhYmxlIHdpZGdldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVGV4dFdpZGdldFByb3BzKHdpZGdldE1vZGVsOiBXaWRnZXRNb2RlbCk6IFRleHRXaWRnZXRQcm9wcyB7XG4gIHJldHVybiB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QudG9UZXh0V2lkZ2V0UHJvcHMod2lkZ2V0TW9kZWwpO1xufVxuIl19
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1vZGVsLXRyYW5zbGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxpdGllcy93aWRnZXQtbW9kZWwtdHJhbnNsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wscUJBQXFCLElBQUksMkJBQTJCLEdBQ3JELE1BQU0sd0JBQXdCLENBQUM7QUFXaEM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxXQUF3QixFQUFzQixFQUFFO0lBQ25GLE9BQU8sMkJBQTJCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxXQUF3QixFQUEyQixFQUFFO0lBQzdGLE9BQU8sMkJBQTJCLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFdBQXdCO0lBQ25ELE9BQU8sMkJBQTJCLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxXQUF3QjtJQUNuRCxPQUFPLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUF3QjtJQUN4RCxPQUFPLDJCQUEyQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkNHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQXdCO0lBQ3pELE9BQU8sMkJBQTJCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxXQUF3QjtJQUM5RCxPQUFPLDJCQUEyQixDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsV0FBd0I7SUFDeEQsT0FBTywyQkFBMkIsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBUZXh0V2lkZ2V0UHJvcHMsXG4gIHR5cGUgV2lkZ2V0TW9kZWwsXG4gIHdpZGdldE1vZGVsVHJhbnNsYXRvciBhcyB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QsXG59IGZyb20gJ0BzaXNlbnNlL3Nkay11aS1wcmVhY3QnO1xuXG5pbXBvcnQge1xuICBDaGFydFByb3BzLFxuICBDaGFydFdpZGdldFByb3BzLFxuICBQaXZvdFRhYmxlUHJvcHMsXG4gIFBpdm90VGFibGVXaWRnZXRQcm9wcyxcbiAgVGFibGVQcm9wcyxcbn0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBFeGVjdXRlUGl2b3RRdWVyeVBhcmFtcywgRXhlY3V0ZVF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSB7QGxpbmsgV2lkZ2V0TW9kZWx9IHRvIHRoZSBwYXJhbWV0ZXJzIGZvciBleGVjdXRpbmcgYSBxdWVyeSBmb3IgdGhlIHdpZGdldC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbmNvbnN0IHdpZGdldE1vZGVsID0gYXdhaXQgd2lkZ2V0U2VydmljZS5nZXRXaWRnZXRNb2RlbCh7XG4gIGRhc2hib2FyZE9pZDogJ3lvdXItZGFzaGJvYXJkLW9pZCcsXG4gIHdpZGdldE9pZDogJ3lvdXItd2lkZ2V0LW9pZCdcbn0pO1xuY29uc3QgZXhlY3V0ZVF1ZXJ5UGFyYW1zID0gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLnRvRXhlY3V0ZVF1ZXJ5UGFyYW1zKHdpZGdldE1vZGVsKTtcbmNvbnN0IHF1ZXJ5UmVzdWx0ID0gYXdhaXQgcXVlcnlTZXJ2aWNlLmV4ZWN1dGVRdWVyeShleGVjdXRlUXVlcnlQYXJhbXMpO1xuICogYGBgXG4gKlxuICogTm90ZTogdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2V0dGluZyBwaXZvdCBxdWVyeS5cbiAqIFVzZSB7QGxpbmsgdG9FeGVjdXRlUGl2b3RRdWVyeVBhcmFtc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcGl2b3Qgd2lkZ2V0LlxuICovXG5leHBvcnQgY29uc3QgdG9FeGVjdXRlUXVlcnlQYXJhbXMgPSAod2lkZ2V0TW9kZWw6IFdpZGdldE1vZGVsKTogRXhlY3V0ZVF1ZXJ5UGFyYW1zID0+IHtcbiAgcmV0dXJuIHdpZGdldE1vZGVsVHJhbnNsYXRvclByZWFjdC50b0V4ZWN1dGVRdWVyeVBhcmFtcyh3aWRnZXRNb2RlbCk7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSB7QGxpbmsgV2lkZ2V0TW9kZWx9IHRvIHRoZSBwYXJhbWV0ZXJzIGZvciBleGVjdXRpbmcgYSBxdWVyeSBmb3IgdGhlIHBpdm90IHdpZGdldC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbmNvbnN0IHdpZGdldE1vZGVsID0gYXdhaXQgd2lkZ2V0U2VydmljZS5nZXRXaWRnZXRNb2RlbCh7XG4gIGRhc2hib2FyZE9pZDogJ3lvdXItZGFzaGJvYXJkLW9pZCcsXG4gIHdpZGdldE9pZDogJ3lvdXItd2lkZ2V0LW9pZCdcbn0pO1xuY29uc3QgZXhlY3V0ZVBpdm90UXVlcnlQYXJhbXMgPSB3aWRnZXRNb2RlbFRyYW5zbGF0b3IudG9FeGVjdXRlUGl2b3RRdWVyeVBhcmFtcyh3aWRnZXRNb2RlbCk7XG5jb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHF1ZXJ5U2VydmljZS5leGVjdXRlUGl2b3RRdWVyeShleGVjdXRlUXVlcnlQYXJhbXMpO1xuICogYGBgXG4gKlxuICogTm90ZTogdGhpcyBtZXRob2QgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIGdldHRpbmcgcGl2b3QgcXVlcnkuXG4gKiBVc2Uge0BsaW5rIHRvRXhlY3V0ZVF1ZXJ5UGFyYW1zfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIG5vbi1waXZvdCB3aWRnZXRzLlxuICovXG5leHBvcnQgY29uc3QgdG9FeGVjdXRlUGl2b3RRdWVyeVBhcmFtcyA9ICh3aWRnZXRNb2RlbDogV2lkZ2V0TW9kZWwpOiBFeGVjdXRlUGl2b3RRdWVyeVBhcmFtcyA9PiB7XG4gIHJldHVybiB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QudG9FeGVjdXRlUGl2b3RRdWVyeVBhcmFtcyh3aWRnZXRNb2RlbCk7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSB7QGxpbmsgV2lkZ2V0TW9kZWx9IHRvIHRoZSBwcm9wcyBmb3IgcmVuZGVyaW5nIGEgY2hhcnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbjxjc2RrLWNoYXJ0XG4gICpuZ0lmPVwiY2hhcnRQcm9wc1wiXG4gIFtjaGFydFR5cGVdPVwiY2hhcnRQcm9wcy5jaGFydFR5cGVcIlxuICBbZGF0YVNldF09XCJjaGFydFByb3BzLmRhdGFTZXRcIlxuICBbZGF0YU9wdGlvbnNdPVwiY2hhcnRQcm9wcy5kYXRhT3B0aW9uc1wiXG4gIFtmaWx0ZXJzXT1cImNoYXJ0UHJvcHMuZmlsdGVyc1wiXG4gIFtoaWdobGlnaHRzXT1cImNoYXJ0UHJvcHMuaGlnaGxpZ2h0c1wiXG4gIFtzdHlsZU9wdGlvbnNdPVwiY2hhcnRQcm9wcy5zdHlsZU9wdGlvbnNcIlxuLz5cbiAqIGBgYFxuICpcbiAqIGBgYHRzXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIHR5cGUgQ2hhcnRQcm9wc1xuICBXaWRnZXRTZXJ2aWNlLFxuICB3aWRnZXRNb2RlbFRyYW5zbGF0b3IsXG59IGZyb20gJ0BzaXNlbnNlL3Nkay11aS1hbmd1bGFyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4YW1wbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhhbXBsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4YW1wbGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhhbXBsZUNvbXBvbmVudCB7XG4gIGNoYXJ0UHJvcHM6IENoYXJ0UHJvcHMgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2lkZ2V0TW9kZWwgPSBhd2FpdCB3aWRnZXRTZXJ2aWNlLmdldFdpZGdldE1vZGVsKHtcbiAgICAgIGRhc2hib2FyZE9pZDogJ3lvdXItZGFzaGJvYXJkLW9pZCcsXG4gICAgICB3aWRnZXRPaWQ6ICd5b3VyLXdpZGdldC1vaWQnXG4gICAgfSk7XG4gICAgdGhpcy5jaGFydFByb3BzID0gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLnRvQ2hhcnRQcm9wcyh3aWRnZXRNb2RlbCk7XG4gIH1cbn1cbiAqIGBgYFxuICpcbiAqIE5vdGU6IHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBpdm90IHdpZGdldHMuXG4gKiBVc2Uge0BsaW5rIHRvUGl2b3RUYWJsZVByb3BzfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHByb3BzIGZvciB0aGUge0BsaW5rIFBpdm90VGFibGVDb21wb25lbnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DaGFydFByb3BzKHdpZGdldE1vZGVsOiBXaWRnZXRNb2RlbCk6IENoYXJ0UHJvcHMge1xuICByZXR1cm4gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yUHJlYWN0LnRvQ2hhcnRQcm9wcyh3aWRnZXRNb2RlbCk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIHtAbGluayBXaWRnZXRNb2RlbH0gdG8gdGhlIHByb3BzIGZvciByZW5kZXJpbmcgYSB0YWJsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuPGNzZGstdGFibGVcbiAgKm5nSWY9XCJ0YWJsZVByb3BzXCJcbiAgW2RhdGFTZXRdPVwidGFibGVQcm9wcy5kYXRhU2V0XCJcbiAgW2RhdGFPcHRpb25zXT1cInRhYmxlUHJvcHMuZGF0YU9wdGlvbnNcIlxuICBbZmlsdGVyc109XCJ0YWJsZVByb3BzLmZpbHRlcnNcIlxuICBbc3R5bGVPcHRpb25zXT1cInRhYmxlUHJvcHMuc3R5bGVPcHRpb25zXCJcbi8+XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0eXBlIFRhYmxlUHJvcHNcbiAgV2lkZ2V0U2VydmljZSxcbiAgd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLFxufSBmcm9tICdAc2lzZW5zZS9zZGstdWktYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1leGFtcGxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4YW1wbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leGFtcGxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEV4YW1wbGVDb21wb25lbnQge1xuICB0YWJsZVByb3BzOiBUYWJsZVByb3BzIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdpZGdldE1vZGVsID0gYXdhaXQgd2lkZ2V0U2VydmljZS5nZXRXaWRnZXRNb2RlbCh7XG4gICAgICBkYXNoYm9hcmRPaWQ6ICd5b3VyLWRhc2hib2FyZC1vaWQnLFxuICAgICAgd2lkZ2V0T2lkOiAneW91ci13aWRnZXQtb2lkJ1xuICAgIH0pO1xuICAgIHRoaXMudGFibGVQcm9wcyA9IHdpZGdldE1vZGVsVHJhbnNsYXRvci50b1RhYmxlUHJvcHMod2lkZ2V0TW9kZWwpO1xuICB9XG59XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBjaGFydCBhbmQgcGl2b3Qgd2lkZ2V0cy5cbiAqIFVzZSB7QGxpbmsgdG9DaGFydFByb3BzfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHByb3BzIGZvciB0aGUge0BsaW5rIENoYXJ0Q29tcG9uZW50fS5cbiAqIFVzZSB7QGxpbmsgdG9QaXZvdFRhYmxlUHJvcHN9IGluc3RlYWQgZm9yIGdldHRpbmcgcHJvcHMgZm9yIHRoZSB7QGxpbmsgUGl2b3RUYWJsZUNvbXBvbmVudH0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1RhYmxlUHJvcHMod2lkZ2V0TW9kZWw6IFdpZGdldE1vZGVsKTogVGFibGVQcm9wcyB7XG4gIHJldHVybiB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QudG9UYWJsZVByb3BzKHdpZGdldE1vZGVsKTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEge0BsaW5rIFdpZGdldE1vZGVsfSB0byB0aGUgcHJvcHMgZm9yIHJlbmRlcmluZyBhIHBpdm90IHRhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG48Y3Nkay1waXZvdC10YWJsZVxuICAqbmdJZj1cInBpdm90VGFibGVQcm9wc1wiXG4gIFtkYXRhU2V0XT1cInBpdm90VGFibGVQcm9wcy5kYXRhU2V0XCJcbiAgW2RhdGFPcHRpb25zXT1cInBpdm90VGFibGVQcm9wcy5kYXRhT3B0aW9uc1wiXG4gIFtmaWx0ZXJzXT1cInBpdm90VGFibGVQcm9wcy5maWx0ZXJzXCJcbiAgW3N0eWxlT3B0aW9uc109XCJwaXZvdFRhYmxlUHJvcHMuc3R5bGVPcHRpb25zXCJcbi8+XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0eXBlIFBpdm90VGFibGVQcm9wc1xuICBXaWRnZXRTZXJ2aWNlLFxuICB3aWRnZXRNb2RlbFRyYW5zbGF0b3IsXG59IGZyb20gJ0BzaXNlbnNlL3Nkay11aS1hbmd1bGFyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4YW1wbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhhbXBsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4YW1wbGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhhbXBsZUNvbXBvbmVudCB7XG4gIHBpdm90VGFibGVQcm9wczogUGl2b3RUYWJsZVByb3BzIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdpZGdldE1vZGVsID0gYXdhaXQgd2lkZ2V0U2VydmljZS5nZXRXaWRnZXRNb2RlbCh7XG4gICAgICBkYXNoYm9hcmRPaWQ6ICd5b3VyLWRhc2hib2FyZC1vaWQnLFxuICAgICAgd2lkZ2V0T2lkOiAneW91ci13aWRnZXQtb2lkJ1xuICAgIH0pO1xuICAgIHRoaXMucGl2b3RUYWJsZVByb3BzID0gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLnRvUGl2b3RUYWJsZVByb3BzKHdpZGdldE1vZGVsKTtcbiAgfVxufVxuICogYGBgXG4gKlxuICogTm90ZTogdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgY2hhcnQgb3IgdGFibGUgd2lkZ2V0cy5cbiAqIFVzZSB7QGxpbmsgdG9DaGFydFByb3BzfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHByb3BzIGZvciB0aGUge0BsaW5rIENoYXJ0Q29tcG9uZW50fS5cbiAqIFVzZSB7QGxpbmsgdG9UYWJsZVByb3BzfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHByb3BzIGZvciB0aGUge0BsaW5rIFRhYmxlQ29tcG9uZW50fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUGl2b3RUYWJsZVByb3BzKHdpZGdldE1vZGVsOiBXaWRnZXRNb2RlbCk6IFBpdm90VGFibGVQcm9wcyB7XG4gIHJldHVybiB3aWRnZXRNb2RlbFRyYW5zbGF0b3JQcmVhY3QudG9QaXZvdFRhYmxlUHJvcHMod2lkZ2V0TW9kZWwpO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSB7QGxpbmsgV2lkZ2V0TW9kZWx9IHRvIHRoZSBwcm9wcyBmb3IgcmVuZGVyaW5nIGEgY2hhcnQgd2lkZ2V0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG48Y3Nkay1jaGFydC13aWRnZXRcbiAgKm5nSWY9XCJjaGFydFdpZGdldFByb3BzXCJcbiAgW2NoYXJ0VHlwZV09XCJjaGFydFdpZGdldFByb3BzLmNoYXJ0VHlwZVwiXG4gIFtkYXRhU291cmNlXT1cImNoYXJ0V2lkZ2V0UHJvcHMuZGF0YVNvdXJjZVwiXG4gIFtkYXRhT3B0aW9uc109XCJjaGFydFdpZGdldFByb3BzLmRhdGFPcHRpb25zXCJcbiAgW2ZpbHRlcnNdPVwiY2hhcnRXaWRnZXRQcm9wcy5maWx0ZXJzXCJcbiAgW2hpZ2hsaWdodHNdPVwiY2hhcnRXaWRnZXRQcm9wcy5oaWdobGlnaHRzXCJcbiAgW3N0eWxlT3B0aW9uc109XCJjaGFydFdpZGdldFByb3BzLnN0eWxlT3B0aW9uc1wiXG4vPlxuICogYGBgXG4gKlxuICogYGBgdHNcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgdHlwZSBDaGFydFdpZGdldFByb3BzXG4gIFdpZGdldFNlcnZpY2UsXG4gIHdpZGdldE1vZGVsVHJhbnNsYXRvcixcbn0gZnJvbSAnQHNpc2Vuc2Uvc2RrLXVpLWFuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZXhhbXBsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9leGFtcGxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZXhhbXBsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFeGFtcGxlQ29tcG9uZW50IHtcbiAgY2hhcnRXaWRnZXRQcm9wczogQ2hhcnRXaWRnZXRQcm9wcyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB3aWRnZXRNb2RlbCA9IGF3YWl0IHdpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0TW9kZWwoe1xuICAgICAgZGFzaGJvYXJkT2lkOiAneW91ci1kYXNoYm9hcmQtb2lkJyxcbiAgICAgIHdpZGdldE9pZDogJ3lvdXItd2lkZ2V0LW9pZCdcbiAgICB9KTtcbiAgICB0aGlzLmNoYXJ0V2lkZ2V0UHJvcHMgPSB3aWRnZXRNb2RlbFRyYW5zbGF0b3IudG9DaGFydFdpZGdldFByb3BzKHdpZGdldE1vZGVsKTtcbiAgfVxufVxuICogYGBgXG4gKlxuICogTm90ZTogdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgcGl2b3Qgd2lkZ2V0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2hhcnRXaWRnZXRQcm9wcyh3aWRnZXRNb2RlbDogV2lkZ2V0TW9kZWwpOiBDaGFydFdpZGdldFByb3BzIHtcbiAgcmV0dXJuIHdpZGdldE1vZGVsVHJhbnNsYXRvclByZWFjdC50b0NoYXJ0V2lkZ2V0UHJvcHMod2lkZ2V0TW9kZWwpO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSB7QGxpbmsgV2lkZ2V0TW9kZWx9IHRvIHRoZSBwcm9wcyBmb3IgcmVuZGVyaW5nIGEgcGl2b3QgdGFibGUgd2lkZ2V0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG48Y3Nkay1waXZvdC10YWJsZS13aWRnZXRcbiAgKm5nSWY9XCJwaXZvdFdpZGdldFByb3BzXCJcbiAgW2RhdGFTZXRdPVwicGl2b3RXaWRnZXRQcm9wcy5kYXRhU2V0XCJcbiAgW2RhdGFPcHRpb25zXT1cInBpdm90V2lkZ2V0UHJvcHMuZGF0YU9wdGlvbnNcIlxuICBbZmlsdGVyc109XCJwaXZvdFdpZGdldFByb3BzLmZpbHRlcnNcIlxuICBbc3R5bGVPcHRpb25zXT1cInBpdm90V2lkZ2V0UHJvcHMuc3R5bGVPcHRpb25zXCJcbi8+XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICB0eXBlIFBpdm90VGFibGVXaWRnZXRQcm9wc1xuICBXaWRnZXRTZXJ2aWNlLFxuICB3aWRnZXRNb2RlbFRyYW5zbGF0b3IsXG59IGZyb20gJ0BzaXNlbnNlL3Nkay11aS1hbmd1bGFyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4YW1wbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhhbXBsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4YW1wbGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhhbXBsZUNvbXBvbmVudCB7XG4gIHBpdm90V2lkZ2V0UHJvcHM6IFBpdm90VGFibGVXaWRnZXRQcm9wcyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd2lkZ2V0U2VydmljZTogV2lkZ2V0U2VydmljZSkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB3aWRnZXRNb2RlbCA9IGF3YWl0IHdpZGdldFNlcnZpY2UuZ2V0V2lkZ2V0TW9kZWwoe1xuICAgICAgZGFzaGJvYXJkT2lkOiAneW91ci1kYXNoYm9hcmQtb2lkJyxcbiAgICAgIHdpZGdldE9pZDogJ3lvdXItd2lkZ2V0LW9pZCdcbiAgICB9KTtcbiAgICB0aGlzLnBpdm90V2lkZ2V0UHJvcHMgPSB3aWRnZXRNb2RlbFRyYW5zbGF0b3IudG9QaXZvdFRhYmxlV2lkZ2V0UHJvcHMod2lkZ2V0TW9kZWwpO1xuICB9XG59XG4gKiBgYGBcbiAqXG4gKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBjaGFydCBvciB0YWJsZSB3aWRnZXRzLlxuICogVXNlIHtAbGluayB0b0NoYXJ0V2lkZ2V0UHJvcHN9IGluc3RlYWQgZm9yIGdldHRpbmcgcHJvcHMgZm9yIHRoZSB7QGxpbmsgQ2hhcnRXaWRnZXRDb21wb25lbnR9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QaXZvdFRhYmxlV2lkZ2V0UHJvcHMod2lkZ2V0TW9kZWw6IFdpZGdldE1vZGVsKTogUGl2b3RUYWJsZVdpZGdldFByb3BzIHtcbiAgcmV0dXJuIHdpZGdldE1vZGVsVHJhbnNsYXRvclByZWFjdC50b1Bpdm90VGFibGVXaWRnZXRQcm9wcyh3aWRnZXRNb2RlbCk7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIHtAbGluayBXaWRnZXRNb2RlbH0gdG8gdGhlIHByb3BzIGZvciByZW5kZXJpbmcgYSB0ZXh0IHdpZGdldC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbmNvbnN0IHdpZGdldE1vZGVsID0gYXdhaXQgd2lkZ2V0U2VydmljZS5nZXRXaWRnZXRNb2RlbCh7XG4gIGRhc2hib2FyZE9pZDogJ3lvdXItZGFzaGJvYXJkLW9pZCcsXG4gIHdpZGdldE9pZDogJ3lvdXItd2lkZ2V0LW9pZCdcbn0pO1xuY29uc3QgdGV4dFdpZGdldFByb3BzID0gd2lkZ2V0TW9kZWxUcmFuc2xhdG9yLnRvVGV4dFdpZGdldFByb3BzKHdpZGdldE1vZGVsKTtcbiAqIGBgYFxuICpcbiAqIE5vdGU6IHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGNoYXJ0IG9yIHBpdm90IHdpZGdldHMuXG4gKiBVc2Uge0BsaW5rIHRvQ2hhcnRXaWRnZXRQcm9wc30gaW5zdGVhZCBmb3IgZ2V0dGluZyBwcm9wcyBmb3IgdGhlIHtAbGluayBDaGFydFdpZGdldENvbXBvbmVudH0uXG4gKiBVc2Uge0BsaW5rIHRvUGl2b3RUYWJsZVdpZGdldFByb3BzfSBpbnN0ZWFkIGZvciBnZXR0aW5nIHByb3BzIGZvciB0aGUgcGl2b3QgdGFibGUgd2lkZ2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UZXh0V2lkZ2V0UHJvcHMod2lkZ2V0TW9kZWw6IFdpZGdldE1vZGVsKTogVGV4dFdpZGdldFByb3BzIHtcbiAgcmV0dXJuIHdpZGdldE1vZGVsVHJhbnNsYXRvclByZWFjdC50b1RleHRXaWRnZXRQcm9wcyh3aWRnZXRNb2RlbCk7XG59XG4iXX0=
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Public API Surface of @sisense/sdk-ui-angular
3
3
  */
4
- export * from './lib/sdk-ui.module';
5
4
  export * from './lib/components';
5
+ export * from './lib/sdk-ui.module';
6
+ export * from './lib/sdk-ui-core-exports';
6
7
  export * from './lib/services';
7
8
  export * from './lib/utilities';
8
- export * from './lib/sdk-ui-core-exports';
9
9
  /* Re-exports internal core functionalities to use in dependant angular modules */
10
- export { createThemeContextConnector, createSisenseContextConnector, createPluginsContextConnector, } from './lib/component-wrapper-helpers';
10
+ export { createPluginsContextConnector, createSisenseContextConnector, createThemeContextConnector, } from './lib/component-wrapper-helpers';
11
11
  export { TrackableService } from './lib/decorators';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDJCQUEyQixDQUFDO0FBdUIxQyxrRkFBa0Y7QUFDbEYsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw2QkFBNkIsRUFDN0IsNkJBQTZCLEdBQzlCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAc2lzZW5zZS9zZGstdWktYW5ndWxhclxuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZGstdWkubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbGl0aWVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nkay11aS1jb3JlLWV4cG9ydHMnO1xuZXhwb3J0IHR5cGUge1xuICBEYXRhUG9pbnRFdmVudCxcbiAgQXJlYW1hcERhdGFQb2ludEV2ZW50LFxuICBCb3hwbG90RGF0YVBvaW50RXZlbnQsXG4gIFNjYXR0ZXJEYXRhUG9pbnRFdmVudCxcbiAgU2NhdHRlcm1hcERhdGFQb2ludEV2ZW50LFxuICBDaGFydERhdGFQb2ludEV2ZW50LFxuICBEYXRhUG9pbnRzRXZlbnQsXG4gIENoYXJ0RGF0YVBvaW50c0V2ZW50LFxuICBTY2F0dGVyRGF0YVBvaW50c0V2ZW50LFxuICBEYXRhUG9pbnRFdmVudEhhbmRsZXIsXG4gIFNjYXR0ZXJtYXBEYXRhUG9pbnRFdmVudEhhbmRsZXIsXG4gIEFyZWFtYXBEYXRhUG9pbnRFdmVudEhhbmRsZXIsXG4gIEJveHBsb3REYXRhUG9pbnRFdmVudEhhbmRsZXIsXG4gIERhdGFQb2ludHNFdmVudEhhbmRsZXIsXG4gIFNjYXR0ZXJEYXRhUG9pbnRFdmVudEhhbmRsZXIsXG4gIFNjYXR0ZXJEYXRhUG9pbnRzRXZlbnRIYW5kbGVyLFxuICBEYXNoYm9hcmRDb25maWcsXG4gIERhc2hib2FyZEJ5SWRDb25maWcsXG4gIERhc2hib2FyZEZpbHRlcnNQYW5lbENvbmZpZyxcbn0gZnJvbSAnLi9saWIvdHlwZXMnO1xuXG4vKiBSZS1leHBvcnRzIGludGVybmFsIGNvcmUgZnVuY3Rpb25hbGl0aWVzIHRvIHVzZSBpbiBkZXBlbmRhbnQgYW5ndWxhciBtb2R1bGVzICovXG5leHBvcnQge1xuICBjcmVhdGVUaGVtZUNvbnRleHRDb25uZWN0b3IsXG4gIGNyZWF0ZVNpc2Vuc2VDb250ZXh0Q29ubmVjdG9yLFxuICBjcmVhdGVQbHVnaW5zQ29udGV4dENvbm5lY3Rvcixcbn0gZnJvbSAnLi9saWIvY29tcG9uZW50LXdyYXBwZXItaGVscGVycyc7XG5leHBvcnQgeyBUcmFja2FibGVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvZGVjb3JhdG9ycyc7XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQkFBZ0IsQ0FBQztBQWdDL0IsY0FBYyxpQkFBaUIsQ0FBQztBQUVoQyxrRkFBa0Y7QUFDbEYsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0IsMkJBQTJCLEdBQzVCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAc2lzZW5zZS9zZGstdWktYW5ndWxhclxuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nkay11aS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2RrLXVpLWNvcmUtZXhwb3J0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFyZWFtYXBEYXRhUG9pbnRFdmVudCxcbiAgQXJlYW1hcERhdGFQb2ludEV2ZW50SGFuZGxlcixcbiAgQm94cGxvdERhdGFQb2ludEV2ZW50LFxuICBCb3hwbG90RGF0YVBvaW50RXZlbnRIYW5kbGVyLFxuICBCb3hwbG90RGF0YVBvaW50c0V2ZW50LFxuICBDaGFydERhdGFQb2ludENsaWNrRXZlbnQsXG4gIENoYXJ0RGF0YVBvaW50Q2xpY2tFdmVudEhhbmRsZXIsXG4gIENoYXJ0RGF0YVBvaW50Q29udGV4dE1lbnVFdmVudCxcbiAgQ2hhcnREYXRhUG9pbnRDb250ZXh0TWVudUV2ZW50SGFuZGxlcixcbiAgQ2hhcnREYXRhUG9pbnRzRXZlbnQsXG4gIENoYXJ0RGF0YVBvaW50c0V2ZW50SGFuZGxlcixcbiAgRGFzaGJvYXJkQnlJZENvbmZpZyxcbiAgRGFzaGJvYXJkQ29uZmlnLFxuICBEYXNoYm9hcmRGaWx0ZXJzUGFuZWxDb25maWcsXG4gIERhdGFQb2ludEV2ZW50LFxuICBEYXRhUG9pbnRFdmVudEhhbmRsZXIsXG4gIERhdGFQb2ludHNFdmVudCxcbiAgRGF0YVBvaW50c0V2ZW50SGFuZGxlcixcbiAgRmlsdGVyQ2hhbmdlRXZlbnQsXG4gIEZpbHRlckNoYW5nZUV2ZW50SGFuZGxlcixcbiAgRmlsdGVyRGVsZXRlRXZlbnRIYW5kbGVyLFxuICBGaWx0ZXJFZGl0RXZlbnQsXG4gIEZpbHRlckVkaXRFdmVudEhhbmRsZXIsXG4gIFNjYXR0ZXJEYXRhUG9pbnRFdmVudCxcbiAgU2NhdHRlckRhdGFQb2ludEV2ZW50SGFuZGxlcixcbiAgU2NhdHRlckRhdGFQb2ludHNFdmVudCxcbiAgU2NhdHRlckRhdGFQb2ludHNFdmVudEhhbmRsZXIsXG4gIFNjYXR0ZXJtYXBEYXRhUG9pbnRFdmVudCxcbiAgU2NhdHRlcm1hcERhdGFQb2ludEV2ZW50SGFuZGxlcixcbn0gZnJvbSAnLi9saWIvdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbGl0aWVzJztcblxuLyogUmUtZXhwb3J0cyBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uYWxpdGllcyB0byB1c2UgaW4gZGVwZW5kYW50IGFuZ3VsYXIgbW9kdWxlcyAqL1xuZXhwb3J0IHtcbiAgY3JlYXRlUGx1Z2luc0NvbnRleHRDb25uZWN0b3IsXG4gIGNyZWF0ZVNpc2Vuc2VDb250ZXh0Q29ubmVjdG9yLFxuICBjcmVhdGVUaGVtZUNvbnRleHRDb25uZWN0b3IsXG59IGZyb20gJy4vbGliL2NvbXBvbmVudC13cmFwcGVyLWhlbHBlcnMnO1xuZXhwb3J0IHsgVHJhY2thYmxlU2VydmljZSB9IGZyb20gJy4vbGliL2RlY29yYXRvcnMnO1xuIl19
@@ -1,2 +1,2 @@
1
- export default '1.33.0';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgJzEuMzMuMCciXX0=
1
+ export default '2.0.0';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgJzIuMC4wJyJdfQ==
@@ -1,16 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Optional, Inject, Component, ViewChild, Input, NgModule } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
3
  import * as i1 from '@sisense/sdk-ui-angular';
5
4
  import { TrackableService, createSisenseContextConnector, createThemeContextConnector, SdkUiModule } from '@sisense/sdk-ui-angular';
6
- import { createContextProviderRenderer, ComponentAdapter, createElement } from '@sisense/sdk-ui-preact';
5
+ import { DataObserver, ComponentAdapter } from '@sisense/sdk-ui-preact';
7
6
  import { CustomAiContextProvider, ChatRestApi, prepareGetNlgInsightsPayload, DEFAULT_RECOMMENDATIONS_COUNT, widgetComposer, prepareGetNlqResultPayload, Chatbot, GetNlgInsights } from '@sisense/sdk-ui-preact/ai';
8
7
  import { __awaiter, __decorate } from 'tslib';
9
-
10
- const rootId = 'preact';
11
- const template = `
12
- <div #${rootId} style="width: 100%; height: 100%"></div>
13
- `;
8
+ import { CommonModule } from '@angular/common';
14
9
 
15
10
  /**
16
11
  * Creates AI context connector
@@ -19,19 +14,28 @@ const template = `
19
14
  * @internal
20
15
  */
21
16
  const createAiContextConnector = (aiService) => {
22
- return {
23
- prepareContext() {
24
- return __awaiter(this, void 0, void 0, function* () {
25
- const api = yield aiService.getApi();
26
- return {
27
- api,
28
- };
29
- });
17
+ const propsObserver = new DataObserver();
18
+ aiService
19
+ .getApi()
20
+ .then((api) => propsObserver.setValue({
21
+ context: {
22
+ api,
30
23
  },
31
- renderContextProvider: createContextProviderRenderer(CustomAiContextProvider),
24
+ }))
25
+ .catch((error) => propsObserver.setValue({
26
+ error,
27
+ }));
28
+ return {
29
+ propsObserver,
30
+ providerComponent: CustomAiContextProvider,
32
31
  };
33
32
  };
34
33
 
34
+ const rootId = 'preact';
35
+ const template = `
36
+ <div #${rootId} style="width: 100%; height: 100%"></div>
37
+ `;
38
+
35
39
  /**
36
40
  * Token used to inject {@link AiContextConfig} into your application.
37
41
  *
@@ -66,20 +70,13 @@ const createAiContextConnector = (aiService) => {
66
70
  * bootstrap: [AppComponent],
67
71
  * })
68
72
  * ```
69
- *
70
73
  * @group Generative AI
71
- * @beta
72
74
  */
73
75
  const AI_CONTEXT_CONFIG_TOKEN = new InjectionToken('AI Context Config');
74
76
  /**
75
77
  * Service for working with Sisense Fusion Generative AI.
76
78
  *
77
- * ::: warning Note
78
- * This service is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.
79
- * :::
80
- *
81
79
  * @group Generative AI
82
- * @beta
83
80
  */
84
81
  let AiService = class AiService {
85
82
  constructor(sisenseContextService, aiContextConfig) {
@@ -113,6 +110,7 @@ let AiService = class AiService {
113
110
  *
114
111
  * @param params - Parameters for recommendations
115
112
  * @returns An array of objects, each containing recommended question text and its corresponding `widgetProps`
113
+ * @beta
116
114
  */
117
115
  getQueryRecommendations(params) {
118
116
  return __awaiter(this, void 0, void 0, function* () {
@@ -133,6 +131,7 @@ let AiService = class AiService {
133
131
  *
134
132
  * @param params - NLQ query parameters
135
133
  * @returns The result as WidgetProps
134
+ * @beta
136
135
  */
137
136
  getNlqResult(params) {
138
137
  return __awaiter(this, void 0, void 0, function* () {
@@ -169,10 +168,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
169
168
  /**
170
169
  * An Angular component that renders a chatbot with data topic selection.
171
170
  *
172
- * ::: warning Note
173
- * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.
174
- * :::
175
- *
176
171
  * @example
177
172
  * An example of using the `ChatbotComponent`:
178
173
  *
@@ -206,9 +201,7 @@ export class ExampleComponent {
206
201
  * ```
207
202
  *
208
203
  * <img src="media://angular-chatbot-example.png" width="500px" />
209
- *
210
204
  * @group Generative AI
211
- * @beta
212
205
  */
213
206
  class ChatbotComponent {
214
207
  /**
@@ -240,7 +233,7 @@ class ChatbotComponent {
240
233
  this.sisenseContextService = sisenseContextService;
241
234
  this.themeService = themeService;
242
235
  this.aiService = aiService;
243
- this.componentAdapter = new ComponentAdapter(() => this.createPreactComponent(), [
236
+ this.componentAdapter = new ComponentAdapter(Chatbot, [
244
237
  createSisenseContextConnector(this.sisenseContextService),
245
238
  createThemeContextConnector(this.themeService),
246
239
  createAiContextConnector(this.aiService),
@@ -250,23 +243,22 @@ class ChatbotComponent {
250
243
  * @internal
251
244
  */
252
245
  ngAfterViewInit() {
253
- this.componentAdapter.render(this.preactRef.nativeElement);
246
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
254
247
  }
255
248
  /**
256
249
  * @internal
257
250
  */
258
251
  ngOnChanges() {
259
252
  if (this.preactRef) {
260
- this.componentAdapter.render(this.preactRef.nativeElement);
253
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
261
254
  }
262
255
  }
263
- createPreactComponent() {
264
- const props = {
256
+ getPreactComponentProps() {
257
+ return {
265
258
  width: this.width,
266
259
  height: this.height,
267
260
  config: this.config,
268
261
  };
269
- return createElement(Chatbot, props);
270
262
  }
271
263
  /**
272
264
  * @internal
@@ -298,10 +290,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
298
290
  * An Angular component that fetches and displays a collapsible analysis of the provided query using natural language generation (NLG).
299
291
  * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.
300
292
  *
301
- * ::: warning Note
302
- * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.
303
- * :::
304
- *
305
293
  * @example
306
294
  * An example of using the `GetNlgInsightsComponent`:
307
295
  *
@@ -335,9 +323,7 @@ export class ExampleComponent {
335
323
  * ```
336
324
  *
337
325
  * <img src="media://angular-get-nlg-insights-example.png" width="700px" />
338
- *
339
326
  * @group Generative AI
340
- * @beta
341
327
  */
342
328
  class GetNlgInsightsComponent {
343
329
  /**
@@ -369,7 +355,7 @@ class GetNlgInsightsComponent {
369
355
  this.sisenseContextService = sisenseContextService;
370
356
  this.themeService = themeService;
371
357
  this.aiService = aiService;
372
- this.componentAdapter = new ComponentAdapter(() => this.createPreactComponent(), [
358
+ this.componentAdapter = new ComponentAdapter(GetNlgInsights, [
373
359
  createSisenseContextConnector(this.sisenseContextService),
374
360
  createThemeContextConnector(this.themeService),
375
361
  createAiContextConnector(this.aiService),
@@ -379,25 +365,24 @@ class GetNlgInsightsComponent {
379
365
  * @internal
380
366
  */
381
367
  ngAfterViewInit() {
382
- this.componentAdapter.render(this.preactRef.nativeElement);
368
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
383
369
  }
384
370
  /**
385
371
  * @internal
386
372
  */
387
373
  ngOnChanges() {
388
374
  if (this.preactRef) {
389
- this.componentAdapter.render(this.preactRef.nativeElement);
375
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
390
376
  }
391
377
  }
392
- createPreactComponent() {
393
- const props = {
378
+ getPreactComponentProps() {
379
+ return {
394
380
  dataSource: this.dataSource,
395
381
  dimensions: this.dimensions,
396
382
  measures: this.measures,
397
383
  filters: this.filters,
398
384
  verbosity: this.verbosity,
399
385
  };
400
- return createElement(GetNlgInsights, props);
401
386
  }
402
387
  /**
403
388
  * @internal
@@ -464,9 +449,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
464
449
  * bootstrap: [AppComponent],
465
450
  * })
466
451
  * ```
467
- *
468
452
  * @group Generative AI
469
- * @beta
470
453
  */
471
454
  class SdkAiModule {
472
455
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"sisense-sdk-ui-angular-ai.mjs","sources":["../../src/ai/lib/component-wrapper-helpers/template.ts","../../src/ai/lib/component-wrapper-helpers/context-connectors.ts","../../src/ai/lib/services/ai.service.ts","../../src/ai/lib/components/chatbot.component.ts","../../src/ai/lib/components/get-nlg-insights.component.ts","../../src/ai/lib/sdk-ai.module.ts","../../src/ai/public-api.ts","../../src/ai/sisense-sdk-ui-angular-ai.ts"],"sourcesContent":["export const rootId = 'preact';\nexport const template = `\n <div #${rootId} style=\"width: 100%; height: 100%\"></div>\n`;\n","import { ContextConnector, createContextProviderRenderer } from '@sisense/sdk-ui-preact';\nimport { CustomAiContextProvider, CustomAiContext } from '@sisense/sdk-ui-preact/ai';\nimport { AiService } from '../services/ai.service';\n\n/**\n * Creates AI context connector\n *\n * @param aiService - The AI service\n * @internal\n */\nexport const createAiContextConnector = (\n aiService: AiService,\n): ContextConnector<CustomAiContext> => {\n return {\n async prepareContext() {\n const api = await aiService.getApi();\n return {\n api,\n };\n },\n renderContextProvider: createContextProviderRenderer(CustomAiContextProvider),\n };\n};\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport {\n ChatRestApi,\n UseGetNlgInsightsParams,\n prepareGetNlgInsightsPayload,\n GetQueryRecommendationsParams,\n AiContextProviderProps,\n GetNlgInsightsResponse,\n QueryRecommendation,\n GetNlqResultParams,\n DEFAULT_RECOMMENDATIONS_COUNT,\n widgetComposer,\n prepareGetNlqResultPayload,\n} from '@sisense/sdk-ui-preact/ai';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { SisenseContextService, TrackableService, WidgetProps } from '@sisense/sdk-ui-angular';\n\nexport interface AiContextConfig extends Omit<AiContextProviderProps, 'children'> {}\nexport interface GetNlgInsightsParams extends Omit<UseGetNlgInsightsParams, 'enabled'> {}\n\n/**\n * Token used to inject {@link AiContextConfig} into your application.\n *\n * @example\n * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,\n * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:\n *\n * ```ts\n * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';\n * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';\n *\n * const AI_CONTEXT_CONFIG: AiContextConfig = {\n * volatile: true,\n * };\n * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {\n * url: \"<instance url>\", // replace with the URL of your Sisense instance\n * token: \"<api token>\", // replace with the API token of your user account\n * defaultDataSource: DM.DataSource,\n * };\n *\n * @NgModule({\n * imports: [\n * BrowserModule,\n * SdkUiModule,\n * SdkAiModule,\n * ],\n * declarations: [AppComponent],\n * providers: [\n * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },\n * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },\n * ],\n * bootstrap: [AppComponent],\n * })\n * ```\n *\n * @group Generative AI\n * @beta\n */\nexport const AI_CONTEXT_CONFIG_TOKEN = new InjectionToken<AiContextConfig>('AI Context Config');\n\n/**\n * Service for working with Sisense Fusion Generative AI.\n *\n * ::: warning Note\n * This service is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.\n * :::\n *\n * @group Generative AI\n * @beta\n */\n@Injectable({\n providedIn: 'root',\n})\n@TrackableService<AiService>(['getNlgInsights', 'getQueryRecommendations'])\nexport class AiService {\n private apiPromise: Promise<ChatRestApi>;\n\n constructor(\n private sisenseContextService: SisenseContextService,\n @Optional() @Inject(AI_CONTEXT_CONFIG_TOKEN) aiContextConfig?: AiContextConfig,\n ) {\n this.apiPromise = this.sisenseContextService\n .getApp()\n .then((app) => new ChatRestApi(app.httpClient, aiContextConfig?.volatile));\n }\n\n /** @internal */\n getApi(): Promise<ChatRestApi> {\n return this.apiPromise;\n }\n\n /**\n * Fetches an analysis of the provided query using natural language generation (NLG).\n * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.\n *\n * @param params - Parameters for getting NLG insights\n * @returns NLG insights text summary\n */\n async getNlgInsights(params: GetNlgInsightsParams): Promise<string | undefined> {\n const api = await this.getApi();\n const payload = prepareGetNlgInsightsPayload(params);\n return api.ai\n .getNlgInsights(payload)\n .then((response?: GetNlgInsightsResponse) => response?.data?.answer);\n }\n\n /**\n * Fetches recommended questions for a data model or perspective.\n *\n * @param params - Parameters for recommendations\n * @returns An array of objects, each containing recommended question text and its corresponding `widgetProps`\n */\n async getQueryRecommendations(\n params: GetQueryRecommendationsParams,\n ): Promise<QueryRecommendation[]> {\n const api = await this.getApi();\n const { contextTitle, count, enableAxisTitlesInWidgetProps } = params;\n const recCount = count ?? DEFAULT_RECOMMENDATIONS_COUNT;\n\n const rawRecommendations =\n (await api.ai.getQueryRecommendations(contextTitle, { numOfRecommendations: recCount })) ||\n [];\n\n return rawRecommendations.map(\n (recommendation: QueryRecommendation) =>\n ({\n ...recommendation,\n widgetProps: recommendation.jaql\n ? widgetComposer.toWidgetProps(recommendation, {\n useCustomizedStyleOptions: enableAxisTitlesInWidgetProps,\n })\n : undefined,\n } as QueryRecommendation),\n );\n }\n\n /**\n * Executes a natural language query (NLQ) against a data model or perspective\n *\n * @param params - NLQ query parameters\n * @returns The result as WidgetProps\n */\n async getNlqResult(params: GetNlqResultParams): Promise<WidgetProps | undefined> {\n const { contextTitle, request } = prepareGetNlqResultPayload(params);\n const api = await this.getApi();\n\n const data = await api?.ai.getNlqResult(contextTitle, request);\n\n return data\n ? widgetComposer.toWidgetProps(data, {\n useCustomizedStyleOptions: params.enableAxisTitlesInWidgetProps || false,\n })\n : undefined;\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { ComponentAdapter, createElement } from '@sisense/sdk-ui-preact';\nimport { Chatbot, type ChatbotProps as ChatbotPropsPreact } from '@sisense/sdk-ui-preact/ai';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n SisenseContextService,\n ThemeService,\n createSisenseContextConnector,\n createThemeContextConnector,\n} from '@sisense/sdk-ui-angular';\nimport { template, rootId } from '../component-wrapper-helpers/template';\nimport { AiService } from '../services/ai.service';\nimport { createAiContextConnector } from '../component-wrapper-helpers';\n\n/**\n * Props of the {@link ChatbotComponent}.\n */\nexport interface ChatbotProps extends ChatbotPropsPreact {}\n\n/**\n * An Angular component that renders a chatbot with data topic selection.\n *\n * ::: warning Note\n * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.\n * :::\n *\n * @example\n * An example of using the `ChatbotComponent`:\n *\n * ```html\n<!--Component HTML template in example.component.html-->\n<csdk-chatbot\n [width]=\"chatbot.width\"\n [height]=\"chatbot.height\"\n [config]=\"chatbot.config\"\n/>\n * ```\n *\n * ```ts\n// Component behavior in example.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'example',\n templateUrl: './example.component.html',\n styleUrls: ['./example.component.scss'],\n})\nexport class ExampleComponent {\n chatbot = {\n width: '500px',\n height: '700px',\n config: {\n numOfRecommendations: 5,\n },\n };\n}\n * ```\n *\n * <img src=\"media://angular-chatbot-example.png\" width=\"500px\" />\n *\n * @group Generative AI\n * @beta\n */\n@Component({\n selector: 'csdk-chatbot',\n template,\n})\nexport class ChatbotComponent implements AfterViewInit, OnChanges, OnDestroy {\n /**\n * @internal\n */\n @ViewChild(rootId)\n preactRef!: ElementRef<HTMLDivElement>;\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.width}\n */\n @Input()\n width: ChatbotProps['width'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.height}\n */\n @Input()\n height: ChatbotProps['height'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.config}\n */\n @Input()\n config: ChatbotProps['config'];\n\n private componentAdapter: ComponentAdapter;\n\n /**\n * Constructor for the `ChatbotComponent`.\n *\n * @param sisenseContextService - Sisense context service\n * @param themeService - Theme service\n * @param aiService - AI service\n */\n constructor(\n /**\n * Sisense context service\n *\n * @category Constructor\n */\n public sisenseContextService: SisenseContextService,\n /**\n * Theme service\n *\n * @category Constructor\n */\n public themeService: ThemeService,\n /**\n * AI service\n *\n * @category Constructor\n */\n public aiService: AiService,\n ) {\n this.componentAdapter = new ComponentAdapter(\n () => this.createPreactComponent(),\n [\n createSisenseContextConnector(this.sisenseContextService),\n createThemeContextConnector(this.themeService),\n createAiContextConnector(this.aiService),\n ],\n );\n }\n\n /**\n * @internal\n */\n ngAfterViewInit() {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n\n /**\n * @internal\n */\n ngOnChanges() {\n if (this.preactRef) {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n }\n\n private createPreactComponent() {\n const props = {\n width: this.width,\n height: this.height,\n config: this.config,\n };\n\n return createElement(Chatbot, props);\n }\n\n /**\n * @internal\n */\n ngOnDestroy() {\n this.componentAdapter.destroy();\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { ComponentAdapter, createElement } from '@sisense/sdk-ui-preact';\nimport {\n GetNlgInsights,\n type GetNlgInsightsProps as GetNlgInsightsPropsPreact,\n} from '@sisense/sdk-ui-preact/ai';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n SisenseContextService,\n ThemeService,\n createSisenseContextConnector,\n createThemeContextConnector,\n} from '@sisense/sdk-ui-angular';\nimport { AiService } from '../services/ai.service';\nimport { createAiContextConnector } from '../component-wrapper-helpers';\nimport { template, rootId } from '../component-wrapper-helpers/template';\n\n/**\n * Props of the {@link GetNlgInsightsComponent}.\n */\nexport interface GetNlgInsightsProps extends GetNlgInsightsPropsPreact {}\n\n/**\n * An Angular component that fetches and displays a collapsible analysis of the provided query using natural language generation (NLG).\n * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.\n *\n * ::: warning Note\n * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.\n * :::\n *\n * @example\n * An example of using the `GetNlgInsightsComponent`:\n *\n * ```html\n<!--Component HTML template in example.component.html-->\n<csdk-get-nlg-insights\n [dataSource]=\"nlgParams.dataSource\"\n [dimensions]=\"nlgParams.dimensions\"\n [measures]=\"nlgParams.measures\"\n/>\n * ```\n *\n * ```ts\n// Component behavior in example.component.ts\nimport { Component } from '@angular/core';\nimport { measureFactory } from '@sisense/sdk-data';\nimport * as DM from '../../assets/sample-healthcare-model';\n\n@Component({\n selector: 'example',\n templateUrl: './example.component.html',\n styleUrls: ['./example.component.scss'],\n})\nexport class ExampleComponent {\n nlgParams = {\n dataSource: DM.DataSource.title,\n dimensions: [DM.Divisions.Divison_name],\n measures: [measureFactory.sum(DM.Admissions.Cost_of_admission)],\n };\n}\n * ```\n *\n * <img src=\"media://angular-get-nlg-insights-example.png\" width=\"700px\" />\n *\n * @group Generative AI\n * @beta\n */\n@Component({\n selector: 'csdk-get-nlg-insights',\n template,\n})\nexport class GetNlgInsightsComponent implements AfterViewInit, OnChanges, OnDestroy {\n /**\n * @internal\n */\n @ViewChild(rootId)\n preactRef!: ElementRef<HTMLDivElement>;\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.dataSource}\n */\n @Input()\n dataSource!: GetNlgInsightsProps['dataSource'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.dimensions}\n */\n @Input()\n dimensions: GetNlgInsightsProps['dimensions'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.measures}\n */\n @Input()\n measures: GetNlgInsightsProps['measures'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.filters}\n */\n @Input()\n filters: GetNlgInsightsProps['filters'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.verbosity}\n */\n @Input()\n verbosity: GetNlgInsightsProps['verbosity'];\n\n private componentAdapter: ComponentAdapter;\n\n /**\n * Constructor for the `GetNlgInsightsProps`.\n *\n * @param sisenseContextService - Sisense context service\n * @param themeService - Theme service\n * @param aiService - AI service\n */\n constructor(\n /**\n * Sisense context service\n *\n * @category Constructor\n */\n public sisenseContextService: SisenseContextService,\n /**\n * Theme service\n *\n * @category Constructor\n */\n public themeService: ThemeService,\n /**\n * AI service\n *\n * @category Constructor\n */\n public aiService: AiService,\n ) {\n this.componentAdapter = new ComponentAdapter(\n () => this.createPreactComponent(),\n [\n createSisenseContextConnector(this.sisenseContextService),\n createThemeContextConnector(this.themeService),\n createAiContextConnector(this.aiService),\n ],\n );\n }\n\n /**\n * @internal\n */\n ngAfterViewInit() {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n\n /**\n * @internal\n */\n ngOnChanges() {\n if (this.preactRef) {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n }\n\n private createPreactComponent() {\n const props = {\n dataSource: this.dataSource,\n dimensions: this.dimensions,\n measures: this.measures,\n filters: this.filters,\n verbosity: this.verbosity,\n };\n\n return createElement(GetNlgInsights, props);\n }\n\n /**\n * @internal\n */\n ngOnDestroy() {\n this.componentAdapter.destroy();\n }\n}\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdkUiModule } from '@sisense/sdk-ui-angular';\nimport { ChatbotComponent, GetNlgInsightsComponent } from './components';\n\n/**\n * SDK AI Module, which is a container for generative AI components and services.\n *\n * @example\n * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,\n * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:\n *\n * ```ts\n * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';\n * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';\n *\n * const AI_CONTEXT_CONFIG: AiContextConfig = {\n * volatile: true,\n * };\n * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {\n * url: \"<instance url>\", // replace with the URL of your Sisense instance\n * token: \"<api token>\", // replace with the API token of your user account\n * defaultDataSource: DM.DataSource,\n * };\n *\n * @NgModule({\n * imports: [\n * BrowserModule,\n * SdkUiModule,\n * SdkAiModule,\n * ],\n * declarations: [AppComponent],\n * providers: [\n * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },\n * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },\n * ],\n * bootstrap: [AppComponent],\n * })\n * ```\n *\n * @group Generative AI\n * @beta\n */\n@NgModule({\n declarations: [ChatbotComponent, GetNlgInsightsComponent],\n imports: [CommonModule, SdkUiModule],\n exports: [ChatbotComponent, GetNlgInsightsComponent],\n providers: [],\n})\nexport class SdkAiModule {\n constructor() {\n console.log('SdkAiModule loaded');\n }\n}\n","/**\n * Public API Surface of @sisense/sdk-ui-angular/ai\n */\n\nexport * from './lib/sdk-ai.module';\nexport * from './lib/components';\nexport * from './lib/services';\nexport * from './lib/sdk-ui-core-exports';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.AiService"],"mappings":"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"}
1
+ {"version":3,"file":"sisense-sdk-ui-angular-ai.mjs","sources":["../../src/ai/lib/component-wrapper-helpers/context-connectors.ts","../../src/ai/lib/component-wrapper-helpers/template.ts","../../src/ai/lib/services/ai.service.ts","../../src/ai/lib/components/chatbot.component.ts","../../src/ai/lib/components/get-nlg-insights.component.ts","../../src/ai/lib/sdk-ai.module.ts","../../src/ai/public-api.ts","../../src/ai/sisense-sdk-ui-angular-ai.ts"],"sourcesContent":["import { ContextConnector, DataObserver } from '@sisense/sdk-ui-preact';\nimport { CustomAiContextProvider, CustomAiContextProviderProps } from '@sisense/sdk-ui-preact/ai';\n\nimport { AiService } from '../services/ai.service';\n\n/**\n * Creates AI context connector\n *\n * @param aiService - The AI service\n * @internal\n */\nexport const createAiContextConnector = (\n aiService: AiService,\n): ContextConnector<CustomAiContextProviderProps> => {\n const propsObserver = new DataObserver<CustomAiContextProviderProps>();\n\n aiService\n .getApi()\n .then((api) =>\n propsObserver.setValue({\n context: {\n api,\n },\n }),\n )\n .catch((error) =>\n propsObserver.setValue({\n error,\n }),\n );\n\n return {\n propsObserver,\n providerComponent: CustomAiContextProvider,\n };\n};\n","export const rootId = 'preact';\nexport const template = `\n <div #${rootId} style=\"width: 100%; height: 100%\"></div>\n`;\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { SisenseContextService, TrackableService, WidgetProps } from '@sisense/sdk-ui-angular';\nimport {\n AiContextProviderProps,\n ChatRestApi,\n DEFAULT_RECOMMENDATIONS_COUNT,\n GetNlgInsightsResponse,\n GetNlqResultParams,\n GetQueryRecommendationsParams,\n prepareGetNlgInsightsPayload,\n prepareGetNlqResultPayload,\n QueryRecommendation as QueryRecommendationPreact,\n UseGetNlgInsightsParams,\n widgetComposer,\n} from '@sisense/sdk-ui-preact/ai';\n\nexport interface AiContextConfig extends Omit<AiContextProviderProps, 'children'> {}\nexport interface GetNlgInsightsParams extends Omit<UseGetNlgInsightsParams, 'enabled'> {}\n\n/**\n * {@inheritDoc @sisense/sdk-ui!QueryRecommendation}\n */\nexport interface QueryRecommendation extends Omit<QueryRecommendationPreact, 'widgetProps'> {\n /**\n * {@inheritDoc @sisense/sdk-ui!QueryRecommendation.widgetProps}\n */\n widgetProps?: WidgetProps;\n}\n\n/**\n * Token used to inject {@link AiContextConfig} into your application.\n *\n * @example\n * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,\n * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:\n *\n * ```ts\n * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';\n * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';\n *\n * const AI_CONTEXT_CONFIG: AiContextConfig = {\n * volatile: true,\n * };\n * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {\n * url: \"<instance url>\", // replace with the URL of your Sisense instance\n * token: \"<api token>\", // replace with the API token of your user account\n * defaultDataSource: DM.DataSource,\n * };\n *\n * @NgModule({\n * imports: [\n * BrowserModule,\n * SdkUiModule,\n * SdkAiModule,\n * ],\n * declarations: [AppComponent],\n * providers: [\n * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },\n * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },\n * ],\n * bootstrap: [AppComponent],\n * })\n * ```\n * @group Generative AI\n */\nexport const AI_CONTEXT_CONFIG_TOKEN = new InjectionToken<AiContextConfig>('AI Context Config');\n\n/**\n * Service for working with Sisense Fusion Generative AI.\n *\n * @group Generative AI\n */\n@Injectable({\n providedIn: 'root',\n})\n@TrackableService<AiService>(['getNlgInsights', 'getQueryRecommendations'])\nexport class AiService {\n private apiPromise: Promise<ChatRestApi>;\n\n constructor(\n private sisenseContextService: SisenseContextService,\n @Optional() @Inject(AI_CONTEXT_CONFIG_TOKEN) aiContextConfig?: AiContextConfig,\n ) {\n this.apiPromise = this.sisenseContextService\n .getApp()\n .then((app) => new ChatRestApi(app.httpClient, aiContextConfig?.volatile));\n }\n\n /** @internal */\n getApi(): Promise<ChatRestApi> {\n return this.apiPromise;\n }\n\n /**\n * Fetches an analysis of the provided query using natural language generation (NLG).\n * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.\n *\n * @param params - Parameters for getting NLG insights\n * @returns NLG insights text summary\n */\n async getNlgInsights(params: GetNlgInsightsParams): Promise<string | undefined> {\n const api = await this.getApi();\n const payload = prepareGetNlgInsightsPayload(params);\n return api.ai\n .getNlgInsights(payload)\n .then((response?: GetNlgInsightsResponse) => response?.data?.answer);\n }\n\n /**\n * Fetches recommended questions for a data model or perspective.\n *\n * @param params - Parameters for recommendations\n * @returns An array of objects, each containing recommended question text and its corresponding `widgetProps`\n * @beta\n */\n async getQueryRecommendations(\n params: GetQueryRecommendationsParams,\n ): Promise<QueryRecommendation[]> {\n const api = await this.getApi();\n const { contextTitle, count, enableAxisTitlesInWidgetProps } = params;\n const recCount = count ?? DEFAULT_RECOMMENDATIONS_COUNT;\n\n const rawRecommendations =\n (await api.ai.getQueryRecommendations(contextTitle, { numOfRecommendations: recCount })) ||\n [];\n\n return rawRecommendations.map(\n (recommendation: QueryRecommendation) =>\n ({\n ...recommendation,\n widgetProps: recommendation.jaql\n ? widgetComposer.toWidgetProps(recommendation, {\n useCustomizedStyleOptions: enableAxisTitlesInWidgetProps,\n })\n : undefined,\n } as QueryRecommendation),\n );\n }\n\n /**\n * Executes a natural language query (NLQ) against a data model or perspective\n *\n * @param params - NLQ query parameters\n * @returns The result as WidgetProps\n * @beta\n */\n async getNlqResult(params: GetNlqResultParams): Promise<WidgetProps | undefined> {\n const { contextTitle, request } = prepareGetNlqResultPayload(params);\n const api = await this.getApi();\n\n const data = await api?.ai.getNlqResult(contextTitle, request);\n\n return data\n ? (widgetComposer.toWidgetProps(data, {\n useCustomizedStyleOptions: params.enableAxisTitlesInWidgetProps || false,\n }) as WidgetProps)\n : undefined;\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n createSisenseContextConnector,\n createThemeContextConnector,\n SisenseContextService,\n ThemeService,\n} from '@sisense/sdk-ui-angular';\nimport { ComponentAdapter } from '@sisense/sdk-ui-preact';\nimport {\n Chatbot as ChatbotPreact,\n type ChatbotProps as ChatbotPropsPreact,\n} from '@sisense/sdk-ui-preact/ai';\n\nimport { createAiContextConnector } from '../component-wrapper-helpers';\nimport { rootId, template } from '../component-wrapper-helpers/template';\nimport { AiService } from '../services/ai.service';\n\n/**\n * Props of the {@link ChatbotComponent}.\n */\nexport interface ChatbotProps extends ChatbotPropsPreact {}\n\n/**\n * An Angular component that renders a chatbot with data topic selection.\n *\n * @example\n * An example of using the `ChatbotComponent`:\n *\n * ```html\n<!--Component HTML template in example.component.html-->\n<csdk-chatbot\n [width]=\"chatbot.width\"\n [height]=\"chatbot.height\"\n [config]=\"chatbot.config\"\n/>\n * ```\n *\n * ```ts\n// Component behavior in example.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'example',\n templateUrl: './example.component.html',\n styleUrls: ['./example.component.scss'],\n})\nexport class ExampleComponent {\n chatbot = {\n width: '500px',\n height: '700px',\n config: {\n numOfRecommendations: 5,\n },\n };\n}\n * ```\n *\n * <img src=\"media://angular-chatbot-example.png\" width=\"500px\" />\n * @group Generative AI\n */\n@Component({\n selector: 'csdk-chatbot',\n template,\n})\nexport class ChatbotComponent implements AfterViewInit, OnChanges, OnDestroy {\n /**\n * @internal\n */\n @ViewChild(rootId)\n preactRef!: ElementRef<HTMLDivElement>;\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.width}\n */\n @Input()\n width: ChatbotProps['width'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.height}\n */\n @Input()\n height: ChatbotProps['height'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.config}\n */\n @Input()\n config: ChatbotProps['config'];\n\n private componentAdapter: ComponentAdapter<typeof ChatbotPreact>;\n\n /**\n * Constructor for the `ChatbotComponent`.\n *\n * @param sisenseContextService - Sisense context service\n * @param themeService - Theme service\n * @param aiService - AI service\n */\n constructor(\n /**\n * Sisense context service\n *\n * @category Constructor\n */\n public sisenseContextService: SisenseContextService,\n /**\n * Theme service\n *\n * @category Constructor\n */\n public themeService: ThemeService,\n /**\n * AI service\n *\n * @category Constructor\n */\n public aiService: AiService,\n ) {\n this.componentAdapter = new ComponentAdapter(ChatbotPreact, [\n createSisenseContextConnector(this.sisenseContextService),\n createThemeContextConnector(this.themeService),\n createAiContextConnector(this.aiService),\n ]);\n }\n\n /**\n * @internal\n */\n ngAfterViewInit() {\n this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());\n }\n\n /**\n * @internal\n */\n ngOnChanges() {\n if (this.preactRef) {\n this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());\n }\n }\n\n private getPreactComponentProps(): ChatbotPropsPreact {\n return {\n width: this.width,\n height: this.height,\n config: this.config,\n };\n }\n\n /**\n * @internal\n */\n ngOnDestroy() {\n this.componentAdapter.destroy();\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n createSisenseContextConnector,\n createThemeContextConnector,\n SisenseContextService,\n ThemeService,\n} from '@sisense/sdk-ui-angular';\nimport { ComponentAdapter } from '@sisense/sdk-ui-preact';\nimport {\n GetNlgInsights as GetNlgInsightsPreact,\n type GetNlgInsightsProps as GetNlgInsightsPropsPreact,\n} from '@sisense/sdk-ui-preact/ai';\n\nimport { createAiContextConnector } from '../component-wrapper-helpers';\nimport { rootId, template } from '../component-wrapper-helpers/template';\nimport { AiService } from '../services/ai.service';\n\n/**\n * Props of the {@link GetNlgInsightsComponent}.\n */\nexport interface GetNlgInsightsProps extends GetNlgInsightsPropsPreact {}\n\n/**\n * An Angular component that fetches and displays a collapsible analysis of the provided query using natural language generation (NLG).\n * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.\n *\n * @example\n * An example of using the `GetNlgInsightsComponent`:\n *\n * ```html\n<!--Component HTML template in example.component.html-->\n<csdk-get-nlg-insights\n [dataSource]=\"nlgParams.dataSource\"\n [dimensions]=\"nlgParams.dimensions\"\n [measures]=\"nlgParams.measures\"\n/>\n * ```\n *\n * ```ts\n// Component behavior in example.component.ts\nimport { Component } from '@angular/core';\nimport { measureFactory } from '@sisense/sdk-data';\nimport * as DM from '../../assets/sample-healthcare-model';\n\n@Component({\n selector: 'example',\n templateUrl: './example.component.html',\n styleUrls: ['./example.component.scss'],\n})\nexport class ExampleComponent {\n nlgParams = {\n dataSource: DM.DataSource.title,\n dimensions: [DM.Divisions.Divison_name],\n measures: [measureFactory.sum(DM.Admissions.Cost_of_admission)],\n };\n}\n * ```\n *\n * <img src=\"media://angular-get-nlg-insights-example.png\" width=\"700px\" />\n * @group Generative AI\n */\n@Component({\n selector: 'csdk-get-nlg-insights',\n template,\n})\nexport class GetNlgInsightsComponent implements AfterViewInit, OnChanges, OnDestroy {\n /**\n * @internal\n */\n @ViewChild(rootId)\n preactRef!: ElementRef<HTMLDivElement>;\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.dataSource}\n */\n @Input()\n dataSource!: GetNlgInsightsProps['dataSource'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.dimensions}\n */\n @Input()\n dimensions: GetNlgInsightsProps['dimensions'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.measures}\n */\n @Input()\n measures: GetNlgInsightsProps['measures'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.filters}\n */\n @Input()\n filters: GetNlgInsightsProps['filters'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.verbosity}\n */\n @Input()\n verbosity: GetNlgInsightsProps['verbosity'];\n\n private componentAdapter: ComponentAdapter<typeof GetNlgInsightsPreact>;\n\n /**\n * Constructor for the `GetNlgInsightsProps`.\n *\n * @param sisenseContextService - Sisense context service\n * @param themeService - Theme service\n * @param aiService - AI service\n */\n constructor(\n /**\n * Sisense context service\n *\n * @category Constructor\n */\n public sisenseContextService: SisenseContextService,\n /**\n * Theme service\n *\n * @category Constructor\n */\n public themeService: ThemeService,\n /**\n * AI service\n *\n * @category Constructor\n */\n public aiService: AiService,\n ) {\n this.componentAdapter = new ComponentAdapter(GetNlgInsightsPreact, [\n createSisenseContextConnector(this.sisenseContextService),\n createThemeContextConnector(this.themeService),\n createAiContextConnector(this.aiService),\n ]);\n }\n\n /**\n * @internal\n */\n ngAfterViewInit() {\n this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());\n }\n\n /**\n * @internal\n */\n ngOnChanges() {\n if (this.preactRef) {\n this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());\n }\n }\n\n private getPreactComponentProps(): GetNlgInsightsPropsPreact {\n return {\n dataSource: this.dataSource,\n dimensions: this.dimensions,\n measures: this.measures,\n filters: this.filters,\n verbosity: this.verbosity,\n };\n }\n\n /**\n * @internal\n */\n ngOnDestroy() {\n this.componentAdapter.destroy();\n }\n}\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SdkUiModule } from '@sisense/sdk-ui-angular';\n\nimport { ChatbotComponent, GetNlgInsightsComponent } from './components';\n\n/**\n * SDK AI Module, which is a container for generative AI components and services.\n *\n * @example\n * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,\n * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:\n *\n * ```ts\n * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';\n * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';\n *\n * const AI_CONTEXT_CONFIG: AiContextConfig = {\n * volatile: true,\n * };\n * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {\n * url: \"<instance url>\", // replace with the URL of your Sisense instance\n * token: \"<api token>\", // replace with the API token of your user account\n * defaultDataSource: DM.DataSource,\n * };\n *\n * @NgModule({\n * imports: [\n * BrowserModule,\n * SdkUiModule,\n * SdkAiModule,\n * ],\n * declarations: [AppComponent],\n * providers: [\n * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },\n * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },\n * ],\n * bootstrap: [AppComponent],\n * })\n * ```\n * @group Generative AI\n */\n@NgModule({\n declarations: [ChatbotComponent, GetNlgInsightsComponent],\n imports: [CommonModule, SdkUiModule],\n exports: [ChatbotComponent, GetNlgInsightsComponent],\n providers: [],\n})\nexport class SdkAiModule {\n constructor() {\n console.log('SdkAiModule loaded');\n }\n}\n","/**\n * Public API Surface of @sisense/sdk-ui-angular/ai\n */\n\nexport * from './lib/components';\nexport * from './lib/sdk-ai.module';\nexport * from './lib/sdk-ui-core-exports';\nexport * from './lib/services';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ChatbotPreact","i2.AiService","GetNlgInsightsPreact"],"mappings":";;;;;;;;;AAKA;;;;;AAKG;AACI,MAAM,wBAAwB,GAAG,CACtC,SAAoB,KAC8B;AAClD,IAAA,MAAM,aAAa,GAAG,IAAI,YAAY,EAAgC,CAAC;IAEvE,SAAS;AACN,SAAA,MAAM,EAAE;SACR,IAAI,CAAC,CAAC,GAAG,KACR,aAAa,CAAC,QAAQ,CAAC;AACrB,QAAA,OAAO,EAAE;YACP,GAAG;AACJ,SAAA;AACF,KAAA,CAAC,CACH;SACA,KAAK,CAAC,CAAC,KAAK,KACX,aAAa,CAAC,QAAQ,CAAC;QACrB,KAAK;AACN,KAAA,CAAC,CACH,CAAC;IAEJ,OAAO;QACL,aAAa;AACb,QAAA,iBAAiB,EAAE,uBAAuB;KAC3C,CAAC;AACJ,CAAC;;ACnCM,MAAM,MAAM,GAAG,QAAQ,CAAC;AACxB,MAAM,QAAQ,GAAG,CAAA;YACZ,MAAM,CAAA;CACjB;;AC2BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;MACU,uBAAuB,GAAG,IAAI,cAAc,CAAkB,mBAAmB,EAAE;AAEhG;;;;AAIG;AAKU,IAAA,SAAS,GAAf,MAAM,SAAS,CAAA;IAGpB,WACU,CAAA,qBAA4C,EACP,eAAiC,EAAA;AADtE,QAAA,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;AAGpD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,qBAAqB;AACzC,aAAA,MAAM,EAAE;aACR,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,aAAf,eAAe,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAf,eAAe,CAAE,QAAQ,CAAC,CAAC,CAAC;KAC9E;;IAGD,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;AAED;;;;;;AAMG;AACG,IAAA,cAAc,CAAC,MAA4B,EAAA;;AAC/C,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAChC,YAAA,MAAM,OAAO,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACrD,OAAO,GAAG,CAAC,EAAE;iBACV,cAAc,CAAC,OAAO,CAAC;iBACvB,IAAI,CAAC,CAAC,QAAiC,KAAK,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,MAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAA,CAAC,CAAC;SACxE,CAAA,CAAA;AAAA,KAAA;AAED;;;;;;AAMG;AACG,IAAA,uBAAuB,CAC3B,MAAqC,EAAA;;AAErC,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,6BAA6B,EAAE,GAAG,MAAM,CAAC;YACtE,MAAM,QAAQ,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,6BAA6B,CAAC;AAExD,YAAA,MAAM,kBAAkB,GACtB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,uBAAuB,CAAC,YAAY,EAAE,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC;AACvF,gBAAA,EAAE,CAAC;AAEL,YAAA,OAAO,kBAAkB,CAAC,GAAG,CAC3B,CAAC,cAAmC,MAClC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,cAAc,CACjB,EAAA,EAAA,WAAW,EAAE,cAAc,CAAC,IAAI;AAC9B,sBAAE,cAAc,CAAC,aAAa,CAAC,cAAc,EAAE;AAC3C,wBAAA,yBAAyB,EAAE,6BAA6B;qBACzD,CAAC;AACJ,sBAAE,SAAS,EACU,CAAA,CAAA,CAC5B,CAAC;SACH,CAAA,CAAA;AAAA,KAAA;AAED;;;;;;AAMG;AACG,IAAA,YAAY,CAAC,MAA0B,EAAA;;YAC3C,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACrE,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAEhC,YAAA,MAAM,IAAI,GAAG,OAAM,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA,CAAC;AAE/D,YAAA,OAAO,IAAI;AACT,kBAAG,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE;AAClC,oBAAA,yBAAyB,EAAE,MAAM,CAAC,6BAA6B,IAAI,KAAK;iBACzE,CAAiB;kBAClB,SAAS,CAAC;SACf,CAAA,CAAA;AAAA,KAAA;;AAjFU,SAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,uDAKE,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALlC,SAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,cAHR,MAAM,EAAA,CAAA,CAAA;AAGP,SAAS,GAAA,UAAA,CAAA;AADrB,IAAA,gBAAgB,CAAY,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC;CAC9D,EAAA,SAAS,CAkFrB,CAAA;4FAlFY,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;8BAOI,QAAQ;;8BAAI,MAAM;+BAAC,uBAAuB,CAAA;;;;ACnD/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;MAKU,gBAAgB,CAAA;AA2B3B;;;;;;AAMG;AACH,IAAA,WAAA;AACE;;;;AAIG;IACI,qBAA4C;AACnD;;;;AAIG;IACI,YAA0B;AACjC;;;;AAIG;IACI,SAAoB,EAAA;AAZpB,QAAA,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;AAM5C,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAM1B,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAE3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAACA,OAAa,EAAE;AAC1D,YAAA,6BAA6B,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACzD,YAAA,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9C,YAAA,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC;AACzC,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;KAC5F;AAED;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;AAC5F,SAAA;KACF;IAEO,uBAAuB,GAAA;QAC7B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;KACH;AAED;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KACjC;;8GA1FU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,iEAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;oBACxB,QAAQ;iBACT,CAAA;4JAMC,SAAS,EAAA,CAAA;sBADR,SAAS;uBAAC,MAAM,CAAA;gBAOjB,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAON,MAAM,EAAA,CAAA;sBADL,KAAK;gBAON,MAAM,EAAA,CAAA;sBADL,KAAK;;;AChER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCG;MAKU,uBAAuB,CAAA;AAuClC;;;;;;AAMG;AACH,IAAA,WAAA;AACE;;;;AAIG;IACI,qBAA4C;AACnD;;;;AAIG;IACI,YAA0B;AACjC;;;;AAIG;IACI,SAAoB,EAAA;AAZpB,QAAA,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;AAM5C,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAM1B,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAE3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAACC,cAAoB,EAAE;AACjE,YAAA,6BAA6B,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACzD,YAAA,2BAA2B,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9C,YAAA,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC;AACzC,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;KAC5F;AAED;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;AAC5F,SAAA;KACF;IAEO,uBAAuB,GAAA;QAC7B,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH;AAED;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KACjC;;qHAxGU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAAvB,uBAAuB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,iEAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;oBACjC,QAAQ;iBACT,CAAA;4JAMC,SAAS,EAAA,CAAA;sBADR,SAAS;uBAAC,MAAM,CAAA;gBAOjB,UAAU,EAAA,CAAA;sBADT,KAAK;gBAON,UAAU,EAAA,CAAA;sBADT,KAAK;gBAON,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAON,OAAO,EAAA,CAAA;sBADN,KAAK;gBAON,SAAS,EAAA,CAAA;sBADR,KAAK;;;AC5GR;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;MAOU,WAAW,CAAA;AACtB,IAAA,WAAA,GAAA;AACE,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;KACnC;;yGAHU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;0GAAX,WAAW,EAAA,YAAA,EAAA,CALP,gBAAgB,EAAE,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAC9C,YAAY,EAAE,WAAW,CAAA,EAAA,OAAA,EAAA,CACzB,gBAAgB,EAAE,uBAAuB,CAAA,EAAA,CAAA,CAAA;0GAGxC,WAAW,EAAA,OAAA,EAAA,CAJZ,YAAY,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA;4FAIxB,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;AACzD,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;AACpC,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;AACpD,oBAAA,SAAS,EAAE,EAAE;iBACd,CAAA;;;AChDD;;AAEG;;ACFH;;AAEG;;;;"}