graphdb-workbench 3.2.0-TR4 → 3.2.0-TR5

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 (160) hide show
  1. package/dist/12358.d1b5130917702cb0dd25.bundle.js +3 -0
  2. package/dist/12358.d1b5130917702cb0dd25.bundle.js.map +1 -0
  3. package/dist/{12396.a1b7856e86d52282f34c.bundle.js → 12396.bb3eab12cf754ea62ada.bundle.js} +2 -2
  4. package/dist/{12396.a1b7856e86d52282f34c.bundle.js.map → 12396.bb3eab12cf754ea62ada.bundle.js.map} +1 -1
  5. package/dist/{15535.c58319cba275ee5baa90.bundle.js → 15535.18ede9f56483a38d1305.bundle.js} +2 -2
  6. package/dist/{15535.c58319cba275ee5baa90.bundle.js.map → 15535.18ede9f56483a38d1305.bundle.js.map} +1 -1
  7. package/dist/{16162.2dc986d04777c8ae9489.bundle.js → 16162.68c4cc2feee685642217.bundle.js} +2 -2
  8. package/dist/{16162.2dc986d04777c8ae9489.bundle.js.map → 16162.68c4cc2feee685642217.bundle.js.map} +1 -1
  9. package/dist/19402.151ce1287c14531436c3.bundle.js +2 -0
  10. package/dist/19402.151ce1287c14531436c3.bundle.js.map +1 -0
  11. package/dist/{20287.7cfc312df157f5bdea97.bundle.js → 20287.a67ba9468f3f83219558.bundle.js} +2 -2
  12. package/dist/{20287.7cfc312df157f5bdea97.bundle.js.map → 20287.a67ba9468f3f83219558.bundle.js.map} +1 -1
  13. package/dist/{21136.67a9bcf4bb0c201d3fd1.bundle.js → 21136.514ac00d21a54514a7b6.bundle.js} +2 -2
  14. package/dist/{21136.67a9bcf4bb0c201d3fd1.bundle.js.map → 21136.514ac00d21a54514a7b6.bundle.js.map} +1 -1
  15. package/dist/{21142.7f8327c28d939fa26009.bundle.js → 21142.5e08154738dc30c2aa36.bundle.js} +2 -2
  16. package/dist/{21142.7f8327c28d939fa26009.bundle.js.map → 21142.5e08154738dc30c2aa36.bundle.js.map} +1 -1
  17. package/dist/{21170.cecdf25699f68d4cf749.bundle.js → 21170.1122ab4c938b88301ba7.bundle.js} +2 -2
  18. package/dist/{21170.cecdf25699f68d4cf749.bundle.js.map → 21170.1122ab4c938b88301ba7.bundle.js.map} +1 -1
  19. package/dist/{21195.e2c1fc69631041b97f8e.bundle.js → 21195.4067ec470e04250ed006.bundle.js} +2 -2
  20. package/dist/{21195.e2c1fc69631041b97f8e.bundle.js.map → 21195.4067ec470e04250ed006.bundle.js.map} +1 -1
  21. package/dist/{25747.c3dc5503ad696af5d5a3.bundle.js → 25747.c6c83a72c5ff93451064.bundle.js} +2 -2
  22. package/dist/{25747.c3dc5503ad696af5d5a3.bundle.js.map → 25747.c6c83a72c5ff93451064.bundle.js.map} +1 -1
  23. package/dist/{27580.d038d43102a3e9eec97d.bundle.js → 27580.0219349c709de4b5a0f4.bundle.js} +2 -2
  24. package/dist/{27580.d038d43102a3e9eec97d.bundle.js.map → 27580.0219349c709de4b5a0f4.bundle.js.map} +1 -1
  25. package/dist/{31636.fc6eba63d6d985d31673.bundle.js → 31636.191bd3c9ed0e3fb62007.bundle.js} +2 -2
  26. package/dist/{31636.fc6eba63d6d985d31673.bundle.js.map → 31636.191bd3c9ed0e3fb62007.bundle.js.map} +1 -1
  27. package/dist/{32489.e9af1ec463e2d4136732.bundle.js → 32489.468bcab006cd04c016c7.bundle.js} +2 -2
  28. package/dist/{32489.e9af1ec463e2d4136732.bundle.js.map → 32489.468bcab006cd04c016c7.bundle.js.map} +1 -1
  29. package/dist/{34495.06c9997d58d0b0ba7152.bundle.js → 34495.9b2a1410b1782a381a1e.bundle.js} +2 -2
  30. package/dist/{34495.06c9997d58d0b0ba7152.bundle.js.map → 34495.9b2a1410b1782a381a1e.bundle.js.map} +1 -1
  31. package/dist/36665.6bc77ded61aedb454c6e.bundle.js +2 -0
  32. package/dist/36665.6bc77ded61aedb454c6e.bundle.js.map +1 -0
  33. package/dist/{38360.ca92a04a1afcf9cfea7f.bundle.js → 38360.3714f16105c232cbf498.bundle.js} +2 -2
  34. package/dist/{38360.ca92a04a1afcf9cfea7f.bundle.js.map → 38360.3714f16105c232cbf498.bundle.js.map} +1 -1
  35. package/dist/{38644.29dbfb38e4089efa6697.bundle.js → 38644.f34d9227543727bec695.bundle.js} +2 -2
  36. package/dist/{38644.29dbfb38e4089efa6697.bundle.js.map → 38644.f34d9227543727bec695.bundle.js.map} +1 -1
  37. package/dist/{38843.4b11f56e93f60fbe4e0a.bundle.js → 38843.1ed4c0d2657b5fb9ed8a.bundle.js} +2 -2
  38. package/dist/{38843.4b11f56e93f60fbe4e0a.bundle.js.map → 38843.1ed4c0d2657b5fb9ed8a.bundle.js.map} +1 -1
  39. package/dist/{39518.c577d83ed591fada064c.bundle.js → 39518.52135a04a886f95c5801.bundle.js} +2 -2
  40. package/dist/{39518.c577d83ed591fada064c.bundle.js.map → 39518.52135a04a886f95c5801.bundle.js.map} +1 -1
  41. package/dist/{39539.463ec29e136b100c0abe.bundle.js → 39539.351f1fe10b21f949a885.bundle.js} +2 -2
  42. package/dist/{39539.463ec29e136b100c0abe.bundle.js.map → 39539.351f1fe10b21f949a885.bundle.js.map} +1 -1
  43. package/dist/40516.7db0da5332b68a1cb0a4.bundle.js +2 -0
  44. package/dist/40516.7db0da5332b68a1cb0a4.bundle.js.map +1 -0
  45. package/dist/{41453.241761ce8ff75036e5e0.bundle.js → 41453.c082b58753e157b39bf9.bundle.js} +2 -2
  46. package/dist/{41453.241761ce8ff75036e5e0.bundle.js.map → 41453.c082b58753e157b39bf9.bundle.js.map} +1 -1
  47. package/dist/{42129.f67dc6029cdab567bf54.bundle.js → 42129.6877bc3354f3413916f2.bundle.js} +2 -2
  48. package/dist/{42129.f67dc6029cdab567bf54.bundle.js.map → 42129.6877bc3354f3413916f2.bundle.js.map} +1 -1
  49. package/dist/{44444.a1b29c2329c7d4a39cc5.bundle.js → 44444.2b282777f2e1424a03b1.bundle.js} +2 -2
  50. package/dist/{44444.a1b29c2329c7d4a39cc5.bundle.js.map → 44444.2b282777f2e1424a03b1.bundle.js.map} +1 -1
  51. package/dist/{55862.1c3f1e807c8a05b1b6ed.bundle.js → 55862.f591817372ceb94a4cd2.bundle.js} +2 -2
  52. package/dist/{55862.1c3f1e807c8a05b1b6ed.bundle.js.map → 55862.f591817372ceb94a4cd2.bundle.js.map} +1 -1
  53. package/dist/{58306.a45182d200e3f8793644.bundle.js → 58306.b82da84fcad5ac12087a.bundle.js} +2 -2
  54. package/dist/{58306.a45182d200e3f8793644.bundle.js.map → 58306.b82da84fcad5ac12087a.bundle.js.map} +1 -1
  55. package/dist/64118.b15383c12c5bdf6d907f.bundle.js +2 -0
  56. package/dist/64118.b15383c12c5bdf6d907f.bundle.js.map +1 -0
  57. package/dist/{67888.e21c0e4c70be6214fcd7.bundle.js → 67888.927a2d7905f79d2f5bb4.bundle.js} +2 -2
  58. package/dist/{67888.e21c0e4c70be6214fcd7.bundle.js.map → 67888.927a2d7905f79d2f5bb4.bundle.js.map} +1 -1
  59. package/dist/{72379.cb41e26c33271a25816e.bundle.js → 72379.d21e40131b7e44c75eba.bundle.js} +2 -2
  60. package/dist/{72379.cb41e26c33271a25816e.bundle.js.map → 72379.d21e40131b7e44c75eba.bundle.js.map} +1 -1
  61. package/dist/{73667.ad957853dba08fd3be30.bundle.js → 73667.0921baf2ddc28806feca.bundle.js} +2 -2
  62. package/dist/{73667.ad957853dba08fd3be30.bundle.js.map → 73667.0921baf2ddc28806feca.bundle.js.map} +1 -1
  63. package/dist/{73793.79a311b387e5db776506.bundle.js → 73793.f61f6800eea64549ae30.bundle.js} +2 -2
  64. package/dist/{73793.79a311b387e5db776506.bundle.js.map → 73793.f61f6800eea64549ae30.bundle.js.map} +1 -1
  65. package/dist/{75282.8be5dde957dc6452c86a.bundle.js → 75282.06a7373dccbf2b056731.bundle.js} +2 -2
  66. package/dist/{75282.8be5dde957dc6452c86a.bundle.js.map → 75282.06a7373dccbf2b056731.bundle.js.map} +1 -1
  67. package/dist/{75849.0f6bab8b5749be998286.bundle.js → 75849.6ae9e20cdb3fbe4018a4.bundle.js} +2 -2
  68. package/dist/{75849.0f6bab8b5749be998286.bundle.js.map → 75849.6ae9e20cdb3fbe4018a4.bundle.js.map} +1 -1
  69. package/dist/{78250.dd9bdc3db3ca0c84b25a.bundle.js → 78250.41373d9ae256b6730c8e.bundle.js} +2 -2
  70. package/dist/{78250.dd9bdc3db3ca0c84b25a.bundle.js.map → 78250.41373d9ae256b6730c8e.bundle.js.map} +1 -1
  71. package/dist/{79329.24a5e42cccee5055311a.bundle.js → 79329.936a7b8d31824b46a180.bundle.js} +2 -2
  72. package/dist/{79329.24a5e42cccee5055311a.bundle.js.map → 79329.936a7b8d31824b46a180.bundle.js.map} +1 -1
  73. package/dist/{82926.02f08566fe1f948d9e1f.bundle.js → 82926.3236f3a40da860eebf37.bundle.js} +2 -2
  74. package/dist/{82926.02f08566fe1f948d9e1f.bundle.js.map → 82926.3236f3a40da860eebf37.bundle.js.map} +1 -1
  75. package/dist/85609.4e7aa94beab1fc123db2.bundle.js +2 -0
  76. package/dist/85609.4e7aa94beab1fc123db2.bundle.js.map +1 -0
  77. package/dist/{9062.e1ad16e157f04b8c9dd8.bundle.js → 9062.ff0f38917b9553efad03.bundle.js} +2 -2
  78. package/dist/{9062.e1ad16e157f04b8c9dd8.bundle.js.map → 9062.ff0f38917b9553efad03.bundle.js.map} +1 -1
  79. package/dist/{99448.93e01a6a24e4a1cb0546.bundle.js → 99448.10fc24b7ebab10d3c7ce.bundle.js} +2 -2
  80. package/dist/{99448.93e01a6a24e4a1cb0546.bundle.js.map → 99448.10fc24b7ebab10d3c7ce.bundle.js.map} +1 -1
  81. package/dist/index.html +8 -8
  82. package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
  83. package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
  84. package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
  85. package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
  86. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  87. package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
  88. package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +1 -1
  89. package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
  90. package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
  91. package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
  92. package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
  93. package/dist/js/angular/core/templates/search-resource-input.html +1 -1
  94. package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
  95. package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
  96. package/dist/js/angular/graphql/templates/graphql-playground.html +1 -1
  97. package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
  98. package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
  99. package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
  100. package/dist/js/angular/security/templates/user.html +2 -2
  101. package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
  102. package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
  103. package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
  104. package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
  105. package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
  106. package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
  107. package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +2 -2
  108. package/dist/js/angular/ttyg/templates/modal/external-integration-configuration-modal.html +1 -1
  109. package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
  110. package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
  111. package/dist/{legacyWorkbench.ecf6300fd72cfffbcdb6.js → legacyWorkbench.1e8b6faf7df3096cdb57.js} +3 -3
  112. package/dist/{legacyWorkbench.ecf6300fd72cfffbcdb6.js.map → legacyWorkbench.1e8b6faf7df3096cdb57.js.map} +1 -1
  113. package/dist/pages/aclmanagement.html +2 -2
  114. package/dist/pages/autocomplete.html +1 -1
  115. package/dist/pages/choose-repository-type.html +1 -1
  116. package/dist/pages/cluster-management/clusterInfo.html +3 -3
  117. package/dist/pages/create-index.html +1 -1
  118. package/dist/pages/dependencies.html +1 -1
  119. package/dist/pages/domainRangeInfo.html +2 -2
  120. package/dist/pages/edit.html +1 -1
  121. package/dist/pages/explore.html +1 -1
  122. package/dist/pages/export.html +1 -1
  123. package/dist/pages/find.html +1 -1
  124. package/dist/pages/graph-config/saveGraphConfig.html +8 -8
  125. package/dist/pages/graphs-visualizations.html +7 -7
  126. package/dist/pages/guides.html +1 -1
  127. package/dist/pages/import.html +2 -2
  128. package/dist/pages/jdbc-create.html +1 -1
  129. package/dist/pages/login.html +1 -1
  130. package/dist/pages/monitor/backup-and-restore.html +1 -1
  131. package/dist/pages/monitor/queries.html +1 -1
  132. package/dist/pages/monitor/resources.html +1 -1
  133. package/dist/pages/namespaces.html +2 -2
  134. package/dist/pages/not_found.html +1 -1
  135. package/dist/pages/plugins.html +1 -1
  136. package/dist/pages/rdfClassHierarchyInfo.html +7 -7
  137. package/dist/pages/rdfrank.html +2 -2
  138. package/dist/pages/repositories.html +1 -1
  139. package/dist/pages/repository.html +1 -1
  140. package/dist/pages/similarity-indexes.html +1 -1
  141. package/dist/pages/sparql-editor.html +1 -1
  142. package/dist/pages/sparql-template-create.html +1 -1
  143. package/dist/pages/ux-test1.html +2 -2
  144. package/dist/pages/webapi.html +2 -2
  145. package/dist/res/swagger5/index.html +11 -11
  146. package/package.json +1 -1
  147. package/dist/12358.4be185f89eebea9c35bf.bundle.js +0 -3
  148. package/dist/12358.4be185f89eebea9c35bf.bundle.js.map +0 -1
  149. package/dist/19402.7f6ea977348338acc824.bundle.js +0 -2
  150. package/dist/19402.7f6ea977348338acc824.bundle.js.map +0 -1
  151. package/dist/36665.69d43b057bcfc55df3b5.bundle.js +0 -2
  152. package/dist/36665.69d43b057bcfc55df3b5.bundle.js.map +0 -1
  153. package/dist/40516.3cfaf1ff4704c038f944.bundle.js +0 -2
  154. package/dist/40516.3cfaf1ff4704c038f944.bundle.js.map +0 -1
  155. package/dist/64118.edc8ed6671017d09ff4e.bundle.js +0 -2
  156. package/dist/64118.edc8ed6671017d09ff4e.bundle.js.map +0 -1
  157. package/dist/85609.68438b4955212d5fcb84.bundle.js +0 -2
  158. package/dist/85609.68438b4955212d5fcb84.bundle.js.map +0 -1
  159. /package/dist/{12358.4be185f89eebea9c35bf.bundle.js.LICENSE.txt → 12358.d1b5130917702cb0dd25.bundle.js.LICENSE.txt} +0 -0
  160. /package/dist/{legacyWorkbench.ecf6300fd72cfffbcdb6.js.LICENSE.txt → legacyWorkbench.1e8b6faf7df3096cdb57.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- export const __webpack_id__=39539;export const __webpack_ids__=[39539];export const __webpack_modules__={39539:(e,i,d)=>{d.r(i),d.d(i,{default:()=>l});const l='<link href="css/dynamic-form.css?v=3.2.0-TR4" rel="stylesheet"/> <div class="dynamic-form-container"> <form name="dynamicForm" novalidate class="dynamic-form"> <div ng-repeat="model in formModel.models"> <div ng-if="model.groupId && (model.fields.length > 0 || showAllFields)" class="form-group"> <h5 class="group-title"> <span gdb-tooltip="{{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + \'.tooltip\') : null) | translate}}"> {{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + \'.label\') : model.groupId) | translate}} </span> </h5> <dynamic-form-field ng-repeat="field in model.fields" field="field" form="dynamicForm" translation-key-prefix="translationKeyPrefix"> </dynamic-form-field> <div class="hidden-fields"> <dynamic-form-field ng-if="showAllFields" ng-repeat="field in model.hiddenFields" field="field" form="dynamicForm" translation-key-prefix="translationKeyPrefix"> </dynamic-form-field> </div> </div> <dynamic-form-field ng-if="!model.groupId" field="model" form-name="dynamicForm" translation-key-prefix="translationKeyPrefix"> </dynamic-form-field> </div> </form> </div> '}};
2
- //# sourceMappingURL=39539.463ec29e136b100c0abe.bundle.js.map
1
+ export const __webpack_id__=39539;export const __webpack_ids__=[39539];export const __webpack_modules__={39539:(e,i,d)=>{d.r(i),d.d(i,{default:()=>l});const l='<link href="css/dynamic-form.css?v=3.2.0-TR5" rel="stylesheet"/> <div class="dynamic-form-container"> <form name="dynamicForm" novalidate class="dynamic-form"> <div ng-repeat="model in formModel.models"> <div ng-if="model.groupId && (model.fields.length > 0 || showAllFields)" class="form-group"> <h5 class="group-title"> <span gdb-tooltip="{{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + \'.tooltip\') : null) | translate}}"> {{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + \'.label\') : model.groupId) | translate}} </span> </h5> <dynamic-form-field ng-repeat="field in model.fields" field="field" form="dynamicForm" translation-key-prefix="translationKeyPrefix"> </dynamic-form-field> <div class="hidden-fields"> <dynamic-form-field ng-if="showAllFields" ng-repeat="field in model.hiddenFields" field="field" form="dynamicForm" translation-key-prefix="translationKeyPrefix"> </dynamic-form-field> </div> </div> <dynamic-form-field ng-if="!model.groupId" field="model" form-name="dynamicForm" translation-key-prefix="translationKeyPrefix"> </dynamic-form-field> </div> </form> </div> '}};
2
+ //# sourceMappingURL=39539.351f1fe10b21f949a885.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"39539.463ec29e136b100c0abe.bundle.js","mappings":"uJAGA,QAFW,omC","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/dynamic-form/templates/dynamic-form.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/dynamic-form.css?v=3.2.0-TR4\" rel=\"stylesheet\"/> <div class=\"dynamic-form-container\"> <form name=\"dynamicForm\" novalidate class=\"dynamic-form\"> <div ng-repeat=\"model in formModel.models\"> <div ng-if=\"model.groupId && (model.fields.length > 0 || showAllFields)\" class=\"form-group\"> <h5 class=\"group-title\"> <span gdb-tooltip=\"{{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + '.tooltip') : null) | translate}}\"> {{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + '.label') : model.groupId) | translate}} </span> </h5> <dynamic-form-field ng-repeat=\"field in model.fields\" field=\"field\" form=\"dynamicForm\" translation-key-prefix=\"translationKeyPrefix\"> </dynamic-form-field> <div class=\"hidden-fields\"> <dynamic-form-field ng-if=\"showAllFields\" ng-repeat=\"field in model.hiddenFields\" field=\"field\" form=\"dynamicForm\" translation-key-prefix=\"translationKeyPrefix\"> </dynamic-form-field> </div> </div> <dynamic-form-field ng-if=\"!model.groupId\" field=\"model\" form-name=\"dynamicForm\" translation-key-prefix=\"translationKeyPrefix\"> </dynamic-form-field> </div> </form> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"39539.351f1fe10b21f949a885.bundle.js","mappings":"uJAGA,QAFW,omC","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/dynamic-form/templates/dynamic-form.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/dynamic-form.css?v=3.2.0-TR5\" rel=\"stylesheet\"/> <div class=\"dynamic-form-container\"> <form name=\"dynamicForm\" novalidate class=\"dynamic-form\"> <div ng-repeat=\"model in formModel.models\"> <div ng-if=\"model.groupId && (model.fields.length > 0 || showAllFields)\" class=\"form-group\"> <h5 class=\"group-title\"> <span gdb-tooltip=\"{{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + '.tooltip') : null) | translate}}\"> {{(translationKeyPrefix ? (translationKeyPrefix + model.groupId + '.label') : model.groupId) | translate}} </span> </h5> <dynamic-form-field ng-repeat=\"field in model.fields\" field=\"field\" form=\"dynamicForm\" translation-key-prefix=\"translationKeyPrefix\"> </dynamic-form-field> <div class=\"hidden-fields\"> <dynamic-form-field ng-if=\"showAllFields\" ng-repeat=\"field in model.hiddenFields\" field=\"field\" form=\"dynamicForm\" translation-key-prefix=\"translationKeyPrefix\"> </dynamic-form-field> </div> </div> <dynamic-form-field ng-if=\"!model.groupId\" field=\"model\" form-name=\"dynamicForm\" translation-key-prefix=\"translationKeyPrefix\"> </dynamic-form-field> </div> </form> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ export const __webpack_id__=40516;export const __webpack_ids__=[3909,36633,40516,63415,64871,87252];export const __webpack_modules__={3909:()=>{function e(){return{restrict:"E",require:"ngModel",scope:{ngModel:"=",ngDisabled:"=",placeholder:"@"},templateUrl:"js/angular/core/templates/editable-content/editable-content.html",link:function(e,t,s,a){const n=t.find("div"),i=()=>{e.ngDisabled||e.$apply(()=>{n.html().length&&!n.text().trim().length&&n.empty(),a.$setViewValue(n[0].innerText)})};a.$render=()=>{n.html(a.$viewValue||"")};const r=e=>{e.preventDefault();const t=(e.originalEvent||e).clipboardData.getData("text/plain"),s=window.getSelection();if(!s.rangeCount)return;s.deleteFromDocument();const a=s.getRangeAt(0),n=document.createDocumentFragment(),i=t.split("\n");i.forEach((e,t)=>{n.appendChild(document.createTextNode(e)),t<i.length-1&&n.appendChild(document.createElement("br"))}),a.insertNode(n),s.collapseToEnd()};e.$on("$destroy",()=>{n.off("blur keyup change input",i),n.off("paste",r)}),n.on("blur keyup change input",i),n.on("paste",r)}}}angular.module("graphdb.framework.core.directives.editable-content",[]).directive("editableContent",e),e.$inject=[]},13815:(e,t,s)=>{s.r(t),s(64118),s(3909);var a=s(71920),n=s(36633),i=s(63415),r=s(98980),o=s(69937);function h(e,t,s){return{restrict:"E",templateUrl:"js/angular/ttyg/templates/chat-panel.html",link:(e,h,d)=>{e.chat=void 0,e.selectedAgent=void 0,e.chatItem=void 0,e.askingChatItem=void 0,e.waitingForLastMessage=!1,e.loadingChat=!0,e.showCancelButton=!1,e.ask=()=>{e.chatItem.question.timestamp=Date.now(),e.askingChatItem=(0,r.cloneDeep)(e.chatItem),e.chatItem.chatId?u(e.chatItem):c(),e.chatItem=l(),p(),_()},e.cancelPendingQuestion=()=>{e.showCancelButton=!1,s.emit(a.TTYGEventName.CANCEL_PENDING_QUESTION,e.chatItem)},e.regenerateQuestion=t=>{const s=l();s.setQuestionMessage(t.getQuestionMessage()),s.question.timestamp=Date.now(),e.askingChatItem=s,u(s),p()},e.onKeypressOnInput=t=>{e.askingChatItem||"Enter"!==t.key||t.shiftKey||t.ctrlKey||e.ask()},e.onAskHowDeliveredAnswer=()=>{const s=l();s.setQuestionMessage(t.instant("ttyg.chat_panel.btn.derive_answer.label")),s.question.timestamp=Date.now(),e.askingChatItem=(0,r.cloneDeep)(s),u(s),p()},e.getAgentName=e=>{const a=s.getAgent(e);return a?a.name:(0,o.Gz)(t.instant("ttyg.chat_panel.deleted_agent"))};const c=()=>{s.emit(a.TTYGEventName.CREATE_CHAT,e.chatItem)},u=e=>{s.emit(a.TTYGEventName.ASK_QUESTION,e)},g=t=>{e.waitingForLastMessage=t,e.showCancelButton=t},m=()=>{e.chatItem=(0,r.cloneDeep)(e.askingChatItem),e.askingChatItem=void 0,g(!1)},l=()=>{const t=new i.ChatItemModel;return t.question=new n.ChatMessageModel({role:n.CHAT_MESSAGE_ROLE.USER}),e.chat&&(t.chatId=e.chat.id),e.selectedAgent&&(t.agentId=e.selectedAgent.id),t},_=()=>{setTimeout(()=>{const e=document.querySelector(".question-input");e&&e.focus()})},p=()=>{setTimeout(()=>{const e=h.find(".chat-details")[0];e&&(e.scrollTop=e.scrollHeight)})},I=()=>{e.chat=void 0,e.loadingChat=!1,e.chatItem=l(),e.askingChatItem=void 0,g(!1),_()},T=[e.$watchCollection("chat.chatHistory.items",p),s.onSelectedChatUpdated(t=>{if(e.chat=t,!e.chat||e.chat.isNew())return;e.loadingChat=!1;const a=e.chatItem.question.message;if(e.chatItem=l(),e.chatItem.question.message=a,e.askingChatItem=void 0,e.chat){const t=e.chat.chatHistory.getLast();t&&t.agentId&&s.selectAgent(s.getAgent(t.agentId))}_()}),s.onLastMessageReceived(()=>{g(!1)}),s.onSelectedAgentChanged(t=>{e.selectedAgent=t,e.selectedAgent&&e.chatItem&&(e.chatItem.agentId=e.selectedAgent.id),_()}),s.onSelectedChatChanged(t=>{t?(e.loadingChat=!t.isNew(),e.chatItem=l(),g(!1),_()):I()}),s.subscribe(a.TTYGEventName.LOAD_CHAT_FAILURE,()=>{e.loadingChat=!1,e.chatItem=l(),_()}),s.subscribe(a.TTYGEventName.ASK_QUESTION_FAILURE,m),s.subscribe(a.TTYGEventName.CREATE_CHAT_FAILURE,m),s.subscribe(a.TTYGEventName.DELETE_CHAT_SUCCESSFUL,t=>{e.chat&&t.id===e.chat.id&&I()}),s.subscribe(a.TTYGEventName.ASK_QUESTION_STARTING,()=>{g(!0)})];e.$on("$destroy",()=>{T.forEach(e=>e())}),e.chatItem=l(),_()}}}angular.module("graphdb.framework.ttyg.directives.chat-panel",["graphdb.framework.ttyg.directives.chat-item-detail","graphdb.framework.core.directives.editable-content"]).directive("chatPanel",h),h.$inject=["toastr","$translate","TTYGContextService"]},36633:(e,t,s)=>{s.r(t),s.d(t,{CHAT_MESSAGE_ROLE:()=>n,ChatMessageModel:()=>a});class a{constructor(e){this._id=e.id,this._role=e.role,this._message=e.message,this._timestamp=1e3*e.timestamp,this.tokenUsageInfo=e.tokenUsageInfo,this._isTerminalState=e.isTerminalState,this._status=e.status}addToChatAnswer(e){e.messages=[this]}get id(){return this._id}set id(e){this._id=e}get role(){return this._role}set role(e){this._role=e}get message(){return this._message}set message(e){this._message=e}get timestamp(){return this._timestamp}set timestamp(e){this._timestamp=e}get isTerminalState(){return this._isTerminalState}set isTerminalState(e){this._isTerminalState=e}get status(){return this._status}set status(e){this._status=e}}const n={USER:"user",ASSISTANT:"assistant"}},63415:(e,t,s)=>{s.r(t),s.d(t,{ChatItemModel:()=>n,ChatItemsListModel:()=>i});var a=s(36633);class n{constructor(e,t){this._chatId=e,this._agentId=void 0,this._question=t,this._answers=[]}get chatId(){return this._chatId}set chatId(e){this._chatId=e}get agentId(){return this._agentId}set agentId(e){this._agentId=e}get question(){return this._question}set question(e){this._question=e}get answers(){return this._answers}set answers(e){this._answers=e}setQuestionMessage(e){this._question||(this._question=new a.ChatMessageModel({role:a.CHAT_MESSAGE_ROLE.USER})),this._question.message=e}getQuestionMessage(){return this._question.message}toCreateChatRequestPayload(){return{agentId:this._agentId,question:this._question.message}}toAskRequestPayload(){return{conversationId:this._chatId,agentId:this._agentId,question:this._question.message,tzOffset:-(new Date).getTimezoneOffset()}}toExplainResponsePayload(e){return{conversationId:this._chatId,answerId:e}}}class i{constructor(e=[]){this._items=e}isEmpty(){return 0===this._items.length}appendItem(e){this._items.push(e)}get items(){return this._items}set items(e){this._items=e||[]}getLast(){if(!this.isEmpty())return this._items[this._items.length-1]}}},87252:(e,t,s)=>{s.r(t),s.d(t,{ExplainQueryMethodModel:()=>i,ExplainQueryMethodsListModel:()=>n,ExplainQueryType:()=>r,ExplainResponseModel:()=>a});class a{constructor(e={}){this._chatId=e.chatId,this._answerId=e.answerId,this._queryMethods=e.queryMethods,this._expanded=void 0===e.expanded||e.expanded}get chatId(){return this._chatId}set chatId(e){this._chatId=e}get answerId(){return this._answerId}set answerId(e){this._answerId=e}get queryMethods(){return this._queryMethods}set queryMethods(e){this._queryMethods=e}get expanded(){return this._expanded}set expanded(e){this._expanded=e}}class n{constructor(e=[]){this._items=e}get items(){return this._items}set items(e){this._items=e}}class i{constructor(e={}){this._name=e.name,this._rawQuery=e.rawQuery,this._query=e.query,this._queryType=e.queryType,this._errorMessage=e.errorOutput}get name(){return this._name}set name(e){this._name=e}get rawQuery(){return this._rawQuery}set rawQuery(e){this._rawQuery=e}get query(){return this._query}set query(e){this._query=e}get queryType(){return this._queryType}set queryType(e){this._queryType=e}get errorMessage(){return this._errorMessage}set errorMessage(e){this._errorMessage=e}}const r={SPARQL:"sparql",JSON:"json",OTHER:"other"}}};
2
+ //# sourceMappingURL=40516.7db0da5332b68a1cb0a4.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"40516.7db0da5332b68a1cb0a4.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/editable-content/editable-content.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/directives/chat-panel.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/chat-message.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/chat-item.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/explain-response.js"],"sourcesContent":["/**\n * @ngdoc directive\n * @name editableContent\n * @module graphdb.framework.core.directives.editable-content\n * @restrict E\n * @description\n * A reusable contenteditable directive bound to an ngModel. It allows editable plain-text input and supports disabling and placeholder text.\n *\n * @param {string} ngModel - The model to bind contenteditable input to.\n * @param {boolean=} ngDisabled - Disables the contenteditable field when true.\n * @param {string=} placeholder - Placeholder text to show when input is empty.\n */\nconst modules = [];\n\nangular\n .module('graphdb.framework.core.directives.editable-content', modules)\n .directive('editableContent', editableContent);\n\neditableContent.$inject = [];\n\nfunction editableContent() {\n return {\n restrict: 'E',\n require: 'ngModel',\n scope: {\n ngModel: '=',\n ngDisabled: '=',\n placeholder: '@'\n },\n templateUrl: 'js/angular/core/templates/editable-content/editable-content.html',\n link: function(scope, element, attrs, ngModelCtrl) {\n\n // =========================\n // Private variables\n // =========================\n\n const editableDiv = element.find('div');\n\n // =========================\n // Private functions\n // =========================\n\n /**\n * Updates the bound ngModel with the current contenteditable value.\n * Also clears invalid HTML when only whitespace remains.\n */\n const updateModelValue = () => {\n if (!scope.ngDisabled) {\n scope.$apply(() => {\n if (editableDiv.html().length && !editableDiv.text().trim().length) {\n // Fixes a problem with the placeholder when type some word and delete it.\n editableDiv.empty();\n }\n ngModelCtrl.$setViewValue(editableDiv[0].innerText);\n });\n }\n };\n\n /**\n * Renders the model value into the contenteditable element.\n */\n ngModelCtrl.$render = () => {\n editableDiv.html(ngModelCtrl.$viewValue || '');\n };\n\n /**\n * Handles paste events in the contenteditable element by inserting plain text only.\n * Prevents the default paste behavior and manually inserts the clipboard text as plain text,\n * preserving line breaks by converting them to <br> elements.\n *\n * @param {Event} event - The paste event object containing clipboard data.\n */\n const pasteHandler = (event) => {\n event.preventDefault();\n\n const text = (event.originalEvent || event).clipboardData.getData('text/plain');\n const selection = window.getSelection();\n\n if (!selection.rangeCount) return;\n\n selection.deleteFromDocument();\n const range = selection.getRangeAt(0);\n const fragment = document.createDocumentFragment();\n const lines = text.split('\\n');\n\n lines.forEach((line, index) => {\n fragment.appendChild(document.createTextNode(line));\n if (index < lines.length - 1) {\n fragment.appendChild(document.createElement('br'));\n }\n });\n\n range.insertNode(fragment);\n selection.collapseToEnd();\n }\n\n // =========================\n // Subscriptions\n // =========================\n\n /**\n * Unsubscribes from all watchers and event listeners to prevent memory leaks.\n */\n const removeAllSubscribers = () => {\n editableDiv.off('blur keyup change input', updateModelValue);\n editableDiv.off('paste', pasteHandler);\n };\n\n scope.$on('$destroy', removeAllSubscribers);\n editableDiv.on('blur keyup change input', updateModelValue);\n editableDiv.on('paste', pasteHandler)\n }\n };\n}\n","import './chat-item-detail.directive';\nimport 'angular/core/directives/editable-content/editable-content';\nimport {TTYGEventName} from \"../services/ttyg-context.service\";\nimport {CHAT_MESSAGE_ROLE, ChatMessageModel} from \"../../models/ttyg/chat-message\";\nimport {ChatItemModel} from \"../../models/ttyg/chat-item\";\nimport {cloneDeep} from \"lodash\";\nimport {decodeHTML} from \"../../../../app\";\n\nconst modules = [\n 'graphdb.framework.ttyg.directives.chat-item-detail',\n 'graphdb.framework.core.directives.editable-content',\n];\n\nangular\n .module('graphdb.framework.ttyg.directives.chat-panel', modules)\n .directive('chatPanel', ChatPanelComponent);\n\nChatPanelComponent.$inject = ['toastr', '$translate', 'TTYGContextService'];\n\n/**\n * @ngdoc directive\n * @name graphdb.framework.ttyg.directives.chat-panel:chatPanel\n * @restrict E\n * @description\n *\n * This directive represents a chat panel component that allows users to interact with a chat. It provides functionality for asking questions,\n * regenerating chat content, and other interactive features.\n *\n * It encapsulates the logic and presentation for displaying and managing chat-related interactions.\n *\n * @example\n * <chat-panel></chat-panel>\n */\nfunction ChatPanelComponent(toastr, $translate, TTYGContextService) {\n return {\n restrict: 'E',\n templateUrl: 'js/angular/ttyg/templates/chat-panel.html',\n link: ($scope, element, attrs) => {\n // =========================\n // Public variables\n // =========================\n\n /**\n * @type {ChatModel}\n */\n $scope.chat = undefined;\n\n /**\n * @type {AgentModel}\n */\n $scope.selectedAgent = undefined;\n\n /**\n * @type {ChatItemModel}\n */\n $scope.chatItem = undefined;\n\n /**\n * @type {ChatItemModel}\n */\n $scope.askingChatItem = undefined;\n\n /**\n * True while a question is being handled. It may involve multiple requests until it turns back to false.\n * @type {boolean}\n */\n $scope.waitingForLastMessage = false;\n\n /**\n * Flag that indicates that the chat is about to be changed.\n * @type {boolean}\n */\n $scope.loadingChat = true;\n\n $scope.showCancelButton = false;\n\n // =========================\n // Private variables\n // =========================\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Handles the ask question action.\n */\n $scope.ask = () => {\n $scope.chatItem.question.timestamp = Date.now();\n $scope.askingChatItem = cloneDeep($scope.chatItem);\n if (!$scope.chatItem.chatId) {\n createNewChat();\n } else {\n askQuestion($scope.chatItem);\n }\n $scope.chatItem = getEmptyChatItem();\n scrollToBottom();\n focusQuestionInput();\n };\n\n\n /**\n * Cancels a pending question tied to the current scope.\n * Hides cancel button.\n */\n $scope.cancelPendingQuestion = () => {\n $scope.showCancelButton = false;\n TTYGContextService.emit(TTYGEventName.CANCEL_PENDING_QUESTION, $scope.chatItem);\n };\n\n /**\n * Regenerates the answer for the provided chat item.\n *\n * @param {ChatItemModel} chatItem - The chat item that contains the question to be regenerated.\n */\n $scope.regenerateQuestion = (chatItem) => {\n const regenerateChatItem = getEmptyChatItem();\n regenerateChatItem.setQuestionMessage(chatItem.getQuestionMessage());\n regenerateChatItem.question.timestamp = Date.now();\n $scope.askingChatItem = regenerateChatItem;\n askQuestion(regenerateChatItem);\n scrollToBottom();\n };\n\n /**\n * Handles pressing the Enter key in the question input.\n * Will not trigger if `Shift` or `Ctrl` keys are pressed, or if Ask button is disabled.\n *\n * @param {KeyboardEvent} $event - The keyboard event triggered by the user interaction.\n */\n $scope.onKeypressOnInput = ($event) => {\n if (!$scope.askingChatItem && $event.key === 'Enter' && !$event.shiftKey && !$event.ctrlKey) {\n $scope.ask();\n }\n };\n\n $scope.onAskHowDeliveredAnswer = () => {\n const askHowDerivedAnswerChatItem = getEmptyChatItem();\n askHowDerivedAnswerChatItem.setQuestionMessage($translate.instant('ttyg.chat_panel.btn.derive_answer.label'));\n askHowDerivedAnswerChatItem.question.timestamp = Date.now();\n $scope.askingChatItem = cloneDeep(askHowDerivedAnswerChatItem);\n askQuestion(askHowDerivedAnswerChatItem);\n scrollToBottom();\n };\n\n /**\n * Finds out if agent with such id exists and returns its name or a default message for deleted agent.\n * @param {string} agentId\n * @return {string}\n */\n $scope.getAgentName = (agentId) => {\n const agent = TTYGContextService.getAgent(agentId);\n return agent ? agent.name : decodeHTML($translate.instant('ttyg.chat_panel.deleted_agent'));\n };\n\n // =========================\n // Private functions\n // =========================\n\n const createNewChat = () => {\n TTYGContextService.emit(TTYGEventName.CREATE_CHAT, $scope.chatItem);\n };\n\n const askQuestion = (chatItem) => {\n TTYGContextService.emit(TTYGEventName.ASK_QUESTION, chatItem);\n };\n\n const setAskingState = (isAsking) => {\n $scope.waitingForLastMessage = isAsking;\n $scope.showCancelButton = isAsking;\n };\n\n const onAskQuestionStarted = () => {\n setAskingState(true);\n };\n\n /**\n * Handles the update of the selected chat.\n * @param {ChatModel} chat - the new selected chat.\n */\n const onSelectedChatUpdated = (chat) => {\n $scope.chat = chat;\n if (!$scope.chat || $scope.chat.isNew()) {\n // Do nothing if the chat is new and a question is currently being asked.\n return;\n }\n $scope.loadingChat = false;\n const message = $scope.chatItem.question.message;\n $scope.chatItem = getEmptyChatItem();\n $scope.chatItem.question.message = message;\n $scope.askingChatItem = undefined;\n if ($scope.chat) {\n // TODO: Why on earth this is here? The chat changed handler is in the ttyg.view. Why doesn't it handle this\n // but we need to go through 2 more events to achieve the same result?\n const lastChatItem = $scope.chat.chatHistory.getLast();\n if (lastChatItem && lastChatItem.agentId) {\n TTYGContextService.selectAgent(TTYGContextService.getAgent(lastChatItem.agentId));\n }\n }\n focusQuestionInput();\n };\n\n const onLastMessageReceived = () => {\n setAskingState(false);\n };\n\n /**\n * Handles the failure of loading the chat and the server returns 404. This might happen if the chat does\n * not exist anymore because it was deleted by another user for example.\n */\n const onLoadChatFailure = () => {\n $scope.loadingChat = false;\n $scope.chatItem = getEmptyChatItem();\n focusQuestionInput();\n };\n\n const onSelectedChatChanged = (chat) => {\n if (chat) {\n // Skip the loading indication if it is a new chat that hasn't received an answer yet.\n $scope.loadingChat = !chat.isNew();\n $scope.chatItem = getEmptyChatItem();\n setAskingState(false);\n focusQuestionInput();\n } else {\n reset();\n }\n };\n\n const onQuestionFailure = () => {\n $scope.chatItem = cloneDeep($scope.askingChatItem);\n $scope.askingChatItem = undefined;\n setAskingState(false);\n };\n\n /**\n * Handles the change of the selected agent.\n * @param {AgentModel} agent - the new selected agent.\n */\n const onSelectedAgentChanged = (agent) => {\n $scope.selectedAgent = agent;\n if ($scope.selectedAgent && $scope.chatItem) {\n $scope.chatItem.agentId = $scope.selectedAgent.id;\n }\n focusQuestionInput();\n };\n\n const onChatDeleted = (deletedChat) => {\n if ($scope.chat && deletedChat.id === $scope.chat.id) {\n reset();\n }\n };\n\n const getEmptyChatItem = () => {\n const chatItem = new ChatItemModel();\n chatItem.question = new ChatMessageModel({role: CHAT_MESSAGE_ROLE.USER});\n\n if ($scope.chat) {\n chatItem.chatId = $scope.chat.id;\n }\n\n if ($scope.selectedAgent) {\n chatItem.agentId = $scope.selectedAgent.id;\n }\n\n return chatItem;\n };\n\n const focusQuestionInput = () => {\n // Moving focus to the end of the JS call stack with a timeout, because on first Agent select,\n // the dropdown .agent-option steals the focus, or the browser assigns it to the document <body>.\n setTimeout(() => {\n const inputElement = document.querySelector('.question-input');\n if (inputElement) {\n inputElement.focus();\n }\n });\n };\n\n const scrollToBottom = () => {\n // Call it in a timeout to ensure that Angular's digest cycle is finished and all elements are displayed.\n setTimeout(() => {\n const chatDetailsElement = element.find(\".chat-details\")[0];\n if (chatDetailsElement) {\n chatDetailsElement.scrollTop = chatDetailsElement.scrollHeight;\n }\n });\n };\n\n const reset = () => {\n $scope.chat = undefined;\n $scope.loadingChat = false;\n $scope.chatItem = getEmptyChatItem();\n $scope.askingChatItem = undefined;\n setAskingState(false);\n focusQuestionInput();\n };\n\n const init = () => {\n $scope.chatItem = getEmptyChatItem();\n focusQuestionInput();\n };\n\n // =========================\n // Subscriptions\n // =========================\n const subscriptions = [\n $scope.$watchCollection('chat.chatHistory.items', scrollToBottom),\n TTYGContextService.onSelectedChatUpdated(onSelectedChatUpdated),\n TTYGContextService.onLastMessageReceived(onLastMessageReceived),\n TTYGContextService.onSelectedAgentChanged(onSelectedAgentChanged),\n TTYGContextService.onSelectedChatChanged(onSelectedChatChanged),\n TTYGContextService.subscribe(TTYGEventName.LOAD_CHAT_FAILURE, onLoadChatFailure),\n TTYGContextService.subscribe(TTYGEventName.ASK_QUESTION_FAILURE, onQuestionFailure),\n TTYGContextService.subscribe(TTYGEventName.CREATE_CHAT_FAILURE, onQuestionFailure),\n TTYGContextService.subscribe(TTYGEventName.DELETE_CHAT_SUCCESSFUL, onChatDeleted),\n TTYGContextService.subscribe(TTYGEventName.ASK_QUESTION_STARTING, onAskQuestionStarted),\n ];\n\n const removeAllSubscribers = () => {\n subscriptions.forEach((subscription) => subscription());\n };\n\n // Deregister the watcher when the scope/directive is destroyed\n $scope.$on('$destroy', removeAllSubscribers);\n\n // =========================\n // Initialization\n // =========================\n init();\n },\n };\n}\n","export class ChatMessageModel {\n constructor(data) {\n\n /**\n * @type {string}\n */\n this._id = data.id;\n\n /**\n * @type @type {string} - A value from {@link CHAT_MESSAGE_ROLE}, determining the owner of the message (e.g., user, assistant).\n */\n this._role = data.role;\n\n /**\n * @type {string}\n */\n this._message = data.message;\n\n /**\n * @type {number}\n */\n this._timestamp = data.timestamp * 1000;\n\n /**\n * Holds information about the number of tokens used for this answer, including prompt and completion tokens.\n * It is applicable only to the assistant role ({@link CHAT_MESSAGE_ROLE#ASSISTANT}).\n *\n * @type {TokenUsageInfo}\n */\n this.tokenUsageInfo = data.tokenUsageInfo;\n\n /**\n * If the message was terminated via the Abort button\n * @type {boolean}\n */\n this._isTerminalState = data.isTerminalState;\n\n /**\n * Reason for cancellation.\n * @private {string}\n */\n this._status = data.status\n }\n\n /**\n * Updates the chatAnswer.messages array with this message instance.\n * @param {ChatAnswerModel} chatAnswer - The answer object containing the messages.\n */\n addToChatAnswer(chatAnswer) {\n chatAnswer.messages = [this];\n }\n\n get id() {\n return this._id;\n }\n\n set id(value) {\n this._id = value;\n }\n\n get role() {\n return this._role;\n }\n\n set role(value) {\n this._role = value;\n }\n\n get message() {\n return this._message;\n }\n\n set message(value) {\n this._message = value;\n }\n\n get timestamp() {\n return this._timestamp;\n }\n\n set timestamp(value) {\n this._timestamp = value;\n }\n\n get isTerminalState() {\n return this._isTerminalState;\n }\n\n set isTerminalState(value) {\n this._isTerminalState = value;\n }\n\n get status() {\n return this._status;\n }\n\n set status(value) {\n this._status = value;\n }\n}\n\nexport const CHAT_MESSAGE_ROLE = {\n USER: 'user',\n ASSISTANT: 'assistant'\n};\n","import {CHAT_MESSAGE_ROLE, ChatMessageModel} from \"./chat-message\";\n\n/**\n *\n * Represents a model that holds a question and the answer of it in a chat.\n *\n */\nexport class ChatItemModel {\n\n /**\n * Creates an instance of ChatItemModel.\n *\n * @param {string} chatId - The unique identifier for the chat associated with this instance.\n * @param {ChatMessageModel} question - The message object representing the question.\n */\n constructor(chatId, question) {\n\n /**\n * @type {string | undefined}\n * @private\n */\n this._chatId = chatId;\n\n /**\n * @type {string | undefined}\n * @private\n */\n this._agentId = undefined;\n\n /**\n * @type {ChatMessageModel}\n * @private\n */\n this._question = question;\n\n /**\n *\n * @type {ChatMessageModel[] | undefined}\n * @private\n */\n this._answers = [];\n }\n\n get chatId() {\n return this._chatId;\n }\n\n set chatId(value) {\n this._chatId = value;\n }\n\n get agentId() {\n return this._agentId;\n }\n\n set agentId(value) {\n this._agentId = value;\n }\n\n get question() {\n return this._question;\n }\n\n set question(value) {\n this._question = value;\n }\n\n get answers() {\n return this._answers;\n }\n\n /**\n *\n * @param {ChatMessageModel[]} value\n */\n set answers(value) {\n this._answers = value;\n }\n\n /**\n * Sets the message for the user's question.\n *\n * @param {string} message - The message content for the user's question.\n */\n setQuestionMessage(message) {\n if (!this._question) {\n this._question = new ChatMessageModel({role: CHAT_MESSAGE_ROLE.USER});\n }\n this._question.message = message;\n }\n\n /**\n * Retrieves the message of the user's question.\n *\n * @return {string} - The message content of the user's question.\n */\n getQuestionMessage() {\n return this._question.message;\n }\n\n /**\n * Converts the instance to a create chat request payload.\n *\n * @return {{agentId: string, question: string}} An object representing the create request payload.\n */\n toCreateChatRequestPayload() {\n return {\n agentId: this._agentId,\n question: this._question.message\n };\n }\n\n /**\n * Converts the instance to an ask request payload.\n *\n * @return {{conversationId: string, agentId: string, question: string}} An object representing the ask request payload.\n */\n toAskRequestPayload() {\n return {\n conversationId: this._chatId,\n agentId: this._agentId,\n question: this._question.message,\n tzOffset: -new Date().getTimezoneOffset() // offsets are reversed here hence the minus\n };\n }\n\n toExplainResponsePayload(answerId) {\n return {\n conversationId: this._chatId,\n answerId\n };\n }\n}\n\nexport class ChatItemsListModel {\n\n /**\n * @param {ChatItemModel[]} items\n */\n constructor(items = []) {\n this._items = items;\n }\n\n isEmpty() {\n return this._items.length === 0;\n }\n\n /**\n * @param {ChatItemModel} chatItem\n */\n appendItem(chatItem) {\n this._items.push(chatItem);\n }\n\n get items() {\n return this._items;\n }\n\n set items(value) {\n this._items = value || [];\n }\n\n getLast() {\n if (!this.isEmpty()) {\n return this._items[this._items.length - 1];\n }\n }\n}\n","export class ExplainResponseModel {\n constructor(data = {}) {\n\n /**\n * @type {string}\n */\n this._chatId = data.chatId;\n\n /**\n * @type {string}\n */\n this._answerId = data.answerId;\n\n /**\n * @type {ExplainQueryMethodsListModel}\n */\n this._queryMethods = data.queryMethods;\n\n this._expanded = data.expanded !== undefined ? data.expanded : true;\n }\n\n get chatId() {\n return this._chatId;\n }\n\n set chatId(value) {\n this._chatId = value;\n }\n\n get answerId() {\n return this._answerId;\n }\n\n set answerId(value) {\n this._answerId = value;\n }\n\n get queryMethods() {\n return this._queryMethods;\n }\n\n set queryMethods(value) {\n this._queryMethods = value;\n }\n\n get expanded() {\n return this._expanded;\n }\n\n set expanded(value) {\n this._expanded = value;\n }\n}\n\nexport class ExplainQueryMethodsListModel {\n constructor(data = []) {\n this._items = data;\n }\n\n get items() {\n return this._items;\n }\n\n set items(value) {\n this._items = value;\n }\n}\n\nexport class ExplainQueryMethodModel {\n constructor(data = {}) {\n /**\n * @type {ExtractionMethod.FTS_SEARCH | ExtractionMethod.RETRIEVAL | ExtractionMethod.SPARQL | ExtractionMethod.SIMILARITY}\n */\n this._name = data.name;\n\n /**\n * @type {string}\n */\n this._rawQuery = data.rawQuery;\n\n /**\n * @type {string}\n */\n this._query = data.query;\n\n /**\n * @Type {ExplainQueryType}\n * @private\n */\n this._queryType = data.queryType;\n\n /**\n * @type {string | null}\n * @private\n */\n this._errorMessage = data.errorOutput;\n }\n\n get name() {\n return this._name;\n }\n\n set name(value) {\n this._name = value;\n }\n\n get rawQuery() {\n return this._rawQuery;\n }\n\n set rawQuery(value) {\n this._rawQuery = value;\n }\n\n get query() {\n return this._query;\n }\n\n set query(value) {\n this._query = value;\n }\n\n get queryType() {\n return this._queryType;\n }\n\n set queryType(value) {\n this._queryType = value;\n }\n\n get errorMessage() {\n return this._errorMessage;\n }\n\n set errorMessage(value) {\n this._errorMessage = value;\n }\n}\n\nexport const ExplainQueryType = {\n SPARQL: 'sparql',\n JSON: 'json',\n OTHER: 'other'\n};\n"],"names":["editableContent","restrict","require","scope","ngModel","ngDisabled","placeholder","templateUrl","link","element","attrs","ngModelCtrl","editableDiv","find","updateModelValue","$apply","html","length","text","trim","empty","$setViewValue","innerText","$render","$viewValue","pasteHandler","event","preventDefault","originalEvent","clipboardData","getData","selection","window","getSelection","rangeCount","deleteFromDocument","range","getRangeAt","fragment","document","createDocumentFragment","lines","split","forEach","line","index","appendChild","createTextNode","createElement","insertNode","collapseToEnd","$on","removeAllSubscribers","off","on","angular","module","directive","$inject","ChatPanelComponent","toastr","$translate","TTYGContextService","$scope","chat","undefined","selectedAgent","chatItem","askingChatItem","waitingForLastMessage","loadingChat","showCancelButton","ask","question","timestamp","Date","now","cloneDeep","chatId","askQuestion","createNewChat","getEmptyChatItem","scrollToBottom","focusQuestionInput","cancelPendingQuestion","emit","TTYGEventName","CANCEL_PENDING_QUESTION","regenerateQuestion","regenerateChatItem","setQuestionMessage","getQuestionMessage","onKeypressOnInput","$event","key","shiftKey","ctrlKey","onAskHowDeliveredAnswer","askHowDerivedAnswerChatItem","instant","getAgentName","agentId","agent","getAgent","name","decodeHTML","CREATE_CHAT","ASK_QUESTION","setAskingState","isAsking","onQuestionFailure","ChatItemModel","ChatMessageModel","role","CHAT_MESSAGE_ROLE","USER","id","setTimeout","inputElement","querySelector","focus","chatDetailsElement","scrollTop","scrollHeight","reset","subscriptions","$watchCollection","onSelectedChatUpdated","isNew","message","lastChatItem","chatHistory","getLast","selectAgent","onLastMessageReceived","onSelectedAgentChanged","onSelectedChatChanged","subscribe","LOAD_CHAT_FAILURE","onLoadChatFailure","ASK_QUESTION_FAILURE","CREATE_CHAT_FAILURE","DELETE_CHAT_SUCCESSFUL","deletedChat","ASK_QUESTION_STARTING","onAskQuestionStarted","subscription","constructor","data","this","_id","_role","_message","_timestamp","tokenUsageInfo","_isTerminalState","isTerminalState","_status","status","addToChatAnswer","chatAnswer","messages","value","ASSISTANT","_chatId","_agentId","_question","_answers","answers","toCreateChatRequestPayload","toAskRequestPayload","conversationId","tzOffset","getTimezoneOffset","toExplainResponsePayload","answerId","ChatItemsListModel","items","_items","isEmpty","appendItem","push","ExplainResponseModel","_answerId","_queryMethods","queryMethods","_expanded","expanded","ExplainQueryMethodsListModel","ExplainQueryMethodModel","_name","_rawQuery","rawQuery","_query","query","_queryType","queryType","_errorMessage","errorOutput","errorMessage","ExplainQueryType","SPARQL","JSON","OTHER"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- export const __webpack_id__=41453;export const __webpack_ids__=[41453];export const __webpack_modules__={41453:(n,t,a)=>{a.r(t),a.d(t,{default:()=>e});const e='<link href="css/graphql/graphql-endpoint-configuration-modal.css?v=3.2.0-TR4" rel="stylesheet"/> <div class="modal-header"> <h3 class="modal-title">{{\'graphql.endpoints_management.endpoint_configuration_modal.title\' | translate}}</h3> <span ng-click="toggleAdvancedSettings()" class="toggle-advanced-settings"> <input type="checkbox" class="switch" ng-checked="showAdvancedSettings"/> <label></label> <span>{{\'graphql.endpoints_management.endpoint_configuration_modal.actions.show_advanced_settings.label\' | translate}}</span> </span> </div> <div class="modal-body graphql-endpoint-configuration-modal-body"> <div class="graphql-endpoint-configuration-loader" onto-loader-new hide-message="true" size="100" ng-show="loadingEndpointConfigurationSettings"></div> <dynamic-form ng-if="!loadingEndpointConfigurationSettings" form-model="endpointConfigurationSettings.settings" on-validity-change="handleValidityChange(valid)" show-all-fields="showAdvancedSettings" translation-key-prefix="graphql.endpoints_management.endpoint_configuration_modal.settings." form-ctrl="formCtrl"> </dynamic-form> </div> <div class="modal-footer mt-0"> <button type="button" class="btn btn-secondary cancel-btn" ng-click="cancel()">{{\'common.cancel.btn\' | translate}} </button> <button id="graphql-endpoint-configuration-modal-submit" class="btn btn-primary" ng-disabled="!endpointConfigurationSettingsValid || savingEndpointSettings || formCtrl.$pristine" ng-click="ok()" type="submit"> <span>{{\'save.changes.label\' | translate}}</span> <span class="saving-endpoint-settings" ng-if="savingEndpointSettings" onto-loader-fancy hide-message="true" size="15"></span> </button> </div> '}};
2
- //# sourceMappingURL=41453.241761ce8ff75036e5e0.bundle.js.map
1
+ export const __webpack_id__=41453;export const __webpack_ids__=[41453];export const __webpack_modules__={41453:(n,t,a)=>{a.r(t),a.d(t,{default:()=>e});const e='<link href="css/graphql/graphql-endpoint-configuration-modal.css?v=3.2.0-TR5" rel="stylesheet"/> <div class="modal-header"> <h3 class="modal-title">{{\'graphql.endpoints_management.endpoint_configuration_modal.title\' | translate}}</h3> <span ng-click="toggleAdvancedSettings()" class="toggle-advanced-settings"> <input type="checkbox" class="switch" ng-checked="showAdvancedSettings"/> <label></label> <span>{{\'graphql.endpoints_management.endpoint_configuration_modal.actions.show_advanced_settings.label\' | translate}}</span> </span> </div> <div class="modal-body graphql-endpoint-configuration-modal-body"> <div class="graphql-endpoint-configuration-loader" onto-loader-new hide-message="true" size="100" ng-show="loadingEndpointConfigurationSettings"></div> <dynamic-form ng-if="!loadingEndpointConfigurationSettings" form-model="endpointConfigurationSettings.settings" on-validity-change="handleValidityChange(valid)" show-all-fields="showAdvancedSettings" translation-key-prefix="graphql.endpoints_management.endpoint_configuration_modal.settings." form-ctrl="formCtrl"> </dynamic-form> </div> <div class="modal-footer mt-0"> <button type="button" class="btn btn-secondary cancel-btn" ng-click="cancel()">{{\'common.cancel.btn\' | translate}} </button> <button id="graphql-endpoint-configuration-modal-submit" class="btn btn-primary" ng-disabled="!endpointConfigurationSettingsValid || savingEndpointSettings || formCtrl.$pristine" ng-click="ok()" type="submit"> <span>{{\'save.changes.label\' | translate}}</span> <span class="saving-endpoint-settings" ng-if="savingEndpointSettings" onto-loader-fancy hide-message="true" size="15"></span> </button> </div> '}};
2
+ //# sourceMappingURL=41453.c082b58753e157b39bf9.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"41453.241761ce8ff75036e5e0.bundle.js","mappings":"uJAGA,QAFW,qoD","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/graphql/templates/modal/endpoint-configuration-modal.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/graphql/graphql-endpoint-configuration-modal.css?v=3.2.0-TR4\" rel=\"stylesheet\"/> <div class=\"modal-header\"> <h3 class=\"modal-title\">{{'graphql.endpoints_management.endpoint_configuration_modal.title' | translate}}</h3> <span ng-click=\"toggleAdvancedSettings()\" class=\"toggle-advanced-settings\"> <input type=\"checkbox\" class=\"switch\" ng-checked=\"showAdvancedSettings\"/> <label></label> <span>{{'graphql.endpoints_management.endpoint_configuration_modal.actions.show_advanced_settings.label' | translate}}</span> </span> </div> <div class=\"modal-body graphql-endpoint-configuration-modal-body\"> <div class=\"graphql-endpoint-configuration-loader\" onto-loader-new hide-message=\"true\" size=\"100\" ng-show=\"loadingEndpointConfigurationSettings\"></div> <dynamic-form ng-if=\"!loadingEndpointConfigurationSettings\" form-model=\"endpointConfigurationSettings.settings\" on-validity-change=\"handleValidityChange(valid)\" show-all-fields=\"showAdvancedSettings\" translation-key-prefix=\"graphql.endpoints_management.endpoint_configuration_modal.settings.\" form-ctrl=\"formCtrl\"> </dynamic-form> </div> <div class=\"modal-footer mt-0\"> <button type=\"button\" class=\"btn btn-secondary cancel-btn\" ng-click=\"cancel()\">{{'common.cancel.btn' | translate}} </button> <button id=\"graphql-endpoint-configuration-modal-submit\" class=\"btn btn-primary\" ng-disabled=\"!endpointConfigurationSettingsValid || savingEndpointSettings || formCtrl.\\$pristine\" ng-click=\"ok()\" type=\"submit\"> <span>{{'save.changes.label' | translate}}</span> <span class=\"saving-endpoint-settings\" ng-if=\"savingEndpointSettings\" onto-loader-fancy hide-message=\"true\" size=\"15\"></span> </button> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"41453.c082b58753e157b39bf9.bundle.js","mappings":"uJAGA,QAFW,qoD","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/graphql/templates/modal/endpoint-configuration-modal.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/graphql/graphql-endpoint-configuration-modal.css?v=3.2.0-TR5\" rel=\"stylesheet\"/> <div class=\"modal-header\"> <h3 class=\"modal-title\">{{'graphql.endpoints_management.endpoint_configuration_modal.title' | translate}}</h3> <span ng-click=\"toggleAdvancedSettings()\" class=\"toggle-advanced-settings\"> <input type=\"checkbox\" class=\"switch\" ng-checked=\"showAdvancedSettings\"/> <label></label> <span>{{'graphql.endpoints_management.endpoint_configuration_modal.actions.show_advanced_settings.label' | translate}}</span> </span> </div> <div class=\"modal-body graphql-endpoint-configuration-modal-body\"> <div class=\"graphql-endpoint-configuration-loader\" onto-loader-new hide-message=\"true\" size=\"100\" ng-show=\"loadingEndpointConfigurationSettings\"></div> <dynamic-form ng-if=\"!loadingEndpointConfigurationSettings\" form-model=\"endpointConfigurationSettings.settings\" on-validity-change=\"handleValidityChange(valid)\" show-all-fields=\"showAdvancedSettings\" translation-key-prefix=\"graphql.endpoints_management.endpoint_configuration_modal.settings.\" form-ctrl=\"formCtrl\"> </dynamic-form> </div> <div class=\"modal-footer mt-0\"> <button type=\"button\" class=\"btn btn-secondary cancel-btn\" ng-click=\"cancel()\">{{'common.cancel.btn' | translate}} </button> <button id=\"graphql-endpoint-configuration-modal-submit\" class=\"btn btn-primary\" ng-disabled=\"!endpointConfigurationSettingsValid || savingEndpointSettings || formCtrl.\\$pristine\" ng-click=\"ok()\" type=\"submit\"> <span>{{'save.changes.label' | translate}}</span> <span class=\"saving-endpoint-settings\" ng-if=\"savingEndpointSettings\" onto-loader-fancy hide-message=\"true\" size=\"15\"></span> </button> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- export const __webpack_id__=42129;export const __webpack_ids__=[42129];export const __webpack_modules__={42129:(e,l,t)=>{t.r(l),t.d(l,{default:()=>s});const s='<link href="css/shuttle-multiselect.css?v=3.2.0-TR4" rel="stylesheet"/> <div class="shuttle-multiselect"> <div class="shuttle-panel available-options"> <div class="shuttle-panel-header"> <h5>{{labels.availableOptionsTitle | translate}}</h5> </div> <div class="shuttle-panel-toolbar toolbar-left"> <input type="text" class="form-control filter-selected" placeholder="{{labels.availableOptionsFilter | translate}}" ng-model="searchLeft"> <a href="#" ng-click="selectAll()" class="btn-link secondary add-all-btn" gdb-tooltip="{{labels.selectAllTooltip | translate}}" tooltip-placement="top">{{labels.selectAllLabel | translate}}</a> </div> <div class="options-list"> <div class="option-item" ng-repeat="item in availableOptions | searchFilter:searchLeft | orderBy:\'label\' track by $index"> <span>{{item.label}}</span> <a href="#" ng-click="selectOption(item)" class="btn-link secondary item-action add-btn" gdb-tooltip="{{labels.selectTooltip | translate}}" tooltip-placement="top"> <span class="fa fa-plus-circle"></span> </a> </div> </div> </div> <div class="shuttle-panel selected-options"> <div class="shuttle-panel-header"> <h5>{{labels.selectedOptionsTitle | translate}}</h5> </div> <div class="shuttle-panel-toolbar toolbar-right"> <div ng-if="selectedOptions.length" class="selected-items-message"> {{labels.selectedOptionsCount | translate:{count: selectedOptions.length} }} </div> <a href="#" ng-click="deselectAll()" class="btn-link secondary remove-all-btn" gdb-tooltip="{{labels.deselectAllTooltip | translate}}" tooltip-placement="top">{{labels.deselectAllLabel | translate}}</a> </div> <div class="options-list"> <div class="option-item" ng-repeat="item in selectedOptions | orderBy:\'label\' track by $index"> <span>{{item.label}}</span> <a href="#" ng-click="deselectOption(item)" class="btn-link secondary item-action remove-btn" gdb-tooltip="{{labels.deselectTooltip | translate}}" tooltip-placement="top"> <span class="fa fa-minus-circle"></span> </a> </div> </div> </div> </div> '}};
2
- //# sourceMappingURL=42129.f67dc6029cdab567bf54.bundle.js.map
1
+ export const __webpack_id__=42129;export const __webpack_ids__=[42129];export const __webpack_modules__={42129:(e,l,t)=>{t.r(l),t.d(l,{default:()=>s});const s='<link href="css/shuttle-multiselect.css?v=3.2.0-TR5" rel="stylesheet"/> <div class="shuttle-multiselect"> <div class="shuttle-panel available-options"> <div class="shuttle-panel-header"> <h5>{{labels.availableOptionsTitle | translate}}</h5> </div> <div class="shuttle-panel-toolbar toolbar-left"> <input type="text" class="form-control filter-selected" placeholder="{{labels.availableOptionsFilter | translate}}" ng-model="searchLeft"> <a href="#" ng-click="selectAll()" class="btn-link secondary add-all-btn" gdb-tooltip="{{labels.selectAllTooltip | translate}}" tooltip-placement="top">{{labels.selectAllLabel | translate}}</a> </div> <div class="options-list"> <div class="option-item" ng-repeat="item in availableOptions | searchFilter:searchLeft | orderBy:\'label\' track by $index"> <span>{{item.label}}</span> <a href="#" ng-click="selectOption(item)" class="btn-link secondary item-action add-btn" gdb-tooltip="{{labels.selectTooltip | translate}}" tooltip-placement="top"> <span class="fa fa-plus-circle"></span> </a> </div> </div> </div> <div class="shuttle-panel selected-options"> <div class="shuttle-panel-header"> <h5>{{labels.selectedOptionsTitle | translate}}</h5> </div> <div class="shuttle-panel-toolbar toolbar-right"> <div ng-if="selectedOptions.length" class="selected-items-message"> {{labels.selectedOptionsCount | translate:{count: selectedOptions.length} }} </div> <a href="#" ng-click="deselectAll()" class="btn-link secondary remove-all-btn" gdb-tooltip="{{labels.deselectAllTooltip | translate}}" tooltip-placement="top">{{labels.deselectAllLabel | translate}}</a> </div> <div class="options-list"> <div class="option-item" ng-repeat="item in selectedOptions | orderBy:\'label\' track by $index"> <span>{{item.label}}</span> <a href="#" ng-click="deselectOption(item)" class="btn-link secondary item-action remove-btn" gdb-tooltip="{{labels.deselectTooltip | translate}}" tooltip-placement="top"> <span class="fa fa-minus-circle"></span> </a> </div> </div> </div> </div> '}};
2
+ //# sourceMappingURL=42129.6877bc3354f3413916f2.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"42129.f67dc6029cdab567bf54.bundle.js","mappings":"uJAGA,QAFW,i9D","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/shuttle-multiselect.css?v=3.2.0-TR4\" rel=\"stylesheet\"/> <div class=\"shuttle-multiselect\"> <div class=\"shuttle-panel available-options\"> <div class=\"shuttle-panel-header\"> <h5>{{labels.availableOptionsTitle | translate}}</h5> </div> <div class=\"shuttle-panel-toolbar toolbar-left\"> <input type=\"text\" class=\"form-control filter-selected\" placeholder=\"{{labels.availableOptionsFilter | translate}}\" ng-model=\"searchLeft\"> <a href=\"#\" ng-click=\"selectAll()\" class=\"btn-link secondary add-all-btn\" gdb-tooltip=\"{{labels.selectAllTooltip | translate}}\" tooltip-placement=\"top\">{{labels.selectAllLabel | translate}}</a> </div> <div class=\"options-list\"> <div class=\"option-item\" ng-repeat=\"item in availableOptions | searchFilter:searchLeft | orderBy:'label' track by \\$index\"> <span>{{item.label}}</span> <a href=\"#\" ng-click=\"selectOption(item)\" class=\"btn-link secondary item-action add-btn\" gdb-tooltip=\"{{labels.selectTooltip | translate}}\" tooltip-placement=\"top\"> <span class=\"fa fa-plus-circle\"></span> </a> </div> </div> </div> <div class=\"shuttle-panel selected-options\"> <div class=\"shuttle-panel-header\"> <h5>{{labels.selectedOptionsTitle | translate}}</h5> </div> <div class=\"shuttle-panel-toolbar toolbar-right\"> <div ng-if=\"selectedOptions.length\" class=\"selected-items-message\"> {{labels.selectedOptionsCount | translate:{count: selectedOptions.length} }} </div> <a href=\"#\" ng-click=\"deselectAll()\" class=\"btn-link secondary remove-all-btn\" gdb-tooltip=\"{{labels.deselectAllTooltip | translate}}\" tooltip-placement=\"top\">{{labels.deselectAllLabel | translate}}</a> </div> <div class=\"options-list\"> <div class=\"option-item\" ng-repeat=\"item in selectedOptions | orderBy:'label' track by \\$index\"> <span>{{item.label}}</span> <a href=\"#\" ng-click=\"deselectOption(item)\" class=\"btn-link secondary item-action remove-btn\" gdb-tooltip=\"{{labels.deselectTooltip | translate}}\" tooltip-placement=\"top\"> <span class=\"fa fa-minus-circle\"></span> </a> </div> </div> </div> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"42129.6877bc3354f3413916f2.bundle.js","mappings":"uJAGA,QAFW,i9D","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/shuttle-multiselect.css?v=3.2.0-TR5\" rel=\"stylesheet\"/> <div class=\"shuttle-multiselect\"> <div class=\"shuttle-panel available-options\"> <div class=\"shuttle-panel-header\"> <h5>{{labels.availableOptionsTitle | translate}}</h5> </div> <div class=\"shuttle-panel-toolbar toolbar-left\"> <input type=\"text\" class=\"form-control filter-selected\" placeholder=\"{{labels.availableOptionsFilter | translate}}\" ng-model=\"searchLeft\"> <a href=\"#\" ng-click=\"selectAll()\" class=\"btn-link secondary add-all-btn\" gdb-tooltip=\"{{labels.selectAllTooltip | translate}}\" tooltip-placement=\"top\">{{labels.selectAllLabel | translate}}</a> </div> <div class=\"options-list\"> <div class=\"option-item\" ng-repeat=\"item in availableOptions | searchFilter:searchLeft | orderBy:'label' track by \\$index\"> <span>{{item.label}}</span> <a href=\"#\" ng-click=\"selectOption(item)\" class=\"btn-link secondary item-action add-btn\" gdb-tooltip=\"{{labels.selectTooltip | translate}}\" tooltip-placement=\"top\"> <span class=\"fa fa-plus-circle\"></span> </a> </div> </div> </div> <div class=\"shuttle-panel selected-options\"> <div class=\"shuttle-panel-header\"> <h5>{{labels.selectedOptionsTitle | translate}}</h5> </div> <div class=\"shuttle-panel-toolbar toolbar-right\"> <div ng-if=\"selectedOptions.length\" class=\"selected-items-message\"> {{labels.selectedOptionsCount | translate:{count: selectedOptions.length} }} </div> <a href=\"#\" ng-click=\"deselectAll()\" class=\"btn-link secondary remove-all-btn\" gdb-tooltip=\"{{labels.deselectAllTooltip | translate}}\" tooltip-placement=\"top\">{{labels.deselectAllLabel | translate}}</a> </div> <div class=\"options-list\"> <div class=\"option-item\" ng-repeat=\"item in selectedOptions | orderBy:'label' track by \\$index\"> <span>{{item.label}}</span> <a href=\"#\" ng-click=\"deselectOption(item)\" class=\"btn-link secondary item-action remove-btn\" gdb-tooltip=\"{{labels.deselectTooltip | translate}}\" tooltip-placement=\"top\"> <span class=\"fa fa-minus-circle\"></span> </a> </div> </div> </div> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- export const __webpack_id__=44444;export const __webpack_ids__=[44444];export const __webpack_modules__={44444:(t,e,a)=>{a.r(e),a.d(e,{default:()=>s});const s='<link href="css/ttyg/no-agents-view.css?v=3.2.0-TR4" rel="stylesheet"/> <div class="no-agents-view-component" data-test="no-agents-view-component"> <div class="content"> <div class="alert alert-help mb-3" data-test="ttyg-info-message" ng-bind-html="\'ttyg.agent.messages.help_1\' | translate | trustAsHtml"></div> <div class="alert alert-help mb-3" data-test="ttyg-agent-message" ng-bind-html="\'ttyg.agent.messages.help_2\' | translate | trustAsHtml"></div> <div class="actions"> <button class="btn btn-outline-primary btn-lg text-xs-left create-agent-btn" gdb-tooltip="{{!canModifyAgent ? (\'ttyg.agent.fat_btn.create_agent.tooltip_disabled\' | translate) : \'\'}}" ng-disabled="!canModifyAgent" ng-click="onCreateAgent()" guide-selector="create-agent-btn"> <i class="fa fa-message-bot fa-xl"></i> <span class="text">{{\'ttyg.agent.fat_btn.create_agent.label\' | translate}}</span> </button> </div> <div class="alert alert-warning mt-3" data-test="ttyg-api-key-message"> <div ng-bind-html="\'ttyg.agent.messages.help_config\' | translate: {talkToGraphDocumentationLink: talkToGraphDocumentationLink} | trustAsHtml"></div> </div> </div> </div> '}};
2
- //# sourceMappingURL=44444.a1b29c2329c7d4a39cc5.bundle.js.map
1
+ export const __webpack_id__=44444;export const __webpack_ids__=[44444];export const __webpack_modules__={44444:(t,e,a)=>{a.r(e),a.d(e,{default:()=>s});const s='<link href="css/ttyg/no-agents-view.css?v=3.2.0-TR5" rel="stylesheet"/> <div class="no-agents-view-component" data-test="no-agents-view-component"> <div class="content"> <div class="alert alert-help mb-3" data-test="ttyg-info-message" ng-bind-html="\'ttyg.agent.messages.help_1\' | translate | trustAsHtml"></div> <div class="alert alert-help mb-3" data-test="ttyg-agent-message" ng-bind-html="\'ttyg.agent.messages.help_2\' | translate | trustAsHtml"></div> <div class="actions"> <button class="btn btn-outline-primary btn-lg text-xs-left create-agent-btn" gdb-tooltip="{{!canModifyAgent ? (\'ttyg.agent.fat_btn.create_agent.tooltip_disabled\' | translate) : \'\'}}" ng-disabled="!canModifyAgent" ng-click="onCreateAgent()" guide-selector="create-agent-btn"> <i class="fa fa-message-bot fa-xl"></i> <span class="text">{{\'ttyg.agent.fat_btn.create_agent.label\' | translate}}</span> </button> </div> <div class="alert alert-warning mt-3" data-test="ttyg-api-key-message"> <div ng-bind-html="\'ttyg.agent.messages.help_config\' | translate: {talkToGraphDocumentationLink: talkToGraphDocumentationLink} | trustAsHtml"></div> </div> </div> </div> '}};
2
+ //# sourceMappingURL=44444.2b282777f2e1424a03b1.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"44444.a1b29c2329c7d4a39cc5.bundle.js","mappings":"uJAGA,QAFW,2nC","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/templates/no-agents-view.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/ttyg/no-agents-view.css?v=3.2.0-TR4\" rel=\"stylesheet\"/> <div class=\"no-agents-view-component\" data-test=\"no-agents-view-component\"> <div class=\"content\"> <div class=\"alert alert-help mb-3\" data-test=\"ttyg-info-message\" ng-bind-html=\"'ttyg.agent.messages.help_1' | translate | trustAsHtml\"></div> <div class=\"alert alert-help mb-3\" data-test=\"ttyg-agent-message\" ng-bind-html=\"'ttyg.agent.messages.help_2' | translate | trustAsHtml\"></div> <div class=\"actions\"> <button class=\"btn btn-outline-primary btn-lg text-xs-left create-agent-btn\" gdb-tooltip=\"{{!canModifyAgent ? ('ttyg.agent.fat_btn.create_agent.tooltip_disabled' | translate) : ''}}\" ng-disabled=\"!canModifyAgent\" ng-click=\"onCreateAgent()\" guide-selector=\"create-agent-btn\"> <i class=\"fa fa-message-bot fa-xl\"></i> <span class=\"text\">{{'ttyg.agent.fat_btn.create_agent.label' | translate}}</span> </button> </div> <div class=\"alert alert-warning mt-3\" data-test=\"ttyg-api-key-message\"> <div ng-bind-html=\"'ttyg.agent.messages.help_config' | translate: {talkToGraphDocumentationLink: talkToGraphDocumentationLink} | trustAsHtml\"></div> </div> </div> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"44444.2b282777f2e1424a03b1.bundle.js","mappings":"uJAGA,QAFW,2nC","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/templates/no-agents-view.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/ttyg/no-agents-view.css?v=3.2.0-TR5\" rel=\"stylesheet\"/> <div class=\"no-agents-view-component\" data-test=\"no-agents-view-component\"> <div class=\"content\"> <div class=\"alert alert-help mb-3\" data-test=\"ttyg-info-message\" ng-bind-html=\"'ttyg.agent.messages.help_1' | translate | trustAsHtml\"></div> <div class=\"alert alert-help mb-3\" data-test=\"ttyg-agent-message\" ng-bind-html=\"'ttyg.agent.messages.help_2' | translate | trustAsHtml\"></div> <div class=\"actions\"> <button class=\"btn btn-outline-primary btn-lg text-xs-left create-agent-btn\" gdb-tooltip=\"{{!canModifyAgent ? ('ttyg.agent.fat_btn.create_agent.tooltip_disabled' | translate) : ''}}\" ng-disabled=\"!canModifyAgent\" ng-click=\"onCreateAgent()\" guide-selector=\"create-agent-btn\"> <i class=\"fa fa-message-bot fa-xl\"></i> <span class=\"text\">{{'ttyg.agent.fat_btn.create_agent.label' | translate}}</span> </button> </div> <div class=\"alert alert-warning mt-3\" data-test=\"ttyg-api-key-message\"> <div ng-bind-html=\"'ttyg.agent.messages.help_config' | translate: {talkToGraphDocumentationLink: talkToGraphDocumentationLink} | trustAsHtml\"></div> </div> </div> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- export const __webpack_id__=55862;export const __webpack_ids__=[55862];export const __webpack_modules__={55862:(e,r,n)=>{n.r(r),n.d(r,{default:()=>t});const t='<link href="css/graphql/endpoint-generation-failure-result-modal.css?v=3.2.0-TR4" rel="stylesheet"/> <div class="modal-header"> <button type="button" class="close" ng-click="close()"></button> <h3 class="modal-title"> {{\'graphql.endpoints_management.generation_failure_report_modal.title\' | translate}}</h3> </div> <div class="modal-body endpoint-generation-failure-result-modal-body"> <div ng-if="endpointReport.errors > 0" class="alert alert-danger"> {{\'graphql.endpoints_management.generation_failure_report_modal.failing_reason_message\' | translate}} </div> <div ng-if="endpointReport.warnings > 0 && endpointReport.errors === 0" class="alert alert-info"> {{\'graphql.endpoints_management.generation_failure_report_modal.warning_reason_message\' | translate}} </div> <table class="report table table-bordered" aria-label="Endpoint generation failure report table"> <thead> <tr class="labels-row"> <th scope="col"> <strong class="errors-count mr-2">{{\'graphql.endpoints_management.generation_failure_report_modal.errors\' | translate: {errorCount: endpointReport.errors} }}</strong> <strong class="warnings-count">{{\'graphql.endpoints_management.generation_failure_report_modal.warnings\' | translate: {warningCount: endpointReport.warnings} }}</strong> </th> </tr> </thead> <tbody> <tr ng-repeat="error in endpointReport.messages.errors" class="error-row"> <td> <div class="alert alert-danger">{{error}}</div> </td> </tr> <tr ng-repeat="warning in endpointReport.messages.warnings" class="warning-row"> <td> <div class="alert alert-warning">{{warning}}</div> </td> </tr> </tbody> </table> </div> <div class="modal-footer mt-0"> <button id="download-failure-report" class="btn btn-secondary mr-1" ng-click="downloadReport()"> <i class="fa fa-arrow-down-to-line"></i> <span>{{\'graphql.endpoints_management.generation_failure_report_modal.actions.download_report.label\' | translate}}</span> </button> <button ng-if="endpointReport.errors === 0 && endpointReport.warnings > 0" id="delete-warnings" class="btn btn-primary" ng-click="deleteReport()"> <span>{{\'graphql.endpoints_management.generation_failure_report_modal.actions.delete_report.label\' | translate}}</span> </button> </div> '}};
2
- //# sourceMappingURL=55862.1c3f1e807c8a05b1b6ed.bundle.js.map
1
+ export const __webpack_id__=55862;export const __webpack_ids__=[55862];export const __webpack_modules__={55862:(e,r,n)=>{n.r(r),n.d(r,{default:()=>t});const t='<link href="css/graphql/endpoint-generation-failure-result-modal.css?v=3.2.0-TR5" rel="stylesheet"/> <div class="modal-header"> <button type="button" class="close" ng-click="close()"></button> <h3 class="modal-title"> {{\'graphql.endpoints_management.generation_failure_report_modal.title\' | translate}}</h3> </div> <div class="modal-body endpoint-generation-failure-result-modal-body"> <div ng-if="endpointReport.errors > 0" class="alert alert-danger"> {{\'graphql.endpoints_management.generation_failure_report_modal.failing_reason_message\' | translate}} </div> <div ng-if="endpointReport.warnings > 0 && endpointReport.errors === 0" class="alert alert-info"> {{\'graphql.endpoints_management.generation_failure_report_modal.warning_reason_message\' | translate}} </div> <table class="report table table-bordered" aria-label="Endpoint generation failure report table"> <thead> <tr class="labels-row"> <th scope="col"> <strong class="errors-count mr-2">{{\'graphql.endpoints_management.generation_failure_report_modal.errors\' | translate: {errorCount: endpointReport.errors} }}</strong> <strong class="warnings-count">{{\'graphql.endpoints_management.generation_failure_report_modal.warnings\' | translate: {warningCount: endpointReport.warnings} }}</strong> </th> </tr> </thead> <tbody> <tr ng-repeat="error in endpointReport.messages.errors" class="error-row"> <td> <div class="alert alert-danger">{{error}}</div> </td> </tr> <tr ng-repeat="warning in endpointReport.messages.warnings" class="warning-row"> <td> <div class="alert alert-warning">{{warning}}</div> </td> </tr> </tbody> </table> </div> <div class="modal-footer mt-0"> <button id="download-failure-report" class="btn btn-secondary mr-1" ng-click="downloadReport()"> <i class="fa fa-arrow-down-to-line"></i> <span>{{\'graphql.endpoints_management.generation_failure_report_modal.actions.download_report.label\' | translate}}</span> </button> <button ng-if="endpointReport.errors === 0 && endpointReport.warnings > 0" id="delete-warnings" class="btn btn-primary" ng-click="deleteReport()"> <span>{{\'graphql.endpoints_management.generation_failure_report_modal.actions.delete_report.label\' | translate}}</span> </button> </div> '}};
2
+ //# sourceMappingURL=55862.f591817372ceb94a4cd2.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"55862.1c3f1e807c8a05b1b6ed.bundle.js","mappings":"uJAGA,QAFW,spE","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/graphql/endpoint-generation-failure-result-modal.css?v=3.2.0-TR4\" rel=\"stylesheet\"/> <div class=\"modal-header\"> <button type=\"button\" class=\"close\" ng-click=\"close()\"></button> <h3 class=\"modal-title\"> {{'graphql.endpoints_management.generation_failure_report_modal.title' | translate}}</h3> </div> <div class=\"modal-body endpoint-generation-failure-result-modal-body\"> <div ng-if=\"endpointReport.errors > 0\" class=\"alert alert-danger\"> {{'graphql.endpoints_management.generation_failure_report_modal.failing_reason_message' | translate}} </div> <div ng-if=\"endpointReport.warnings > 0 && endpointReport.errors === 0\" class=\"alert alert-info\"> {{'graphql.endpoints_management.generation_failure_report_modal.warning_reason_message' | translate}} </div> <table class=\"report table table-bordered\" aria-label=\"Endpoint generation failure report table\"> <thead> <tr class=\"labels-row\"> <th scope=\"col\"> <strong class=\"errors-count mr-2\">{{'graphql.endpoints_management.generation_failure_report_modal.errors' | translate: {errorCount: endpointReport.errors} }}</strong> <strong class=\"warnings-count\">{{'graphql.endpoints_management.generation_failure_report_modal.warnings' | translate: {warningCount: endpointReport.warnings} }}</strong> </th> </tr> </thead> <tbody> <tr ng-repeat=\"error in endpointReport.messages.errors\" class=\"error-row\"> <td> <div class=\"alert alert-danger\">{{error}}</div> </td> </tr> <tr ng-repeat=\"warning in endpointReport.messages.warnings\" class=\"warning-row\"> <td> <div class=\"alert alert-warning\">{{warning}}</div> </td> </tr> </tbody> </table> </div> <div class=\"modal-footer mt-0\"> <button id=\"download-failure-report\" class=\"btn btn-secondary mr-1\" ng-click=\"downloadReport()\"> <i class=\"fa fa-arrow-down-to-line\"></i> <span>{{'graphql.endpoints_management.generation_failure_report_modal.actions.download_report.label' | translate}}</span> </button> <button ng-if=\"endpointReport.errors === 0 && endpointReport.warnings > 0\" id=\"delete-warnings\" class=\"btn btn-primary\" ng-click=\"deleteReport()\"> <span>{{'graphql.endpoints_management.generation_failure_report_modal.actions.delete_report.label' | translate}}</span> </button> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"55862.f591817372ceb94a4cd2.bundle.js","mappings":"uJAGA,QAFW,spE","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/graphql/endpoint-generation-failure-result-modal.css?v=3.2.0-TR5\" rel=\"stylesheet\"/> <div class=\"modal-header\"> <button type=\"button\" class=\"close\" ng-click=\"close()\"></button> <h3 class=\"modal-title\"> {{'graphql.endpoints_management.generation_failure_report_modal.title' | translate}}</h3> </div> <div class=\"modal-body endpoint-generation-failure-result-modal-body\"> <div ng-if=\"endpointReport.errors > 0\" class=\"alert alert-danger\"> {{'graphql.endpoints_management.generation_failure_report_modal.failing_reason_message' | translate}} </div> <div ng-if=\"endpointReport.warnings > 0 && endpointReport.errors === 0\" class=\"alert alert-info\"> {{'graphql.endpoints_management.generation_failure_report_modal.warning_reason_message' | translate}} </div> <table class=\"report table table-bordered\" aria-label=\"Endpoint generation failure report table\"> <thead> <tr class=\"labels-row\"> <th scope=\"col\"> <strong class=\"errors-count mr-2\">{{'graphql.endpoints_management.generation_failure_report_modal.errors' | translate: {errorCount: endpointReport.errors} }}</strong> <strong class=\"warnings-count\">{{'graphql.endpoints_management.generation_failure_report_modal.warnings' | translate: {warningCount: endpointReport.warnings} }}</strong> </th> </tr> </thead> <tbody> <tr ng-repeat=\"error in endpointReport.messages.errors\" class=\"error-row\"> <td> <div class=\"alert alert-danger\">{{error}}</div> </td> </tr> <tr ng-repeat=\"warning in endpointReport.messages.warnings\" class=\"warning-row\"> <td> <div class=\"alert alert-warning\">{{warning}}</div> </td> </tr> </tbody> </table> </div> <div class=\"modal-footer mt-0\"> <button id=\"download-failure-report\" class=\"btn btn-secondary mr-1\" ng-click=\"downloadReport()\"> <i class=\"fa fa-arrow-down-to-line\"></i> <span>{{'graphql.endpoints_management.generation_failure_report_modal.actions.download_report.label' | translate}}</span> </button> <button ng-if=\"endpointReport.errors === 0 && endpointReport.warnings > 0\" id=\"delete-warnings\" class=\"btn btn-primary\" ng-click=\"deleteReport()\"> <span>{{'graphql.endpoints_management.generation_failure_report_modal.actions.delete_report.label' | translate}}</span> </button> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- export const __webpack_id__=58306;export const __webpack_ids__=[58306];export const __webpack_modules__={58306:(t,e,s)=>{s.r(e),s.d(e,{default:()=>n});const n='<link href="css/ttyg/ttyg.css?v=3.2.0-TR4" rel="stylesheet"/> <div class="ttyg-view" ng-class="{\'help-visible\': isHelpVisible}"> <h1 id="ttyg-view-title"> {{ title }} <page-info-tooltip></page-info-tooltip> </h1> <div core-errors></div> <div uib-collapse="!isHelpVisible" class="alert alert-info"> <button type="button" ng-click="isHelpVisible = false" gdb-tooltip="{{\'common.close\' | translate}}" class="close" aria-label="Close"></button> <div ng-include="helpTemplateUrl"></div> </div> <div onto-loader-new ng-show="loadingAgents" class="ttyg-page-loader" size="100"> </div> <no-agents-view ng-cloak ng-if="initialized && getActiveRepository() && !loadingAgents && !reloadingAgents && (!agents || agents.isEmpty())"></no-agents-view> <div id="ttyg-container" class="ttyg-container" ng-show="getActiveRepository() && !loadingAgents && agents && !agents.isEmpty()"> <div id="left-sidebar" class="left-sidebar sidebar" ng-class="showChats ? \'expanded\' : \'collapsed\'"> <div class="toolbar"> <button class="btn btn-link btn-sm toggle-chats-sidebar-btn" ng-if="true" ng-click="toggleChatsListSidebar()" ng-disabled="false" gdb-tooltip="{{\'ttyg.chat.btn.\' + (showChats ? \'close_sidebar\' : \'open_sidebar\') + \'.tooltip\' | translate}}"> <i class="fa fa-sidebar"></i> </button> <button class="btn btn-link btn-sm create-chat-btn" guide-selector="create-chat-btn" ng-if="chats && !chats.isEmpty()" ng-click="startNewChat()" ng-disabled="false" gdb-tooltip="{{\'ttyg.chat.btn.create_chat.tooltip\' | translate}}"> <i class="fa fa-pen-to-square"></i> </button> </div> <pageslide ps-class="chat-list-panel slide-panel" ps-container="left-sidebar" ps-open="showChats" onopen="onopen" onclose="onclose" ps-side="left" ps-click-outside="false" ps-size="80vw"> <div class="sidebar-content"> <chat-list ng-if="chats"></chat-list> <div class="chat-list-panel-loader" ng-if="!chats && loadingChats"> <div onto-loader-fancy message="{{\'ttyg.chat.loading_chats\' | translate}}" size="25"></div> </div> </div> </pageslide> </div> <div class="chat-content"> <div class="chat"> <div class="toolbar mb-2"> <agent-select-menu class="mr-1"></agent-select-menu> <button class="btn btn-link btn-sm edit-current-agent-btn mr-1" guide-selector="edit-current-agent" ng-if="selectedAgent" ng-click="onOpenAgentSettings()" ng-disabled="!canModifyAgent" gdb-tooltip="{{ (canModifyAgent ? \'ttyg.agent.btn.edit_agent.tooltip\' : \'ttyg.agent.btn.edit_agent.tooltip_disabled\') | translate}}"> <i class="icon-settings"></i> </button> </div> <div uib-collapse="!isCollapsed" id="ot-help-text" class="alert alert-info"> <button type="button" ng-click="isCollapsed = false" gdb-tooltip="{{\'common.close\' | translate}}" class="close" aria-label="Close"></button> <div ng-include="helpTemplateUrl"></div> </div> <chat-panel class="selected-chat-panel"></chat-panel> </div> </div> <div id="right-sidebar" class="right-sidebar sidebar" ng-class="showAgents ? \'expanded\' : \'collapsed\'"> <div class="toolbar"> <button class="btn btn-link btn-sm help-btn" ng-if="true" ng-click="onToggleHelp()" ng-disabled="false" gdb-tooltip="{{\'ttyg.help.btn.show_help.tooltip\' | translate}}"> <i class="icon-help"></i> </button> <button class="btn btn-link btn-sm create-agent-btn" ng-disabled="!canModifyAgent" ng-click="onOpenNewAgentSettings()" ng-disabled="false" gdb-tooltip="{{ (canModifyAgent ? \'ttyg.agent.btn.create_agent.tooltip\' : \'ttyg.agent.btn.create_agent.tooltip_disabled\') | translate}}" guide-selector="create-agent-btn"> <i class="icon-plus"></i> </button> <button class="btn btn-link btn-sm toggle-agents-sidebar-btn" ng-if="!showAgents" ng-click="toggleAgentsListSidebar()" ng-disabled="!canModifyAgent" gdb-tooltip="{{\'ttyg.agent.btn.open_sidebar.\' + (canModifyAgent ? \'tooltip\' : \'tooltip_disabled\') | translate}}"> <i class="fa fa-message-bot"></i> </button> <button class="btn btn-link btn-sm toggle-agents-sidebar-btn" ng-if="showAgents" ng-click="toggleAgentsListSidebar()" ng-disabled="false" gdb-tooltip="{{\'ttyg.agent.btn.close_sidebar\' + \'.tooltip\' | translate}}"> <i class="icon-close"></i> </button> </div> <pageslide ps-class="agent-list-panel slide-panel" ps-container="right-sidebar" ps-open="showAgents" onopen="onopen" onclose="onclose" ps-side="right" ps-click-outside="false" ps-size="80vw"> <div class="sidebar-content"> <agent-list ng-if="agents && agentListFilterModel.length && !reloadingAgents" agent-list="agents" agent-list-filter-model="agentListFilterModel"></agent-list> <div ng-if="reloadingAgents" onto-loader-fancy message="{{\'ttyg.agent.loading_agents\' | translate}}" class="agent-list-loader" size="25" style="display:flex"></div> </div> </pageslide> </div> </div> </div> '}};
2
- //# sourceMappingURL=58306.a45182d200e3f8793644.bundle.js.map
1
+ export const __webpack_id__=58306;export const __webpack_ids__=[58306];export const __webpack_modules__={58306:(t,e,s)=>{s.r(e),s.d(e,{default:()=>n});const n='<link href="css/ttyg/ttyg.css?v=3.2.0-TR5" rel="stylesheet"/> <div class="ttyg-view" ng-class="{\'help-visible\': isHelpVisible}"> <h1 id="ttyg-view-title"> {{ title }} <page-info-tooltip></page-info-tooltip> </h1> <div core-errors></div> <div uib-collapse="!isHelpVisible" class="alert alert-info"> <button type="button" ng-click="isHelpVisible = false" gdb-tooltip="{{\'common.close\' | translate}}" class="close" aria-label="Close"></button> <div ng-include="helpTemplateUrl"></div> </div> <div onto-loader-new ng-show="loadingAgents" class="ttyg-page-loader" size="100"> </div> <no-agents-view ng-cloak ng-if="initialized && getActiveRepository() && !loadingAgents && !reloadingAgents && (!agents || agents.isEmpty())"></no-agents-view> <div id="ttyg-container" class="ttyg-container" ng-show="getActiveRepository() && !loadingAgents && agents && !agents.isEmpty()"> <div id="left-sidebar" class="left-sidebar sidebar" ng-class="showChats ? \'expanded\' : \'collapsed\'"> <div class="toolbar"> <button class="btn btn-link btn-sm toggle-chats-sidebar-btn" ng-if="true" ng-click="toggleChatsListSidebar()" ng-disabled="false" gdb-tooltip="{{\'ttyg.chat.btn.\' + (showChats ? \'close_sidebar\' : \'open_sidebar\') + \'.tooltip\' | translate}}"> <i class="fa fa-sidebar"></i> </button> <button class="btn btn-link btn-sm create-chat-btn" guide-selector="create-chat-btn" ng-if="chats && !chats.isEmpty()" ng-click="startNewChat()" ng-disabled="false" gdb-tooltip="{{\'ttyg.chat.btn.create_chat.tooltip\' | translate}}"> <i class="fa fa-pen-to-square"></i> </button> </div> <pageslide ps-class="chat-list-panel slide-panel" ps-container="left-sidebar" ps-open="showChats" onopen="onopen" onclose="onclose" ps-side="left" ps-click-outside="false" ps-size="80vw"> <div class="sidebar-content"> <chat-list ng-if="chats"></chat-list> <div class="chat-list-panel-loader" ng-if="!chats && loadingChats"> <div onto-loader-fancy message="{{\'ttyg.chat.loading_chats\' | translate}}" size="25"></div> </div> </div> </pageslide> </div> <div class="chat-content"> <div class="chat"> <div class="toolbar mb-2"> <agent-select-menu class="mr-1"></agent-select-menu> <button class="btn btn-link btn-sm edit-current-agent-btn mr-1" guide-selector="edit-current-agent" ng-if="selectedAgent" ng-click="onOpenAgentSettings()" ng-disabled="!canModifyAgent" gdb-tooltip="{{ (canModifyAgent ? \'ttyg.agent.btn.edit_agent.tooltip\' : \'ttyg.agent.btn.edit_agent.tooltip_disabled\') | translate}}"> <i class="icon-settings"></i> </button> </div> <div uib-collapse="!isCollapsed" id="ot-help-text" class="alert alert-info"> <button type="button" ng-click="isCollapsed = false" gdb-tooltip="{{\'common.close\' | translate}}" class="close" aria-label="Close"></button> <div ng-include="helpTemplateUrl"></div> </div> <chat-panel class="selected-chat-panel"></chat-panel> </div> </div> <div id="right-sidebar" class="right-sidebar sidebar" ng-class="showAgents ? \'expanded\' : \'collapsed\'"> <div class="toolbar"> <button class="btn btn-link btn-sm help-btn" ng-if="true" ng-click="onToggleHelp()" ng-disabled="false" gdb-tooltip="{{\'ttyg.help.btn.show_help.tooltip\' | translate}}"> <i class="icon-help"></i> </button> <button class="btn btn-link btn-sm create-agent-btn" ng-disabled="!canModifyAgent" ng-click="onOpenNewAgentSettings()" ng-disabled="false" gdb-tooltip="{{ (canModifyAgent ? \'ttyg.agent.btn.create_agent.tooltip\' : \'ttyg.agent.btn.create_agent.tooltip_disabled\') | translate}}" guide-selector="create-agent-btn"> <i class="icon-plus"></i> </button> <button class="btn btn-link btn-sm toggle-agents-sidebar-btn" ng-if="!showAgents" ng-click="toggleAgentsListSidebar()" ng-disabled="!canModifyAgent" gdb-tooltip="{{\'ttyg.agent.btn.open_sidebar.\' + (canModifyAgent ? \'tooltip\' : \'tooltip_disabled\') | translate}}"> <i class="fa fa-message-bot"></i> </button> <button class="btn btn-link btn-sm toggle-agents-sidebar-btn" ng-if="showAgents" ng-click="toggleAgentsListSidebar()" ng-disabled="false" gdb-tooltip="{{\'ttyg.agent.btn.close_sidebar\' + \'.tooltip\' | translate}}"> <i class="icon-close"></i> </button> </div> <pageslide ps-class="agent-list-panel slide-panel" ps-container="right-sidebar" ps-open="showAgents" onopen="onopen" onclose="onclose" ps-side="right" ps-click-outside="false" ps-size="80vw"> <div class="sidebar-content"> <agent-list ng-if="agents && agentListFilterModel.length && !reloadingAgents" agent-list="agents" agent-list-filter-model="agentListFilterModel"></agent-list> <div ng-if="reloadingAgents" onto-loader-fancy message="{{\'ttyg.agent.loading_agents\' | translate}}" class="agent-list-loader" size="25" style="display:flex"></div> </div> </pageslide> </div> </div> </div> '}};
2
+ //# sourceMappingURL=58306.b82da84fcad5ac12087a.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"58306.a45182d200e3f8793644.bundle.js","mappings":"uJAGA,QAFW,smJ","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/templates/ttyg.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/ttyg/ttyg.css?v=3.2.0-TR4\" rel=\"stylesheet\"/> <div class=\"ttyg-view\" ng-class=\"{'help-visible': isHelpVisible}\"> <h1 id=\"ttyg-view-title\"> {{ title }} <page-info-tooltip></page-info-tooltip> </h1> <div core-errors></div> <div uib-collapse=\"!isHelpVisible\" class=\"alert alert-info\"> <button type=\"button\" ng-click=\"isHelpVisible = false\" gdb-tooltip=\"{{'common.close' | translate}}\" class=\"close\" aria-label=\"Close\"></button> <div ng-include=\"helpTemplateUrl\"></div> </div> <div onto-loader-new ng-show=\"loadingAgents\" class=\"ttyg-page-loader\" size=\"100\"> </div> <no-agents-view ng-cloak ng-if=\"initialized && getActiveRepository() && !loadingAgents && !reloadingAgents && (!agents || agents.isEmpty())\"></no-agents-view> <div id=\"ttyg-container\" class=\"ttyg-container\" ng-show=\"getActiveRepository() && !loadingAgents && agents && !agents.isEmpty()\"> <div id=\"left-sidebar\" class=\"left-sidebar sidebar\" ng-class=\"showChats ? 'expanded' : 'collapsed'\"> <div class=\"toolbar\"> <button class=\"btn btn-link btn-sm toggle-chats-sidebar-btn\" ng-if=\"true\" ng-click=\"toggleChatsListSidebar()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.chat.btn.' + (showChats ? 'close_sidebar' : 'open_sidebar') + '.tooltip' | translate}}\"> <i class=\"fa fa-sidebar\"></i> </button> <button class=\"btn btn-link btn-sm create-chat-btn\" guide-selector=\"create-chat-btn\" ng-if=\"chats && !chats.isEmpty()\" ng-click=\"startNewChat()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.chat.btn.create_chat.tooltip' | translate}}\"> <i class=\"fa fa-pen-to-square\"></i> </button> </div> <pageslide ps-class=\"chat-list-panel slide-panel\" ps-container=\"left-sidebar\" ps-open=\"showChats\" onopen=\"onopen\" onclose=\"onclose\" ps-side=\"left\" ps-click-outside=\"false\" ps-size=\"80vw\"> <div class=\"sidebar-content\"> <chat-list ng-if=\"chats\"></chat-list> <div class=\"chat-list-panel-loader\" ng-if=\"!chats && loadingChats\"> <div onto-loader-fancy message=\"{{'ttyg.chat.loading_chats' | translate}}\" size=\"25\"></div> </div> </div> </pageslide> </div> <div class=\"chat-content\"> <div class=\"chat\"> <div class=\"toolbar mb-2\"> <agent-select-menu class=\"mr-1\"></agent-select-menu> <button class=\"btn btn-link btn-sm edit-current-agent-btn mr-1\" guide-selector=\"edit-current-agent\" ng-if=\"selectedAgent\" ng-click=\"onOpenAgentSettings()\" ng-disabled=\"!canModifyAgent\" gdb-tooltip=\"{{ (canModifyAgent ? 'ttyg.agent.btn.edit_agent.tooltip' : 'ttyg.agent.btn.edit_agent.tooltip_disabled') | translate}}\"> <i class=\"icon-settings\"></i> </button> </div> <div uib-collapse=\"!isCollapsed\" id=\"ot-help-text\" class=\"alert alert-info\"> <button type=\"button\" ng-click=\"isCollapsed = false\" gdb-tooltip=\"{{'common.close' | translate}}\" class=\"close\" aria-label=\"Close\"></button> <div ng-include=\"helpTemplateUrl\"></div> </div> <chat-panel class=\"selected-chat-panel\"></chat-panel> </div> </div> <div id=\"right-sidebar\" class=\"right-sidebar sidebar\" ng-class=\"showAgents ? 'expanded' : 'collapsed'\"> <div class=\"toolbar\"> <button class=\"btn btn-link btn-sm help-btn\" ng-if=\"true\" ng-click=\"onToggleHelp()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.help.btn.show_help.tooltip' | translate}}\"> <i class=\"icon-help\"></i> </button> <button class=\"btn btn-link btn-sm create-agent-btn\" ng-disabled=\"!canModifyAgent\" ng-click=\"onOpenNewAgentSettings()\" ng-disabled=\"false\" gdb-tooltip=\"{{ (canModifyAgent ? 'ttyg.agent.btn.create_agent.tooltip' : 'ttyg.agent.btn.create_agent.tooltip_disabled') | translate}}\" guide-selector=\"create-agent-btn\"> <i class=\"icon-plus\"></i> </button> <button class=\"btn btn-link btn-sm toggle-agents-sidebar-btn\" ng-if=\"!showAgents\" ng-click=\"toggleAgentsListSidebar()\" ng-disabled=\"!canModifyAgent\" gdb-tooltip=\"{{'ttyg.agent.btn.open_sidebar.' + (canModifyAgent ? 'tooltip' : 'tooltip_disabled') | translate}}\"> <i class=\"fa fa-message-bot\"></i> </button> <button class=\"btn btn-link btn-sm toggle-agents-sidebar-btn\" ng-if=\"showAgents\" ng-click=\"toggleAgentsListSidebar()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.agent.btn.close_sidebar' + '.tooltip' | translate}}\"> <i class=\"icon-close\"></i> </button> </div> <pageslide ps-class=\"agent-list-panel slide-panel\" ps-container=\"right-sidebar\" ps-open=\"showAgents\" onopen=\"onopen\" onclose=\"onclose\" ps-side=\"right\" ps-click-outside=\"false\" ps-size=\"80vw\"> <div class=\"sidebar-content\"> <agent-list ng-if=\"agents && agentListFilterModel.length && !reloadingAgents\" agent-list=\"agents\" agent-list-filter-model=\"agentListFilterModel\"></agent-list> <div ng-if=\"reloadingAgents\" onto-loader-fancy message=\"{{'ttyg.agent.loading_agents' | translate}}\" class=\"agent-list-loader\" size=\"25\" style=\"display:flex\"></div> </div> </pageslide> </div> </div> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"58306.b82da84fcad5ac12087a.bundle.js","mappings":"uJAGA,QAFW,smJ","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/templates/ttyg.html"],"sourcesContent":["// Module\nvar code = `<link href=\"css/ttyg/ttyg.css?v=3.2.0-TR5\" rel=\"stylesheet\"/> <div class=\"ttyg-view\" ng-class=\"{'help-visible': isHelpVisible}\"> <h1 id=\"ttyg-view-title\"> {{ title }} <page-info-tooltip></page-info-tooltip> </h1> <div core-errors></div> <div uib-collapse=\"!isHelpVisible\" class=\"alert alert-info\"> <button type=\"button\" ng-click=\"isHelpVisible = false\" gdb-tooltip=\"{{'common.close' | translate}}\" class=\"close\" aria-label=\"Close\"></button> <div ng-include=\"helpTemplateUrl\"></div> </div> <div onto-loader-new ng-show=\"loadingAgents\" class=\"ttyg-page-loader\" size=\"100\"> </div> <no-agents-view ng-cloak ng-if=\"initialized && getActiveRepository() && !loadingAgents && !reloadingAgents && (!agents || agents.isEmpty())\"></no-agents-view> <div id=\"ttyg-container\" class=\"ttyg-container\" ng-show=\"getActiveRepository() && !loadingAgents && agents && !agents.isEmpty()\"> <div id=\"left-sidebar\" class=\"left-sidebar sidebar\" ng-class=\"showChats ? 'expanded' : 'collapsed'\"> <div class=\"toolbar\"> <button class=\"btn btn-link btn-sm toggle-chats-sidebar-btn\" ng-if=\"true\" ng-click=\"toggleChatsListSidebar()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.chat.btn.' + (showChats ? 'close_sidebar' : 'open_sidebar') + '.tooltip' | translate}}\"> <i class=\"fa fa-sidebar\"></i> </button> <button class=\"btn btn-link btn-sm create-chat-btn\" guide-selector=\"create-chat-btn\" ng-if=\"chats && !chats.isEmpty()\" ng-click=\"startNewChat()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.chat.btn.create_chat.tooltip' | translate}}\"> <i class=\"fa fa-pen-to-square\"></i> </button> </div> <pageslide ps-class=\"chat-list-panel slide-panel\" ps-container=\"left-sidebar\" ps-open=\"showChats\" onopen=\"onopen\" onclose=\"onclose\" ps-side=\"left\" ps-click-outside=\"false\" ps-size=\"80vw\"> <div class=\"sidebar-content\"> <chat-list ng-if=\"chats\"></chat-list> <div class=\"chat-list-panel-loader\" ng-if=\"!chats && loadingChats\"> <div onto-loader-fancy message=\"{{'ttyg.chat.loading_chats' | translate}}\" size=\"25\"></div> </div> </div> </pageslide> </div> <div class=\"chat-content\"> <div class=\"chat\"> <div class=\"toolbar mb-2\"> <agent-select-menu class=\"mr-1\"></agent-select-menu> <button class=\"btn btn-link btn-sm edit-current-agent-btn mr-1\" guide-selector=\"edit-current-agent\" ng-if=\"selectedAgent\" ng-click=\"onOpenAgentSettings()\" ng-disabled=\"!canModifyAgent\" gdb-tooltip=\"{{ (canModifyAgent ? 'ttyg.agent.btn.edit_agent.tooltip' : 'ttyg.agent.btn.edit_agent.tooltip_disabled') | translate}}\"> <i class=\"icon-settings\"></i> </button> </div> <div uib-collapse=\"!isCollapsed\" id=\"ot-help-text\" class=\"alert alert-info\"> <button type=\"button\" ng-click=\"isCollapsed = false\" gdb-tooltip=\"{{'common.close' | translate}}\" class=\"close\" aria-label=\"Close\"></button> <div ng-include=\"helpTemplateUrl\"></div> </div> <chat-panel class=\"selected-chat-panel\"></chat-panel> </div> </div> <div id=\"right-sidebar\" class=\"right-sidebar sidebar\" ng-class=\"showAgents ? 'expanded' : 'collapsed'\"> <div class=\"toolbar\"> <button class=\"btn btn-link btn-sm help-btn\" ng-if=\"true\" ng-click=\"onToggleHelp()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.help.btn.show_help.tooltip' | translate}}\"> <i class=\"icon-help\"></i> </button> <button class=\"btn btn-link btn-sm create-agent-btn\" ng-disabled=\"!canModifyAgent\" ng-click=\"onOpenNewAgentSettings()\" ng-disabled=\"false\" gdb-tooltip=\"{{ (canModifyAgent ? 'ttyg.agent.btn.create_agent.tooltip' : 'ttyg.agent.btn.create_agent.tooltip_disabled') | translate}}\" guide-selector=\"create-agent-btn\"> <i class=\"icon-plus\"></i> </button> <button class=\"btn btn-link btn-sm toggle-agents-sidebar-btn\" ng-if=\"!showAgents\" ng-click=\"toggleAgentsListSidebar()\" ng-disabled=\"!canModifyAgent\" gdb-tooltip=\"{{'ttyg.agent.btn.open_sidebar.' + (canModifyAgent ? 'tooltip' : 'tooltip_disabled') | translate}}\"> <i class=\"fa fa-message-bot\"></i> </button> <button class=\"btn btn-link btn-sm toggle-agents-sidebar-btn\" ng-if=\"showAgents\" ng-click=\"toggleAgentsListSidebar()\" ng-disabled=\"false\" gdb-tooltip=\"{{'ttyg.agent.btn.close_sidebar' + '.tooltip' | translate}}\"> <i class=\"icon-close\"></i> </button> </div> <pageslide ps-class=\"agent-list-panel slide-panel\" ps-container=\"right-sidebar\" ps-open=\"showAgents\" onopen=\"onopen\" onclose=\"onclose\" ps-side=\"right\" ps-click-outside=\"false\" ps-size=\"80vw\"> <div class=\"sidebar-content\"> <agent-list ng-if=\"agents && agentListFilterModel.length && !reloadingAgents\" agent-list=\"agents\" agent-list-filter-model=\"agentListFilterModel\"></agent-list> <div ng-if=\"reloadingAgents\" onto-loader-fancy message=\"{{'ttyg.agent.loading_agents' | translate}}\" class=\"agent-list-loader\" size=\"25\" style=\"display:flex\"></div> </div> </pageslide> </div> </div> </div> `;\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ export const __webpack_id__=64118;export const __webpack_ids__=[12940,30553,49539,64118,65820,71920,89598,89647,98268];export const __webpack_modules__={12940:(e,t,n)=>{n.r(t);var o=n(5949),a=n(89598),r=n(30553),i=n(304);const s={buttonStyle:"position: absolute; top: 0; right: 0; margin-right: 24px"},l=i.LoggerProvider.logger;function c(e){const t=(0,o.A)().use(a.markdownCodeCopyPlugin).use(r.markdownOpenInSparqlEditorPlugin,s);return{renderMarkdown:(n,i)=>{try{return e.trustAsHtml((e=>e?(0,o.A)().use(a.markdownCodeCopyPlugin,e).use(r.markdownOpenInSparqlEditorPlugin,_.merge({},s,e)):t)(i).render(n))}catch(t){return l.error("Error rendering markdown:",t),e.trustAsHtml(n)}}}}angular.module("graphdb.framework.core.services.markdown-service",[]).service("MarkdownService",c),c.$inject=["$sce"]},30553:(e,t,n)=>{n.r(t),n.d(t,{markdownOpenInSparqlEditorPlugin:()=>r});const o={buttonStyle:"position: absolute; top: 0; right: 0;",buttonClass:""};function a(e,t){return t=_.merge({},o,t),(...n)=>{const[o,a]=n,r=o[a],i=o[a].content.replaceAll('"',"&quot;").replaceAll("'","&apos;"),s=e(...n);return"fence"===r.type&&"sparql"===r.info&&s.trim()?`<div style="position: relative">\n ${s}\n <open-in-sparql-editor\n style="${t.buttonStyle}"\n class="${t.buttonClass}"\n execute-query="${t.executeQuery}"\n repository-id="${t.repositoryId}"\n query="${i}">\n </open-in-sparql-editor>\n </div>`:s}}const r=(e,t)=>{e.renderer.rules.code_block=a(e.renderer.rules.code_block,t),e.renderer.rules.fence=a(e.renderer.rules.fence,t)}},64118:(e,t,n)=>{n.r(t),n(89647),n(98268);var o=n(71920),a=n(87252),r=n(65820);function i(e,t,n,i,s){return{restrict:"E",templateUrl:"js/angular/ttyg/templates/chat-item-detail.html",scope:{chatItemDetail:"=",showActions:"=",asking:"=",disabled:"=",onRegenerateQuestion:"&",onAskHowDeliveredAnswer:"&"},link:(l,c,d)=>{l.ExplainQueryType=a.ExplainQueryType,l.repositoryId=void 0,l.markdownContentOptions=void 0,l.isCancellingAnswer=!1,l.agentNameByIdMap={},l.explainResponseModel={},l.loadingExplainResponse={},l.regenerateQuestion=()=>{l.onRegenerateQuestion({chatItem:l.chatItemDetail})},l.explainResponse=o=>{n.hasExplainResponse(o)?n.toggleExplainResponse(o):(l.loadingExplainResponse[o]=!0,i.explainResponse(l.chatItemDetail,o).then(e=>{n.addExplainResponseCache(e)}).catch(()=>{e.error(t.instant("ttyg.chat_panel.messages.explain_response_failure"))}).finally(()=>l.loadingExplainResponse[o]=!1))},l.onAskHowAnswerWasDerived=()=>{l.onAskHowDeliveredAnswer()},l.onTokenUsageInfo=e=>{e.preventDefault(),e.stopPropagation()},l.onOpenInSparqlEditor=e=>{l.chatItemDetail.agentId&&n.emit(o.TTYGEventName.GO_TO_SPARQL_EDITOR,{query:e,repositoryId:l.repositoryId})},l.showRawQuery=e=>{const t=e.rawQuery.replace(/\s+/g,""),n=e.query.replace(/\s+/g,"");return t&&t!==n},l.getRepositoryId=e=>{const t=n.getAgent(l.chatItemDetail.agentId);return t?t.repositoryId:""},l.getHumanReadableQuestionTimestamp=e=>(0,r.getHumanReadableTimestamp)(t,s,e);const p=()=>{l.chatItemDetail.answers.forEach(e=>{l.explainResponseModel[e.id]=n.getExplainResponse(e.id)})},E=()=>{l.isCancellingAnswer=!1},_=[n.onExplainResponseCacheUpdated(()=>{p()}),n.onAgentsListChanged(()=>{l.agentNameByIdMap=n.getAgents().agentNameByIdMap}),n.subscribe(o.TTYGEventName.PENDING_QUESTION_CANCELED_SUCCESSFUL,E),n.subscribe(o.TTYGEventName.CANCEL_PENDING_QUESTION_FAILURE,E),n.subscribe(o.TTYGEventName.CANCEL_PENDING_QUESTION,e=>{l.chatItemDetail.question.timestamp===e.question.timestamp&&(l.isCancellingAnswer=!0)})];l.$on("$destroy",()=>{_.forEach(e=>e())}),l.repositoryId=l.getRepositoryId(),l.markdownContentOptions={repositoryId:l.repositoryId},p()}}}angular.module("graphdb.framework.ttyg.directives.chat-item-detail",["graphdb.framework.core.directives.open-in-sparql-editor","graphdb.framework.core.directives.markdown-content"]).directive("chatItemDetail",i),i.$inject=["toastr","$translate","TTYGContextService","TTYGService","$filter"]},65820:(e,t,n)=>{n.r(t),n.d(t,{getHumanReadableTimestamp:()=>o});const o=(e,t,n,o={})=>{if(!n)return"";const a=new Date(n),r=new Date,i=new Date(r.getFullYear(),r.getMonth(),r.getDate()),s=new Date(i);s.setDate(i.getDate()-1);const l=new Date(a.getFullYear(),a.getMonth(),a.getDate()),c=o.timeFormat?t("date")(a,o.timeFormat):"";if(l.getTime()===i.getTime())return e.instant("common.dates.today")+c;if(l.getTime()===s.getTime())return e.instant("common.dates.yesterday")+c;{const e=o.dateFormat||"yyyy-MM-dd";return t("date")(a,e)+c}}},71920:(e,t,n)=>{n.r(t),n.d(t,{TTYGEventName:()=>r});var o=n(98980);function a(e){let t,n,a,i,s,l={},c=!1;const d=()=>(0,o.cloneDeep)(t),p=()=>(0,o.cloneDeep)(n),E=e=>{n=(0,o.cloneDeep)(e),S(r.CHAT_LIST_UPDATED,p())},_=e=>{n.appendChat(e),E(n)},g=()=>(0,o.cloneDeep)(a),u=e=>{a&&a.id===e.id||(a=(0,o.cloneDeep)(e),S(r.SELECT_CHAT,g()))},C=()=>(0,o.cloneDeep)(i),T=()=>(0,o.cloneDeep)(l),A=e=>!!l[e],m=()=>c,S=(t,n)=>{e.emitSync(t,(0,o.cloneDeep)(n))},D=(t,n)=>e.subscribeSync(t,e=>n(e));return{resetContext:()=>{t=void 0,n=void 0,a=void 0,i=void 0,l={},s=void 0,c=!1},emit:S,subscribe:D,getChats:p,updateChats:E,addChat:_,replaceChat:(e,t)=>{n.replaceChat(e,t),E(n)},createChat:e=>{_(e),u(e),S(r.CREATE_CHAT_SUCCESSFUL,e)},onChatsListChanged:e=>(n&&angular.isFunction(e)&&e(p()),D(r.CHAT_LIST_UPDATED,t=>e(t))),getSelectedChat:g,selectChat:u,deselectChat:()=>{a=void 0,S(r.SELECT_CHAT,g())},deleteChat:e=>{n.deleteChat(e),E(n)},onSelectedChatChanged:e=>(angular.isFunction(e)&&e(g()),D(r.SELECT_CHAT,t=>e(t))),updateSelectedChat:e=>{a&&a.id&&e&&a.id!==e.id||(a=(0,o.cloneDeep)(e),S(r.SELECTED_CHAT_UPDATED,g()))},onSelectedChatUpdated:e=>(a&&angular.isFunction(e)&&e(g()),D(r.SELECTED_CHAT_UPDATED,t=>e(t))),onLastMessageReceived:e=>(a&&angular.isFunction(e)&&e(g()),D(r.LAST_MESSAGE_RECEIVED,t=>e(t))),updateAgents:e=>{t=(0,o.cloneDeep)(e),S(r.AGENT_LIST_UPDATED,d())},onAgentsListChanged:e=>(t&&angular.isFunction(e)&&e(d()),D(r.AGENT_LIST_UPDATED,t=>e(t))),getAgents:d,getAgent:e=>{if(t)return(0,o.cloneDeep)(t.getAgent(e))},selectAgent:e=>{i=(0,o.cloneDeep)(e),S(r.AGENT_SELECTED,C())},getSelectedAgent:C,onSelectedAgentChanged:e=>(i&&angular.isFunction(e)&&e(C()),D(r.AGENT_SELECTED,t=>e(t))),getDefaultAgent:()=>(0,o.cloneDeep)(s),setDefaultAgent:e=>{s=e},setCanModifyAgent:e=>{c=(0,o.cloneDeep)(e),S(r.CAN_MODIFY_AGENT_UPDATED,m())},getCanModifyAgent:m,onCanUpdateAgentUpdated:e=>(angular.isFunction(e)&&e(m()),D(r.CAN_MODIFY_AGENT_UPDATED,t=>e(t))),hasExplainResponse:A,toggleExplainResponse:e=>{A(e)&&(l[e].expanded=!l[e].expanded,S(r.EXPLAIN_RESPONSE_CACHE_UPDATED,T()))},getExplainResponse:e=>(0,o.cloneDeep)(l[e]),addExplainResponseCache:e=>{l[e.answerId]=(0,o.cloneDeep)(e),S(r.EXPLAIN_RESPONSE_CACHE_UPDATED,T())},onExplainResponseCacheUpdated:e=>(angular.isFunction(e)&&e(T()),D(r.EXPLAIN_RESPONSE_CACHE_UPDATED,t=>e(t)))}}angular.module("graphdb.framework.ttyg.services.ttygcontext",[]).factory("TTYGContextService",a),a.$inject=["EventEmitterService","TTYGService"];const r={CREATE_CHAT:"createChat",CREATE_CHAT_SUCCESSFUL:"chatCreated",CREATE_CHAT_FAILURE:"chatCreationFailed",RENAME_CHAT:"renameChat",RENAME_CHAT_SUCCESSFUL:"chatRenamed",RENAME_CHAT_FAILURE:"chatRenamedFailure",SELECT_CHAT:"selectChat",SELECTED_CHAT_UPDATED:"selectChatUpdated",LAST_MESSAGE_RECEIVED:"lastMessageReceived",DELETING_CHAT:"deletingChat",DELETE_CHAT:"deleteChat",DELETE_CHAT_SUCCESSFUL:"chatDeleted",DELETE_CHAT_FAILURE:"chatDeletedFailure",CHAT_EXPORT:"chatExport",CHAT_EXPORT_SUCCESSFUL:"chatExportSuccess",CHAT_EXPORT_FAILURE:"chatExportFailure",CHAT_LIST_UPDATED:"chatListUpdated",ASK_QUESTION:"askQuestion",ASK_QUESTION_FAILURE:"askQuestionFailure",CONTINUE_CHAT_RUN:"continueChatRun",CANCEL_PENDING_QUESTION:"cancelPendingQuestion",PENDING_QUESTION_CANCELED_SUCCESSFUL:"pendingQuestionCanceledSuccessful",CANCEL_PENDING_QUESTION_FAILURE:"cancelPendingQuestionFailed",ASK_QUESTION_STARTING:"askQuestionStarting",LOAD_CHATS:"loadChats",LOAD_CHAT_SUCCESSFUL:"loadChatSuccess",LOAD_CHAT_FAILURE:"loadChatFailure",AGENT_LIST_UPDATED:"agentListUpdated",OPEN_AGENT_SETTINGS:"openAgentSettings",EDIT_AGENT:"editAgent",CLONE_AGENT:"cloneAgent",DELETE_AGENT:"deleteAgent",AGENT_DELETED:"agentDeleted",DELETING_AGENT:"deletingAgent",AGENT_SELECTED:"agentSelected",GO_TO_CREATE_SIMILARITY_VIEW:"goToCreateSimilarityView",GO_TO_CONNECTORS_VIEW:"goToConnectorsView",GO_TO_AUTOCOMPLETE_INDEX_VIEW:"goToAutocompleteIndexView",EXPLAIN_RESPONSE:"explainResponse",EXPLAIN_RESPONSE_CACHE_UPDATED:"explainResponseCacheUpdated",GO_TO_SPARQL_EDITOR:"openQueryInSparqlEditor",CAN_MODIFY_AGENT_UPDATED:"canModifyAgentUpdated"}},89598:(e,t,n)=>{n.r(t),n.d(t,{markdownCodeCopyPlugin:()=>r});const o={buttonStyle:"position: absolute; top: 0; right: 0;",buttonClass:""};function a(e,t){return t=_.merge({},o,t),(...n)=>{const[o,a]=n,r=o[a],i=o[a].content.replaceAll('"',"&quot;").replaceAll("'","&apos;"),s=e(...n);return"fence"===r.type&&s.trim()?`<div style="position: relative">\n ${s}\n <copy-to-clipboard\n style="${t.buttonStyle}"\n class="${t.buttonClass}"\n tooltip-text="ttyg.chat_panel.btn.copy_sparql.tooltip"\n text-to-copy="${i}">\n </copy-to-clipboard>\n </div>`:s}}const r=(e,t)=>{e.renderer.rules.code_block=a(e.renderer.rules.code_block,t),e.renderer.rules.fence=a(e.renderer.rules.fence,t)}},89647:(e,t,n)=>{function o(e,t){return{templateUrl:"js/angular/core/templates/markdown-content/markdown-content.html",restrict:"E",scope:{content:"@",options:"="},link:function(n,o){n.markdownContent=void 0;n.markdownContent=t.renderMarkdown(n.content,n.options),n.$evalAsync(()=>{const t=o.find(".markdown-content");e(angular.element(t).contents())(n)})}}}n.r(t),n(12940),angular.module("graphdb.framework.core.directives.markdown-content",["graphdb.framework.core.services.markdown-service"]).directive("markdownContent",o),o.$inject=["$compile","MarkdownService"]},98268:(e,t,n)=>{n.r(t);var o=n(69937);function a(e,t,n,a){return{template:'\n <style>\n .open-in-sparql-editor-btn {\n line-height: 0.75;\n }\n .open-in-sparql-editor-btn .fa:nth-child(2) {\n margin-left: -0.2em;\n margin-right: -0.2em;\n font-size: 0.9em;\n }\n </style>\n <button class="btn btn-link btn-sm open-in-sparql-editor-btn" gdb-tooltip="{{\'ttyg.chat_panel.btn.open_in_sparql_editor.tooltip\' | translate}}" ng-click="onGoToSparqlEditorView()" guide-selector="open-in-sparql-editor-btn">\n <i class="fa fa-bracket-curly"></i><i class="fa fa-ellipsis"></i><i class="fa fa-bracket-curly-right"></i>\n </button>\n ',restrict:"E",scope:{query:"@",repositoryId:"@",executeQuery:"@"},link:function(r,i){r.tooltipText="ttyg.chat_panel.btn.open_in_sparql_editor.tooltip";const s="true"===r.executeQuery;r.onGoToSparqlEditorView=()=>{const a=e.getActiveRepository();a&&a===r.repositoryId?l(r.query):n.openConfirmationModal({title:t.instant("common.confirm"),message:(0,o.Gz)(t.instant("ttyg.chat_panel.dialog.confirm_repository_change.body",{repositoryId:r.repositoryId})),confirmButtonKey:"ttyg.chat_panel.btn.proceed.label"},()=>{e.setRepository(e.getRepository(r.repositoryId)),l(r.query)})};const l=e=>{a.open(`/sparql?query=${encodeURIComponent(e)}&execute=${s}`,"_blank")}}}}angular.module("graphdb.framework.core.directives.open-in-sparql-editor",[]).directive("openInSparqlEditor",a),a.$inject=["$repositories","$translate","ModalService","$window"]}};
2
+ //# sourceMappingURL=64118.b15383c12c5bdf6d907f.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"64118.b15383c12c5bdf6d907f.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/services/markdown/markdown.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/core/services/markdown/plugins/markdown-open-in-sparql-editor-plugin.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/directives/chat-item-detail.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/ttyg.utils.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/ttyg-context.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/core/services/markdown/plugins/markdown-code-copy-plugin.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/markdown-content/markdown-content.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/open-in-sparql-editor/open-in-sparql-editor.directive.js"],"sourcesContent":["import markdownIt from 'markdown-it';\nimport {markdownCodeCopyPlugin} from \"./plugins/markdown-code-copy-plugin\";\nimport {markdownOpenInSparqlEditorPlugin} from \"./plugins/markdown-open-in-sparql-editor-plugin\";\nimport {LoggerProvider} from \"../logger-provider\";\n\nconst OPEN_IN_SPARQL_PLUGIN_OPTIONS = {\n buttonStyle: 'position: absolute; top: 0; right: 0; margin-right: 24px',\n};\n\nconst logger = LoggerProvider.logger;\n\n/**\n * AngularJS service that provides methods for rendering Markdown text.\n * @class MarkdownService\n * @param {$sce} $sce - AngularJS service for Strict Contextual Escaping.\n */\nangular\n .module('graphdb.framework.core.services.markdown-service', [])\n .service('MarkdownService', MarkdownService);\n\nMarkdownService.$inject = ['$sce'];\n\nfunction MarkdownService($sce) {\n const markdownInstance = markdownIt()\n .use(markdownCodeCopyPlugin)\n .use(markdownOpenInSparqlEditorPlugin, OPEN_IN_SPARQL_PLUGIN_OPTIONS);\n\n /**\n * Retrieves a Markdown-it instance with optional custom configuration.\n * @function getMarkdown\n * @param {Object} [config] - Optional custom configuration for Markdown-it.\n * @return {Object} The Markdown instance.\n */\n const getMarkdown = (config) => {\n if (config) {\n return markdownIt()\n .use(markdownCodeCopyPlugin, config)\n .use(markdownOpenInSparqlEditorPlugin, _.merge({}, OPEN_IN_SPARQL_PLUGIN_OPTIONS, config));\n }\n return markdownInstance;\n };\n\n /**\n * Renders Markdown text into HTML.\n * @function renderMarkdown\n * @param {string} text - The Markdown text to render.\n * @return {string} The rendered HTML, or the original text in case of an error.\n */\n const renderMarkdown = (text, config) => {\n try {\n return $sce.trustAsHtml(getMarkdown(config).render(text));\n } catch (e) {\n logger.error('Error rendering markdown:', e);\n // Return the original text in case of an error\n return $sce.trustAsHtml(text);\n }\n };\n\n return {\n renderMarkdown,\n };\n}\n","const DEFAULT_MARKDOWN_CONFIGURATION = {\n buttonStyle: \"position: absolute; top: 0; right: 0;\",\n buttonClass: \"\"\n};\n\n/**\n * This function enhances the rendering of fenced code blocks in markdown that contain SPARQL queries\n * by appending an \"open in SPARQL editor\" button to each SPARQL code block.\n *\n * @param {Function} origRule The original rule function responsible for rendering code blocks.\n * @param {Object} options The options to customize the rendering. These will be merged with the default configuration.\n * Options model description:\n * ```JSON\n * {\n * // Inline CSS styles applied to position the button inside the code block. Defaults to positioning the button at the top-right of the block.\n * buttonStyle: \"position: absolute; top: 0; right: 0;\",\n * // The CSS class for styling the button.\n * buttonClass: \"\",\n * // A flag that determines whether the SPARQL query should be automatically executed when opened in the SPARQL editor. Defaults to `false`.\n * executeQuery: false,\n * // The ID of the repository that the SPARQL query will be executed against.\n * repositoryId: ''\n * }\n * ```\n *\n * @return {Function} A function that renders a fenced code block with an \"open in SPARQL editor\" button when the block is recognized as containing SPARQL code.\n */\nfunction renderCode(origRule, options) {\n options = _.merge({}, DEFAULT_MARKDOWN_CONFIGURATION, options);\n return (...args) => {\n const [tokens, idx] = args;\n const token = tokens[idx];\n\n const content = tokens[idx].content\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", \"&apos;\");\n const origRendered = origRule(...args);\n\n if (token.type === 'fence' && token.info === 'sparql' && origRendered.trim()) {\n return `<div style=\"position: relative\">\n ${origRendered}\n <open-in-sparql-editor\n style=\"${options.buttonStyle}\"\n class=\"${options.buttonClass}\"\n execute-query=\"${options.executeQuery}\"\n repository-id=\"${options.repositoryId}\"\n query=\"${content}\">\n </open-in-sparql-editor>\n </div>`;\n } else {\n return origRendered;\n }\n };\n}\n\nexport const markdownOpenInSparqlEditorPlugin = (md, options) => {\n md.renderer.rules.code_block = renderCode(md.renderer.rules.code_block, options);\n md.renderer.rules.fence = renderCode(md.renderer.rules.fence, options);\n};\n","import 'angular/core/directives/markdown-content/markdown-content';\nimport 'angular/core/directives/open-in-sparql-editor/open-in-sparql-editor.directive';\nimport {TTYGEventName} from \"../services/ttyg-context.service\";\nimport {ExplainQueryType} from \"../../models/ttyg/explain-response\";\nimport {getHumanReadableTimestamp} from \"../services/ttyg.utils\";\n\nconst modules = [\n 'graphdb.framework.core.directives.open-in-sparql-editor',\n 'graphdb.framework.core.directives.markdown-content',\n];\n\nangular\n .module('graphdb.framework.ttyg.directives.chat-item-detail', modules)\n .directive('chatItemDetail', ChatItemDetailComponent);\n\nChatItemDetailComponent.$inject = ['toastr', '$translate', 'TTYGContextService', 'TTYGService', '$filter'];\n\n/**\n * @ngdoc directive\n * @name graphdb.framework.ttyg.directives.chat-detail:chatItemDetail\n * @restrict E\n * @description\n *\n * This directive represents a component that displays a chat data.\n *\n * @example\n * <chat-item-detail chat-item=\"chatItem\"></chat-item-detail>\n */\nfunction ChatItemDetailComponent(toastr, $translate, TTYGContextService, TTYGService, $filter) {\n return {\n restrict: 'E',\n templateUrl: 'js/angular/ttyg/templates/chat-item-detail.html',\n scope: {\n chatItemDetail: '=',\n showActions: '=',\n asking: '=',\n disabled: '=',\n onRegenerateQuestion: '&',\n onAskHowDeliveredAnswer: '&',\n },\n link: ($scope, element, attrs) => {\n // =========================\n // Public variables\n // =========================\n\n $scope.ExplainQueryType = ExplainQueryType;\n $scope.repositoryId = undefined;\n $scope.markdownContentOptions = undefined;\n /**\n * Flag that indicates if answer cancellation is in progress.\n * @type {boolean}\n */\n $scope.isCancellingAnswer = false;\n\n /**\n * Mapping of agent id to agent name which is used to display the agent name in the UI.\n * @type {{[key: string]: string}}\n */\n $scope.agentNameByIdMap = {};\n\n /**\n * @type {{[key: string]: ExplainResponseModel}}\n */\n $scope.explainResponseModel = {};\n\n /**\n * Mapping of answer id to a boolean value indicating whether the explanation of how the answer was\n * generated is being loaded.\n * @type {{[key: string]: boolean}}\n */\n $scope.loadingExplainResponse = {};\n\n // =========================\n // Private variables\n // =========================\n\n // =========================\n // Public functions\n // =========================\n $scope.regenerateQuestion = () => {\n $scope.onRegenerateQuestion({chatItem: $scope.chatItemDetail});\n };\n\n /**\n * Extract the explanation of how the answer was generated.\n * @param {string} answerId\n */\n $scope.explainResponse = (answerId) => {\n if (TTYGContextService.hasExplainResponse(answerId)) {\n TTYGContextService.toggleExplainResponse(answerId);\n } else {\n $scope.loadingExplainResponse[answerId] = true;\n TTYGService.explainResponse($scope.chatItemDetail, answerId)\n .then((explainResponse) => {\n TTYGContextService.addExplainResponseCache(explainResponse);\n })\n .catch(() => {\n toastr.error($translate.instant('ttyg.chat_panel.messages.explain_response_failure'));\n })\n .finally(() => $scope.loadingExplainResponse[answerId] = false);\n }\n };\n\n /**\n * Triggers an asking how the answer was generated.\n */\n $scope.onAskHowAnswerWasDerived = () => {\n $scope.onAskHowDeliveredAnswer();\n };\n\n /**\n * Handles the click event on the token usage info button.\n * No additional actions are needed at this time; the handler simply prevents\n * the default button behavior and stops the event from bubbling up.\n *\n * @param {Event} event - The click event object.\n */\n $scope.onTokenUsageInfo = (event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n /**\n * Opens <code>query</code> in sparql editor.\n * @param {string} query\n */\n $scope.onOpenInSparqlEditor = (query) => {\n if ($scope.chatItemDetail.agentId) {\n TTYGContextService.emit(TTYGEventName.GO_TO_SPARQL_EDITOR, {\n query,\n repositoryId: $scope.repositoryId,\n });\n }\n };\n\n $scope.showRawQuery = (queryMethod) => {\n // TODO: Create a chat panel model and move this check there when the model is updated.\n const rawQueryNoSpaces = queryMethod.rawQuery.replace(/\\s+/g, '');\n const queryNoSpaces = queryMethod.query.replace(/\\s+/g, '');\n return rawQueryNoSpaces && rawQueryNoSpaces !== queryNoSpaces;\n };\n\n $scope.getRepositoryId = (f) => {\n const agent = TTYGContextService.getAgent($scope.chatItemDetail.agentId);\n return agent ? agent.repositoryId : '';\n };\n\n $scope.getHumanReadableQuestionTimestamp = (timestamp) => {\n return getHumanReadableTimestamp($translate, $filter, timestamp);\n };\n\n // =========================\n // Private functions\n // =========================\n const init = () => {\n $scope.repositoryId = $scope.getRepositoryId();\n $scope.markdownContentOptions = {repositoryId: $scope.repositoryId};\n updateExplainResponseModel();\n };\n\n const onExplainResponseCacheUpdated = () => {\n updateExplainResponseModel();\n };\n\n const updateExplainResponseModel = () => {\n $scope.chatItemDetail.answers.forEach((answer) => {\n $scope.explainResponseModel[answer.id] = TTYGContextService.getExplainResponse(answer.id);\n });\n };\n\n const onAgentsListChanged = () => {\n $scope.agentNameByIdMap = TTYGContextService.getAgents().agentNameByIdMap;\n };\n\n const onPendingQuestionCancelled = () => {\n $scope.isCancellingAnswer = false;\n };\n\n const onCancelPendingQuestion = (chatItem) => {\n // If the chat item is not the same as the one in scope, do nothing.\n // We check by timestamp because it's the only unique identifier we have for the question.\n // The question has an ID, but it’s not always available in the chat item.\n // When the chat is loaded, all questions are loaded with their IDs.\n // However, when we ask a new question, it does not yet have an ID.\n // This means we can have multiple questions with no ID, which may cause issues\n // like displaying more than one loader indicator.\n if ($scope.chatItemDetail.question.timestamp !== chatItem.question.timestamp) {\n return;\n }\n $scope.isCancellingAnswer = true;\n };\n\n // =========================\n // Subscriptions\n // =========================\n const subscriptions = [\n TTYGContextService.onExplainResponseCacheUpdated(onExplainResponseCacheUpdated),\n TTYGContextService.onAgentsListChanged(onAgentsListChanged),\n TTYGContextService.subscribe(TTYGEventName.PENDING_QUESTION_CANCELED_SUCCESSFUL, onPendingQuestionCancelled),\n TTYGContextService.subscribe(TTYGEventName.CANCEL_PENDING_QUESTION_FAILURE, onPendingQuestionCancelled),\n TTYGContextService.subscribe(TTYGEventName.CANCEL_PENDING_QUESTION, onCancelPendingQuestion),\n ];\n\n const removeAllSubscribers = () => {\n subscriptions.forEach((subscription) => subscription());\n };\n\n // Deregister the watcher when the scope/directive is destroyed\n $scope.$on('$destroy', removeAllSubscribers);\n\n // =========================\n // Initialization\n // =========================\n init();\n },\n };\n}\n","export const getHumanReadableTimestamp = ($translate, $filter, timestamp, options = {}) => {\n\n if (!timestamp) {\n return '';\n }\n\n const date = new Date(timestamp);\n const today = new Date();\n\n // Get start of today\n const todayStart = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n\n // Get start of yesterday\n const yesterdayStart = new Date(todayStart);\n yesterdayStart.setDate(todayStart.getDate() - 1);\n\n // Get start of the timestamp's day\n const dateStart = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n const time = options.timeFormat ? $filter('date')(date, options.timeFormat) : '';\n\n if (dateStart.getTime() === todayStart.getTime()) {\n return $translate.instant('common.dates.today') + time;\n } else if (dateStart.getTime() === yesterdayStart.getTime()) {\n return $translate.instant('common.dates.yesterday') + time;\n } else {\n // ISO format is the least ambiguous if no date format is passed.\n const dateFormat = options.dateFormat || 'yyyy-MM-dd';\n return $filter('date')(date, dateFormat) + time;\n }\n};\n","import {cloneDeep} from 'lodash';\n\nangular\n .module('graphdb.framework.ttyg.services.ttygcontext', [])\n .factory('TTYGContextService', TTYGContextService);\n\nTTYGContextService.$inject = ['EventEmitterService', 'TTYGService'];\n\nfunction TTYGContextService(EventEmitterService) {\n\n /**\n * The list of agents.\n * @type {AgentListModel}\n * @private\n */\n let _agents = undefined;\n\n /**\n * The ChatsListModel.\n * @type {ChatsListModel}\n * @private\n */\n let _chats = undefined;\n\n /**\n * The currently selected in the UI chat which is used for conversation.\n * @type {ChatModel|undefined}\n * @private\n */\n let _selectedChat = undefined;\n\n /**\n * The currently selected in the UI agent which is used for conversation.\n * @type {AgentModel|undefined}\n * @private\n */\n let _selectedAgent = undefined;\n\n /**\n * Stores information about loaded explain responses.\n * The key is the answer ID, and the value is an instance of {@see ExplainResponseModel} that holds the explanation message.\n *\n * @type {{[key: string]: ExplainResponseModel}}\n */\n let _explainCache = {};\n\n /**\n * The default agent values.\n * @type {AgentModel|undefined}\n * @private\n */\n let _defaultAgent = undefined;\n\n let _canModifyAgent = false;\n\n const resetContext = () => {\n _agents = undefined;\n _chats = undefined;\n _selectedChat = undefined;\n _selectedAgent = undefined;\n _explainCache = {};\n _defaultAgent = undefined;\n _canModifyAgent = false;\n };\n\n /**\n * @return {Promise<AgentModel>}\n */\n const getDefaultAgent = () => {\n return cloneDeep(_defaultAgent);\n };\n\n const setDefaultAgent = (agent) => {\n _defaultAgent = agent;\n };\n\n /**\n * @return {AgentListModel}\n */\n const getAgents = () => {\n return cloneDeep(_agents);\n };\n\n const getAgent = (agentId) => {\n if (_agents) {\n return cloneDeep(_agents.getAgent(agentId));\n }\n };\n\n /**\n * @return {ChatsListModel}\n */\n const getChats = () => {\n return cloneDeep(_chats);\n };\n\n /**\n * @param {ChatsListModel} chats\n */\n const updateChats = (chats) => {\n _chats = cloneDeep(chats);\n emit(TTYGEventName.CHAT_LIST_UPDATED, getChats());\n };\n\n /**\n * Deletes the chat with the provided <code>chatId</code>.\n * @param {ChatModel} chat\n */\n const deleteChat = (chat) => {\n _chats.deleteChat(chat);\n updateChats(_chats);\n };\n\n const addChat = (newChat) => {\n _chats.appendChat(newChat);\n updateChats(_chats);\n };\n\n const replaceChat = (newChat, oldChat) => {\n _chats.replaceChat(newChat, oldChat);\n updateChats(_chats);\n };\n\n const createChat = (newChat) => {\n addChat(newChat);\n selectChat(newChat);\n emit(TTYGEventName.CREATE_CHAT_SUCCESSFUL, newChat);\n }\n\n /** Subscribes to the 'chatListUpdated' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onChatsListChanged = (callback) => {\n if (_chats && angular.isFunction(callback)) {\n callback(getChats());\n }\n return subscribe(TTYGEventName.CHAT_LIST_UPDATED, (chats) => callback(chats));\n };\n\n /**\n * @return {ChatModel}\n */\n const getSelectedChat = () => {\n return cloneDeep(_selectedChat);\n };\n\n /**\n * Updates the selected chat with the provided <code>selectedChat</code> and emits the 'selectChat' event\n * to notify listeners that a new chat has been selected.\n *\n * @param {ChatModel} selectedChat - The chat object to select.\n */\n const selectChat = (selectedChat) => {\n if (!_selectedChat || _selectedChat.id !== selectedChat.id) {\n _selectedChat = cloneDeep(selectedChat);\n emit(TTYGEventName.SELECT_CHAT, getSelectedChat());\n }\n };\n\n const deselectChat = () => {\n _selectedChat = undefined;\n emit(TTYGEventName.SELECT_CHAT, getSelectedChat());\n };\n\n /**\n * Subscribes to the 'selectChat' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onSelectedChatChanged = (callback) => {\n if (angular.isFunction(callback)) {\n callback(getSelectedChat());\n }\n return subscribe(TTYGEventName.SELECT_CHAT, (selectedChat) => callback(selectedChat));\n };\n\n /**\n * Updates the selected chat and emits the 'selectChatUpdated' event to notify listeners that a property\n * of the selected chat has changed.\n *\n * If the ID of the passed chat differs from the current selected chat, no action will occur.\n *\n * The selected chat can be updated through {@link TTYGContextService#selectChat}.\n *\n * @param {ChatModel} chat - The chat object that is being updated.\n */\n const updateSelectedChat = (chat) => {\n if (!_selectedChat || !_selectedChat.id || !chat || _selectedChat.id === chat.id) {\n _selectedChat = cloneDeep(chat);\n emit(TTYGEventName.SELECTED_CHAT_UPDATED, getSelectedChat());\n }\n };\n\n /** Subscribes to the 'selectChat' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onSelectedChatUpdated = (callback) => {\n if (_selectedChat && angular.isFunction(callback)) {\n callback(getSelectedChat());\n }\n return subscribe(TTYGEventName.SELECTED_CHAT_UPDATED, (selectedChat) => callback(selectedChat));\n };\n\n /** Subscribes to the 'lastMessageReceived' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onLastMessageReceived = (callback) => {\n if (_selectedChat && angular.isFunction(callback)) {\n callback(getSelectedChat());\n }\n return subscribe(TTYGEventName.LAST_MESSAGE_RECEIVED, (selectedChat) => callback(selectedChat));\n };\n\n /**\n * @param {AgentListModel} agents\n */\n const updateAgents = (agents) => {\n _agents = cloneDeep(agents);\n emit(TTYGEventName.AGENT_LIST_UPDATED, getAgents());\n };\n\n /**\n * Subscribes to the 'agentListUpdated' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onAgentsListChanged = (callback) => {\n if (_agents && angular.isFunction(callback)) {\n callback(getAgents());\n }\n return subscribe(TTYGEventName.AGENT_LIST_UPDATED, (selectedChat) => callback(selectedChat));\n };\n\n /**\n * @return {AgentModel}\n */\n const getSelectedAgent = () => {\n return cloneDeep(_selectedAgent);\n };\n\n /**\n * Updates the selected agent with the provided <code>selectedAgent</code> and emits the 'agentSelected' event\n * to notify listeners that a new agent has been selected.\n *\n * @param {AgentModel} selectedAgent - The instance of selected agent.\n */\n const selectAgent = (selectedAgent) => {\n _selectedAgent = cloneDeep(selectedAgent);\n emit(TTYGEventName.AGENT_SELECTED, getSelectedAgent());\n };\n\n const _getExplainResponseCache = () => {\n return cloneDeep(_explainCache);\n };\n\n /**\n * Gets the explain response.\n * @param {string} answerId\n * @return {ExplainResponseModel}\n */\n const getExplainResponse = (answerId) => {\n return cloneDeep(_explainCache[answerId]);\n };\n\n /**\n * Adds the <code>explainResponse</code> into the explain response cache.\n *\n * @param {ExplainResponseModel} explainResponse\n */\n const addExplainResponseCache = (explainResponse) => {\n _explainCache[explainResponse.answerId] = cloneDeep(explainResponse);\n emit(TTYGEventName.EXPLAIN_RESPONSE_CACHE_UPDATED, _getExplainResponseCache());\n };\n\n const hasExplainResponse = (answerId) => {\n return !!_explainCache[answerId];\n };\n\n const toggleExplainResponse = (answerId) => {\n if (hasExplainResponse(answerId)) {\n _explainCache[answerId].expanded = !_explainCache[answerId].expanded;\n emit(TTYGEventName.EXPLAIN_RESPONSE_CACHE_UPDATED, _getExplainResponseCache());\n }\n };\n\n /**\n * Subscribes to the 'explainResponseCacheUpdated' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onExplainResponseCacheUpdated = (callback) => {\n if (angular.isFunction(callback)) {\n callback(_getExplainResponseCache());\n }\n return subscribe(TTYGEventName.EXPLAIN_RESPONSE_CACHE_UPDATED, (explainResponses) => callback(explainResponses));\n };\n\n /**\n * Subscribes to the 'agentSelected' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onSelectedAgentChanged = (callback) => {\n if (_selectedAgent && angular.isFunction(callback)) {\n callback(getSelectedAgent());\n }\n return subscribe(TTYGEventName.AGENT_SELECTED, (selectedChat) => callback(selectedChat));\n };\n\n /**\n * Updates the \"canModifyAgent\" flag and emits the 'canModifyAgentUpdated' event to notify listeners that the canModifyAgent flag is changed.\n *\n * @param {boolean} canModifyAgent\n */\n const setCanModifyAgent = (canModifyAgent) => {\n _canModifyAgent = cloneDeep(canModifyAgent);\n emit(TTYGEventName.CAN_MODIFY_AGENT_UPDATED, getCanModifyAgent());\n };\n\n const getCanModifyAgent = () => {\n return _canModifyAgent;\n };\n\n /**\n * Subscribes to the 'canModifyAgentUpdated' event.\n * @param {function} callback - The callback to be called when the event is fired.\n *\n * @return {function} unsubscribe function.\n */\n const onCanUpdateAgentUpdated = (callback) => {\n if (angular.isFunction(callback)) {\n callback(getCanModifyAgent());\n }\n return subscribe(TTYGEventName.CAN_MODIFY_AGENT_UPDATED, (canModifyAgent) => callback(canModifyAgent));\n };\n\n /**\n * Emits an event with a deep-cloned payload using the EventEmitterService.\n *\n * @param {string} tTYGEventName - The name of the event to emit. It must be a value from {@link TTYGEventName}.\n * @param {*} payload - The data to emit with the event. The payload is deep-cloned before emission.\n */\n const emit = (tTYGEventName, payload) => {\n EventEmitterService.emitSync(tTYGEventName, cloneDeep(payload));\n };\n\n /**\n * Subscribes to an event with the specified callback using the EventEmitterService.\n *\n * @param {string} tTYGEventName - The name of the event to subscribe to. It must be a value from {@link TTYGEventName}.\n * @param {function} callback - The function to call when the event is emitted.\n * @return {function} - Returns a function that can be called to unsubscribe from the event.\n */\n const subscribe = (tTYGEventName, callback) => {\n return EventEmitterService.subscribeSync(tTYGEventName, (payload) => callback(payload));\n };\n\n return {\n resetContext,\n emit,\n subscribe,\n // chats\n getChats,\n updateChats,\n addChat,\n replaceChat,\n createChat,\n onChatsListChanged,\n getSelectedChat,\n selectChat,\n deselectChat,\n deleteChat,\n onSelectedChatChanged,\n updateSelectedChat,\n onSelectedChatUpdated,\n onLastMessageReceived,\n // agents\n updateAgents,\n onAgentsListChanged,\n getAgents,\n getAgent,\n selectAgent,\n getSelectedAgent,\n onSelectedAgentChanged,\n getDefaultAgent,\n setDefaultAgent,\n setCanModifyAgent,\n getCanModifyAgent,\n onCanUpdateAgentUpdated,\n // chat explain\n hasExplainResponse,\n toggleExplainResponse,\n getExplainResponse,\n addExplainResponseCache,\n onExplainResponseCacheUpdated\n };\n}\n\nexport const TTYGEventName = {\n /**\n * Emitting the \"createChat\" event triggers a backend request to create a new chat.\n */\n CREATE_CHAT: 'createChat',\n\n /**\n * This event is emitted when a chat is successfully created.\n */\n CREATE_CHAT_SUCCESSFUL: 'chatCreated',\n\n /**\n * This event is emitted when the creation of a chat fails.\n */\n CREATE_CHAT_FAILURE: 'chatCreationFailed',\n\n RENAME_CHAT: 'renameChat',\n RENAME_CHAT_SUCCESSFUL: 'chatRenamed',\n RENAME_CHAT_FAILURE: 'chatRenamedFailure',\n\n /**\n * Emitting the \"selectChat\" event when the selected chat has been changed.\n */\n SELECT_CHAT: 'selectChat',\n\n /**\n * Emitting the \"selectChatUpdated\" event when the selected chat has been updated.\n */\n SELECTED_CHAT_UPDATED: 'selectChatUpdated',\n\n /**\n * Emitting the \"lastMessageReceived\" event when the final answer message has been received.\n */\n LAST_MESSAGE_RECEIVED: 'lastMessageReceived',\n\n /**\n * This event will be emitted when the chat delete request is in progress. The payload will contain the chat ID\n * and a boolean indicating if the deletion is in progress.\n */\n DELETING_CHAT: 'deletingChat',\n\n /**\n * This event will be emitted when the delete chat process is triggered but before the chat delete request is sent.\n */\n DELETE_CHAT: 'deleteChat',\n\n /**\n * This event will be emitted when the chat was successfully deleted.\n */\n DELETE_CHAT_SUCCESSFUL: 'chatDeleted',\n\n /**\n * This event will be emitted when the attempt to answer the question fails.\n */\n\n /**\n * This event is emitted when the deletion of a chat fails.\n */\n DELETE_CHAT_FAILURE: 'chatDeletedFailure',\n\n CHAT_EXPORT: 'chatExport',\n CHAT_EXPORT_SUCCESSFUL: 'chatExportSuccess',\n CHAT_EXPORT_FAILURE: 'chatExportFailure',\n CHAT_LIST_UPDATED: 'chatListUpdated',\n\n /**\n * Emitting the \"askQuestion\" event triggers a request to the backend to retrieve an answer to a question.\n */\n ASK_QUESTION: 'askQuestion',\n\n /**\n * This event will be emitted when the attempt to answer the question fails.\n */\n ASK_QUESTION_FAILURE: 'askQuestionFailure',\n\n /**\n * Emitting the \"continueChatRun\" event triggers a request to the backend to retrieve more remaining answers from the same chat run.\n */\n CONTINUE_CHAT_RUN: 'continueChatRun',\n\n /**\n * Emitting the \"cancelPendingQuestion\" event triggers the cancellation of a pending question in a chat.\n */\n CANCEL_PENDING_QUESTION: \"cancelPendingQuestion\",\n\n /**\n * This event is emitted when the cancellation of the pending question succeeds.\n */\n PENDING_QUESTION_CANCELED_SUCCESSFUL: \"pendingQuestionCanceledSuccessful\",\n\n /**\n * This event is emitted when the cancellation of the pending question fails.\n */\n CANCEL_PENDING_QUESTION_FAILURE: \"cancelPendingQuestionFailed\",\n\n /**\n * This event will be fired before a question is sent to BE for processing.\n */\n ASK_QUESTION_STARTING: \"askQuestionStarting\",\n\n /**\n * Emitting the \"loadChats\" event will trigger an action to loads all chats from backend server.\n */\n LOAD_CHATS: 'loadChats',\n LOAD_CHAT_SUCCESSFUL: 'loadChatSuccess',\n LOAD_CHAT_FAILURE: 'loadChatFailure',\n\n AGENT_LIST_UPDATED: 'agentListUpdated',\n\n /**\n * This event will be emitted when the create agent process is triggered through the UI but before the agent create\n * request is sent. This is used to open the agent settings dialog.\n */\n OPEN_AGENT_SETTINGS: 'openAgentSettings',\n\n /**\n * This event will be emitted when an agent needs to be edited.\n */\n EDIT_AGENT: 'editAgent',\n\n /**\n * This event will be emitted when an agent needs to be cloned.\n */\n CLONE_AGENT: 'cloneAgent',\n\n /**\n * This event will be emitted when the delete agent process is triggered but before the agent delete request is sent.\n */\n DELETE_AGENT: 'deleteAgent',\n\n /**\n * This event will be emitted when the agent was successfully deleted.\n */\n AGENT_DELETED: 'agentDeleted',\n\n /**\n * This event will be emitted when the agent delete request is in progress. The payload will contain the agent ID\n * and a boolean indicating if the deletion is in progress.\n */\n DELETING_AGENT: 'deletingAgent',\n\n /**\n * This event will be emitted when an agent is selected by the user through the UI.\n */\n AGENT_SELECTED: 'agentSelected',\n\n /**\n * This event will trigger the opening of the similarity view.\n */\n GO_TO_CREATE_SIMILARITY_VIEW: \"goToCreateSimilarityView\",\n\n /**\n * This event will trigger the opening of the connectors view.\n */\n GO_TO_CONNECTORS_VIEW: \"goToConnectorsView\",\n\n /**\n * This event will trigger the opening of the \"Autocomplete index\" view.\n */\n GO_TO_AUTOCOMPLETE_INDEX_VIEW: \"goToAutocompleteIndexView\",\n\n /**\n * This event will trigger fetching a new explanation of how the answer was generated.\n */\n EXPLAIN_RESPONSE: \"explainResponse\",\n\n /**\n * This event will be emitted when the cache with explain responses changed.\n */\n EXPLAIN_RESPONSE_CACHE_UPDATED: \"explainResponseCacheUpdated\",\n\n /**\n * This event will trigger the opening of the sparql view.\n */\n GO_TO_SPARQL_EDITOR: \"openQueryInSparqlEditor\",\n\n CAN_MODIFY_AGENT_UPDATED: \"canModifyAgentUpdated\",\n};\n","const DEFAULT_MARKDOWN_CONFIGURATION = {\n buttonStyle: \"position: absolute; top: 0; right: 0;\",\n buttonClass: \"\"\n};\n\n/**\n * This function enhances the rendering of code blocks in markdown by appending a \"copy to clipboard\" button to each code block.\n *\n * @param {Function} origRule The original rule function responsible for rendering code blocks.\n * @param {Object} options The options to customize the rendering. These will be merged with the default configuration.\n * Options model description:\n * ```JSON\n * {\n * // Inline CSS styles applied to position the button inside the code block. Defaults to positioning the button at the top-right of the block.\n * buttonStyle: \"position: absolute; top: 0; right: 0;\",\n * // The CSS class for styling the button. The default applies Bootstrap-like styles with a small button size and a secondary theme\n * buttonClass: \"btn btn-link btn-sm secondary\",\n * }\n * ```\n * @return {Function} A function that renders a code block with a \"copy to clipboard\" button, when a fenced code block is detected.\n */\nfunction renderCode(origRule, options) {\n options = _.merge({}, DEFAULT_MARKDOWN_CONFIGURATION, options);\n return (...args) => {\n const [tokens, idx] = args;\n const token = tokens[idx];\n\n const content = tokens[idx].content\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", \"&apos;\");\n const origRendered = origRule(...args);\n\n if (token.type === 'fence' && origRendered.trim()) {\n return `<div style=\"position: relative\">\n ${origRendered}\n <copy-to-clipboard\n style=\"${options.buttonStyle}\"\n class=\"${options.buttonClass}\"\n tooltip-text=\"ttyg.chat_panel.btn.copy_sparql.tooltip\"\n text-to-copy=\"${content}\">\n </copy-to-clipboard>\n </div>`;\n } else {\n return origRendered;\n }\n };\n}\n\nexport const markdownCodeCopyPlugin = (md, options) => {\n md.renderer.rules.code_block = renderCode(md.renderer.rules.code_block, options);\n md.renderer.rules.fence = renderCode(md.renderer.rules.fence, options);\n};\n","import 'angular/core/services/markdown/markdown.service';\n\nconst modules = [\n 'graphdb.framework.core.services.markdown-service'\n];\n\n/**\n * @ngdoc directive\n * @name graphdb.framework.core.directives.markdown-content:markdownContent\n * @restrict E\n *\n * @description\n * The `markdownContent` directive is used to render and compile Markdown content inside AngularJS applications.\n * It dynamically compiles any AngularJS directives within the rendered Markdown content, ensuring that the\n * directives are properly recognized and executed.\n *\n * @param {string=} content The markdown content to be rendered. This can be passed dynamically from the scope.\n * @param {object=} options Optional configuration object to pass to the Markdown rendering engine, providing\n * customization for how the Markdown is rendered.\n *\n * @example\n * Usage:\n * <markdown-content content=\"markdownText\" options=\"markdownOptions\"></markdown-content>\n */\nangular\n .module('graphdb.framework.core.directives.markdown-content', modules)\n .directive('markdownContent', markdownContentDirective);\n\nmarkdownContentDirective.$inject = ['$compile', 'MarkdownService'];\n\nfunction markdownContentDirective($compile, MarkdownService) {\n return {\n templateUrl: 'js/angular/core/templates/markdown-content/markdown-content.html',\n restrict: 'E',\n scope: {\n content: '@',\n options: '='\n },\n link: function ($scope, element) {\n\n // =========================\n // Public variables\n // =========================\n\n /**\n * The rendered HTML content generated from the provided Markdown.\n *\n * @type {string} markdownContent\n */\n $scope.markdownContent = undefined;\n\n // =========================\n // Private functions\n // =========================\n\n const init = () => {\n $scope.markdownContent = MarkdownService.renderMarkdown($scope.content, $scope.options);\n compileMarkdownAnswerContents();\n };\n\n /**\n * Manually compiles AngularJS directives within the dynamically generated markdown HTML content.\n * AngularJS does not automatically detect and compile directives inside HTML that is dynamically\n * inserted, so this function ensures that the content is compiled after it is rendered.\n */\n const compileMarkdownAnswerContents = () => {\n $scope.$evalAsync(() => {\n // Find the dynamically rendered element that needs to be compiled\n const markdownElement = element.find('.markdown-content');\n $compile(angular.element(markdownElement).contents())($scope);\n });\n };\n\n init();\n }\n };\n}\n","import {decodeHTML} from \"../../../../../app\";\n\n/**\n * @ngdoc directive\n * @name graphdb.framework.core.directives.open-in-sparql-editor.directive:openInSparqlEditor\n * @restrict E\n *\n * @description\n * This directive provides a button that allows users to open the SPARQL editor with a pre-defined query.\n * Optionally, it can handle repository switching before opening the editor and executing the query.\n * The directive can also trigger the query execution automatically if specified.\n *\n * @scope\n *\n * @param {string} query The SPARQL query to be opened and optionally executed in the SPARQL editor.\n * @param {string} repositoryId The ID of the repository to be selected before opening the SPARQL editor.\n * @param {string} executeQuery Flag that determines whether the query should be executed upon opening the editor.\n * It accepts 'true' or 'false'. If 'true', the query will be automatically executed.\n *\n * @example\n * <open-in-sparql-editor\n * query=\"SELECT * WHERE {?s ?p ?o}\"\n * repository-id=\"myRepository\"\n * execute-query=\"true\">\n * </open-in-sparql-editor>\n *\n * @requires $repositories\n * @requires $translate\n * @requires ModalService\n * @requires $window\n *\n * @param {string} query The SPARQL query to be executed in the new tab.\n */\n\nangular\n .module('graphdb.framework.core.directives.open-in-sparql-editor', [])\n .directive('openInSparqlEditor', openInSparqlEditorDirective);\n\nopenInSparqlEditorDirective.$inject = ['$repositories', '$translate', 'ModalService', '$window'];\n\nfunction openInSparqlEditorDirective($repositories, $translate, ModalService, $window) {\n return {\n // Note: the line-height of the element must match the line-height of the icon.\n // This defines a composite FontAwesome icon to match the style of the surrounding icons.\n template: `\n <style>\n .open-in-sparql-editor-btn {\n line-height: 0.75;\n }\n .open-in-sparql-editor-btn .fa:nth-child(2) {\n margin-left: -0.2em;\n margin-right: -0.2em;\n font-size: 0.9em;\n }\n </style>\n <button class=\"btn btn-link btn-sm open-in-sparql-editor-btn\" gdb-tooltip=\"{{'ttyg.chat_panel.btn.open_in_sparql_editor.tooltip' | translate}}\" ng-click=\"onGoToSparqlEditorView()\" guide-selector=\"open-in-sparql-editor-btn\">\n <i class=\"fa fa-bracket-curly\"></i><i class=\"fa fa-ellipsis\"></i><i class=\"fa fa-bracket-curly-right\"></i>\n </button>\n `,\n restrict: 'E',\n scope: {\n query: '@',\n repositoryId: '@',\n executeQuery: '@'\n },\n link: function ($scope, element) {\n\n // =========================\n // Public variables\n // =========================\n\n $scope.tooltipText = 'ttyg.chat_panel.btn.open_in_sparql_editor.tooltip';\n // =========================\n // Private functions\n // =========================\n const execute = $scope.executeQuery === 'true';\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Opens the SPARQL editor in a new browser tab with the specified query and optional execution.\n */\n $scope.onGoToSparqlEditorView = () => {\n const activeRepositoryId = $repositories.getActiveRepository();\n if (!activeRepositoryId || activeRepositoryId !== $scope.repositoryId) {\n // Open a confirmation modal before switching the repository\n ModalService.openConfirmationModal(\n {\n title: $translate.instant('common.confirm'),\n message: decodeHTML($translate.instant('ttyg.chat_panel.dialog.confirm_repository_change.body', {repositoryId: $scope.repositoryId})),\n confirmButtonKey: 'ttyg.chat_panel.btn.proceed.label'\n },\n () => {\n $repositories.setRepository($repositories.getRepository($scope.repositoryId));\n openInSparqlEditorInNewTab($scope.query);\n }\n );\n } else {\n // No repository switch needed, just open the SPARQL editor\n openInSparqlEditorInNewTab($scope.query);\n }\n };\n // =========================\n // Private functions\n // =========================\n\n /**\n * Opens SPARQL editor view with passed query and handles repository switch if necessary.\n * @param {string} query\n */\n const openInSparqlEditorInNewTab = (query) => {\n // Open the SPARQL editor in a new tab and execute the query\n $window.open(`/sparql?query=${encodeURIComponent(query)}&execute=${execute}`, '_blank');\n };\n }\n };\n}\n"],"names":["OPEN_IN_SPARQL_PLUGIN_OPTIONS","buttonStyle","logger","LoggerProvider","MarkdownService","$sce","markdownInstance","markdownIt","use","markdownCodeCopyPlugin","markdownOpenInSparqlEditorPlugin","renderMarkdown","text","config","trustAsHtml","_","merge","getMarkdown","render","e","error","angular","module","service","$inject","DEFAULT_MARKDOWN_CONFIGURATION","buttonClass","renderCode","origRule","options","args","tokens","idx","token","content","replaceAll","origRendered","type","info","trim","executeQuery","repositoryId","md","renderer","rules","code_block","fence","ChatItemDetailComponent","toastr","$translate","TTYGContextService","TTYGService","$filter","restrict","templateUrl","scope","chatItemDetail","showActions","asking","disabled","onRegenerateQuestion","onAskHowDeliveredAnswer","link","$scope","element","attrs","ExplainQueryType","undefined","markdownContentOptions","isCancellingAnswer","agentNameByIdMap","explainResponseModel","loadingExplainResponse","regenerateQuestion","chatItem","explainResponse","answerId","hasExplainResponse","toggleExplainResponse","then","addExplainResponseCache","catch","instant","finally","onAskHowAnswerWasDerived","onTokenUsageInfo","event","preventDefault","stopPropagation","onOpenInSparqlEditor","query","agentId","emit","TTYGEventName","GO_TO_SPARQL_EDITOR","showRawQuery","queryMethod","rawQueryNoSpaces","rawQuery","replace","queryNoSpaces","getRepositoryId","f","agent","getAgent","getHumanReadableQuestionTimestamp","timestamp","getHumanReadableTimestamp","updateExplainResponseModel","answers","forEach","answer","id","getExplainResponse","onPendingQuestionCancelled","subscriptions","onExplainResponseCacheUpdated","onAgentsListChanged","getAgents","subscribe","PENDING_QUESTION_CANCELED_SUCCESSFUL","CANCEL_PENDING_QUESTION_FAILURE","CANCEL_PENDING_QUESTION","question","$on","removeAllSubscribers","subscription","directive","date","Date","today","todayStart","getFullYear","getMonth","getDate","yesterdayStart","setDate","dateStart","time","timeFormat","getTime","dateFormat","EventEmitterService","_agents","_chats","_selectedChat","_selectedAgent","_defaultAgent","_explainCache","_canModifyAgent","cloneDeep","getChats","updateChats","chats","CHAT_LIST_UPDATED","addChat","newChat","appendChat","getSelectedChat","selectChat","selectedChat","SELECT_CHAT","getSelectedAgent","_getExplainResponseCache","getCanModifyAgent","tTYGEventName","payload","emitSync","callback","subscribeSync","resetContext","replaceChat","oldChat","createChat","CREATE_CHAT_SUCCESSFUL","onChatsListChanged","isFunction","deselectChat","deleteChat","chat","onSelectedChatChanged","updateSelectedChat","SELECTED_CHAT_UPDATED","onSelectedChatUpdated","onLastMessageReceived","LAST_MESSAGE_RECEIVED","updateAgents","agents","AGENT_LIST_UPDATED","selectAgent","selectedAgent","AGENT_SELECTED","onSelectedAgentChanged","getDefaultAgent","setDefaultAgent","setCanModifyAgent","canModifyAgent","CAN_MODIFY_AGENT_UPDATED","onCanUpdateAgentUpdated","expanded","EXPLAIN_RESPONSE_CACHE_UPDATED","explainResponses","factory","CREATE_CHAT","CREATE_CHAT_FAILURE","RENAME_CHAT","RENAME_CHAT_SUCCESSFUL","RENAME_CHAT_FAILURE","DELETING_CHAT","DELETE_CHAT","DELETE_CHAT_SUCCESSFUL","DELETE_CHAT_FAILURE","CHAT_EXPORT","CHAT_EXPORT_SUCCESSFUL","CHAT_EXPORT_FAILURE","ASK_QUESTION","ASK_QUESTION_FAILURE","CONTINUE_CHAT_RUN","ASK_QUESTION_STARTING","LOAD_CHATS","LOAD_CHAT_SUCCESSFUL","LOAD_CHAT_FAILURE","OPEN_AGENT_SETTINGS","EDIT_AGENT","CLONE_AGENT","DELETE_AGENT","AGENT_DELETED","DELETING_AGENT","GO_TO_CREATE_SIMILARITY_VIEW","GO_TO_CONNECTORS_VIEW","GO_TO_AUTOCOMPLETE_INDEX_VIEW","EXPLAIN_RESPONSE","markdownContentDirective","$compile","markdownContent","$evalAsync","markdownElement","find","contents","openInSparqlEditorDirective","$repositories","ModalService","$window","template","tooltipText","execute","onGoToSparqlEditorView","activeRepositoryId","getActiveRepository","openInSparqlEditorInNewTab","openConfirmationModal","title","message","decodeHTML","confirmButtonKey","setRepository","getRepository","open","encodeURIComponent"],"sourceRoot":""}