graphdb-workbench 3.1.0-TR12 → 3.1.0-TR13

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 (252) hide show
  1. package/dist/{12396.fcc54d85460017a32ca1.bundle.js → 12396.a4cb05c47cf17cbfd891.bundle.js} +2 -2
  2. package/dist/{12396.fcc54d85460017a32ca1.bundle.js.map → 12396.a4cb05c47cf17cbfd891.bundle.js.map} +1 -1
  3. package/dist/{13486.58f89862c40c0f84cb09.bundle.js → 13486.b4c8bf17c522084e59fb.bundle.js} +2 -2
  4. package/dist/13486.b4c8bf17c522084e59fb.bundle.js.map +1 -0
  5. package/dist/13813.84b8832e83dec53d66b9.bundle.js +2 -0
  6. package/dist/13813.84b8832e83dec53d66b9.bundle.js.map +1 -0
  7. package/dist/{15535.4f5aebf06ef94d0d730c.bundle.js → 15535.aa936791f2b5dd74f7ee.bundle.js} +2 -2
  8. package/dist/{15535.4f5aebf06ef94d0d730c.bundle.js.map → 15535.aa936791f2b5dd74f7ee.bundle.js.map} +1 -1
  9. package/dist/{16162.93e0b5dcd33d9227fd60.bundle.js → 16162.dca58b88b4d145a7fcf7.bundle.js} +2 -2
  10. package/dist/{16162.93e0b5dcd33d9227fd60.bundle.js.map → 16162.dca58b88b4d145a7fcf7.bundle.js.map} +1 -1
  11. package/dist/{20287.c6714e25dfba36a7abff.bundle.js → 20287.22c94209c4a5b0aa569b.bundle.js} +2 -2
  12. package/dist/{20287.c6714e25dfba36a7abff.bundle.js.map → 20287.22c94209c4a5b0aa569b.bundle.js.map} +1 -1
  13. package/dist/{21136.92d89e72506eccad7d06.bundle.js → 21136.b0b60f89d0aecc146390.bundle.js} +2 -2
  14. package/dist/{21136.92d89e72506eccad7d06.bundle.js.map → 21136.b0b60f89d0aecc146390.bundle.js.map} +1 -1
  15. package/dist/{21142.3f3aa7d3ef22074e49a3.bundle.js → 21142.c1026a9490be83c3be64.bundle.js} +2 -2
  16. package/dist/{21142.3f3aa7d3ef22074e49a3.bundle.js.map → 21142.c1026a9490be83c3be64.bundle.js.map} +1 -1
  17. package/dist/{21170.43dc0783a81039cd2eca.bundle.js → 21170.4f1089c6ecb858d32307.bundle.js} +2 -2
  18. package/dist/{21170.43dc0783a81039cd2eca.bundle.js.map → 21170.4f1089c6ecb858d32307.bundle.js.map} +1 -1
  19. package/dist/{21195.e4da0e7735e18c1c24d7.bundle.js → 21195.4025ee868703a7826ae6.bundle.js} +2 -2
  20. package/dist/{21195.e4da0e7735e18c1c24d7.bundle.js.map → 21195.4025ee868703a7826ae6.bundle.js.map} +1 -1
  21. package/dist/24785.ff0689efffa1540e2904.bundle.js +2 -0
  22. package/dist/24785.ff0689efffa1540e2904.bundle.js.map +1 -0
  23. package/dist/25090.a073fc84568f38c40d67.bundle.js +2 -0
  24. package/dist/25090.a073fc84568f38c40d67.bundle.js.map +1 -0
  25. package/dist/{25747.5c8e79ac3088d275e4f6.bundle.js → 25747.d8d9c4a6472dddad834f.bundle.js} +2 -2
  26. package/dist/{25747.5c8e79ac3088d275e4f6.bundle.js.map → 25747.d8d9c4a6472dddad834f.bundle.js.map} +1 -1
  27. package/dist/{27580.70186989dfc08ef0506b.bundle.js → 27580.af47ce7d030e916c7a4e.bundle.js} +2 -2
  28. package/dist/{27580.70186989dfc08ef0506b.bundle.js.map → 27580.af47ce7d030e916c7a4e.bundle.js.map} +1 -1
  29. package/dist/{31636.4e5d6e986e990a12facf.bundle.js → 31636.fbeed6706183663eeee2.bundle.js} +2 -2
  30. package/dist/{31636.4e5d6e986e990a12facf.bundle.js.map → 31636.fbeed6706183663eeee2.bundle.js.map} +1 -1
  31. package/dist/{32489.ca36d6c8822d9a770a8b.bundle.js → 32489.fafc19e8e0eb964a3ec5.bundle.js} +2 -2
  32. package/dist/{32489.ca36d6c8822d9a770a8b.bundle.js.map → 32489.fafc19e8e0eb964a3ec5.bundle.js.map} +1 -1
  33. package/dist/34330.298b3fb714ce7fc0bda1.bundle.js +2 -0
  34. package/dist/34330.298b3fb714ce7fc0bda1.bundle.js.map +1 -0
  35. package/dist/{34495.7b0a4828632863d0fdd4.bundle.js → 34495.bcc635daf309f60ba23b.bundle.js} +2 -2
  36. package/dist/{34495.7b0a4828632863d0fdd4.bundle.js.map → 34495.bcc635daf309f60ba23b.bundle.js.map} +1 -1
  37. package/dist/36737.9d37e743918e6d45c10b.bundle.js +2 -0
  38. package/dist/36737.9d37e743918e6d45c10b.bundle.js.map +1 -0
  39. package/dist/{38360.1361bf281a19ba415d10.bundle.js → 38360.55d84891b7ad65b37108.bundle.js} +2 -2
  40. package/dist/{38360.1361bf281a19ba415d10.bundle.js.map → 38360.55d84891b7ad65b37108.bundle.js.map} +1 -1
  41. package/dist/{38644.d90ed562660e1bfeddd3.bundle.js → 38644.62bda02822616b30f0c7.bundle.js} +2 -2
  42. package/dist/{38644.d90ed562660e1bfeddd3.bundle.js.map → 38644.62bda02822616b30f0c7.bundle.js.map} +1 -1
  43. package/dist/{38843.297cc7a018bd4df634e8.bundle.js → 38843.28a56aadf139c5f83a07.bundle.js} +2 -2
  44. package/dist/{38843.297cc7a018bd4df634e8.bundle.js.map → 38843.28a56aadf139c5f83a07.bundle.js.map} +1 -1
  45. package/dist/39448.10bcf72a104ce8276328.bundle.js +2 -0
  46. package/dist/39448.10bcf72a104ce8276328.bundle.js.map +1 -0
  47. package/dist/{39518.8547d972593f8717ee28.bundle.js → 39518.24cdd6c870b5b026f43b.bundle.js} +2 -2
  48. package/dist/{39518.8547d972593f8717ee28.bundle.js.map → 39518.24cdd6c870b5b026f43b.bundle.js.map} +1 -1
  49. package/dist/{39539.9693149f20106d3b0884.bundle.js → 39539.cb091b6ad5074999b72d.bundle.js} +2 -2
  50. package/dist/{39539.9693149f20106d3b0884.bundle.js.map → 39539.cb091b6ad5074999b72d.bundle.js.map} +1 -1
  51. package/dist/{39874.6ca23ead080b52dc1bc6.bundle.js → 39874.ff510b958fcdbda4db58.bundle.js} +2 -2
  52. package/dist/39874.ff510b958fcdbda4db58.bundle.js.map +1 -0
  53. package/dist/4125.fd7946ca01aa51acba15.bundle.js +2 -0
  54. package/dist/4125.fd7946ca01aa51acba15.bundle.js.map +1 -0
  55. package/dist/{41453.f28b2cc3e8e80afc8871.bundle.js → 41453.b696ac82dcadda585f04.bundle.js} +2 -2
  56. package/dist/{41453.f28b2cc3e8e80afc8871.bundle.js.map → 41453.b696ac82dcadda585f04.bundle.js.map} +1 -1
  57. package/dist/{41621.d1b7d799116c07df17d1.bundle.js → 41621.68c5ebc2104a62e2b41d.bundle.js} +2 -2
  58. package/dist/41621.68c5ebc2104a62e2b41d.bundle.js.map +1 -0
  59. package/dist/{42129.64ead03391752af23325.bundle.js → 42129.f9f2bafc4520aad7f942.bundle.js} +2 -2
  60. package/dist/{42129.64ead03391752af23325.bundle.js.map → 42129.f9f2bafc4520aad7f942.bundle.js.map} +1 -1
  61. package/dist/42143.1483a9470e09485cc4e4.bundle.js +2 -0
  62. package/dist/42143.1483a9470e09485cc4e4.bundle.js.map +1 -0
  63. package/dist/{44444.77a79ddd001ef03216fc.bundle.js → 44444.153ba656276a2f1bfdc3.bundle.js} +2 -2
  64. package/dist/{44444.77a79ddd001ef03216fc.bundle.js.map → 44444.153ba656276a2f1bfdc3.bundle.js.map} +1 -1
  65. package/dist/{45843.49565fdfa9b426eeb208.bundle.js → 45843.2fb1782023f0992f82c1.bundle.js} +2 -2
  66. package/dist/{45843.49565fdfa9b426eeb208.bundle.js.map → 45843.2fb1782023f0992f82c1.bundle.js.map} +1 -1
  67. package/dist/51087.2e79fab6ad7c1282ee52.bundle.js +2 -0
  68. package/dist/51087.2e79fab6ad7c1282ee52.bundle.js.map +1 -0
  69. package/dist/{55862.9f799792bc876532e44f.bundle.js → 55862.88796a9db69e193b8b83.bundle.js} +2 -2
  70. package/dist/{55862.9f799792bc876532e44f.bundle.js.map → 55862.88796a9db69e193b8b83.bundle.js.map} +1 -1
  71. package/dist/57952.b096d19a802e06030ef0.bundle.js +2 -0
  72. package/dist/57952.b096d19a802e06030ef0.bundle.js.map +1 -0
  73. package/dist/{58306.2a9393e91eef386c5162.bundle.js → 58306.f76e839a5a73f4f4e23a.bundle.js} +2 -2
  74. package/dist/{58306.2a9393e91eef386c5162.bundle.js.map → 58306.f76e839a5a73f4f4e23a.bundle.js.map} +1 -1
  75. package/dist/{59718.f1ae3d1480c7179c57f0.bundle.js → 59718.dfd5982de2b39ccaa2ee.bundle.js} +2 -2
  76. package/dist/59718.dfd5982de2b39ccaa2ee.bundle.js.map +1 -0
  77. package/dist/67232.5a23ef1e641a2ca030c6.bundle.js +2 -0
  78. package/dist/67232.5a23ef1e641a2ca030c6.bundle.js.map +1 -0
  79. package/dist/{67888.da842e9221435c4ce47f.bundle.js → 67888.1537da0fa115fd7a2f06.bundle.js} +2 -2
  80. package/dist/{67888.da842e9221435c4ce47f.bundle.js.map → 67888.1537da0fa115fd7a2f06.bundle.js.map} +1 -1
  81. package/dist/68685.3ec66ceae3e494eba19b.bundle.js +2 -0
  82. package/dist/68685.3ec66ceae3e494eba19b.bundle.js.map +1 -0
  83. package/dist/{69112.817cf7b4d2911108c736.bundle.js → 69112.82e4d57df53e40b54050.bundle.js} +2 -2
  84. package/dist/69112.82e4d57df53e40b54050.bundle.js.map +1 -0
  85. package/dist/{70938.aee60e09777981a03d4c.bundle.js → 70938.fd6dd4e05b512128a074.bundle.js} +2 -2
  86. package/dist/{70938.aee60e09777981a03d4c.bundle.js.map → 70938.fd6dd4e05b512128a074.bundle.js.map} +1 -1
  87. package/dist/{72379.6eecf9bfd4bd4c65b659.bundle.js → 72379.207930bac55b212354ae.bundle.js} +2 -2
  88. package/dist/{72379.6eecf9bfd4bd4c65b659.bundle.js.map → 72379.207930bac55b212354ae.bundle.js.map} +1 -1
  89. package/dist/{73667.942b41c1d4ad078e2a6a.bundle.js → 73667.f42971a7477d6744c54c.bundle.js} +2 -2
  90. package/dist/{73667.942b41c1d4ad078e2a6a.bundle.js.map → 73667.f42971a7477d6744c54c.bundle.js.map} +1 -1
  91. package/dist/{73793.67628222a731868e5ddc.bundle.js → 73793.adf7b10d53a8ee7fa07c.bundle.js} +2 -2
  92. package/dist/{73793.67628222a731868e5ddc.bundle.js.map → 73793.adf7b10d53a8ee7fa07c.bundle.js.map} +1 -1
  93. package/dist/74106.f94ca66e9fc021789d6a.bundle.js +2 -0
  94. package/dist/74106.f94ca66e9fc021789d6a.bundle.js.map +1 -0
  95. package/dist/{75282.eae2387932c55dc997e3.bundle.js → 75282.f097da30576bae97c906.bundle.js} +2 -2
  96. package/dist/{75282.eae2387932c55dc997e3.bundle.js.map → 75282.f097da30576bae97c906.bundle.js.map} +1 -1
  97. package/dist/{75849.f5d1a50a8b03fb10008f.bundle.js → 75849.9c78b9889eccbaee7ae0.bundle.js} +2 -2
  98. package/dist/{75849.f5d1a50a8b03fb10008f.bundle.js.map → 75849.9c78b9889eccbaee7ae0.bundle.js.map} +1 -1
  99. package/dist/{78250.52061302438b3c0323d3.bundle.js → 78250.9f4b0c688bdb06967ed6.bundle.js} +2 -2
  100. package/dist/{78250.52061302438b3c0323d3.bundle.js.map → 78250.9f4b0c688bdb06967ed6.bundle.js.map} +1 -1
  101. package/dist/79329.69815208f7a0b1678dc2.bundle.js +2 -0
  102. package/dist/79329.69815208f7a0b1678dc2.bundle.js.map +1 -0
  103. package/dist/{82926.32c69a801c99f029c69f.bundle.js → 82926.ce06c4bb3d76b9fe5fa9.bundle.js} +2 -2
  104. package/dist/{82926.32c69a801c99f029c69f.bundle.js.map → 82926.ce06c4bb3d76b9fe5fa9.bundle.js.map} +1 -1
  105. package/dist/86142.3f4acbd124c99af11e48.bundle.js +2 -0
  106. package/dist/86142.3f4acbd124c99af11e48.bundle.js.map +1 -0
  107. package/dist/86639.5584db5b403656b75ad4.bundle.js +2 -0
  108. package/dist/86639.5584db5b403656b75ad4.bundle.js.map +1 -0
  109. package/dist/89695.9a36bd7b51d76634b902.bundle.js +2 -0
  110. package/dist/89695.9a36bd7b51d76634b902.bundle.js.map +1 -0
  111. package/dist/{9062.8a9659bd978a5ac7a1e2.bundle.js → 9062.91ba683ec5a6cb53c23f.bundle.js} +2 -2
  112. package/dist/{9062.8a9659bd978a5ac7a1e2.bundle.js.map → 9062.91ba683ec5a6cb53c23f.bundle.js.map} +1 -1
  113. package/dist/94519.1b7b699d10f1278380c3.bundle.js +2 -0
  114. package/dist/94519.1b7b699d10f1278380c3.bundle.js.map +1 -0
  115. package/dist/{95953.f930b9ba889a452ca771.bundle.js → 95953.4ea6a7c68a22779ba299.bundle.js} +2 -2
  116. package/dist/95953.4ea6a7c68a22779ba299.bundle.js.map +1 -0
  117. package/dist/98860.5ade579c8f05a0df416b.bundle.js +2 -0
  118. package/dist/98860.5ade579c8f05a0df416b.bundle.js.map +1 -0
  119. package/dist/{99448.66df63e0704114d6127a.bundle.js → 99448.b2524aa8fdf2f3aee82a.bundle.js} +2 -2
  120. package/dist/{99448.66df63e0704114d6127a.bundle.js.map → 99448.b2524aa8fdf2f3aee82a.bundle.js.map} +1 -1
  121. package/dist/api/ontotext-workbench-api.js +1 -1
  122. package/dist/api/ontotext-workbench-api.js.map +1 -1
  123. package/dist/css/ttyg/agent-settings-modal.css +1 -1
  124. package/dist/i18n/locale-en.json +1 -0
  125. package/dist/i18n/locale-fr.json +1 -0
  126. package/dist/index.html +8 -8
  127. package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
  128. package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
  129. package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
  130. package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
  131. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  132. package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
  133. package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +1 -1
  134. package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
  135. package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
  136. package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
  137. package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
  138. package/dist/js/angular/core/templates/search-resource-input.html +1 -1
  139. package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
  140. package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
  141. package/dist/js/angular/graphql/templates/graphql-playground.html +1 -1
  142. package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
  143. package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
  144. package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
  145. package/dist/js/angular/security/templates/user.html +2 -2
  146. package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
  147. package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
  148. package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
  149. package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
  150. package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
  151. package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
  152. package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +4 -3
  153. package/dist/js/angular/ttyg/templates/modal/external-integration-configuration-modal.html +1 -1
  154. package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
  155. package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
  156. package/dist/{legacyWorkbench.a918490fca19fd205bef.js → legacyWorkbench.c5245455051fd0bab730.js} +3 -3
  157. package/dist/{legacyWorkbench.a918490fca19fd205bef.js.map → legacyWorkbench.c5245455051fd0bab730.js.map} +1 -1
  158. package/dist/{main.5a06ce3271fcd9cb93e7.js → main.fa0b99f721588e894d1d.js} +3 -3
  159. package/dist/{main.5a06ce3271fcd9cb93e7.js.map → main.fa0b99f721588e894d1d.js.map} +1 -1
  160. package/dist/pages/aclmanagement.html +2 -2
  161. package/dist/pages/autocomplete.html +1 -1
  162. package/dist/pages/choose-repository-type.html +1 -1
  163. package/dist/pages/cluster-management/clusterInfo.html +3 -3
  164. package/dist/pages/create-index.html +1 -1
  165. package/dist/pages/dependencies.html +1 -1
  166. package/dist/pages/domainRangeInfo.html +2 -2
  167. package/dist/pages/edit.html +1 -1
  168. package/dist/pages/explore.html +1 -1
  169. package/dist/pages/export.html +1 -1
  170. package/dist/pages/find.html +1 -1
  171. package/dist/pages/graph-config/saveGraphConfig.html +8 -8
  172. package/dist/pages/graphs-visualizations.html +7 -7
  173. package/dist/pages/guides.html +1 -1
  174. package/dist/pages/import.html +2 -2
  175. package/dist/pages/jdbc-create.html +1 -1
  176. package/dist/pages/login.html +1 -1
  177. package/dist/pages/monitor/backup-and-restore.html +1 -1
  178. package/dist/pages/monitor/queries.html +1 -1
  179. package/dist/pages/monitor/resources.html +1 -1
  180. package/dist/pages/namespaces.html +2 -2
  181. package/dist/pages/plugins.html +1 -1
  182. package/dist/pages/rdfClassHierarchyInfo.html +7 -7
  183. package/dist/pages/rdfrank.html +2 -2
  184. package/dist/pages/repositories.html +1 -1
  185. package/dist/pages/repository.html +1 -1
  186. package/dist/pages/similarity-indexes.html +1 -1
  187. package/dist/pages/sparql-editor.html +1 -1
  188. package/dist/pages/sparql-template-create.html +1 -1
  189. package/dist/pages/ux-test1.html +2 -2
  190. package/dist/pages/webapi.html +2 -2
  191. package/dist/plugins.js +1 -1
  192. package/dist/res/swagger5/index.html +11 -11
  193. package/dist/shared-components/cjs/onto-layout.cjs.entry.js +1 -1
  194. package/dist/shared-components/cjs/onto-layout.cjs.entry.js.map +1 -1
  195. package/dist/shared-components/cjs/onto-layout.entry.cjs.js.map +1 -1
  196. package/dist/shared-components/collection/components/onto-layout/onto-layout.js +1 -1
  197. package/dist/shared-components/collection/components/onto-layout/onto-layout.js.map +1 -1
  198. package/dist/shared-components/esm/onto-layout.entry.js +1 -1
  199. package/dist/shared-components/esm/onto-layout.entry.js.map +1 -1
  200. package/dist/shared-components/shared-components/onto-layout.entry.esm.js.map +1 -1
  201. package/dist/shared-components/shared-components/p-504c7e8e.entry.js +1 -0
  202. package/dist/shared-components/shared-components/p-504c7e8e.entry.js.map +1 -0
  203. package/dist/shared-components/shared-components/shared-components.esm.js +1 -1
  204. package/package.json +1 -1
  205. package/dist/13486.58f89862c40c0f84cb09.bundle.js.map +0 -1
  206. package/dist/13813.a49f3fcf17ecd10c738e.bundle.js +0 -2
  207. package/dist/13813.a49f3fcf17ecd10c738e.bundle.js.map +0 -1
  208. package/dist/24785.07db24a70db7d20d268a.bundle.js +0 -2
  209. package/dist/24785.07db24a70db7d20d268a.bundle.js.map +0 -1
  210. package/dist/25090.8336e69433235ea3dfc6.bundle.js +0 -2
  211. package/dist/25090.8336e69433235ea3dfc6.bundle.js.map +0 -1
  212. package/dist/34330.a2a4211b14d118bd4c03.bundle.js +0 -2
  213. package/dist/34330.a2a4211b14d118bd4c03.bundle.js.map +0 -1
  214. package/dist/36737.0f3e0ff6942f79d49804.bundle.js +0 -2
  215. package/dist/36737.0f3e0ff6942f79d49804.bundle.js.map +0 -1
  216. package/dist/39448.a6ec42f0d72642fe9ee9.bundle.js +0 -2
  217. package/dist/39448.a6ec42f0d72642fe9ee9.bundle.js.map +0 -1
  218. package/dist/39874.6ca23ead080b52dc1bc6.bundle.js.map +0 -1
  219. package/dist/4125.28d3c85c122f270c9b2c.bundle.js +0 -2
  220. package/dist/4125.28d3c85c122f270c9b2c.bundle.js.map +0 -1
  221. package/dist/41621.d1b7d799116c07df17d1.bundle.js.map +0 -1
  222. package/dist/42143.87a6b0a089da7a2318dd.bundle.js +0 -2
  223. package/dist/42143.87a6b0a089da7a2318dd.bundle.js.map +0 -1
  224. package/dist/51087.8bc01b7861b40bc7082d.bundle.js +0 -2
  225. package/dist/51087.8bc01b7861b40bc7082d.bundle.js.map +0 -1
  226. package/dist/57952.afa9e0608388e5bae876.bundle.js +0 -2
  227. package/dist/57952.afa9e0608388e5bae876.bundle.js.map +0 -1
  228. package/dist/59718.f1ae3d1480c7179c57f0.bundle.js.map +0 -1
  229. package/dist/67232.ca7667a39c74efdb90e1.bundle.js +0 -2
  230. package/dist/67232.ca7667a39c74efdb90e1.bundle.js.map +0 -1
  231. package/dist/68685.314faeaa55a342568c0b.bundle.js +0 -2
  232. package/dist/68685.314faeaa55a342568c0b.bundle.js.map +0 -1
  233. package/dist/69112.817cf7b4d2911108c736.bundle.js.map +0 -1
  234. package/dist/74106.82ee18377b0ae14c6a7f.bundle.js +0 -2
  235. package/dist/74106.82ee18377b0ae14c6a7f.bundle.js.map +0 -1
  236. package/dist/79329.d966e9755b8abe0219dc.bundle.js +0 -2
  237. package/dist/79329.d966e9755b8abe0219dc.bundle.js.map +0 -1
  238. package/dist/86142.ed366f6953d750eb99b8.bundle.js +0 -2
  239. package/dist/86142.ed366f6953d750eb99b8.bundle.js.map +0 -1
  240. package/dist/86639.6cf8f34680ceacc7298d.bundle.js +0 -2
  241. package/dist/86639.6cf8f34680ceacc7298d.bundle.js.map +0 -1
  242. package/dist/89695.2d49f93862aee2cf23af.bundle.js +0 -2
  243. package/dist/89695.2d49f93862aee2cf23af.bundle.js.map +0 -1
  244. package/dist/94519.f41b6f4fb1b1bb6e3bf5.bundle.js +0 -2
  245. package/dist/94519.f41b6f4fb1b1bb6e3bf5.bundle.js.map +0 -1
  246. package/dist/95953.f930b9ba889a452ca771.bundle.js.map +0 -1
  247. package/dist/98860.30ea9a212cf6e622ec36.bundle.js +0 -2
  248. package/dist/98860.30ea9a212cf6e622ec36.bundle.js.map +0 -1
  249. package/dist/shared-components/shared-components/p-28a4ce8f.entry.js +0 -1
  250. package/dist/shared-components/shared-components/p-28a4ce8f.entry.js.map +0 -1
  251. /package/dist/{legacyWorkbench.a918490fca19fd205bef.js.LICENSE.txt → legacyWorkbench.c5245455051fd0bab730.js.LICENSE.txt} +0 -0
  252. /package/dist/{main.5a06ce3271fcd9cb93e7.js.LICENSE.txt → main.fa0b99f721588e894d1d.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- export const __webpack_id__=89695;export const __webpack_ids__=[89695];export const __webpack_modules__={89695:()=>{PluginRegistry.add("guide.step",[{guideBlockName:"sparql-search-method",getSteps:(e,t)=>{const l=t.GuideUtils;e.mainAction="sparql-search-method";const o=e.disable,a=l.getGuideElementSelector("query-method-sparql_search-input");return o?[{guideBlockName:"clickable-element",options:angular.extend({},{content:"guide.step_plugin.sparql-search-method.disable-toggle",class:"toggle-sparql-search-guide-dialog",url:"/ttyg",showOn:()=>l.isChecked(a),elementSelector:l.getGuideElementSelector("query-method-sparql_search"),clickableElementSelector:a,onNextValidate:()=>Promise.resolve(!l.isChecked(a))},e)}]:[{guideBlockName:"info-message",options:angular.extend({},{content:"guide.step_plugin.sparql-search-method.content",class:"info-sparql-search-guide-dialog",url:"/ttyg",disablePreviousFlow:!0},e)},{guideBlockName:"clickable-element",options:angular.extend({},{content:"guide.step_plugin.sparql-search-method.enable-toggle",class:"toggle-sparql-search-guide-dialog",url:"/ttyg",elementSelector:l.getGuideElementSelector("query-method-sparql_search"),clickableElementSelector:a,onNextValidate:()=>Promise.resolve(l.isChecked(a))},e)},{guideBlockName:"clickable-element",options:angular.extend({},{content:"guide.step_plugin.sparql-search-method.enable-ontology-from-graph",class:"enable-ontology-from-graph-guide-dialog",url:"/ttyg",elementSelector:l.getGuideElementSelector("sparql-ontology-graph-option"),clickableElementSelector:l.getGuideElementSelector("sparql-ontology-graph-option-input"),onNextValidate:()=>Promise.resolve(l.isChecked(l.getGuideElementSelector("sparql-ontology-graph-option-input")))},e)},{guideBlockName:"input-element",options:angular.extend({},{content:"guide.step_plugin.sparql-search-method.type-ontology-graph-name",class:"input-ontology-graph-name-guide-dialog",url:"/ttyg",elementSelector:l.getGuideElementSelector("sparql-ontology-graph-input"),onNextValidate:()=>Promise.resolve(l.validateTextInput(l.getGuideElementSelector("sparql-ontology-graph-input"),e.ontologyGraph,!1))},e)}]}}])}};
2
- //# sourceMappingURL=89695.2d49f93862aee2cf23af.bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"89695.2d49f93862aee2cf23af.bundle.js","mappings":"oHAAAA,eAAeC,IAAI,aAAc,CAC7B,CACIC,eAAgB,uBAChBC,SAAUA,CAACC,EAASC,KAChB,MAAMC,EAAaD,EAASC,WAC5BF,EAAQG,WAAa,uBAErB,MAAMC,EAAkBJ,EAAQK,QAC1BC,EAAiBJ,EAAWK,wBAAwB,oCAE1D,OAAIH,EACO,CAAC,CACJN,eAAgB,oBAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBC,QAAS,wDACTC,MAAO,oCACPC,IAAK,QACLC,OAAQA,IAAMX,EAAWY,UAAUR,GACnCS,gBAAiBb,EAAWK,wBAAwB,8BACpDS,yBAA0BV,EAC1BW,eAAgBA,IAAMC,QAAQC,SAASjB,EAAWY,UAAUR,KAC7DN,KAIJ,CACH,CACIF,eAAgB,eAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBC,QAAS,iDACTC,MAAO,kCACPC,IAAK,QACLQ,qBAAqB,GACtBpB,IAEP,CACIF,eAAgB,oBAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBC,QAAS,uDACTC,MAAO,oCACPC,IAAK,QACLG,gBAAiBb,EAAWK,wBAAwB,8BACpDS,yBAA0BV,EAC1BW,eAAgBA,IAAMC,QAAQC,QAAQjB,EAAWY,UAAUR,KAC5DN,IAEP,CACIF,eAAgB,oBAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBC,QAAS,oEACTC,MAAO,0CACPC,IAAK,QACLG,gBAAiBb,EAAWK,wBAAwB,gCACpDS,yBAA0Bd,EAAWK,wBAAwB,sCAC7DU,eAAgBA,IAAMC,QAAQC,QAAQjB,EAAWY,UAAUZ,EAAWK,wBAAwB,yCAC/FP,IAEP,CACIF,eAAgB,gBAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBC,QAAS,kEACTC,MAAO,yCACPC,IAAK,QACLG,gBAAiBb,EAAWK,wBAAwB,+BACpDU,eAAgBA,IAAMC,QAAQC,QAAQjB,EAAWmB,kBAAkBnB,EAAWK,wBAAwB,+BAAgCP,EAAQsB,eAAe,KAC9JtB,Q","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/guides/steps/complex/ttyg/common/sparql-search-method/plugin.js"],"sourcesContent":["PluginRegistry.add('guide.step', [\n {\n guideBlockName: 'sparql-search-method',\n getSteps: (options, services) => {\n const GuideUtils = services.GuideUtils;\n options.mainAction = 'sparql-search-method';\n\n const shouldToggleOff = options.disable;\n const toggleSelector = GuideUtils.getGuideElementSelector('query-method-sparql_search-input');\n\n if (shouldToggleOff) {\n return [{\n guideBlockName: 'clickable-element',\n options: angular.extend({}, {\n content: 'guide.step_plugin.sparql-search-method.disable-toggle',\n class: 'toggle-sparql-search-guide-dialog',\n url: '/ttyg',\n showOn: () => GuideUtils.isChecked(toggleSelector),\n elementSelector: GuideUtils.getGuideElementSelector('query-method-sparql_search'),\n clickableElementSelector: toggleSelector,\n onNextValidate: () => Promise.resolve(!GuideUtils.isChecked(toggleSelector))\n }, options)\n }]\n }\n\n return [\n {\n guideBlockName: 'info-message',\n options: angular.extend({}, {\n content: `guide.step_plugin.sparql-search-method.content`,\n class: 'info-sparql-search-guide-dialog',\n url: '/ttyg',\n disablePreviousFlow: true\n }, options)\n },\n {\n guideBlockName: 'clickable-element',\n options: angular.extend({}, {\n content: 'guide.step_plugin.sparql-search-method.enable-toggle',\n class: 'toggle-sparql-search-guide-dialog',\n url: '/ttyg',\n elementSelector: GuideUtils.getGuideElementSelector('query-method-sparql_search'),\n clickableElementSelector: toggleSelector,\n onNextValidate: () => Promise.resolve(GuideUtils.isChecked(toggleSelector))\n }, options)\n },\n {\n guideBlockName: 'clickable-element',\n options: angular.extend({}, {\n content: 'guide.step_plugin.sparql-search-method.enable-ontology-from-graph',\n class: 'enable-ontology-from-graph-guide-dialog',\n url: '/ttyg',\n elementSelector: GuideUtils.getGuideElementSelector('sparql-ontology-graph-option'),\n clickableElementSelector: GuideUtils.getGuideElementSelector('sparql-ontology-graph-option-input'),\n onNextValidate: () => Promise.resolve(GuideUtils.isChecked(GuideUtils.getGuideElementSelector('sparql-ontology-graph-option-input')))\n }, options)\n },\n {\n guideBlockName: 'input-element',\n options: angular.extend({}, {\n content: `guide.step_plugin.sparql-search-method.type-ontology-graph-name`,\n class: 'input-ontology-graph-name-guide-dialog',\n url: '/ttyg',\n elementSelector: GuideUtils.getGuideElementSelector('sparql-ontology-graph-input'),\n onNextValidate: () => Promise.resolve(GuideUtils.validateTextInput(GuideUtils.getGuideElementSelector('sparql-ontology-graph-input'), options.ontologyGraph, false))\n }, options)\n }\n ];\n }\n }\n]);\n"],"names":["PluginRegistry","add","guideBlockName","getSteps","options","services","GuideUtils","mainAction","shouldToggleOff","disable","toggleSelector","getGuideElementSelector","angular","extend","content","class","url","showOn","isChecked","elementSelector","clickableElementSelector","onNextValidate","Promise","resolve","disablePreviousFlow","validateTextInput","ontologyGraph"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- export const __webpack_id__=94519;export const __webpack_ids__=[48184,48581,53174,57952,70962,94519];export const __webpack_modules__={48184:(t,e,n)=>{n.r(e),n.d(e,{NodeState:()=>s});const s={LEADER:"LEADER",FOLLOWER:"FOLLOWER",CANDIDATE:"CANDIDATE",OUT_OF_SYNC_BLANK:"OUT_OF_SYNC_BLANK"}},53174:(t,e,n)=>{n.r(e),n.d(e,{CLUSTER_MANAGEMENT_CONSTANTS:()=>o});var s=n(48184),a=n(70962);const o={getLegendNodes:function(){const t=[];return t.push({nodeState:s.NodeState.LEADER,customText:"node_state_leader"}),t.push({nodeState:s.NodeState.FOLLOWER,customText:"node_state_follower"}),t.push({nodeState:s.NodeState.OUT_OF_SYNC_BLANK,customText:"node_state_out_of_sync"}),t.forEach((t,e)=>t.id=e),t},getSyncStatuses:()=>[{labelKey:"node_state_candidate",classes:"icon-any",icon:""},{labelKey:"node_state_no_cluster",classes:"close",icon:"X"},{labelKey:"link_state_out_of_sync",classes:"icon-any",icon:""},{labelKey:"node_state_no_connection",classes:"icon-any",icon:""},{labelKey:"node_state_read_only",classes:"icon-any",icon:""},{labelKey:"node_state_restricted",classes:"icon-any",icon:""},{labelKey:"recovery_state.searching_for_node",classes:"fa-d3",icon:""},{labelKey:"recovery_state.waiting_for_snapshot",classes:"fa-d3",icon:""},{labelKey:"recovery_state.building_snapshot",classes:"fa-d3 fa-solid",icon:""},{labelKey:"recovery_state.sending_snapshot",classes:"fa-d3 fa-solid",icon:""},{labelKey:"recovery_state.receiving_snapshot",classes:"fa-d3 fa-solid",icon:""},{labelKey:"recovery_state.applying_snapshot",classes:"fa-d3 fa-solid",icon:""}],getLegendLinks:function(){const t=[];return t.push({status:a.LinkState.IN_SYNC,linkTypeKey:"link_state_in_sync"}),t.push({status:a.LinkState.SYNCING,linkTypeKey:"link_state_syncing"}),t.push({status:a.LinkState.OUT_OF_SYNC,linkTypeKey:"link_state_out_of_sync"}),t.push({status:a.LinkState.RECEIVING_SNAPSHOT,linkTypeKey:"link_state_receiving_snapshot"}),t.forEach((t,e)=>t.id=e),t},SVG_NODE_WIDTH:15,PADDING_LEFT:12,PADDING_TOP:12,TITLE_PADDING_TOP:15,TITLE_FONT_SIZE:13,TITLE_FONT_WEIGHT:700,TITLE_COLOR:"#000000",TITLE_LINE_HEIGHT:18,LEGEND_ITEM_FONT_SIZE:11,LEGEND_ITEM_ICON_FONT_SIZE:15,LEGEND_ITEM_FONT_WEIGHT:400,LEGEND_ITEM_COLOR:"#000000",LEGEND_ITEM_LINE_HEIGHT:13,LEGEND_ITEM_PADDING_LEFT:27,LEGEND_ITEMS_PADDING_TOP:40,LEGEND_ITEM_PADDING_TOP:8,BACKGROUND_PADDING:24}},57952:(t,e,n)=>{n.r(e),n.d(e,{ARROW_CONFIG:()=>p,addArrowHead:()=>G,createClusterSvgElement:()=>l,createClusterZone:()=>T,createHexagon:()=>m,createLinks:()=>g,createNodes:()=>O,moveElement:()=>u,positionNodesOnClusterZone:()=>R,removeEventListeners:()=>x,setArrowLink:()=>f,setCreateClusterZone:()=>d,setLinkColor:()=>M,setLinkStyle:()=>D,updateClusterZoneLabels:()=>S,updateLinks:()=>y,updateNodes:()=>A});var s=n(70962),a=n(98980),o=n(93462);const r={line:o.line,select:o.select},N={ontoOrange:"var(--primary-color)",ontoBlue:"var(--secondary-color)",ontoGreen:"var(--tertiary-color)",ontoGrey:"var(--gray-color)"},_={[s.LinkState.IN_SYNC]:N.ontoBlue,[s.LinkState.SYNCING]:N.ontoBlue,[s.LinkState.OUT_OF_SYNC]:N.ontoGrey,[s.LinkState.RECEIVING_SNAPSHOT]:N.ontoBlue},c={[s.LinkState.IN_SYNC]:"none",[s.LinkState.SYNCING]:"10 10",[s.LinkState.OUT_OF_SYNC]:"10 10",[s.LinkState.RECEIVING_SNAPSHOT]:"10 10"},E={FONT_AWESOME:"FONT_AWESOME",ICOMOON:"ICOMOON"},i=40;function l(t){return r.select(t).append("svg").classed("cluster-diagram",!0)}function T(t){const e=t.append("g");return e.append("circle").classed("cluster-zone",!0).style("fill","transparent").style("stroke-width","4"),e}function d(t,e,n,s=!1){if(e.select(".cluster-zone").classed("no-cluster",!t).classed("has-access",s),t)e.selectAll("#no-cluster-zone").remove();else{const t=e.append("g").attr("id","no-cluster-zone");t.append("text").attr("id","no-cluster-label").text(n.no_cluster_configured).attr("y",-50).classed("h2",!0).style("text-anchor","middle"),s&&t.append("text").attr("id","create-cluster-label").classed("h3",!0).text(n.create_cluster_btn).style("text-anchor","middle"),t.append("text").attr("y",130).attr("class","icon-any repo").attr("fill",N.ontoOrange).style("text-anchor","middle").classed("settings-icon",!0).text("")}}function S(t,e,n){t||(e.select("#no-cluster-zone #no-cluster-label").text(n.no_cluster_configured),e.select("#no-cluster-zone #create-cluster-label").text(n.create_cluster_btn))}function u(t,e,n){t.attr("transform",()=>`translate(${e}, ${n})`)}function O(t,e,n){const s=t.enter().append("g").attr("id","node-group").classed("legend",n),a=s.merge(t).attr("id","node-group").classed("legend",n);return m(s,e),t.exit().remove(),s.append("text").attr("class","icon-any node-icon"),n||function(t,e){const n=t.append("g");n.append("rect").attr("class","id-host-background").attr("rx",6),n.append("rect").attr("class","node-info-background").attr("rx",6),n.append("text").attr("y",e+25).attr("class","id id-host"),n.append("text").attr("y",e+55).attr("class","node-info-text")}(s,e),a}function A(t){!function(t){t.select(".node-icon").each(function(t){const e=(n=t,(0,a.isEmpty)(n.recoveryStatus)?function(t){return I[t.nodeState]||{icon:"",font:""}}(t):function(t){const e=t.recoveryStatus;return e&&e.state&&L[e.state]||{icon:"",font:""}}(t));var n;r.select(this).classed("icon-any",e.font===E.ICOMOON).classed("fa-d3",e.font===E.FONT_AWESOME).text(e.icon)})}(t),function(t){t.select(".node.member").classed("leader",t=>t.nodeState===s.NodeState.LEADER).classed("follower",t=>t.nodeState===s.NodeState.FOLLOWER).classed("candidate",t=>t.nodeState===s.NodeState.CANDIDATE).classed("other",t=>t.nodeState!==s.NodeState.LEADER&&t.nodeState!==s.NodeState.FOLLOWER&&t.nodeState!==s.NodeState.CANDIDATE)}(t),function(t){t.select(".id.id-host").each(function(t){t.labelNode=this}).text(function(t){return t.hostname}),t.select(".id-host-background").attr("width",function(t){return r.select(t.labelNode).node().getBBox().width+10}).attr("height",function(t){return r.select(t.labelNode).node().getBBox().height+10}).attr("x",function(t){return r.select(t.labelNode).node().getBBox().x-5}).attr("y",function(t){return r.select(t.labelNode).node().getBBox().y-5})}(t),function(t){let e,n;t.select(".node-info-text").each(function(t){t.infoNode=this}).select(function(){return this.parentNode}).append("foreignObject").attr("width",function(t){if((0,a.isEmpty)(t.recoveryStatus))return 0;const s=h(C(t));return e=s.height,n=s.width,n}).attr("height",function(t){return(0,a.isEmpty)(t.recoveryStatus)?0:e}).attr("x",function(t){return-n/2}).attr("y",function(t){return 78}).classed("hidden",function(t){return(0,a.isEmpty)(t.recoveryStatus)}).style("font-size","12px").style("font-weight","400").style("text-align","center").style("padding","4px").style("background","#EEEEEE").style("border-radius","6px").attr("class","node-info-fo").append("xhtml:div").html(function(t){return C(t)}),t.select(".node-info-text").remove(),function(t){t.select(".node-info-fo").each(function(t){const e=r.select(this);if((0,a.isEmpty)(t.recoveryStatus))return void e.attr("width",0);const n=C(t),s=t.recoveryStatus.message&&t.recoveryStatus.message.length>i&&n!==t.recoveryStatus.message,o=s?n:t.recoveryStatus.message,N=h(n),_=h(t.recoveryStatus.message);e.on(".tooltip",null),s&&function(t,e,n,s,a){t.on("mouseover.tooltip",()=>{t.attr("width",a.width).attr("height",a.height).attr("x",-a.width/2).html(`<div>${e}</div>`)}),t.on("mouseout.tooltip",()=>{t.attr("width",n.width).attr("height",n.height).attr("x",-n.width/2).html(`<div>${s}</div>`)})}(e,t.recoveryStatus.message,N,o,_),e.attr("width",N.width).attr("height",N.height).attr("x",-N.width/2).html(`<div>${o}</div>`)})}(t)}(t)}const L={[s.RecoveryState.SEARCHING_FOR_NODE]:{icon:"",font:E.FONT_AWESOME},[s.RecoveryState.WAITING_FOR_SNAPSHOT]:{icon:"",font:E.FONT_AWESOME},[s.RecoveryState.RECEIVING_SNAPSHOT]:{icon:"",font:E.FONT_AWESOME},[s.RecoveryState.APPLYING_SNAPSHOT]:{icon:"",font:E.FONT_AWESOME},[s.RecoveryState.BUILDING_SNAPSHOT]:{icon:"",font:E.FONT_AWESOME},[s.RecoveryState.SENDING_SNAPSHOT]:{icon:"",font:E.FONT_AWESOME},[s.RecoveryState.RECOVERY_OPERATION_FAILURE_WARNING]:{icon:"",font:E.ICOMOON}},I={[s.NodeState.CANDIDATE]:{icon:"",font:E.ICOMOON},[s.NodeState.NO_CONNECTION]:{icon:"",font:E.ICOMOON},[s.NodeState.OUT_OF_SYNC]:{icon:"",font:E.ICOMOON},[s.NodeState.READ_ONLY]:{icon:"",font:E.ICOMOON},[s.NodeState.RESTRICTED]:{icon:"",font:E.ICOMOON}};function C(t){return t.recoveryStatus.message&&t.recoveryStatus.message.length>i?t.recoveryStatus.message.substring(0,i)+"...":t.recoveryStatus.message||""}function h(t){const e=document.createElement("div");e.innerHTML=t,e.style.padding="4px",e.style.position="absolute",e.style.visibility="hidden",e.style.fontSize="12px",e.style.fontWeight="400",e.style.textAlign="center",e.style.height="auto",e.style.width="auto",e.style.whiteSpace="nowrap",document.body.appendChild(e);const n=e.getBoundingClientRect(),s=n.height,a=n.width;return document.body.removeChild(e),{height:s,width:a}}function g(t){t.enter().append("path").classed("link",!0),t.exit().remove()}function y(t,e){t.attr("class",t=>`link ${t.id.replaceAll(":","-")}`).attr("stroke",M).style("stroke-dasharray",D).style("marker-mid",t=>f(t,p.BIG)).attr("d",t=>function(t,e){const n=e.find(e=>e.address===t.source),s=e.find(e=>e.address===t.target),a=s.x-n.x,o=s.y-n.y,r=Math.sqrt(a*a+o*o),N=a/r,_=o/r,c=n.x+55*N,E=n.y+55*_,i=s.x-55*N,l=s.y-55*_;return"M"+c+","+E+"L"+(c+i)/2+","+(E+l)/2+"L"+i+","+l}(t,e))}const p={SMALL:{name:"small",size:3},BIG:{name:"big",size:5}};function G(t,e){t.append("svg:defs").append("svg:marker").attr("id",`arrowhead_${e.name}`).attr("viewBox",`0 0 ${2*e.size} ${2*e.size}`).attr("refX",e.size).attr("refY",e.size).attr("markerWidth",e.size).attr("markerHeight",e.size).attr("orient","auto-start-reverse").append("path").attr("d",`M 0 0 L ${2*e.size} ${e.size} L 0 ${2*e.size} z`).style("fill","var(--secondary-color)")}function f(t,e){if(t.status===s.LinkState.RECEIVING_SNAPSHOT)return`url(#arrowhead_${e.name})`}function M(t){return _[t.status]||"none"}function D(t){return c[t.status]||"none"}function R(t,e,n,s){t.attr("transform",(a,o)=>{const r=2*Math.PI*o/t.size(),N=e+Math.cos(r)*s,_=n+Math.sin(r)*s;return a.x=N,a.y=_,`translate(${N}, ${_})`})}function m(t,e){const n=Math.sqrt(3)/2,s=[[e+0,0],[e/2+0,e*n+0],[-e/2+0,e*n+0],[0-e,0],[-e/2+0,-e*n+0],[e/2+0,-e*n+0],[e+0,0],[e/2+0,e*n+0]];return t.selectAll("path.area").data([s]).enter().append("path").attr("class","node member").attr("stroke-width","10").attr("stroke-linejoin","round").attr("d",r.line())}function x(){r.select(document).selectAll(".node-info-fo").on(".tooltip",null)}},70962:(t,e,n)=>{n.r(e),n.d(e,{LinkState:()=>o,NodeState:()=>s,RecoveryState:()=>a,TopologyState:()=>r});const s={LEADER:"LEADER",FOLLOWER:"FOLLOWER",CANDIDATE:"CANDIDATE",OUT_OF_SYNC:"OUT_OF_SYNC",NO_CONNECTION:"NO_CONNECTION",READ_ONLY:"READ_ONLY",RESTRICTED:"RESTRICTED",NO_CLUSTER:"NO_CLUSTER"},a={SEARCHING_FOR_NODE:"SEARCHING_FOR_NODE",WAITING_FOR_SNAPSHOT:"WAITING_FOR_SNAPSHOT",RECEIVING_SNAPSHOT:"RECEIVING_SNAPSHOT",APPLYING_SNAPSHOT:"APPLYING_SNAPSHOT",BUILDING_SNAPSHOT:"BUILDING_SNAPSHOT",SENDING_SNAPSHOT:"SENDING_SNAPSHOT",RECOVERY_OPERATION_FAILURE_WARNING:"RECOVERY_OPERATION_FAILURE_WARNING"},o={IN_SYNC:"IN_SYNC",OUT_OF_SYNC:"OUT_OF_SYNC",SYNCING:"SYNCING",NO_CONNECTION:"NO_CONNECTION",RECEIVING_SNAPSHOT:"RECEIVING_SNAPSHOT"},r={PRIMARY_NODE:"PRIMARY_NODE",SECONDARY_NODE:"SECONDARY_NODE"}},94519:(t,e,n)=>{n.r(e);var s=n(53174),a=n(57952),o=n(70962);const r={select:n(93462).select};function N(t,e,n,N){return{restrict:"E",templateUrl:"js/angular/clustermanagement/templates/cluster-legend.html",scope:{},link:_=>{_.hideLegend=!0;const c=[];let E,i,l;_.toggleLegend=()=>{_.hideLegend=!_.hideLegend,E.classed("hidden-legend",_.hideLegend)};const T=()=>{const t=e.getClusterViewD3Container();O(t),A(),d(E),S(),u(),L(),I()},d=t=>{h(t,"cluster_management.cluster_graphical_view.legend_title_node_state");const e=t.selectAll(".node-group").data(s.CLUSTER_MANAGEMENT_CONSTANTS.getLegendNodes()),n=a.createNodes(e,s.CLUSTER_MANAGEMENT_CONSTANTS.SVG_NODE_WIDTH,!0);a.updateNodes(n),n.attr("transform",function(t,e){return L(),`translate(${s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT}, ${i+s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_TOP})`}).append("text").classed("links-statuses",!0).style("font-weight",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_WEIGHT).style("fill",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_COLOR).attr("x",s.CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT+s.CLUSTER_MANAGEMENT_CONSTANTS.SVG_NODE_WIDTH).attr("y",3).text(function(t){return g(this,"cluster_management.cluster_graphical_view."+t.customText)})},S=()=>{h(E,"cluster_management.cluster_graphical_view.legend_title_sync_status");const t=E.selectAll(".sync-statuses-group").data(s.CLUSTER_MANAGEMENT_CONSTANTS.getSyncStatuses()).enter().append("g").attr("class","sync-statuses-group"),e=new Map;t.append("text").attr("class",t=>`sync-status ${t.classes}`).attr("x",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT-10).attr("y",function(t,n){const a=n*(20+s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_TOP)+i+s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEMS_PADDING_TOP;return e.set(n,a),a}).text(function(t){return t.icon});const n=(s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_ICON_FONT_SIZE-s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE)/2;t.append("text").style("font-weight",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_WEIGHT).style("fill",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_COLOR).text(function(t){return g(this,"cluster_management.cluster_graphical_view."+t.labelKey)}).attr("x",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT+s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE).attr("y",function(t,s){return e.get(s)-n}).classed("links-statuses",!0)},u=()=>{h(E,"cluster_management.cluster_graphical_view.legend_title_link_states");const t=E.selectAll(".link-states-group").data(s.CLUSTER_MANAGEMENT_CONSTANTS.getLegendLinks()).enter().append("g").attr("class","link-state"),e=new Map;t.append("path").classed("link",!0).attr("stroke-dasharray",a.setLinkStyle).attr("stroke",a.setLinkColor).attr("d",(t,n)=>{const a=n*(s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE+s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_TOP)+i+s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEMS_PADDING_TOP,r=l/2;let N;if(e.set(n,a),t.status===o.LinkState.RECEIVING_SNAPSHOT){const t=r/2;N=`M${s.CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT} ${a} L${t} ${a} L${r} ${a}`}else N=`M${s.CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT} ${a} ${r} ${a}`;return N}).style("marker-mid",t=>a.setArrowLink(t,a.ARROW_CONFIG.SMALL)),t.append("text").style("font-size",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE).style("line-height",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_LINE_HEIGHT).style("font-weight",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_WEIGHT).style("fill",s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_COLOR).text(function(t){return g(this,"cluster_management.cluster_graphical_view."+t.linkTypeKey)}).attr("x",l/2+s.CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT).attr("y",function(t,n){return e.get(n)+4}).classed("links-statuses",!0)},O=t=>{E=t.append("g").classed("hidden-legend",_.hideLegend).classed("cluster-legend-group",!0)},A=()=>{E.append("rect").attr("class","legend-background").attr("fill","#EEEEEE")},L=()=>{E.call(t=>{i=t.node().getBBox().height}),l=C(E)+30},I=()=>{const t=C(E);E.select(".legend-background").attr("height",i+3*s.CLUSTER_MANAGEMENT_CONSTANTS.PADDING_TOP).attr("width",t+s.CLUSTER_MANAGEMENT_CONSTANTS.BACKGROUND_PADDING).attr("rx","6")},C=t=>{let e=0;return t.selectAll(":not(.legend-background)").each(function(){const t=this.getBBox();e=Math.max(e,t.width)}),e},h=(t,e)=>t.append("text").attr("class","legend-title").attr("x",s.CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT).style("font-size",s.CLUSTER_MANAGEMENT_CONSTANTS.TITLE_FONT_SIZE).style("font-weight",s.CLUSTER_MANAGEMENT_CONSTANTS.TITLE_FONT_WEIGHT).style("line-height",s.CLUSTER_MANAGEMENT_CONSTANTS.TITLE_LINE_HEIGHT).style("fill",s.CLUSTER_MANAGEMENT_CONSTANTS.TITLE_COLOR).text(function(){return g(this,e)}).attr("y",()=>(L(),i+s.CLUSTER_MANAGEMENT_CONSTANTS.TITLE_PADDING_TOP)),g=(e,s)=>(c.push(t.$on("$translateChangeSuccess",()=>{r.select(e).text(n.instant(s)),I()})),n.instant(s)),y=()=>{_.hideLegend=!0,E.classed("hidden-legend",_.hideLegend)};N.on("keydown",t=>{"Escape"===t.key&&y()}),c.push(e.onClusterViewD3ContainerUpdated(T)),_.$on("$destroy",()=>{N.off("keydown",y),c.forEach(t=>t())}),T()}}}angular.module("graphdb.framework.clustermanagement.directives.cluster-legend",[]).directive("clusterLegend",N),N.$inject=["$rootScope","ClusterViewContextService","$translate","$document"]}};
2
- //# sourceMappingURL=94519.f41b6f4fb1b1bb6e3bf5.bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"94519.f41b6f4fb1b1bb6e3bf5.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/models/clustermanagement/node-state.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/clustermanagement/cluster-management-constants.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/clustermanagement/services/cluster-drawing.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/clustermanagement/states.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/clustermanagement/directives/cluster-legend.directive.js"],"sourcesContent":["export const NodeState = {\n LEADER: 'LEADER',\n FOLLOWER: 'FOLLOWER',\n CANDIDATE: 'CANDIDATE',\n // node without icon\n OUT_OF_SYNC_BLANK: 'OUT_OF_SYNC_BLANK'\n};\n","import {NodeState} from \"./node-state\";\nimport {LinkState} from \"./states\";\n\nconst CLUSTER_MANAGEMENT_CONSTANTS = (function () {\n const SVG_NODE_WIDTH = 15;\n\n const PADDING_LEFT = 12;\n const PADDING_TOP = 12;\n\n const TITLE_PADDING_TOP = 15;\n const TITLE_FONT_SIZE = 13;\n const TITLE_FONT_WEIGHT = 700;\n const TITLE_LINE_HEIGHT = 18;\n const TITLE_COLOR = '#000000';\n\n const LEGEND_ITEMS_PADDING_TOP = 40;\n const LEGEND_ITEM_PADDING_TOP = 8;\n const LEGEND_ITEM_ICON_FONT_SIZE = 15;\n const LEGEND_ITEM_FONT_SIZE = 11;\n const LEGEND_ITEM_FONT_WEIGHT = 400;\n const LEGEND_ITEM_COLOR = '#000000';\n const LEGEND_ITEM_LINE_HEIGHT = 13;\n const LEGEND_ITEM_PADDING_LEFT = PADDING_LEFT + SVG_NODE_WIDTH;\n\n const BACKGROUND_PADDING = PADDING_LEFT * 2;\n\n const getLegendNodes = function () {\n const legendNodes = [];\n legendNodes.push({nodeState: NodeState.LEADER, customText: 'node_state_leader'});\n legendNodes.push({nodeState: NodeState.FOLLOWER, customText: 'node_state_follower'});\n // the out of sync node in the leged should not have an icon\n legendNodes.push({nodeState: NodeState.OUT_OF_SYNC_BLANK, customText: 'node_state_out_of_sync'});\n legendNodes.forEach((node, index) => node.id = index);\n return legendNodes;\n };\n\n const getLegendLinks = function () {\n const links = [];\n links.push({status: LinkState.IN_SYNC, linkTypeKey: 'link_state_in_sync'});\n links.push({status: LinkState.SYNCING, linkTypeKey: 'link_state_syncing'});\n links.push({status: LinkState.OUT_OF_SYNC, linkTypeKey: 'link_state_out_of_sync'});\n links.push({status: LinkState.RECEIVING_SNAPSHOT, linkTypeKey: 'link_state_receiving_snapshot'});\n links.forEach((link, index) => link.id = index);\n return links;\n };\n\n const getSyncStatuses = () => {\n return [\n {\n labelKey: 'node_state_candidate',\n classes: 'icon-any',\n icon: '\\ue914'\n }, {\n labelKey: 'node_state_no_cluster',\n classes: 'close',\n icon: 'X'\n }, {\n labelKey: 'link_state_out_of_sync',\n classes: 'icon-any',\n icon: '\\ue920'\n }, {\n labelKey: 'node_state_no_connection',\n classes: 'icon-any',\n icon: '\\ue931'\n }, {\n labelKey: 'node_state_read_only',\n classes: 'icon-any',\n icon: '\\ue95c'\n }, {\n labelKey: 'node_state_restricted',\n classes: 'icon-any',\n icon: '\\ue933'\n }, {\n labelKey: 'recovery_state.searching_for_node',\n classes: 'fa-d3',\n icon: '\\uf29c'\n }, {\n labelKey: 'recovery_state.waiting_for_snapshot',\n classes: 'fa-d3',\n icon: '\\uf017'\n }, {\n labelKey: 'recovery_state.building_snapshot',\n classes: 'fa-d3 fa-solid',\n icon: '\\uf187'\n }, {\n labelKey: 'recovery_state.sending_snapshot',\n classes: 'fa-d3 fa-solid',\n icon: '\\uf0ee'\n }, {\n labelKey: 'recovery_state.receiving_snapshot',\n classes: 'fa-d3 fa-solid',\n icon: '\\uf0ed'\n }, {\n labelKey: 'recovery_state.applying_snapshot',\n classes: 'fa-d3 fa-solid',\n icon: '\\uf050'\n }\n ];\n };\n\n return {\n getLegendNodes,\n getSyncStatuses,\n getLegendLinks,\n SVG_NODE_WIDTH,\n PADDING_LEFT,\n PADDING_TOP,\n TITLE_PADDING_TOP,\n TITLE_FONT_SIZE,\n TITLE_FONT_WEIGHT,\n TITLE_COLOR,\n TITLE_LINE_HEIGHT,\n LEGEND_ITEM_FONT_SIZE,\n LEGEND_ITEM_ICON_FONT_SIZE,\n LEGEND_ITEM_FONT_WEIGHT,\n LEGEND_ITEM_COLOR,\n LEGEND_ITEM_LINE_HEIGHT,\n LEGEND_ITEM_PADDING_LEFT,\n LEGEND_ITEMS_PADDING_TOP,\n LEGEND_ITEM_PADDING_TOP,\n BACKGROUND_PADDING\n };\n})();\n\nexport {\n CLUSTER_MANAGEMENT_CONSTANTS\n};\n","import {LinkState, NodeState, RecoveryState} from \"../../models/clustermanagement/states\";\nimport {isEmpty} from \"lodash\";\nimport {select, line} from 'd3';\n\nconst d3 = {\n line,\n select\n};\n\nconst clusterColors = {\n ontoOrange: 'var(--primary-color)',\n ontoBlue: 'var(--secondary-color)',\n ontoGreen: 'var(--tertiary-color)',\n ontoGrey: 'var(--gray-color)'\n};\n\nconst linkStateColors = {\n [LinkState.IN_SYNC]: clusterColors.ontoBlue,\n [LinkState.SYNCING]: clusterColors.ontoBlue,\n [LinkState.OUT_OF_SYNC]: clusterColors.ontoGrey,\n [LinkState.RECEIVING_SNAPSHOT]: clusterColors.ontoBlue\n};\n\nconst linkStateStyle = {\n // solid line\n [LinkState.IN_SYNC]: 'none',\n // dashed line\n [LinkState.SYNCING]: '10 10',\n // dashed line\n [LinkState.OUT_OF_SYNC]: '10 10',\n // dashed line\n [LinkState.RECEIVING_SNAPSHOT]: '10 10'\n};\n\nconst font = {\n FONT_AWESOME: 'FONT_AWESOME',\n ICOMOON: 'ICOMOON'\n};\n\nconst shortMessageLimit = 40;\n\nexport function createClusterSvgElement(element) {\n return d3.select(element)\n .append('svg')\n .classed('cluster-diagram', true);\n}\n\nexport function createClusterZone(parent) {\n const clusterZone = parent.append('g');\n clusterZone\n .append(\"circle\")\n .classed('cluster-zone', true)\n .style('fill', 'transparent')\n .style('stroke-width', '4');\n return clusterZone;\n}\n\nexport function setCreateClusterZone(hasCluster, clusterZone, translationsMap, hasAccess = false) {\n clusterZone\n .select('.cluster-zone')\n .classed('no-cluster', !hasCluster)\n .classed('has-access', hasAccess);\n\n if (hasCluster) {\n clusterZone.selectAll('#no-cluster-zone').remove();\n } else {\n const textGroup = clusterZone\n .append('g')\n .attr(\"id\", \"no-cluster-zone\");\n textGroup\n .append('text')\n .attr('id', 'no-cluster-label')\n .text(translationsMap.no_cluster_configured)\n .attr('y', -50)\n .classed('h2', true)\n .style('text-anchor', \"middle\");\n if (hasAccess) {\n textGroup.append('text')\n .attr('id', 'create-cluster-label')\n .classed('h3', true)\n .text(translationsMap.create_cluster_btn)\n .style('text-anchor', \"middle\");\n }\n textGroup.append('text')\n .attr('y', 130)\n .attr('class', 'icon-any repo')\n .attr('fill', clusterColors.ontoOrange)\n .style('text-anchor', \"middle\")\n .classed('settings-icon', true)\n .text(\"\\ue92b\");\n }\n}\n\nexport function updateClusterZoneLabels(hasCluster, clusterZone, translationsMap) {\n if (hasCluster) {\n return;\n }\n clusterZone.select('#no-cluster-zone #no-cluster-label')\n .text(translationsMap.no_cluster_configured);\n clusterZone.select('#no-cluster-zone #create-cluster-label')\n .text(translationsMap.create_cluster_btn);\n}\n\nexport function moveElement(element, x, y) {\n element.attr('transform', () => {\n return `translate(${x}, ${y})`;\n });\n}\n\nexport function createNodes(nodesDataBinding, nodeRadius, isLegend) {\n const nodeGroup = nodesDataBinding.enter()\n .append('g')\n .attr('id', 'node-group')\n .classed('legend', isLegend);\n\n const nodeUpdateElements = nodeGroup\n .merge(nodesDataBinding)\n .attr('id', 'node-group')\n .classed('legend', isLegend);\n\n createHexagon(nodeGroup, nodeRadius);\n nodesDataBinding.exit().remove();\n\n nodeGroup\n .append('text')\n .attr('class', 'icon-any node-icon');\n\n if (!isLegend) {\n addHostnameToNodes(nodeGroup, nodeRadius, isLegend);\n }\n return nodeUpdateElements;\n}\n\nfunction addHostnameToNodes(nodeElements, nodeRadius) {\n const nodeTextHost = nodeElements.append('g');\n\n nodeTextHost\n .append('rect')\n .attr('class', 'id-host-background')\n .attr('rx', 6);\n\n nodeTextHost\n .append('rect')\n .attr('class', 'node-info-background')\n .attr('rx', 6);\n\n nodeTextHost\n .append('text')\n .attr('y', nodeRadius + 25)\n .attr('class', 'id id-host');\n\n nodeTextHost\n .append('text')\n .attr('y', nodeRadius + 55)\n .attr('class', 'node-info-text');\n}\n\nexport function updateNodes(nodes) {\n updateNodesIcon(nodes);\n updateNodesClasses(nodes);\n updateNodesHostnameText(nodes);\n updateNodesInfoText(nodes);\n}\n\nfunction updateNodesClasses(nodes) {\n nodes\n .select('.node.member')\n .classed('leader', (node) => node.nodeState === NodeState.LEADER)\n .classed('follower', (node) => node.nodeState === NodeState.FOLLOWER)\n .classed('candidate', (node) => node.nodeState === NodeState.CANDIDATE)\n .classed('other', (node) => {\n return node.nodeState !== NodeState.LEADER &&\n node.nodeState !== NodeState.FOLLOWER &&\n node.nodeState !== NodeState.CANDIDATE;\n });\n}\n\nfunction updateNodesIcon(nodes) {\n nodes.select('.node-icon')\n .each(function (d) {\n const iconType = hasRecoveryState(d) ? getNodeInfoIconType(d) : getNodeIconType(d);\n d3.select(this)\n .classed('icon-any', iconType.font === font.ICOMOON)\n .classed('fa-d3', iconType.font === font.FONT_AWESOME)\n .text(iconType.icon);\n });\n}\n\nfunction hasRecoveryState(node) {\n return !isEmpty(node.recoveryStatus);\n}\n\nconst iconMap = {\n [RecoveryState.SEARCHING_FOR_NODE]: {icon: '\\uf29c', font: font.FONT_AWESOME},\n [RecoveryState.WAITING_FOR_SNAPSHOT]: {icon: '\\uf017', font: font.FONT_AWESOME},\n [RecoveryState.RECEIVING_SNAPSHOT]: {icon: '\\uf0ed', font: font.FONT_AWESOME},\n [RecoveryState.APPLYING_SNAPSHOT]: {icon: '\\uf050', font: font.FONT_AWESOME},\n [RecoveryState.BUILDING_SNAPSHOT]: {icon: '\\uf187', font: font.FONT_AWESOME},\n [RecoveryState.SENDING_SNAPSHOT]: {icon: '\\uf0ee', font: font.FONT_AWESOME},\n [RecoveryState.RECOVERY_OPERATION_FAILURE_WARNING]: {icon: '\\ue920', font: font.ICOMOON}\n};\n\nconst nodeStateIcons = {\n [NodeState.CANDIDATE]: {icon: '\\ue914', font: font.ICOMOON},\n [NodeState.NO_CONNECTION]: {icon: '\\ue931', font: font.ICOMOON},\n [NodeState.OUT_OF_SYNC]: {icon: '\\ue920', font: font.ICOMOON},\n [NodeState.READ_ONLY]: {icon: '\\ue95c', font: font.ICOMOON},\n [NodeState.RESTRICTED]: {icon: '\\ue933', font: font.ICOMOON}\n};\n\nfunction getNodeInfoIconType(node) {\n const status = node.recoveryStatus;\n\n if (!status || !status.state) {\n return {icon: '', font: ''};\n }\n\n return iconMap[status.state] || {icon: '', font: ''};\n}\n\nfunction getNodeIconType(node) {\n const iconType = nodeStateIcons[node.nodeState];\n return iconType ? iconType : {icon: '', font: ''};\n}\n\nfunction updateNodesInfoText(nodes) {\n let objectHeight;\n let objectWidth;\n // Set initial text element\n nodes.select('.node-info-text')\n .each(function (d) {\n d.infoNode = this;\n })\n .select(function () {\n return this.parentNode;\n })\n .append('foreignObject')\n .attr('width', function (d) {\n if (isEmpty(d.recoveryStatus)) {\n return 0;\n }\n const shortMessage = extractShortMessageFromNode(d);\n const rect = calculateElementSizeByText(shortMessage);\n objectHeight = rect.height;\n objectWidth = rect.width;\n return objectWidth;\n })\n .attr('height', function (d) {\n if (isEmpty(d.recoveryStatus)) {\n return 0;\n }\n return objectHeight;\n })\n .attr('x', function (d) {\n return -(objectWidth / 2);\n })\n .attr('y', function (d) {\n return 78;\n })\n .classed('hidden', function (d) {\n return isEmpty(d.recoveryStatus);\n })\n .style('font-size', '12px')\n .style('font-weight', '400')\n .style('text-align', 'center')\n .style('padding', '4px')\n .style('background', '#EEEEEE')\n .style('border-radius', '6px')\n .attr('class', 'node-info-fo')\n .append('xhtml:div')\n .html(function (d) {\n return extractShortMessageFromNode(d);\n });\n\n // Remove the original text elements, as they are now replaced by foreignObjects\n nodes.select('.node-info-text').remove();\n\n resizeLabelDynamic(nodes);\n}\n\nfunction extractShortMessageFromNode(node) {\n return node.recoveryStatus.message && node.recoveryStatus.message.length > shortMessageLimit ?\n node.recoveryStatus.message.substring(0, shortMessageLimit) + '...' : node.recoveryStatus.message || '';\n}\n\nfunction calculateElementSizeByText(text) {\n const tmp = document.createElement('div');\n tmp.innerHTML = text;\n tmp.style.padding = '4px';\n tmp.style.position = 'absolute';\n tmp.style.visibility = 'hidden';\n tmp.style.fontSize = '12px';\n tmp.style.fontWeight = '400';\n tmp.style.textAlign = 'center';\n tmp.style.height = 'auto';\n tmp.style.width = 'auto';\n tmp.style.whiteSpace = 'nowrap';\n\n document.body.appendChild(tmp);\n const rect = tmp.getBoundingClientRect();\n const height = rect.height;\n const width = rect.width;\n document.body.removeChild(tmp);\n\n return {height, width};\n}\n\nfunction addRecoveryLabelListeners(object, message, truncatedSize, displayMessage, fullSize) {\n object.on('mouseover.tooltip', () => {\n object\n .attr('width', fullSize.width)\n .attr('height', fullSize.height)\n .attr('x', -fullSize.width / 2)\n .html(`<div>${message}</div>`);\n });\n object.on('mouseout.tooltip', () => {\n object\n .attr('width', truncatedSize.width)\n .attr('height', truncatedSize.height)\n .attr('x', -truncatedSize.width / 2)\n .html(`<div>${displayMessage}</div>`);\n });\n}\n\nfunction resizeLabelDynamic(nodes) {\n nodes.select('.node-info-fo')\n .each(function (d) {\n const object = d3.select(this);\n if (isEmpty(d.recoveryStatus)) {\n object.attr('width', 0);\n return;\n }\n const shortMessage = extractShortMessageFromNode(d);\n const isShorten = d.recoveryStatus.message && d.recoveryStatus.message.length > shortMessageLimit && shortMessage !== d.recoveryStatus.message;\n const displayMessage = isShorten ? shortMessage : d.recoveryStatus.message;\n const truncatedSize = calculateElementSizeByText(shortMessage);\n const fullSize = calculateElementSizeByText(d.recoveryStatus.message);\n object.on('.tooltip', null);\n\n if (isShorten) {\n addRecoveryLabelListeners(object, d.recoveryStatus.message, truncatedSize, displayMessage, fullSize);\n }\n\n // Set initial size and text\n object\n .attr('width', truncatedSize.width)\n .attr('height', truncatedSize.height)\n .attr('x', -truncatedSize.width / 2)\n .html(`<div>${displayMessage}</div>`);\n });\n}\n\nfunction updateNodesHostnameText(nodes) {\n nodes\n .select('.id.id-host')\n .each(function (d) {\n d.labelNode = this;\n })\n .text(function (d) {\n return d.hostname;\n });\n\n // Add padding styling to text background. left/right/top/bottom +5\n nodes\n .select('.id-host-background')\n .attr('width', function (d) {\n return d3.select(d.labelNode).node().getBBox().width + 10;\n })\n .attr('height', function (d) {\n return d3.select(d.labelNode).node().getBBox().height + 10;\n })\n .attr('x', function (d) {\n return d3.select(d.labelNode).node().getBBox().x - 5;\n })\n .attr('y', function (d) {\n return d3.select(d.labelNode).node().getBBox().y - 5;\n });\n}\n\nexport function createLinks(linksDataBinding) {\n linksDataBinding.enter()\n .append('path')\n .classed('link', true);\n\n linksDataBinding.exit().remove();\n}\n\nexport function updateLinks(linksDataBinding, nodes) {\n linksDataBinding\n .attr('class', (link) => {\n // add the link id as a css class for testing purposes\n const idClass = link.id.replaceAll(':', '-');\n return `link ${idClass}`;\n })\n .attr('stroke', setLinkColor)\n .style('stroke-dasharray', setLinkStyle)\n .style(\"marker-mid\", (link) => setArrowLink(link, ARROW_CONFIG.BIG))\n .attr('d', (link) => getLinkCoordinates(link, nodes));\n}\n\nexport const ARROW_CONFIG = {\n SMALL: {name: 'small', size: 3},\n BIG: {name: 'big', size: 5}\n};\n\nexport function addArrowHead(svg, config) {\n svg.append(\"svg:defs\").append(\"svg:marker\")\n .attr(\"id\", `arrowhead_${config.name}`)\n .attr(\"viewBox\", `0 0 ${config.size * 2} ${config.size * 2}`)\n .attr(\"refX\", config.size)\n .attr(\"refY\", config.size)\n .attr(\"markerWidth\", config.size)\n .attr(\"markerHeight\", config.size)\n .attr(\"orient\", \"auto-start-reverse\")\n .append(\"path\")\n .attr(\"d\", `M 0 0 L ${config.size * 2} ${config.size} L 0 ${config.size * 2} z`)\n .style(\"fill\", \"var(--secondary-color)\");\n}\n\nexport function setArrowLink(link, config) {\n if (link.status === LinkState.RECEIVING_SNAPSHOT) {\n return `url(#arrowhead_${config.name})`;\n }\n}\n\nexport function setLinkColor(link) {\n const linkColor = linkStateColors[link.status];\n return linkColor || 'none';\n}\n\nexport function setLinkStyle(link) {\n const linkStyle = linkStateStyle[link.status];\n return linkStyle || 'none';\n}\n\nfunction getLinkCoordinates(link, nodes) {\n const source = nodes.find((node) => node.address === link.source);\n const target = nodes.find((node) => node.address === link.target);\n const deltaX = target.x - source.x;\n const deltaY = target.y - source.y;\n const dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const normX = deltaX / dist;\n const normY = deltaY / dist;\n // Padding from node center point\n const sourcePadding = 55;\n const targetPadding = 55;\n const sourceX = source.x + (sourcePadding * normX);\n const sourceY = source.y + (sourcePadding * normY);\n const targetX = target.x - (targetPadding * normX);\n const targetY = target.y - (targetPadding * normY);\n // Calculate midpoint\n const midpointX = (sourceX + targetX) / 2;\n const midpointY = (sourceY + targetY) / 2;\n // In order to draw an arrowhead in the middle of a line, the line needs to be composed by\n // two segments, otherwise the arrowhead won't show up.\n return 'M' + sourceX + ',' + sourceY + 'L' + midpointX + ',' + midpointY +\n 'L' + targetX + ',' + targetY;\n}\n\nexport function positionNodesOnClusterZone(nodeElements, clusterZoneX, clusterZoneY, clusterZoneRadius) {\n nodeElements\n .attr('transform', (node, index) => {\n // Calculate initial positions for the new nodes based on\n // spreading them evenly on a circle around the center of the page.\n const theta = 2 * Math.PI * index / nodeElements.size();\n const x = clusterZoneX + Math.cos(theta) * clusterZoneRadius;\n const y = clusterZoneY + Math.sin(theta) * clusterZoneRadius;\n node.x = x;\n node.y = y;\n return `translate(${x}, ${y})`;\n });\n}\n\nexport function createHexagon(nodeGroup, radius) {\n const _s32 = (Math.sqrt(3) / 2);\n const xDiff = 0;\n const yDiff = 0;\n const points = [[radius + xDiff, yDiff], [radius / 2 + xDiff, radius * _s32 + yDiff], [-radius / 2 + xDiff, radius * _s32 + yDiff],\n [-radius + xDiff, yDiff],\n [-radius / 2 + xDiff, -radius * _s32 + yDiff], [radius / 2 + xDiff, -radius * _s32 + yDiff], [radius + xDiff, yDiff],\n [radius / 2 + xDiff, radius * _s32 + yDiff]];\n return nodeGroup\n .selectAll(\"path.area\")\n .data([points])\n .enter()\n .append(\"path\")\n .attr('class', 'node member')\n .attr(\"stroke-width\", \"10\")\n .attr(\"stroke-linejoin\", \"round\")\n .attr(\"d\", d3.line());\n}\n\nexport function removeEventListeners() {\n d3.select(document).selectAll('.node-info-fo').on('.tooltip', null);\n}\n","export const NodeState = {\n LEADER: 'LEADER',\n FOLLOWER: 'FOLLOWER',\n CANDIDATE: 'CANDIDATE',\n OUT_OF_SYNC: 'OUT_OF_SYNC',\n NO_CONNECTION: 'NO_CONNECTION',\n READ_ONLY: 'READ_ONLY',\n RESTRICTED: 'RESTRICTED',\n NO_CLUSTER: 'NO_CLUSTER'\n};\n\nexport const RecoveryState = {\n SEARCHING_FOR_NODE: 'SEARCHING_FOR_NODE',\n WAITING_FOR_SNAPSHOT: 'WAITING_FOR_SNAPSHOT',\n RECEIVING_SNAPSHOT: 'RECEIVING_SNAPSHOT',\n APPLYING_SNAPSHOT: 'APPLYING_SNAPSHOT',\n BUILDING_SNAPSHOT: 'BUILDING_SNAPSHOT',\n SENDING_SNAPSHOT: 'SENDING_SNAPSHOT',\n RECOVERY_OPERATION_FAILURE_WARNING: 'RECOVERY_OPERATION_FAILURE_WARNING'\n};\n\nexport const LinkState = {\n IN_SYNC: 'IN_SYNC',\n OUT_OF_SYNC: 'OUT_OF_SYNC',\n SYNCING: 'SYNCING',\n NO_CONNECTION: 'NO_CONNECTION',\n // complimentary state, built based on the recovery state of two nodes when one is receiving snapshot to the other\n RECEIVING_SNAPSHOT: 'RECEIVING_SNAPSHOT'\n};\n\nexport const TopologyState = {\n PRIMARY_NODE: 'PRIMARY_NODE',\n SECONDARY_NODE: 'SECONDARY_NODE'\n};\n","import {CLUSTER_MANAGEMENT_CONSTANTS} from \"../../models/clustermanagement/cluster-management-constants\";\nimport * as CDS from \"../services/cluster-drawing.service\";\nimport {LinkState} from \"../../models/clustermanagement/states\";\nimport {ARROW_CONFIG} from \"../services/cluster-drawing.service\";\nimport {select} from 'd3';\n\nconst d3 = {select};\nconst modules = [];\nangular.module('graphdb.framework.clustermanagement.directives.cluster-legend', modules)\n .directive('clusterLegend', clusterLegend);\n\nclusterLegend.$inject = ['$rootScope', 'ClusterViewContextService', '$translate', '$document'];\n\nfunction clusterLegend($rootScope, ClusterViewContextService, $translate, $document) {\n return {\n restrict: 'E',\n templateUrl: 'js/angular/clustermanagement/templates/cluster-legend.html',\n scope: {},\n link: ($scope) => {\n\n // =========================\n // Public variables\n // =========================\n\n $scope.hideLegend = true;\n\n // =========================\n // Private variables\n // =========================\n\n const subscriptions = [];\n let legendGroup;\n let legendHeight;\n let legendWidth;\n\n // =========================\n // Public functions\n // =========================\n\n $scope.toggleLegend = () => {\n $scope.hideLegend = !$scope.hideLegend;\n legendGroup.classed('hidden-legend', $scope.hideLegend);\n };\n\n // =========================\n // Private functions\n // =========================\n\n const init = () => {\n const clusterViewD3Container = ClusterViewContextService.getClusterViewD3Container();\n createLegendGroup(clusterViewD3Container);\n createLegendBackground();\n addNodeStates(legendGroup);\n addSyncStatus();\n addLinks();\n updateLegendDimensions();\n updateLegendBackground();\n };\n\n const addNodeStates = (legendGroup) => {\n addTitle(legendGroup, 'cluster_management.cluster_graphical_view.legend_title_node_state');\n const legendNodeData = legendGroup\n .selectAll('.node-group')\n .data(CLUSTER_MANAGEMENT_CONSTANTS.getLegendNodes());\n const legendNodesElements = CDS.createNodes(legendNodeData, CLUSTER_MANAGEMENT_CONSTANTS.SVG_NODE_WIDTH, true);\n CDS.updateNodes(legendNodesElements);\n const LABEL_Y_POSITION = 3;\n legendNodesElements\n .attr('transform', function (d, i) {\n updateLegendDimensions();\n return `translate(${CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT}, ${legendHeight + CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_TOP})`;\n })\n .append('text')\n .classed('links-statuses', true)\n .style('font-weight', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_WEIGHT)\n .style('fill', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_COLOR)\n .attr('x', CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT + CLUSTER_MANAGEMENT_CONSTANTS.SVG_NODE_WIDTH)\n .attr('y', LABEL_Y_POSITION)\n .text(function (d) {\n return translateAndSubscribe(this, 'cluster_management.cluster_graphical_view.' + d.customText);\n });\n };\n\n const addSyncStatus = () => {\n addTitle(legendGroup, 'cluster_management.cluster_graphical_view.legend_title_sync_status');\n const syncStatusesGroups = legendGroup.selectAll('.sync-statuses-group')\n .data(CLUSTER_MANAGEMENT_CONSTANTS.getSyncStatuses())\n .enter()\n .append('g')\n .attr('class', 'sync-statuses-group');\n\n const rowY = new Map();\n\n syncStatusesGroups\n .append('text')\n .attr('class', (d) => `sync-status ${d.classes}`)\n .attr('x', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT - 10)\n .attr('y', function (d, index) {\n const rowTop = index * (20 + CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_TOP) + legendHeight + CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEMS_PADDING_TOP;\n rowY.set(index, rowTop);\n return rowTop;\n })\n .text(function (d) {\n return d.icon;\n });\n\n const labelOffsetY = (CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_ICON_FONT_SIZE - CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE) / 2;\n syncStatusesGroups\n .append('text')\n .style('font-weight', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_WEIGHT)\n .style('fill', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_COLOR)\n .text(function (d) {\n return translateAndSubscribe(this, 'cluster_management.cluster_graphical_view.' + d.labelKey);\n })\n .attr('x', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT + CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE)\n .attr('y', function (d, index) {\n return rowY.get(index) - labelOffsetY;\n })\n .classed('links-statuses', true);\n };\n\n const addLinks = () => {\n addTitle(legendGroup, 'cluster_management.cluster_graphical_view.legend_title_link_states');\n const linkStatesGroup = legendGroup.selectAll('.link-states-group')\n .data(CLUSTER_MANAGEMENT_CONSTANTS.getLegendLinks())\n .enter()\n .append('g')\n .attr('class', 'link-state');\n\n // map vertical positions of each link in order to be able to draw labels next to the links\n const rowY = new Map();\n\n linkStatesGroup\n .append('path')\n .classed('link', true)\n .attr('stroke-dasharray', CDS.setLinkStyle)\n .attr('stroke', CDS.setLinkColor)\n .attr('d', (link, index) => {\n const y = index * (CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE + CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_TOP) + legendHeight + CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEMS_PADDING_TOP;\n const lineWidth = legendWidth / 2;\n rowY.set(index, y);\n let line;\n if (link.status === LinkState.RECEIVING_SNAPSHOT) {\n const lineMidPoint = lineWidth / 2;\n // In order to draw an arrowhead in the middle of a line, the line needs to be composed by\n // two segments, otherwise the arrowhead won't show up.\n line = `M${CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT} ${y} L${lineMidPoint} ${y} L${lineWidth} ${y}`;\n } else {\n line = `M${CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT} ${y} ${lineWidth} ${y}`;\n }\n return line;\n })\n .style(\"marker-mid\", (link) => CDS.setArrowLink(link, ARROW_CONFIG.SMALL));\n\n linkStatesGroup\n .append('text')\n .style('font-size', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_SIZE)\n .style('line-height', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_LINE_HEIGHT)\n .style('font-weight', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_FONT_WEIGHT)\n .style('fill', CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_COLOR)\n .text(function (d) {\n return translateAndSubscribe(this, 'cluster_management.cluster_graphical_view.' + d.linkTypeKey);\n })\n .attr('x', legendWidth/2 + CLUSTER_MANAGEMENT_CONSTANTS.LEGEND_ITEM_PADDING_LEFT)\n .attr('y', function (d, index) {\n return rowY.get(index) + 4;\n })\n .classed('links-statuses', true);\n };\n\n /**\n * Creates main legend container with rectangle that defines width, height and corner radius of legend.\n * @param {*} clusterViewD3Container - main container where legend have to live.\n */\n const createLegendGroup = (clusterViewD3Container) => {\n legendGroup = clusterViewD3Container.append('g')\n .classed('hidden-legend', $scope.hideLegend)\n .classed('cluster-legend-group', true);\n };\n\n const createLegendBackground = () => {\n legendGroup.append('rect')\n .attr('class', 'legend-background')\n .attr('fill', '#EEEEEE');\n };\n\n const updateLegendDimensions = () => {\n legendGroup\n .call((d) => {\n legendHeight = d.node().getBBox().height;\n });\n legendWidth = getMaxWidthOfChildren(legendGroup) + 30;\n };\n\n const updateLegendBackground = () => {\n const maxWidth = getMaxWidthOfChildren(legendGroup);\n legendGroup.select('.legend-background')\n .attr('height', legendHeight + CLUSTER_MANAGEMENT_CONSTANTS.PADDING_TOP * 3)\n .attr('width', maxWidth + CLUSTER_MANAGEMENT_CONSTANTS.BACKGROUND_PADDING)\n .attr('rx', '6');\n };\n\n const getMaxWidthOfChildren = (parent) => {\n let maxWidth = 0;\n\n parent.selectAll(':not(.legend-background)').each(function () {\n const bbox = this.getBBox();\n maxWidth = Math.max(maxWidth, bbox.width);\n });\n\n return maxWidth;\n };\n\n /**\n * Adds title to <code>legendGroup</code>.\n * @param {*} legendGroup - the root group tag (<g>) of legend.\n * @param {string} labelKey\n *\n * @return {*}\n */\n const addTitle = (legendGroup, labelKey) => {\n return legendGroup\n .append('text')\n .attr('class', 'legend-title')\n .attr('x', CLUSTER_MANAGEMENT_CONSTANTS.PADDING_LEFT)\n .style('font-size', CLUSTER_MANAGEMENT_CONSTANTS.TITLE_FONT_SIZE)\n .style('font-weight', CLUSTER_MANAGEMENT_CONSTANTS.TITLE_FONT_WEIGHT)\n .style('line-height', CLUSTER_MANAGEMENT_CONSTANTS.TITLE_LINE_HEIGHT)\n .style('fill', CLUSTER_MANAGEMENT_CONSTANTS.TITLE_COLOR)\n .text(function () {\n return translateAndSubscribe(this, labelKey);\n })\n .attr('y', () => {\n updateLegendDimensions();\n return legendHeight + CLUSTER_MANAGEMENT_CONSTANTS.TITLE_PADDING_TOP;\n });\n };\n\n const translateAndSubscribe = (domElement, labelKey) => {\n subscriptions.push($rootScope.$on('$translateChangeSuccess', () => {\n d3.select(domElement).text($translate.instant(labelKey));\n updateLegendBackground();\n }));\n\n return $translate.instant(labelKey);\n };\n\n const removeAllListeners = () => {\n $document.off('keydown', closeDialog);\n subscriptions.forEach((subscription) => subscription());\n };\n\n const closeDialog = () => {\n $scope.hideLegend = true;\n legendGroup.classed('hidden-legend', $scope.hideLegend);\n };\n\n const onKeyDown = (event) => {\n if (event.key === 'Escape') {\n closeDialog();\n }\n };\n\n // =========================\n // Subscriptions functions\n // =========================\n $document.on('keydown', onKeyDown);\n subscriptions.push(ClusterViewContextService.onClusterViewD3ContainerUpdated(init));\n\n // Deregister the watcher when the scope/directive is destroyed\n $scope.$on('$destroy', removeAllListeners);\n\n init();\n }\n };\n}\n"],"names":["NodeState","LEADER","FOLLOWER","CANDIDATE","OUT_OF_SYNC_BLANK","CLUSTER_MANAGEMENT_CONSTANTS","getLegendNodes","legendNodes","push","nodeState","customText","forEach","node","index","id","getSyncStatuses","labelKey","classes","icon","getLegendLinks","links","status","LinkState","IN_SYNC","linkTypeKey","SYNCING","OUT_OF_SYNC","RECEIVING_SNAPSHOT","link","SVG_NODE_WIDTH","PADDING_LEFT","PADDING_TOP","TITLE_PADDING_TOP","TITLE_FONT_SIZE","TITLE_FONT_WEIGHT","TITLE_COLOR","TITLE_LINE_HEIGHT","LEGEND_ITEM_FONT_SIZE","LEGEND_ITEM_ICON_FONT_SIZE","LEGEND_ITEM_FONT_WEIGHT","LEGEND_ITEM_COLOR","LEGEND_ITEM_LINE_HEIGHT","LEGEND_ITEM_PADDING_LEFT","LEGEND_ITEMS_PADDING_TOP","LEGEND_ITEM_PADDING_TOP","BACKGROUND_PADDING","d3","line","select","clusterColors","ontoOrange","ontoBlue","ontoGreen","ontoGrey","linkStateColors","linkStateStyle","font","FONT_AWESOME","ICOMOON","shortMessageLimit","createClusterSvgElement","element","append","classed","createClusterZone","parent","clusterZone","style","setCreateClusterZone","hasCluster","translationsMap","hasAccess","selectAll","remove","textGroup","attr","text","no_cluster_configured","create_cluster_btn","updateClusterZoneLabels","moveElement","x","y","createNodes","nodesDataBinding","nodeRadius","isLegend","nodeGroup","enter","nodeUpdateElements","merge","createHexagon","exit","nodeElements","nodeTextHost","addHostnameToNodes","updateNodes","nodes","each","d","iconType","isEmpty","recoveryStatus","nodeStateIcons","getNodeIconType","state","iconMap","getNodeInfoIconType","this","updateNodesIcon","updateNodesClasses","labelNode","hostname","getBBox","width","height","updateNodesHostnameText","objectHeight","objectWidth","infoNode","parentNode","rect","calculateElementSizeByText","extractShortMessageFromNode","html","object","shortMessage","isShorten","message","length","displayMessage","truncatedSize","fullSize","on","addRecoveryLabelListeners","resizeLabelDynamic","updateNodesInfoText","RecoveryState","SEARCHING_FOR_NODE","WAITING_FOR_SNAPSHOT","APPLYING_SNAPSHOT","BUILDING_SNAPSHOT","SENDING_SNAPSHOT","RECOVERY_OPERATION_FAILURE_WARNING","NO_CONNECTION","READ_ONLY","RESTRICTED","substring","tmp","document","createElement","innerHTML","padding","position","visibility","fontSize","fontWeight","textAlign","whiteSpace","body","appendChild","getBoundingClientRect","removeChild","createLinks","linksDataBinding","updateLinks","replaceAll","setLinkColor","setLinkStyle","setArrowLink","ARROW_CONFIG","BIG","source","find","address","target","deltaX","deltaY","dist","Math","sqrt","normX","normY","sourceX","sourceY","targetX","targetY","getLinkCoordinates","SMALL","name","size","addArrowHead","svg","config","positionNodesOnClusterZone","clusterZoneX","clusterZoneY","clusterZoneRadius","theta","PI","cos","sin","radius","_s32","points","data","removeEventListeners","NO_CLUSTER","TopologyState","PRIMARY_NODE","SECONDARY_NODE","clusterLegend","$rootScope","ClusterViewContextService","$translate","$document","restrict","templateUrl","scope","$scope","hideLegend","subscriptions","legendGroup","legendHeight","legendWidth","toggleLegend","init","clusterViewD3Container","getClusterViewD3Container","createLegendGroup","createLegendBackground","addNodeStates","addSyncStatus","addLinks","updateLegendDimensions","updateLegendBackground","addTitle","legendNodeData","legendNodesElements","CDS","i","translateAndSubscribe","syncStatusesGroups","rowY","Map","rowTop","set","labelOffsetY","get","linkStatesGroup","lineWidth","lineMidPoint","call","getMaxWidthOfChildren","maxWidth","bbox","max","domElement","$on","instant","closeDialog","event","key","onClusterViewD3ContainerUpdated","removeAllListeners","off","subscription","angular","module","directive","$inject"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"95953.f930b9ba889a452ca771.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/models/similarity/similarity-index-status.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/similarity/similarity-index.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/controllers/agent-instructions-explain-modal.controller.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/connectors/connectors.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/mappers/similarity-index-mapper.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/similarity/similarity-index-type.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/core/services/similarity.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/mappers/connectors-mapper.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/connectors.rest.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/controllers/external-integration-configuration-modal.controller.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/core/services/connectors.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/similarity.rest.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/externalIntegrationModal.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/controllers/agent-settings-modal.controller.js"],"sourcesContent":["export const SimilarityIndexStatus = {\n 'CREATING': 'CREATING',\n 'BUILDING': 'BUILDING',\n 'BUILT': 'BUILT',\n 'REBUILDING': 'REBUILDING',\n 'OUTDATED': 'OUTDATED',\n 'INTERRUPTED': 'INTERRUPTED',\n 'OBSOLETE': 'OBSOLETE',\n 'FAILED': 'FAILED',\n\n 'isCreatingStatus': (status) => {\n return SimilarityIndexStatus.CREATING === status;\n },\n\n 'isBuildingStatus': (status) => {\n return SimilarityIndexStatus.BUILDING === status;\n },\n\n 'isBuiltStatus': (status) => {\n return SimilarityIndexStatus.BUILT === status;\n },\n\n 'isRebuildingStatus': (status) => {\n return SimilarityIndexStatus.REBUILDING === status;\n },\n\n 'isOutdatedStatus': (status) => {\n return SimilarityIndexStatus.OUTDATED === status;\n },\n\n 'isInterruptedStatus': (status) => {\n return SimilarityIndexStatus.INTERRUPTED === status;\n },\n\n 'isObsoleteStatus': (status) => {\n return SimilarityIndexStatus.OBSOLETE === status;\n },\n\n 'isFailedStatus': (status) => {\n return SimilarityIndexStatus.FAILED === status;\n }\n};\n","import {SimilarityIndexType} from \"./similarity-index-type\";\nimport {SimilarityIndexStatus} from \"./similarity-index-status\";\n\nexport class SimilarityIndex {\n constructor() {\n this.analyzer = '';\n this.infer = true;\n this.options = '';\n this.sameAs = true;\n this.searchQuery = '';\n this.selectQuery = '';\n this.stopList = undefined;\n this.name = '';\n\n /**\n * The similarity index type.\n *\n * @type {string}\n */\n this.type = SimilarityIndexType.TEXT;\n\n /**\n * The similarity index type.\n *\n * @type {SimilarityIndexStatus}\n */\n this.status = undefined;\n\n this.analogicalQuery = undefined;\n this.inputIndex = undefined;\n this.isLiteralIndex = '';\n }\n\n isTextType() {\n return SimilarityIndexType.isTextType(this.type);\n }\n\n isTextLiteralType() {\n return SimilarityIndexType.isTextLiteralType(this.type);\n }\n\n isPredicationType() {\n return SimilarityIndexType.isPredicationType(this.type);\n }\n\n isCreatingStatus() {\n return SimilarityIndexStatus.isCreatingStatus(this.status);\n }\n\n isBuildingStatus() {\n return SimilarityIndexStatus.isBuildingStatus(this.status);\n }\n\n isBuiltStatus() {\n return SimilarityIndexStatus.isBuiltStatus(this.status);\n }\n\n isRebuildingStatus() {\n return SimilarityIndexStatus.isRebuildingStatus(this.status);\n }\n\n isOutdatedStatus() {\n return SimilarityIndexStatus.isOutdatedStatus(this.status);\n }\n\n isInterruptedStatus() {\n return SimilarityIndexStatus.isInterruptedStatus(this.status);\n }\n\n isObsoleteStatus() {\n return SimilarityIndexStatus.isObsoleteStatus(this.status);\n }\n\n isFailedStatus() {\n return SimilarityIndexStatus.isFailedStatus(this.status);\n }\n}\n","import 'angular/core/services/similarity.service';\nimport 'angular/core/services/connectors.service';\nimport 'angular/core/services/ttyg.service';\nimport 'angular/rest/repositories.rest.service';\n\nangular\n .module('graphdb.framework.ttyg.controllers.agent-instructions-explain-modal', [])\n .controller('AgentInstructionsExplainModalController', AgentInstructionsExplainModalController);\n\nAgentInstructionsExplainModalController.$inject = [\n '$scope',\n '$uibModalInstance',\n 'ModalService',\n '$translate',\n 'dialogModel'\n];\n\nfunction AgentInstructionsExplainModalController($scope, $uibModalInstance, ModalService, $translate, dialogModel) {\n // =========================\n // Public variables\n // =========================\n\n $scope.agentInstructionsExplain = dialogModel.agentInstructionsExplain;\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Closes the modal when the user clicks the close button.\n */\n $scope.close = () => {\n $uibModalInstance.dismiss({});\n };\n\n $scope.onCloseAgentInstructionsExplainModal = () => {\n $uibModalInstance.dismiss({});\n };\n\n // =========================\n // Private functions\n // =========================\n\n // =========================\n // Subscriptions\n // =========================\n\n const subscriptions = [];\n\n const onDestroy = () => {\n subscriptions.forEach((subscription) => subscription());\n };\n $scope.$on('$destroy', onDestroy);\n\n // =========================\n // Initialization\n // =========================\n}\n","export class ConnectorTypesListModel {\n constructor(data = {}) {\n /**\n * @type {ConnectorTypeModel[]}\n * @private\n */\n this._connectors = data.connectors || [];\n }\n\n getConnectorByName(name) {\n return this._connectors.find((connector) => connector.name === name);\n }\n\n get connectors() {\n return this._connectors;\n }\n\n set connectors(value) {\n this._connectors = value;\n }\n}\n\nexport class ConnectorTypeModel {\n constructor(data) {\n /**\n * @type {string}\n * @private\n */\n this._name = data.name;\n /**\n * @type {string}\n * @private\n */\n this._prefix = data.prefix;\n }\n\n get name() {\n return this._name;\n }\n\n set name(value) {\n this._name = value;\n }\n\n get prefix() {\n return this._prefix;\n }\n\n set prefix(value) {\n this._prefix = value;\n }\n}\n\nexport class ConnectorListModel {\n constructor(data = []) {\n this._connectors = data.connectors;\n }\n\n get connectors() {\n return this._connectors;\n }\n\n set connectors(value) {\n this._connectors = value;\n }\n}\n\nexport class ConnectorModel {\n constructor(data) {\n this._name = data.name;\n this._settings = new ConnectorSettingsModel(data);\n }\n\n get settings() {\n return this._settings;\n }\n\n set settings(value) {\n this._settings = value;\n }\n get name() {\n return this._name;\n }\n\n set name(value) {\n this._name = value;\n }\n}\n\nexport class ConnectorSettingsModel {\n constructor(data) {\n this._settings = data.values || {};\n }\n\n get settings() {\n return this._settings;\n }\n\n set settings(value) {\n this._settings = value;\n }\n}\n","import {SimilarityIndex} from \"../../models/similarity/similarity-index\";\n\n/**\n * Maps the response data to SimilarityIndex objects.\n * @param {*} responseData\n * @return {SimilarityIndex[]}\n */\nexport const mapIndexesResponseToSimilarityIndex = (responseData) => {\n return responseData.map((index) => {\n const similarityIndex = new SimilarityIndex();\n similarityIndex.type = index.type;\n similarityIndex.stopList = index.stopList;\n similarityIndex.status = index.status;\n similarityIndex.selectQuery = index.selectQuery;\n similarityIndex.searchQuery = index.searchQuery;\n similarityIndex.sameAs = index.sameAs;\n similarityIndex.options = index.options;\n similarityIndex.name = index.name;\n similarityIndex.infer = index.infer;\n similarityIndex.analyzer = index.analyzer;\n similarityIndex.analogicalQuery = index.analogicalQuery;\n return similarityIndex;\n });\n};\n","export const SimilarityIndexType = {\n 'TEXT': 'text',\n 'TEXT_LITERAL': 'textLiteral',\n 'PREDICATION': 'predication',\n\n 'isTextType': (type) => {\n return SimilarityIndexType.TEXT === type;\n },\n\n 'isTextLiteralType': (type) => {\n return SimilarityIndexType.TEXT_LITERAL === type;\n },\n\n 'isPredicationType': (type) => {\n return SimilarityIndexType.PREDICATION === type;\n }\n};\n","import 'angular/rest/similarity.rest.service';\nimport {mapIndexesResponseToSimilarityIndex} from \"../../rest/mappers/similarity-index-mapper\";\nimport {SelectMenuOptionsModel} from \"../../models/form-fields\";\n\nconst modules = ['graphdb.framework.rest.similarity.service'];\n\nangular\n .module('graphdb.framework.core.services.similarity', modules)\n .factory('SimilarityService', SimilarityService);\n\nSimilarityService.$inject = ['SimilarityRestService'];\n\nfunction SimilarityService(SimilarityRestService) {\n\n /**\n * Returns the similarity indexes for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the currently selected repository will be used.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<SimilarityIndex[]>}\n */\n const getIndexes = (repositoryId, repositoryLocation) => {\n return SimilarityRestService.getIndexes(repositoryId, repositoryLocation)\n .then((response) => mapIndexesResponseToSimilarityIndex(response.data));\n };\n\n /**\n * Returns the similarity indexes for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code> as a menu model.\n * If the repository ID and repository location are not provided, the currently selected repository will be used.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<SelectMenuOptionsModel[]>}\n */\n const getIndexesAsMenuModel = (repositoryId, repositoryLocation) => {\n return getIndexes(repositoryId, repositoryLocation)\n .then((indexesModel) => {\n return indexesModel.map((index) => {\n return new SelectMenuOptionsModel({label: index.name, value: index.name});\n });\n });\n };\n\n return {\n getIndexes,\n getIndexesAsMenuModel\n };\n}\n","import {\n ConnectorListModel,\n ConnectorModel,\n ConnectorTypeModel,\n ConnectorTypesListModel\n} from \"../../models/connectors/connectors\";\n\n/**\n * Maps the connectors response data to a ConnectorTypesListModel. These are all available connector types.\n * @param {{}} data\n * @return {ConnectorTypesListModel}\n */\nexport const connectorTypesListMapper = (data) => {\n const connectorListModel = new ConnectorTypesListModel();\n if (!data) {\n return connectorListModel;\n }\n connectorListModel.connectors = Object.keys(data).map((key) => {\n return new ConnectorTypeModel({\n name: key,\n prefix: data[key]\n });\n });\n return connectorListModel;\n};\n\n/**\n * Maps the connectors response data to a ConnectorListModel. These are the connector instances of one specific type.\n * @param {*[]} data\n * @return {ConnectorListModel}\n */\nexport const connectorsMapper = (data) => {\n const connectors = new ConnectorListModel();\n if (!data) {\n return connectors;\n }\n connectors.connectors = data.map((connectorResponse) => {\n return new ConnectorModel(connectorResponse);\n });\n return connectors;\n};\n","angular\n .module('graphdb.framework.rest.connectors.service', [])\n .factory('ConnectorsRestService', ConnectorsRestService);\n\nConnectorsRestService.$inject = ['$http'];\n\nconst CONNECTORS_ENDPOINT = 'rest/connectors';\n\nfunction ConnectorsRestService($http) {\n\n return {\n getConnectors,\n initConnector,\n hasConnector,\n checkConnector\n };\n\n /**\n * Fetches all connectors for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the values persisted in local storage will be used {@see authentication.interceptor.js}.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {*} The similarity indexes for the specified repository.\n */\n function getConnectors(repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(CONNECTORS_ENDPOINT, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(CONNECTORS_ENDPOINT);\n }\n\n function initConnector(prefix) {\n return $http.get(`${CONNECTORS_ENDPOINT}/options?prefix=${prefix}`);\n }\n\n /**\n * Fetches all connectors of a specific type defined by the prefix for the repository with id <code>repositoryId</code>\n * and location <code>repositoryLocation</code>. If the repository ID and repository location are not provided, the currently selected repository will be used.\n * @param {string} prefix\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<ConnectorListModel>}\n */\n function hasConnector(prefix, repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(`${CONNECTORS_ENDPOINT}/existing?prefix=${prefix}`);\n }\n\n function checkConnector(data) {\n return $http.post(`${CONNECTORS_ENDPOINT}/check`, data, {\n headers: {\n 'Content-Type': 'text/plain'\n }\n });\n }\n}\n","angular\n .module('graphdb.framework.ttyg.controllers.external-integration-configuration-modal', [])\n .controller('ExternalIntegrationConfigurationModalController', ExternalIntegrationConfigurationModalController);\n\nExternalIntegrationConfigurationModalController.$inject = [\n '$scope',\n '$uibModalInstance',\n 'ModalService',\n '$translate',\n 'dialogModel'\n];\n\nfunction ExternalIntegrationConfigurationModalController($scope, $uibModalInstance, ModalService, $translate, dialogModel) {\n // =========================\n // Public variables\n // =========================\n\n $scope.externalIntegrationConfiguration = dialogModel.externalIntegrationConfiguration;\n $scope.difyExtension = dialogModel.difyExtensionUrl;\n $scope.queryMethods = dialogModel.queryMethodsUrl;\n $scope.agentId = dialogModel.agentId;\n $scope.agentName = dialogModel.agentName;\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Closes the modal when the user clicks the close button.\n */\n $scope.close = () => {\n $uibModalInstance.dismiss({});\n };\n\n $scope.onCloseExternalIntegrationConfigurationModal = () => {\n $uibModalInstance.dismiss({});\n };\n}\n","import 'angular/rest/connectors.rest.service';\nimport {connectorsMapper, connectorTypesListMapper} from \"../../rest/mappers/connectors-mapper\";\nimport {SelectMenuOptionsModel} from \"../../models/form-fields\";\n\nconst modules = ['graphdb.framework.rest.connectors.service'];\n\nangular\n .module('graphdb.framework.core.services.connectors', modules)\n .factory('ConnectorsService', ConnectorsService);\n\nConnectorsService.$inject = ['ConnectorsRestService'];\n\nfunction ConnectorsService(ConnectorsRestService) {\n\n /**\n * Fetches all connector types from the server for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the currently selected repository will be used.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<ConnectorTypesListModel>}\n */\n const getConnectorTypes = (repositoryId, repositoryLocation) => {\n return ConnectorsRestService.getConnectors(repositoryId, repositoryLocation)\n .then((response) => connectorTypesListMapper(response.data));\n };\n\n /**\n * Fetches the connector prefix by its name for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the currently selected repository will be used.\n *\n * @param {string} name\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<string|null>}\n */\n const getConnectorPrefixByName = (name, repositoryId, repositoryLocation) => {\n return getConnectorTypes(repositoryId, repositoryLocation)\n .then((connectorTypesModel) => {\n const connector = connectorTypesModel.getConnectorByName(name);\n return connector ? connector.prefix : null;\n });\n };\n\n /**\n * Fetches all connectors of a specific type defined by the prefix for the repository with id <code>repositoryId</code>\n * and location <code>repositoryLocation</code>. If the repository ID and repository location are not provided, the currently selected repository will be used.\n * @param {string} prefix\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<ConnectorListModel>}\n */\n const getConnectorsByType = (prefix, repositoryId, repositoryLocation) => {\n return ConnectorsRestService.hasConnector(encodeURIComponent(prefix), repositoryId, repositoryLocation)\n .then((response) => {\n return connectorsMapper(response.data);\n });\n };\n\n /**\n * Fetches all connectors of a specific type defined by the prefix and returns them as SelectMenuOptionsModel\n * for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the currently selected repository will be used.\n * @param {string} prefix\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {Promise<SelectMenuOptionsModel[]>}\n */\n const getConnectorsByTypeAsSelectMenuOptions = (prefix, repositoryId, repositoryLocation) => {\n return getConnectorsByType(prefix, repositoryId, repositoryLocation)\n .then((connectorsModel) => connectorsModel.connectors.map((connector) => {\n return new SelectMenuOptionsModel({\n value: connector.name,\n label: connector.name\n });\n }));\n };\n\n return {\n getConnectorTypes,\n getConnectorsByType,\n getConnectorPrefixByName,\n getConnectorsByTypeAsSelectMenuOptions\n };\n}\n","angular\n .module('graphdb.framework.rest.similarity.service', [])\n .factory('SimilarityRestService', SimilarityRestService);\n\nSimilarityRestService.$inject = ['$http', '$repositories'];\n\nconst SIMILARITY_ENDPOINT = 'rest/similarity';\n\nfunction SimilarityRestService($http) {\n\n return {\n getIndexes,\n getSearchQueries,\n rebuildIndex,\n deleteIndex,\n createIndex,\n getSamples,\n getQuery,\n saveSearchQuery\n };\n\n /**\n * Fetches the similarity indexes for the repository with id <code>repositoryId</code> and location <code>repositoryLocation</code>.\n * If the repository ID and repository location are not provided, the currently selected repository will be used.\n *\n * @param {string | undefined} repositoryId - The repository id.\n * @param {string | undefined} repositoryLocation - The repository location.\n * @return {*} The similarity indexes for the specified repository.\n */\n function getIndexes(repositoryId, repositoryLocation) {\n if (repositoryId) {\n return $http.get(SIMILARITY_ENDPOINT, {\n headers: {\n 'X-GraphDB-Repository': repositoryId,\n 'X-GraphDB-Repository-Location': repositoryLocation\n }\n });\n }\n return $http.get(SIMILARITY_ENDPOINT);\n }\n\n function getSamples() {\n return $http.get(`${SIMILARITY_ENDPOINT}/samples`);\n }\n\n function getSearchQueries() {\n return $http.get(`${SIMILARITY_ENDPOINT}/config`);\n }\n\n function createIndex(method, name, options, selectQuery, searchQuery, analogicalQuery, stopList, infer, sameAs, type, analyzer) {\n return $http({\n method,\n url: `${SIMILARITY_ENDPOINT}`,\n noCancelOnRouteChange: true,\n data: {\n name,\n options,\n selectQuery,\n stopList,\n infer,\n sameAs,\n type,\n analyzer,\n searchQuery,\n analogicalQuery\n }\n }\n );\n }\n\n function rebuildIndex(index) {\n return createIndex('PUT', index.name, index.options, index.selectQuery, index.searchQuery, index.analogicalQuery, index.stopList, index.infer, index.sameAs, index.type);\n }\n\n function deleteIndex(index) {\n return $http.delete(`${SIMILARITY_ENDPOINT}?name=${index.name}`);\n }\n\n function getQuery(data) {\n return $http.get('rest/similarity/query',\n {\n params: {\n name: data.indexName,\n options: data.indexOptions,\n stopList: data.indexStopList,\n selectQuery: data.query,\n infer: data.queryInference,\n sameAs: data.querySameAs,\n type: data.viewType,\n analyzer: data.indexAnalyzer\n }\n });\n }\n\n function saveSearchQuery(data) {\n return $http({\n method: 'put',\n url: 'rest/similarity/search-query',\n data\n });\n }\n}\n","import 'angular/ttyg/controllers/external-integration-configuration-modal.controller';\nimport {TTYG_ERROR_MSG_LENGTH} from \"./constants\";\n\nangular\n .module('graphdb.framework.ttyg.services.externalIntegrationModal',\n ['graphdb.framework.ttyg.controllers.external-integration-configuration-modal'])\n .factory('ExternalIntegrationModalService', ExternalIntegrationModalService)\n\nExternalIntegrationModalService.$inject = ['$uibModal', 'LocationsRestService', 'toastr'];\n\nfunction ExternalIntegrationModalService($uibModal, LocationsRestService, toastr) {\n function buildDialogModel(agent, baseUrl) {\n return {\n agentName: agent.name,\n agentId: agent.id,\n queryMethodsUrl: `${baseUrl}/rest/llm/tool/ttyg/${agent.id}`,\n difyExtensionUrl: `${baseUrl}/rest/llm/ttyg/${agent.id}/dify`\n };\n }\n\n function open(agent) {\n return LocationsRestService.getExternalUrl()\n .then((response) => {\n const dialogModel = buildDialogModel(agent, response.data);\n\n return $uibModal.open({\n templateUrl: 'js/angular/ttyg/templates/modal/external-integration-configuration-modal.html',\n controller: 'ExternalIntegrationConfigurationModalController',\n windowClass: 'external-integration-configuration-modal',\n backdrop: 'static',\n resolve: {\n dialogModel: () => dialogModel\n }\n }).result\n .then(() => {\n // Modal was closed with success - do nothing\n })\n .catch(() => {\n // Modal was dismissed — do nothing\n });\n })\n .catch((error) => {\n // Catches API failure\n toastr.error(getError(error, 0, TTYG_ERROR_MSG_LENGTH));\n });\n }\n\n return {open};\n}\n","import {decodeHTML} from \"../../../../app\";\nimport {AdditionalExtractionMethod, ExtractionMethod} from \"../../models/ttyg/agents\";\nimport 'angular/core/services/similarity.service';\nimport 'angular/core/services/connectors.service';\nimport 'angular/core/services/ttyg.service';\nimport 'angular/rest/repositories.rest.service';\nimport 'angular/ttyg/controllers/agent-instructions-explain-modal.controller';\nimport 'angular/ttyg/services/externalIntegrationModal.service';\nimport {REPOSITORY_PARAMS} from \"../../models/repository/repository\";\nimport {TTYGEventName} from \"../services/ttyg-context.service\";\nimport {AGENT_OPERATION, TTYG_ERROR_MSG_LENGTH} from \"../services/constants\";\nimport {mapUriAsNtripleAutocompleteResponse} from \"../../rest/mappers/autocomplete-mapper\";\nimport {DocumentationUrlResolver} from \"../../utils/documentation-url-resolver\";\n\nangular\n .module('graphdb.framework.ttyg.controllers.agent-settings-modal', [\n 'graphdb.framework.core.services.similarity',\n 'graphdb.framework.core.services.connectors',\n 'graphdb.framework.rest.repositories.service',\n 'graphdb.framework.ttyg.controllers.agent-instructions-explain-modal',\n 'graphdb.framework.ttyg.services.externalIntegrationModal',\n 'ngTagsInput'\n ])\n .constant('ExtractionMethodTemplates', {\n 'iri_discovery_search': 'iri-discovery-search',\n 'autocomplete_iri_discovery_search': 'autocomplete-iri-discovery-search'\n })\n .controller('AgentSettingsModalController', AgentSettingsModalController);\n\nAgentSettingsModalController.$inject = [\n '$scope',\n '$uibModalInstance',\n 'ModalService',\n '$uibModal',\n 'SimilarityService',\n 'ConnectorsService',\n 'RepositoriesRestService',\n '$sce',\n 'toastr',\n 'UriUtils',\n '$translate',\n 'dialogModel',\n 'TTYGContextService',\n 'TTYGService',\n 'ExtractionMethodTemplates',\n 'AutocompleteService',\n 'AutocompleteRestService',\n 'ExternalIntegrationModalService',\n 'productInfo'];\n\nfunction AgentSettingsModalController(\n $scope,\n $uibModalInstance,\n ModalService,\n $uibModal,\n SimilarityService,\n ConnectorsService,\n RepositoriesRestService,\n $sce,\n toastr,\n UriUtils,\n $translate,\n dialogModel,\n TTYGContextService,\n TTYGService,\n ExtractionMethodTemplates,\n AutocompleteService,\n AutocompleteRestService,\n ExternalIntegrationModalService,\n productInfo) {\n\n // =========================\n // Private variables\n // =========================\n\n const CHAT_GPT_RETRIEVAL_CONNECTOR_NAME = 'ChatGPT Retrieval';\n\n // =========================\n // Public variables\n // =========================\n\n $scope.AGENT_OPERATION = AGENT_OPERATION;\n\n /**\n * The operation type for the modal. This can be one of <code>AGENT_OPERATION</code> constants.\n */\n $scope.operation = dialogModel.operation;\n\n /**\n * Flag to control the visibility of the loader when creating an agent.\n * @type {boolean}\n */\n $scope.savingAgent = false;\n\n /**\n * The model used in the form.\n * @type {AgentFormModel|*}\n */\n $scope.agentFormModel = dialogModel.agentFormModel;\n\n /**\n * The active repository info model.\n * @type {RepositoryInfoModel|*}\n */\n $scope.activeRepositoryInfo = dialogModel.activeRepositoryInfo;\n\n /**\n * Flags used to show/hide the loader for the extraction methods when the user opens a panel and some data needs to\n * be loaded.\n * @type {{[string]: boolean}} - the key is the extraction method types in <code>ExtractionMethod</code>\n */\n $scope.extractionMethodLoaderFlags = {\n [ExtractionMethod.SIMILARITY]: false\n };\n\n /**\n * The repository select menu options model.\n * @type {SelectMenuOptionsModel[]}\n */\n $scope.activeRepositoryList = dialogModel.activeRepositoryList;\n\n /**\n * The extraction method types constants.\n * @type {{SPARQL: string, FTS_SEARCH: string, SIMILARITY: string, RETRIEVAL: string}}\n */\n $scope.extractionMethods = ExtractionMethod;\n\n /**\n * The additional extraction method types constants.\n * @type {{IRI_DISCOVERY_SEARCH: string, AUTOCOMPLETE_IRI_DISCOVERY_SEARCH: string}}\n */\n $scope.additionalExtractionMethods = AdditionalExtractionMethod;\n\n /**\n * The names of the template files, containing the Extraction Method Templates.\n * @type {Object<string, string>}\n */\n $scope.ExtractionMethodTemplates = ExtractionMethodTemplates;\n\n /**\n * Flag used to show/hide the advanced settings in the modal.\n * @type {boolean}\n */\n $scope.showAdvancedSettings = false;\n\n /**\n * Flag used to show/hide the high temperature warning in the modal.\n * @type {boolean}\n */\n $scope.showHighTemperatureWarning = false;\n\n /**\n * Flag used to control the visibility of the system instruction warning.\n * @type {boolean}\n */\n $scope.showSystemInstructionWarning = false;\n\n /**\n * The similarity indexes to be used for the similarity extraction method as select menu options.\n * @type {SelectMenuOptionsModel[]}\n */\n $scope.similarityIndexes = [];\n\n /**\n * The retrieval connectors to be used for the retrieval extraction method as select menu options.\n * @type {SelectMenuOptionsModel[]}\n */\n $scope.retrievalConnectors = [];\n\n /**\n * Flag used to show/hide the FTS enabled state in the modal.\n * @type {boolean}\n */\n $scope.ftsEnabled = false;\n\n /**\n * The autocomplete suggestions source for the 'Autocomplete IRI discovery' extraction method.\n * @type {*[]}\n */\n $scope.autocompleteSuggestions = [];\n\n /**\n * Flag to determine if the context size field should be visible in the form.\n * @type {boolean}\n */\n $scope.showContextSize = ($scope.agentFormModel.contextSize !== null);\n\n // =========================\n // Public functions\n // =========================\n\n /**\n * Sets the UI touched state and validation state for the extraction methods property so that the UI can show if\n * the user has selected at least one extraction method and warn him if he hasn't.\n *\n * @param {ExtractionMethodFormModel} extractionMethod\n */\n $scope.toggleExtractionMethod = (extractionMethod) => {\n extractionMethod.expanded = extractionMethod.selected;\n $scope.agentSettingsForm.extractionMethods.$setTouched();\n setExtractionMethodValidityStatus();\n extractionPanelToggleHandlers[extractionMethod.method](extractionMethod);\n };\n\n /**\n * Handles the panel toggle event for the extraction method. This is used to do some initialization when the user\n * opens the panel for a specific extraction method.\n * @param {ExtractionMethodFormModel} extractionMethod\n */\n $scope.onExtractionMethodPanelToggle = (extractionMethod) => {\n extractionMethod.toggleCollapse();\n extractionPanelToggleHandlers[extractionMethod.method](extractionMethod);\n };\n\n /**\n * Sets the UI touched state and validation state for the additional extraction methods property so that the UI can show if\n * the user has selected at least one extraction method.\n *\n * @param {AdditionalExtractionMethodFormModel} extractionMethod\n */\n $scope.toggleAdditionalExtractionMethod = (extractionMethod) => {\n extractionMethod.expanded = extractionMethod.selected;\n $scope.checkAutocompleteIndexEnabled();\n additionalExtractionPanelToggleHandlers[extractionMethod.method](extractionMethod);\n };\n\n /**\n * Handles the panel toggle event for the additional extraction method. This is used to do some initialization when the user\n * opens the panel for a specific extraction method.\n * @param {AdditionalExtractionMethodFormModel} extractionMethod\n */\n $scope.onAdditionalExtractionMethodPanelToggle = (extractionMethod) => {\n extractionMethod.toggleCollapse();\n additionalExtractionPanelToggleHandlers[extractionMethod.method](extractionMethod);\n };\n\n $scope.helpInfoForModel = {\n ttygHelpInfo: getModelHelpMessage(),\n linkText: $translate.instant('ttyg.agent.create_agent_modal.form.model.link_text'),\n documentationUrl: DocumentationUrlResolver.getDocumentationUrl(productInfo.productShortVersion, 'talk-to-graph.html#prerequisites-and-configuration')\n }\n\n /**\n * Resolves the hint for the FTS search missing message. This is needed because the hint contains a html link that\n * should be properly rendered.\n * @return {*}\n */\n $scope.getFTSDisabledHelpMessage = () => {\n // The hint contains a html link which should be properly rendered.\n const message = decodeHTML(\n $translate.instant(\n 'ttyg.agent.create_agent_modal.form.fts_search.fts_disabled_message',\n {repositoryEditPage: 'repository/edit/' + $scope.agentFormModel.repositoryId}\n )\n );\n return $sce.trustAsHtml(message);\n };\n\n /**\n * Opens the 'Autocomplete index' view in a new tab.\n */\n $scope.goToAutocompleteView = (event) => {\n event.preventDefault();\n TTYGContextService.emit(TTYGEventName.GO_TO_AUTOCOMPLETE_INDEX_VIEW, {repositoryId: $scope.agentFormModel.repositoryId});\n }\n\n /**\n * Opens the 'Create Similarity' view in a new tab.\n */\n $scope.goToCreateSimilarityView = (event) => {\n event.preventDefault();\n TTYGContextService.emit(TTYGEventName.GO_TO_CREATE_SIMILARITY_VIEW, {repositoryId: $scope.agentFormModel.repositoryId});\n };\n\n /**\n * Opens the 'Connectors' view in a new tab.\n */\n $scope.goToConnectorsView = (event) => {\n event.preventDefault();\n TTYGContextService.emit(TTYGEventName.GO_TO_CONNECTORS_VIEW, {repositoryId: $scope.agentFormModel.repositoryId});\n };\n\n /**\n * Handles the selected agent operation which can be one of <code>AGENT_OPERATION</code> types. Respective handler\n * is called based on the operation type with the agent payload build based on the form model.\n * @return {Promise<void>}\n */\n $scope.ok = () => {\n const agentPayload = $scope.agentFormModel.toPayload();\n return agentOperationHandlers[$scope.operation](agentPayload);\n };\n\n /**\n * Closes the modal when the user cancels the agent creation.\n */\n $scope.cancel = () => {\n $uibModalInstance.dismiss({});\n };\n\n /**\n * Closes the modal when the user clicks the close button.\n */\n $scope.close = () => {\n $uibModalInstance.dismiss({});\n };\n\n /**\n * Updates the similarity search panel.\n *\n * @param {boolean} clearIndexSelection - If true, the selected index will be cleared.\n */\n $scope.updateSimilaritySearchPanel = (clearIndexSelection = false) => {\n const similaritySearchExtractionMethod = $scope.agentFormModel.assistantExtractionMethods.getSimilarityExtractionMethod();\n if (!similaritySearchExtractionMethod.selected) {\n return;\n }\n if (clearIndexSelection) {\n similaritySearchExtractionMethod.similarityIndex = null;\n }\n handleSimilaritySearchExtractionMethodPanelToggle(similaritySearchExtractionMethod);\n };\n\n /**\n * Updates the ChatGPT retrieval connector panel.\n *\n * @param {boolean} clearSelection - If true, the selected connector will be cleared.\n */\n $scope.updateRetrievalConnectorPanel = (clearSelection = false) => {\n const retrievalExtractionExtractionMethod = $scope.agentFormModel.assistantExtractionMethods.getRetrievalExtractionMethod();\n if (!retrievalExtractionExtractionMethod.selected) {\n return;\n }\n if (clearSelection) {\n retrievalExtractionExtractionMethod.retrievalConnectorInstance = null;\n }\n handleRetrievalConnectorExtractionMethodPanelToggle(retrievalExtractionExtractionMethod);\n };\n\n $scope.checkIfFTSEnabled = () => {\n if (!$scope.agentFormModel.repositoryId) {\n $scope.agentSettingsForm.$setValidity('FTSDisabled', false);\n return;\n }\n\n const ftsSearchExtractionMethod = $scope.agentFormModel.assistantExtractionMethods.getFTSSearchExtractionMethod();\n if (!ftsSearchExtractionMethod.selected) {\n // clear the validation status if method is deselected.\n $scope.agentSettingsForm.$setValidity('FTSDisabled', true);\n return;\n }\n\n $scope.extractionMethodLoaderFlags[ExtractionMethod.FTS_SEARCH] = true;\n\n // pass a fake repository info object with only an id because we don't care for the location\n RepositoriesRestService.getRepositoryModel({id: $scope.agentFormModel.repositoryId}).then((repositoryModel) => {\n $scope.ftsEnabled = repositoryModel.getParamValue(REPOSITORY_PARAMS.enableFtsIndex);\n })\n .catch((error) => {\n logAndShowError(error, 'ttyg.agent.messages.error_repository_config_loading');\n })\n .finally(() => {\n $scope.extractionMethodLoaderFlags[ExtractionMethod.FTS_SEARCH] = false;\n $scope.agentSettingsForm.$setValidity('FTSDisabled', $scope.ftsEnabled);\n });\n };\n\n /**\n * Opens a modal to copy the external integration for the currently edited agent.\n *\n * @function\n */\n $scope.openExternalIntegrationConfig = () => {\n const agent = $scope.agentFormModel;\n ExternalIntegrationModalService.open(agent);\n };\n\n /**\n * Handles the change in the repository id field. This is needed because\n * the FTS method configuration depends on the selected repository to be\n * able to validate if the FTS is enabled for that selected repository.\n */\n $scope.onRepositoryChange = () => {\n refreshValidations(true, true);\n };\n\n /**\n * Checks the status of the autocomplete index.\n * @param {AdditionalExtractionMethodFormModel|undefined} method - The extraction method to check the autocomplete\n * index for. This function can be called in the visibilitychange handler, so the method might not be defined.\n * If not provided, it will check the 'Autocomplete IRI discovery search' method from the additional extraction\n * methods.\n */\n $scope.checkAutocompleteIndexEnabled = (method) => {\n if (!method) {\n method = $scope.agentFormModel.additionalExtractionMethods.additionalExtractionMethods\n .find((extractionMethod) => extractionMethod.method === AdditionalExtractionMethod.AUTOCOMPLETE_IRI_DISCOVERY_SEARCH);\n }\n // If the method is not selected, we don't need to check the autocomplete index status.\n // Also, if the repository id is not set, we can't check the autocomplete index status.\n if (method && !method.selected || !$scope.agentFormModel.repositoryId) {\n return;\n }\n const selectedRepositoryInfo = getSelectedRepositoryInfo();\n AutocompleteService.checkAutocompleteStatus(selectedRepositoryInfo.repositoryId, selectedRepositoryInfo.repositoryLocation)\n .then((autocompleteEnabled) => {\n $scope.autocompleteEnabled = autocompleteEnabled;\n $scope.agentSettingsForm.$setValidity('autocompleteDisabled', autocompleteEnabled);\n })\n .catch((error) => {\n $scope.agentSettingsForm.$setValidity('autocompleteDisabled', false);\n toastr.error(getError(error));\n });\n }\n\n /**\n * Restores the default context size.\n */\n $scope.onRestoreDefaultContextSize = () => {\n $scope.agentFormModel.contextSize = $scope.agentFormModel.contextSizeCopy;\n };\n\n /**\n * Restores the default system instructions.\n */\n $scope.onRestoreDefaultSystemInstructions = () => {\n $scope.agentFormModel.instructions.systemInstruction = $scope.agentFormModel.instructions.systemInstructionCopy;\n };\n\n /**\n * Restores the default user instructions.\n */\n $scope.onRestoreDefaultUserInstructions = () => {\n $scope.agentFormModel.instructions.userInstruction = $scope.agentFormModel.instructions.userInstructionCopy;\n };\n\n /**\n * Handles the change in the temperature field. This is needed because the high temperature warning should be shown\n * when the temperature is higher than 1.\n */\n $scope.onTemperatureChange = () => {\n $scope.showHighTemperatureWarning = $scope.agentFormModel.temperature.value > 1;\n };\n\n /**\n * Handles the change in the system instructions field.\n */\n $scope.onSystemInstructionChange = () => {\n if ($scope.agentFormModel.instructions.systemInstruction !== '' && !$scope.showSystemInstructionWarning) {\n $scope.showSystemInstructionWarning = true;\n ModalService.openModalAlert({\n title: $translate.instant('ttyg.agent.create_agent_modal.form.system_instruction.overriding_system_instruction_warning.title'),\n message: $translate.instant('ttyg.agent.create_agent_modal.form.system_instruction.overriding_system_instruction_warning.body')\n }).result\n .then(function () {\n // Do nothing, just warning the user\n });\n }\n if ($scope.agentFormModel.instructions.systemInstruction === '') {\n $scope.showSystemInstructionWarning = false;\n }\n };\n\n /**\n * Opens the agent instructions explain modal.\n */\n $scope.onExplainAgentSettings = () => {\n const agentPayload = $scope.agentFormModel.toPayload();\n TTYGService.explainAgentSettings(agentPayload)\n .then((agentInstructionsExplain) => {\n const options = {\n templateUrl: 'js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html',\n controller: 'AgentInstructionsExplainModalController',\n windowClass: 'agent-instructions-explain-modal',\n backdrop: 'static',\n resolve: {\n dialogModel: function () {\n return {\n agentInstructionsExplain\n };\n }\n },\n size: 'lg'\n };\n $uibModal.open(options).result\n .then(() => {\n // Do nothing\n });\n }).catch((error) => {\n toastr.error(getError(error, 0, TTYG_ERROR_MSG_LENGTH));\n });\n };\n\n $scope.getSuggestions = (event) => {\n const inputText = event.target.value;\n AutocompleteRestService.getAutocompleteSuggestions(inputText)\n .then(mapUriAsNtripleAutocompleteResponse)\n .then((suggestions) => {\n $scope.autocompleteSuggestions = suggestions.map(item => ({text: item.value}));\n }).catch((error) => {\n toastr.error(getError(error, 0, TTYG_ERROR_MSG_LENGTH));\n });\n }\n\n // =========================\n // Private functions\n // =========================\n\n /**\n * Resolves the hint message for the agent model property.\n * This is needed because the hint contains a html link that\n * should be properly rendered.\n * @return {*}\n */\n function getModelHelpMessage() {\n // The hint contains a html link which should be properly rendered.\n const message = decodeHTML($translate.instant('ttyg.agent.create_agent_modal.form.model.hint'));\n return $sce.trustAsHtml(message);\n }\n\n /**\n * Mapping of agent operations to their respective handlers.\n * @type {{[AGENT_OPERATION.EDIT]: (function(*): Promise<void>), [AGENT_OPERATION.CLONE]: (function(*): Promise<void>), [AGENT_OPERATION.CREATE]: (function(*): Promise<void>)}}\n */\n const agentOperationHandlers = {\n [AGENT_OPERATION.CREATE]: (payload) => createAgent(payload),\n [AGENT_OPERATION.EDIT]: (payload) => editAgent(payload),\n [AGENT_OPERATION.CLONE]: (payload) => cloneAgent(payload)\n };\n\n /**\n * Creates a new agent with the given payload and closes the modal if no errors occur.\n * @param {*} newAgentPayload - the payload for the new agent.\n * @return {Promise<void>}\n */\n const createAgent = (newAgentPayload) => {\n $scope.savingAgent = true;\n return TTYGService.createAgent(newAgentPayload)\n .then((agentModel) => {\n $uibModalInstance.close(agentModel);\n toastr.success($translate.instant('ttyg.agent.messages.agent_save_successfully', {agentName: agentModel.name}));\n })\n .catch((error) => {\n toastr.error(getError(error, 0, TTYG_ERROR_MSG_LENGTH));\n })\n .finally(() => {\n $scope.savingAgent = false;\n });\n };\n\n /**\n * Sends the edit agent payload to the server and closes the modal if no errors occur.\n * @param {*} agentPayload - the payload for the agent to be edited.\n * @return {Promise<void>}\n */\n const editAgent = (agentPayload) => {\n $scope.savingAgent = true;\n return TTYGService.editAgent(agentPayload)\n .then((updatedAgent) => {\n $uibModalInstance.close(updatedAgent);\n toastr.success($translate.instant('ttyg.agent.messages.agent_save_successfully', {agentName: updatedAgent.name}));\n })\n .catch((error) => {\n toastr.error(getError(error, 0, TTYG_ERROR_MSG_LENGTH));\n })\n .finally(() => {\n $scope.savingAgent = false;\n });\n };\n\n /**\n * Clones the agent with the given payload and closes the modal if no errors occur.\n * @param {*} agentPayload\n * @return {Promise<void>}\n */\n const cloneAgent = (agentPayload) => {\n $scope.savingAgent = true;\n return TTYGService.createAgent(agentPayload)\n .then((updatedAgent) => {\n $uibModalInstance.close(updatedAgent);\n toastr.success($translate.instant(\"ttyg.agent.messages.agent_save_successfully\", {agentName: updatedAgent.name}));\n })\n .catch((error) => {\n toastr.error(getError(error, 0, TTYG_ERROR_MSG_LENGTH));\n })\n .finally(() => {\n $scope.savingAgent = false;\n });\n };\n\n const logAndShowError = (error, errorMessageKey) => {\n console.error(error);\n toastr.error($translate.instant(errorMessageKey));\n };\n\n const setExtractionMethodValidityStatus = () => {\n $scope.agentSettingsForm.extractionMethods.$setValidity('required', $scope.agentFormModel.hasExtractionMethodSelected());\n };\n\n const handleFTSExtractionMethodPanelToggle = (extractionMethod) => {\n $scope.checkIfFTSEnabled();\n };\n\n /**\n * Returns the repository info model for the selected repository in the form.\n *\n * @return {{repositoryLocation: (*|undefined), repositoryId: (*|undefined)}}\n */\n const getSelectedRepositoryInfo = () => {\n const selectRepositoryInfo = $scope.activeRepositoryList.find((repository) => repository.value === $scope.agentFormModel.repositoryId);\n return {\n repositoryId: selectRepositoryInfo ? selectRepositoryInfo.data.repository.id : undefined,\n repositoryLocation: selectRepositoryInfo ? selectRepositoryInfo.data.repository.location : undefined\n };\n };\n\n const handleSimilaritySearchExtractionMethodPanelToggle = (extractionMethod) => {\n if (!extractionMethod.selected) {\n // clear the validation status if method is deselected.\n $scope.agentSettingsForm.$setValidity('missingIndex', true);\n }\n if (!$scope.agentFormModel.repositoryId) {\n return;\n }\n if (extractionMethod.expanded) {\n $scope.extractionMethodLoaderFlags[extractionMethod.method] = true;\n const selectedRepositoryInfo = getSelectedRepositoryInfo();\n SimilarityService.getIndexesAsMenuModel(selectedRepositoryInfo.repositoryId, selectedRepositoryInfo.repositoryLocation)\n .then((indexes) => {\n $scope.similarityIndexes = indexes;\n $scope.agentSettingsForm.$setValidity('missingIndex', !extractionMethod.selected || !!(indexes && indexes.length));\n updateSelectedSimilarityIndex($scope.similarityIndexes, extractionMethod);\n })\n .catch((error) => {\n $scope.agentSettingsForm.$setValidity('missingIndex', false);\n logAndShowError(error, 'ttyg.agent.messages.error_similarity_indexes_loading');\n })\n .finally(() => {\n $scope.extractionMethodLoaderFlags[extractionMethod.method] = false;\n });\n }\n };\n\n /**\n * Updates the selected similarity index for the extraction method.\n *\n * @param {SelectMenuOptionsModel[]} indexes - The list of all available similarity indexes.\n * @param {Object} extractionMethod - The extraction method object containing the currently selected similarity index.\n */\n const updateSelectedSimilarityIndex = (indexes, extractionMethod) => {\n if (indexes.length === 0) {\n // If no similarity indexes are available, clear the similarity index.\n extractionMethod.similarityIndex = null;\n return;\n }\n\n // If the selected index is not found in the current list, default to the first index.\n const selectedIndex = indexes.find((index) => index.value === extractionMethod.similarityIndex);\n extractionMethod.similarityIndex = selectedIndex ? selectedIndex.value : indexes[0].value;\n };\n\n const handleRetrievalConnectorExtractionMethodPanelToggle = (extractionMethod) => {\n if (!$scope.agentFormModel.repositoryId) {\n return;\n }\n if (!extractionMethod.selected) {\n // clear the validation status if method is deselected.\n $scope.agentSettingsForm.$setValidity('missingConnector', true);\n }\n\n if (extractionMethod.expanded) {\n $scope.extractionMethodLoaderFlags[extractionMethod.method] = true;\n const selectedRepositoryInfo = getSelectedRepositoryInfo();\n ConnectorsService.getConnectorPrefixByName(CHAT_GPT_RETRIEVAL_CONNECTOR_NAME, selectedRepositoryInfo.repositoryId, selectedRepositoryInfo.repositoryLocation)\n .then((prefix) => ConnectorsService.getConnectorsByTypeAsSelectMenuOptions(prefix, selectedRepositoryInfo.repositoryId, selectedRepositoryInfo.repositoryLocation))\n .then((connectors) => {\n $scope.retrievalConnectors = connectors;\n $scope.agentSettingsForm.$setValidity('missingConnector', !extractionMethod.selected || !!(connectors && connectors.length));\n updateSelectedRetrievalConnector($scope.retrievalConnectors, extractionMethod);\n\n })\n .catch((error) => {\n $scope.agentSettingsForm.$setValidity('missingConnector', false);\n logAndShowError(error, 'ttyg.agent.messages.error_retrieval_connectors_loading');\n })\n .finally(() => {\n $scope.extractionMethodLoaderFlags[extractionMethod.method] = false;\n });\n }\n };\n\n /**\n * Updates the selected retrieval connector for the extraction method.\n *\n * @param {SelectMenuOptionsModel[]} retrievalConnectors - The list of all available connectors.\n * @param {Object} extractionMethod - The extraction method object containing the currently selected retrieval connector.\n */\n const updateSelectedRetrievalConnector = (retrievalConnectors, extractionMethod) => {\n if (retrievalConnectors.length === 0) {\n // If no connector are available, clear the similarity index.\n extractionMethod.retrievalConnectorInstance = null;\n return;\n }\n const selectedConnector = retrievalConnectors.find((connector) => connector.value === extractionMethod.retrievalConnectorInstance);\n\n // If the selected connector is not found in the current list, default to the first index.\n extractionMethod.retrievalConnectorInstance = selectedConnector\n ? selectedConnector.value\n : retrievalConnectors[0].value;\n };\n\n const extractionPanelToggleHandlers = {\n [ExtractionMethod.FTS_SEARCH]: (extractionMethod) => handleFTSExtractionMethodPanelToggle(extractionMethod),\n [ExtractionMethod.SPARQL]: (extractionMethod) => {\n },\n [ExtractionMethod.SIMILARITY]: (extractionMethod) => handleSimilaritySearchExtractionMethodPanelToggle(extractionMethod),\n [ExtractionMethod.RETRIEVAL]: (extractionMethod) => handleRetrievalConnectorExtractionMethodPanelToggle(extractionMethod)\n };\n\n const additionalExtractionPanelToggleHandlers = {\n [AdditionalExtractionMethod.AUTOCOMPLETE_IRI_DISCOVERY_SEARCH]: (extractionMethod) => handleAutocompleteExtractionMethodPanelToggle(extractionMethod),\n [AdditionalExtractionMethod.IRI_DISCOVERY_SEARCH]: () => {\n },\n };\n\n const handleAutocompleteExtractionMethodPanelToggle = (extractionMethod) => {\n if (!extractionMethod.selected) {\n // clear the validation status if method is deselected.\n $scope.agentSettingsForm.$setValidity('autocompleteDisabled', true);\n }\n $scope.checkAutocompleteIndexEnabled(extractionMethod);\n }\n\n const refreshValidations = (clearIndexSelection = false, clearRetrievalConnectorSelection = false) => {\n $scope.checkIfFTSEnabled();\n $scope.updateSimilaritySearchPanel(clearIndexSelection);\n $scope.updateRetrievalConnectorPanel(clearRetrievalConnectorSelection);\n $scope.checkAutocompleteIndexEnabled();\n };\n\n const onTabVisibilityChanged = () => {\n if (!document.hidden) {\n refreshValidations();\n }\n };\n\n // =========================\n // Subscriptions\n // =========================\n\n const removeAllSubscribers = () => {\n document.removeEventListener(\"visibilitychange\", onTabVisibilityChanged);\n };\n\n document.addEventListener(\"visibilitychange\", onTabVisibilityChanged);\n\n // Deregister the watcher when the scope/directive is destroyed\n $scope.$on('$destroy', removeAllSubscribers);\n\n\n // =========================\n // Initialization\n // =========================\n\n const init = () => {\n // Set repository id to null if it is missing from the list of active repositories\n const selectedRepositoryInfo = getSelectedRepositoryInfo();\n if (!selectedRepositoryInfo.repositoryId) {\n $scope.agentFormModel.repositoryId = null;\n }\n // Delay the validation status setting because angular form ngmodel is not present immediately\n setTimeout(setExtractionMethodValidityStatus, 0);\n };\n init();\n}\n"],"names":["SimilarityIndexStatus","status","CREATING","BUILDING","BUILT","REBUILDING","OUTDATED","INTERRUPTED","OBSOLETE","FAILED","SimilarityIndex","constructor","this","analyzer","infer","options","sameAs","searchQuery","selectQuery","stopList","undefined","name","type","SimilarityIndexType","TEXT","analogicalQuery","inputIndex","isLiteralIndex","isTextType","isTextLiteralType","isPredicationType","isCreatingStatus","isBuildingStatus","isBuiltStatus","isRebuildingStatus","isOutdatedStatus","isInterruptedStatus","isObsoleteStatus","isFailedStatus","AgentInstructionsExplainModalController","$scope","$uibModalInstance","ModalService","$translate","dialogModel","agentInstructionsExplain","close","dismiss","onCloseAgentInstructionsExplainModal","subscriptions","$on","onDestroy","forEach","subscription","angular","module","controller","$inject","ConnectorTypesListModel","data","_connectors","connectors","getConnectorByName","find","connector","value","ConnectorTypeModel","_name","_prefix","prefix","ConnectorListModel","ConnectorModel","_settings","ConnectorSettingsModel","settings","values","mapIndexesResponseToSimilarityIndex","responseData","map","index","similarityIndex","TEXT_LITERAL","PREDICATION","SimilarityService","SimilarityRestService","getIndexes","repositoryId","repositoryLocation","then","response","getIndexesAsMenuModel","indexesModel","SelectMenuOptionsModel","label","factory","connectorTypesListMapper","connectorListModel","Object","keys","key","connectorsMapper","connectorResponse","ConnectorsRestService","CONNECTORS_ENDPOINT","$http","getConnectors","get","headers","initConnector","hasConnector","checkConnector","post","ExternalIntegrationConfigurationModalController","externalIntegrationConfiguration","difyExtension","difyExtensionUrl","queryMethods","queryMethodsUrl","agentId","agentName","onCloseExternalIntegrationConfigurationModal","ConnectorsService","getConnectorTypes","getConnectorsByType","encodeURIComponent","getConnectorPrefixByName","connectorTypesModel","getConnectorsByTypeAsSelectMenuOptions","connectorsModel","SIMILARITY_ENDPOINT","getSearchQueries","rebuildIndex","createIndex","deleteIndex","delete","getSamples","getQuery","params","indexName","indexOptions","indexStopList","query","queryInference","querySameAs","viewType","indexAnalyzer","saveSearchQuery","method","url","noCancelOnRouteChange","ExternalIntegrationModalService","$uibModal","LocationsRestService","toastr","open","agent","getExternalUrl","baseUrl","id","buildDialogModel","templateUrl","windowClass","backdrop","resolve","result","catch","error","getError","TTYG_ERROR_MSG_LENGTH","AgentSettingsModalController","RepositoriesRestService","$sce","UriUtils","TTYGContextService","TTYGService","ExtractionMethodTemplates","AutocompleteService","AutocompleteRestService","productInfo","AGENT_OPERATION","operation","savingAgent","agentFormModel","activeRepositoryInfo","extractionMethodLoaderFlags","ExtractionMethod","SIMILARITY","activeRepositoryList","extractionMethods","additionalExtractionMethods","AdditionalExtractionMethod","showAdvancedSettings","showHighTemperatureWarning","showSystemInstructionWarning","similarityIndexes","retrievalConnectors","ftsEnabled","autocompleteSuggestions","showContextSize","contextSize","toggleExtractionMethod","extractionMethod","expanded","selected","agentSettingsForm","$setTouched","setExtractionMethodValidityStatus","extractionPanelToggleHandlers","onExtractionMethodPanelToggle","toggleCollapse","toggleAdditionalExtractionMethod","checkAutocompleteIndexEnabled","additionalExtractionPanelToggleHandlers","onAdditionalExtractionMethodPanelToggle","helpInfoForModel","ttygHelpInfo","message","decodeHTML","instant","trustAsHtml","getModelHelpMessage","linkText","documentationUrl","DocumentationUrlResolver","getDocumentationUrl","productShortVersion","getFTSDisabledHelpMessage","repositoryEditPage","goToAutocompleteView","event","preventDefault","emit","TTYGEventName","GO_TO_AUTOCOMPLETE_INDEX_VIEW","goToCreateSimilarityView","GO_TO_CREATE_SIMILARITY_VIEW","goToConnectorsView","GO_TO_CONNECTORS_VIEW","ok","agentPayload","toPayload","agentOperationHandlers","cancel","updateSimilaritySearchPanel","clearIndexSelection","similaritySearchExtractionMethod","assistantExtractionMethods","getSimilarityExtractionMethod","handleSimilaritySearchExtractionMethodPanelToggle","updateRetrievalConnectorPanel","clearSelection","retrievalExtractionExtractionMethod","getRetrievalExtractionMethod","retrievalConnectorInstance","handleRetrievalConnectorExtractionMethodPanelToggle","checkIfFTSEnabled","getFTSSearchExtractionMethod","FTS_SEARCH","getRepositoryModel","repositoryModel","getParamValue","REPOSITORY_PARAMS","enableFtsIndex","logAndShowError","finally","$setValidity","openExternalIntegrationConfig","onRepositoryChange","refreshValidations","AUTOCOMPLETE_IRI_DISCOVERY_SEARCH","selectedRepositoryInfo","getSelectedRepositoryInfo","checkAutocompleteStatus","autocompleteEnabled","onRestoreDefaultContextSize","contextSizeCopy","onRestoreDefaultSystemInstructions","instructions","systemInstruction","systemInstructionCopy","onRestoreDefaultUserInstructions","userInstruction","userInstructionCopy","onTemperatureChange","temperature","onSystemInstructionChange","openModalAlert","title","onExplainAgentSettings","explainAgentSettings","size","getSuggestions","inputText","target","getAutocompleteSuggestions","mapUriAsNtripleAutocompleteResponse","suggestions","item","text","CREATE","payload","createAgent","EDIT","editAgent","CLONE","cloneAgent","newAgentPayload","agentModel","success","updatedAgent","errorMessageKey","console","hasExtractionMethodSelected","selectRepositoryInfo","repository","location","indexes","length","updateSelectedSimilarityIndex","selectedIndex","updateSelectedRetrievalConnector","selectedConnector","SPARQL","RETRIEVAL","handleAutocompleteExtractionMethodPanelToggle","IRI_DISCOVERY_SEARCH","clearRetrievalConnectorSelection","onTabVisibilityChanged","document","hidden","addEventListener","removeAllSubscribers","removeEventListener","setTimeout","constant"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- export const __webpack_id__=98860;export const __webpack_ids__=[98860];export const __webpack_modules__={98860:()=>{PluginRegistry.add("guide.step",[{guideBlockName:"conversation-with-ttyg-agent",getSteps:(t,e)=>{const o=e.GuideUtils;t.mainAction="conversation-with-ttyg-agent";const n=t.startNewConversation,i=[];if(t.showInfo&&i.push({guideBlockName:"info-message",options:angular.extend({},{skipPoint:!0,url:"/ttyg",class:"conversation-info-guide-dialog",content:"guide.step_plugin.conversation-with-ttyg-agent.info"},t)}),n){const e=o.getGuideElementSelector("create-chat-btn"),n=[{guideBlockName:"info-message",options:angular.extend({},{url:"/ttyg",beforeShowPromise:(t,n)=>o.waitFor(e,1).then(()=>{setTimeout(()=>t.next())}).catch(()=>{const e=n.id;setTimeout(()=>t.show(e+2))})},t)},{guideBlockName:"clickable-element",options:angular.extend({},{content:"guide.step_plugin.conversation-with-ttyg-agent.start-conversation",class:"start-conversation-guide-dialog",url:"/ttyg",elementSelector:e,disableNextFlow:!0},t)}];i.push(...n)}const s=t.questions.map(t=>({guideBlockName:"ask-ttyg-agent",options:t}));return i.push(...s),i}}])}};
2
- //# sourceMappingURL=98860.30ea9a212cf6e622ec36.bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"98860.30ea9a212cf6e622ec36.bundle.js","mappings":"oHAAAA,eAAeC,IAAI,aAAc,CAC7B,CACIC,eAAgB,+BAChBC,SAAUA,CAACC,EAASC,KAChB,MAAMC,EAAaD,EAASC,WAC5BF,EAAQG,WAAa,+BACrB,MAAMC,EAAuBJ,EAAQI,qBAG/BC,EAAQ,GAcd,GAhBiBL,EAAQM,UAKrBD,EAAME,KAAK,CACPT,eAAgB,eAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBC,WAAW,EACXC,IAAK,QACLC,MAAO,iCACPC,QAAS,uDACVb,KAIPI,EAAsB,CACtB,MAAMU,EAAwBZ,EAAWa,wBAAwB,mBAC3DC,EAA4B,CAC9B,CAEIlB,eAAgB,eAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBE,IAAK,QACLM,kBAAmBA,CAACC,EAAOC,IAAgBjB,EAAWkB,QAAQN,EAAuB,GAChFO,KAAK,KAEFC,WAAW,IAAMJ,EAAMK,UAE1BC,MAAM,KACH,MAAMC,EAASN,EAAYO,GAE3BJ,WAAW,IAAMJ,EAAMS,KAAKF,EAAS,OAE9CzB,IAEP,CACIF,eAAgB,oBAChBE,QAASQ,QAAQC,OAAO,CAAC,EAAG,CACxBI,QAAS,oEACTD,MAAO,kCACPD,IAAK,QACLiB,gBAAiBd,EACjBe,iBAAiB,GAClB7B,KAGXK,EAAME,QAAQS,EAClB,CAEA,MAAMc,EAAgB9B,EAAQ+B,UAAUC,IAAKC,IAClC,CACHnC,eAAgB,iBAChBE,QAASiC,KAMjB,OAFA5B,EAAME,QAAQuB,GAEPzB,K","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/guides/steps/complex/ttyg/conversation-with-ttyg-agent/plugin.js"],"sourcesContent":["PluginRegistry.add('guide.step', [\n {\n guideBlockName: 'conversation-with-ttyg-agent',\n getSteps: (options, services) => {\n const GuideUtils = services.GuideUtils;\n options.mainAction = 'conversation-with-ttyg-agent';\n const startNewConversation = options.startNewConversation;\n const showInfo = options.showInfo;\n\n const steps = [];\n\n if (showInfo) {\n steps.push({\n guideBlockName: 'info-message',\n options: angular.extend({}, {\n skipPoint: true,\n url: '/ttyg',\n class: 'conversation-info-guide-dialog',\n content: 'guide.step_plugin.conversation-with-ttyg-agent.info',\n }, options)\n })\n }\n\n if (startNewConversation) {\n const createChatBtnSelector = GuideUtils.getGuideElementSelector('create-chat-btn')\n const newConversationStartSteps = [\n {\n // If button is not visible for some reason, skip the whole step\n guideBlockName: 'info-message',\n options: angular.extend({}, {\n url: '/ttyg',\n beforeShowPromise: (guide, currentStep) => GuideUtils.waitFor(createChatBtnSelector, 1)\n .then(() => {\n // Using a timeout because the library executes logic to show the step in a then clause which causes current and next steps to show\n setTimeout(() => guide.next())\n })\n .catch(() => {\n const stepId = currentStep.id;\n // Using a timeout because the library executes logic to show the step in a then clause which causes current and next steps to show\n setTimeout(() => guide.show(stepId + 2))\n }),\n }, options)\n },\n {\n guideBlockName: 'clickable-element',\n options: angular.extend({}, {\n content: 'guide.step_plugin.conversation-with-ttyg-agent.start-conversation',\n class: 'start-conversation-guide-dialog',\n url: '/ttyg',\n elementSelector: createChatBtnSelector,\n disableNextFlow: true\n }, options)\n }\n ]\n steps.push(...newConversationStartSteps);\n }\n\n const questionSteps = options.questions.map((questionWithOptions) => {\n return {\n guideBlockName: 'ask-ttyg-agent',\n options: questionWithOptions\n };\n });\n\n steps.push(...questionSteps);\n\n return steps;\n }\n }\n]);\n"],"names":["PluginRegistry","add","guideBlockName","getSteps","options","services","GuideUtils","mainAction","startNewConversation","steps","showInfo","push","angular","extend","skipPoint","url","class","content","createChatBtnSelector","getGuideElementSelector","newConversationStartSteps","beforeShowPromise","guide","currentStep","waitFor","then","setTimeout","next","catch","stepId","id","show","elementSelector","disableNextFlow","questionSteps","questions","map","questionWithOptions"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- import{r as t,h as e,a as i,g as s}from"./p-I_gcXFWK.js";import{ServiceProvider as a,SecurityContextService as o,AuthenticationService as n,NavigationContextService as h,SubscriptionList as r,WindowService as d,EventService as l,EventName as b,LocalStorageSubscriptionHandlerService as c,RestrictedPages as f,getPathName as u}from"@ontotext/workbench-api";function m(e,t=300){let i;return(...s)=>{clearTimeout(i),i=setTimeout(()=>e.apply(this,s),t)}}const p={MD:768},y=p.MD,v=':host{display:block;height:100%}.wb-layout{display:grid;grid-template-columns:15rem minmax(200px, 1fr);grid-template-rows:auto 1fr auto;grid-template-areas:"nav header" "nav main" "nav footer";min-height:100vh;margin:0}.wb-layout.expanded{grid-template-columns:4.375rem 1fr}.wb-layout nav{grid-area:nav}.wb-layout header{grid-area:header}.wb-layout main{grid-area:main}.wb-layout main .main-container{margin-left:0}.wb-layout .default-slot-wrapper{display:none}.wb-layout footer{grid-area:footer}.wb-header{position:sticky;top:0;z-index:999}',w=class{constructor(e){t(this,e),this.securityContextService=a.get(o),this.authenticationService=a.get(n),this.navigationContextService=a.get(h),this.isLowResolution=!1,this.hasPermission=!0,this.showFooter=this.isAuthenticatedFully(),this.subscriptions=new r,this.isNavbarCollapsed=!1,this.windowResizeObserver=m(()=>this.windowResizeHandler(),50),d.getWindow().addEventListener("storage",this.handleStorageChange)}componentDidLoad(){this.windowResizeHandler()}connectedCallback(){this.subscribeToSecurityChanges(),this.updateVisibility(),this.subscriptions.add(this.securityContextService.onRestrictedPagesChanged(e=>this.setPermission(e))),this.subscriptions.add(a.get(l).subscribe(b.NAVIGATION_END,e=>{this.navigationContextService.updatePreviousRoute(e.oldUrl),this.setPermission(this.securityContextService.getRestrictedPages())})),this.setPermission(this.securityContextService.getRestrictedPages())}disconnectedCallback(){this.subscriptions.unsubscribeAll()}render(){return e(i,{key:"5d814f892fde4148f87848dbfb6a1297479b110d",class:"wb-layout"},e("div",{key:"3189f4fd2434630807d924b656e70e0f91aac9ec",class:"default-slot-wrapper"},e("slot",{key:"58aafe83a0ca87647bf9de541228b07f2acebdc8",name:"default"})),e("header",{key:"ee1a6fc5254f30e198b190725bdbfebf76c3932d",class:"wb-header"},this.isVisible&&e("onto-header",{key:"6eed310ab3e1707d24c4331fe70962b41e628bb9"})),e("nav",{key:"7759747f8d91d95e569e9a603b9d11c20d46a75c",class:"wb-navbar"},e("onto-navbar",{key:"08946fa871e0cb2bd84831b4ab57592ade2813b1",ref:this.assignNavbarRef(),"navbar-collapsed":this.isLowResolution})),this.hasPermission?e("div",{class:"main-slot-wrapper"},e("slot",{name:"main"})):e("onto-permission-banner",null),e("footer",{key:"c7340dc1f4f10ff700a89fe2500e63ea782b341d",class:"wb-footer"},this.isVisible&&e("onto-footer",{key:"cb8907cf8f7254be6624a1891ca3a31edaa6554c"})),e("onto-tooltip",{key:"23f587a3461d7deae856897b7ceb92e5fc1446a8"}),e("onto-toastr",{key:"8f49abb3110ba0bb92d9ab2530f95bbc7f9b019f"}))}onNavbarToggled(e){this.isNavbarCollapsed=e.detail.payload,this.isNavbarCollapsed?this.hostElement.classList.add("expanded"):this.hostElement.classList.remove("expanded")}onResize(){this.windowResizeObserver()}windowResizeHandler(){this.isLowResolution=d.getWindow().innerWidth<=y,this.isLowResolution||this.isNavbarCollapsed?this.hostElement.classList.add("expanded"):this.hostElement.classList.remove("expanded")}handleStorageChange(e){a.get(c).handleStorageChange(e)}subscribeToSecurityChanges(){const e=a.get(o);this.subscriptions.add(e.onAuthenticatedUserChanged(e=>{this.authenticatedUser=e,this.updateVisibility()})),this.subscriptions.add(e.onSecurityConfigChanged(e=>{this.securityConfig=e,this.updateVisibility()})),this.subscriptions.add(a.get(l).subscribe(b.LOGOUT,()=>{this.setNavbarItemVisibility(),this.updateVisibility(),this.securityContextService.updateRestrictedPages(new f)})),this.subscriptions.add(e.onAuthTokenChanged(()=>{this.setNavbarItemVisibility(),this.updateVisibility()}))}setPermission(e){if(e){const t=u();this.hasPermission=!e.isRestricted(t)||!this.authenticationService.hasAuthority()}else this.hasPermission=!0;const t=document.querySelector(".wb-layout main");t&&(t.style.display=this.hasPermission?"block":"none")}updateVisibility(){if(this.authenticationService.isSecurityEnabled()){const e=!!this.authenticatedUser&&!!this.securityConfig,t=this.authenticationService.isAuthenticated()||this.authenticationService.hasFreeAccess();this.isVisible=e&&t,this.showFooter=t}else this.isVisible=!0,this.showFooter=!0}isAuthenticatedFully(){const e=a.get(n);return!e.isSecurityEnabled()||e.isAuthenticated()||e.hasFreeAccess()}shouldShowMenu(e){return this.isAuthenticatedFully()&&a.get(n).hasRole(e)}assignNavbarRef(){return e=>{this.navbarRef=e,this.navbarRef.menuItems=d.getWindow().PluginRegistry.get("main.menu"),this.setNavbarItemVisibility()}}setNavbarItemVisibility(){var e,t,i;if(!(null===(e=this.navbarRef)||void 0===e?void 0:e.menuItems))return;const s=e=>{var t;e.shouldShow=this.shouldShowMenu(e.role),(null===(t=e.children)||void 0===t?void 0:t.length)&&e.children.forEach(s)};null===(i=null===(t=this.navbarRef)||void 0===t?void 0:t.menuItems)||void 0===i||i.forEach(e=>{e.items.forEach(s)}),this.navbarRef.menuItems=[...this.navbarRef.menuItems]}get hostElement(){return s(this)}};w.style=v;export{w as onto_layout};
@@ -1 +0,0 @@
1
- {"version":3,"names":["debounce","func","wait","timer","args","clearTimeout","setTimeout","apply","this","RESPONSIVE_BREAKPOINTS","MD","WINDOW_WIDTH_FOR_COLLAPSED_NAVBAR","ontoLayoutCss","OntoLayout","constructor","hostRef","securityContextService","ServiceProvider","get","SecurityContextService","authenticationService","AuthenticationService","navigationContextService","NavigationContextService","isLowResolution","hasPermission","showFooter","isAuthenticatedFully","subscriptions","SubscriptionList","isNavbarCollapsed","windowResizeObserver","windowResizeHandler","WindowService","getWindow","addEventListener","handleStorageChange","componentDidLoad","connectedCallback","subscribeToSecurityChanges","updateVisibility","add","onRestrictedPagesChanged","restrictedPages","setPermission","EventService","subscribe","EventName","NAVIGATION_END","navigationEndPayload","updatePreviousRoute","oldUrl","getRestrictedPages","disconnectedCallback","unsubscribeAll","render","h","Host","key","class","name","isVisible","ref","assignNavbarRef","onNavbarToggled","event","detail","payload","hostElement","classList","remove","onResize","innerWidth","service","LocalStorageSubscriptionHandlerService","onAuthenticatedUserChanged","authenticatedUser","onSecurityConfigChanged","securityConfig","LOGOUT","setNavbarItemVisibility","updateRestrictedPages","RestrictedPages","onAuthTokenChanged","permissions","path","getPathName","isRestricted","hasAuthority","mainContent","document","querySelector","style","display","isSecurityEnabled","hasAuth","isAuthenticated","hasFreeAccess","authService","shouldShowMenu","role","hasRole","navbar","navbarRef","menuItems","PluginRegistry","_a","processItem","item","shouldShow","children","length","forEach","_c","_b","plugin","items"],"sources":["src/utils/function-utils.ts","src/models/constants.ts","src/components/onto-layout/onto-layout.scss?tag=onto-layout","src/components/onto-layout/onto-layout.tsx"],"sourcesContent":["export function debounce(func, wait = 300) {\n let timer: string | number | NodeJS.Timeout;\n return (...args: any) => {\n clearTimeout(timer);\n timer = setTimeout(() => func.apply(this, args), wait);\n };\n}\n","export const RESPONSIVE_BREAKPOINTS = {\n SM: 640,\n MD: 768,\n LG: 1024,\n XL: 1280,\n XXL: 1400,\n};\n\n/**\n * The width of the window in pixels at which the navbar should collapse.\n */\nexport const WINDOW_WIDTH_FOR_COLLAPSED_NAVBAR = RESPONSIVE_BREAKPOINTS.MD;\n",":host {\n display: block;\n height: 100%;\n}\n.wb-layout {\n display: grid;\n grid-template-columns: 15rem minmax(200px, 1fr);\n grid-template-rows: auto 1fr auto;\n grid-template-areas:\n \"nav header\"\n \"nav main\"\n \"nav footer\";\n min-height: 100vh;\n margin: 0;\n\n &.expanded {\n grid-template-columns: 4.375rem 1fr;\n }\n\n nav {\n grid-area: nav;\n }\n\n header {\n grid-area: header;\n }\n\n main {\n grid-area: main;\n }\n\n main .main-container {\n /* This is a temporary solution to properly align the main container next to the sidebar until a proper layout is in place. */\n margin-left: 0;\n }\n\n .default-slot-wrapper {\n display: none;\n }\n\n footer {\n grid-area: footer;\n }\n}\n\n.wb-header {\n position: sticky;\n top: 0;\n z-index: 999;\n}\n","import {Component, Host, h, Listen, Element, State} from '@stencil/core';\nimport {NavbarToggledEvent} from \"../onto-navbar/navbar-toggled-event\";\nimport {debounce} from \"../../utils/function-utils\";\nimport {WINDOW_WIDTH_FOR_COLLAPSED_NAVBAR} from \"../../models/constants\";\nimport {\n ServiceProvider,\n LocalStorageSubscriptionHandlerService,\n SecurityContextService,\n RestrictedPages,\n EventService,\n EventName,\n SubscriptionList,\n AuthenticatedUser,\n SecurityConfig,\n Authority,\n AuthenticationService, NavigationEndPayload, NavigationContextService, getPathName, WindowService\n} from '@ontotext/workbench-api';\nimport {ExternalMenuItemModel} from '../onto-navbar/external-menu-model';\n\n@Component({\n tag: 'onto-layout',\n styleUrl: 'onto-layout.scss',\n shadow: false,\n})\nexport class OntoLayout {\n // ========================\n // Services\n // ========================\n private readonly securityContextService = ServiceProvider.get(SecurityContextService);\n private readonly authenticationService = ServiceProvider.get(AuthenticationService);\n private readonly navigationContextService = ServiceProvider.get(NavigationContextService);\n\n // ========================\n // DOM Refs\n // ========================\n @Element() hostElement: HTMLOntoLayoutElement;\n private navbarRef: HTMLOntoNavbarElement;\n\n // ========================\n // State\n // ========================\n @State() authenticatedUser: AuthenticatedUser;\n @State() authToken: string | null;\n @State() securityConfig: SecurityConfig;\n @State() isLowResolution = false;\n @State() hasPermission: boolean = true;\n @State() showFooter = this.isAuthenticatedFully();\n @State() isVisible: boolean;\n\n // ========================\n // Private\n // ========================\n /**\n * List of subscriptions to manage component lifecycle\n * */\n private readonly subscriptions: SubscriptionList = new SubscriptionList();\n private readonly windowResizeObserver: (...args: any) => void;\n private isNavbarCollapsed = false;\n\n // ========================\n // Lifecycle methods\n // ========================\n constructor() {\n this.windowResizeObserver = debounce(() => this.windowResizeHandler(), 50);\n WindowService.getWindow().addEventListener(\"storage\", this.handleStorageChange);\n }\n\n componentDidLoad() {\n this.windowResizeHandler();\n }\n\n connectedCallback() {\n this.subscribeToSecurityChanges();\n this.updateVisibility();\n // Subscribing here, because after a disconnectedCallback the connectedCallback is called, instead of componentDidLoad or constructor\n this.subscriptions.add(this.securityContextService.onRestrictedPagesChanged((restrictedPages) => this.setPermission(restrictedPages)));\n this.subscriptions.add(\n ServiceProvider.get(EventService).subscribe(EventName.NAVIGATION_END, (navigationEndPayload: NavigationEndPayload) => {\n this.navigationContextService.updatePreviousRoute(navigationEndPayload.oldUrl);\n this.setPermission(this.securityContextService.getRestrictedPages());\n }));\n this.setPermission(this.securityContextService.getRestrictedPages());\n }\n\n /**\n * Lifecycle method called when the component is about to be removed from the DOM.\n * Unsubscribes from all subscriptions to prevent memory leaks.\n */\n disconnectedCallback() {\n this.subscriptions.unsubscribeAll();\n }\n\n render() {\n return (\n <Host class=\"wb-layout\">\n {/* Default slot is explicitly defined to be able to hide the main content in the user permission check */}\n <div class=\"default-slot-wrapper\">\n <slot name=\"default\"></slot>\n </div>\n <header class=\"wb-header\">\n {this.isVisible && <onto-header></onto-header>}\n </header>\n\n <nav class=\"wb-navbar\">\n <onto-navbar ref={this.assignNavbarRef()}\n navbar-collapsed={this.isLowResolution}></onto-navbar>\n </nav>\n\n {this.hasPermission ? (\n <div class='main-slot-wrapper'>\n <slot name=\"main\"></slot></div>\n ) : (\n <onto-permission-banner></onto-permission-banner>\n )}\n <footer class=\"wb-footer\">\n {this.isVisible && <onto-footer></onto-footer>}\n </footer>\n <onto-tooltip></onto-tooltip>\n <onto-toastr></onto-toastr>\n </Host>\n );\n }\n\n // ========================\n // Event Listeners\n // ========================\n /**\n * Event listener for the navbar toggled event. The layout needs to respond properly when the navbar is toggled in\n * order to fit the content.\n * @param event\n */\n @Listen('navbarToggled')\n onNavbarToggled(event: CustomEvent<NavbarToggledEvent>) {\n this.isNavbarCollapsed = event.detail.payload;\n if (this.isNavbarCollapsed) {\n this.hostElement.classList.add('expanded');\n } else {\n this.hostElement.classList.remove('expanded');\n }\n }\n\n /**\n * Event listener for window resize event. We need to handle this in order to allow the navbar to collapse when the\n * window is resized.\n */\n @Listen('resize', {target: 'window'})\n onResize() {\n this.windowResizeObserver();\n }\n\n // ========================\n // Handlers\n // ========================\n private windowResizeHandler(): void {\n this.isLowResolution = WindowService.getWindow().innerWidth <= WINDOW_WIDTH_FOR_COLLAPSED_NAVBAR;\n if (!this.isLowResolution && !this.isNavbarCollapsed) {\n this.hostElement.classList.remove('expanded');\n } else {\n this.hostElement.classList.add('expanded');\n }\n }\n\n private handleStorageChange(event: StorageEvent) {\n const service = ServiceProvider.get(LocalStorageSubscriptionHandlerService);\n service.handleStorageChange(event);\n }\n\n // ========================\n // Security & Permissions\n // ========================\n private subscribeToSecurityChanges() {\n const securityContextService = ServiceProvider.get(SecurityContextService);\n this.subscriptions.add(\n securityContextService.onAuthenticatedUserChanged((authenticatedUser) => {\n this.authenticatedUser = authenticatedUser;\n this.updateVisibility();\n })\n );\n\n this.subscriptions.add(\n securityContextService.onSecurityConfigChanged((securityConfig) => {\n this.securityConfig = securityConfig;\n this.updateVisibility();\n })\n );\n\n this.subscriptions.add(\n ServiceProvider.get(EventService).subscribe(EventName.LOGOUT, () => {\n this.setNavbarItemVisibility();\n this.updateVisibility();\n this.securityContextService.updateRestrictedPages(new RestrictedPages());\n })\n );\n this.subscriptions.add(\n securityContextService.onAuthTokenChanged(()=>{\n this.setNavbarItemVisibility();\n this.updateVisibility();\n })\n );\n }\n\n private setPermission(permissions: RestrictedPages) {\n if (permissions) {\n const path = getPathName();\n // Delegate to legacy, when a user has authority in order to show the authority banner, which is not migrated yet\n this.hasPermission = !permissions.isRestricted(path) ? true : !this.authenticationService.hasAuthority();\n } else {\n // If the permissions are undefined, the user can access the url\n this.hasPermission = true;\n }\n\n const mainContent = document.querySelector('.wb-layout main') as HTMLElement;\n if (mainContent) {\n mainContent.style.display = this.hasPermission ? 'block' : 'none';\n }\n }\n\n private updateVisibility() {\n if (!this.authenticationService.isSecurityEnabled()) {\n this.isVisible = true;\n this.showFooter = true;\n } else {\n const hasAuth = !!this.authenticatedUser && !!this.securityConfig;\n const isAuthenticated = this.authenticationService.isAuthenticated() || this.authenticationService.hasFreeAccess();\n\n this.isVisible = hasAuth && isAuthenticated;\n this.showFooter = isAuthenticated;\n }\n }\n\n private isAuthenticatedFully() {\n const authService = ServiceProvider.get(AuthenticationService);\n return !authService.isSecurityEnabled() || authService.isAuthenticated() || authService.hasFreeAccess();\n }\n\n private shouldShowMenu(role: Authority): boolean {\n return this.isAuthenticatedFully()\n && ServiceProvider.get(AuthenticationService).hasRole(role);\n }\n\n // ========================\n // Navbar logic\n // ========================\n private assignNavbarRef() {\n return (navbar: HTMLOntoNavbarElement) => {\n this.navbarRef = navbar;\n this.navbarRef.menuItems = WindowService.getWindow().PluginRegistry.get('main.menu');\n this.setNavbarItemVisibility();\n }\n }\n\n private setNavbarItemVisibility() {\n if (!this.navbarRef?.menuItems) {\n return;\n }\n // recursively check for children and set their shouldShow property\n const processItem = (item: ExternalMenuItemModel) => {\n item.shouldShow = this.shouldShowMenu(item.role as Authority);\n if (item.children?.length) {\n item.children.forEach(processItem);\n }\n };\n\n this.navbarRef?.menuItems?.forEach(plugin => {\n plugin.items.forEach(processItem);\n });\n // Update the reference to trigger a re-render\n this.navbarRef.menuItems = [...this.navbarRef.menuItems];\n }\n}\n"],"mappings":"6WAAgBA,EAASC,EAAMC,EAAO,KACpC,IAAIC,EACJ,MAAO,IAAIC,KACTC,aAAaF,GACbA,EAAQG,YAAW,IAAML,EAAKM,MAAMC,KAAMJ,IAAOF,EAAK,CAE1D,CCNO,MAAMO,EAAyB,CAEpCC,GAAI,KASC,MAAMC,EAAoCF,EAAuBC,GCXxE,MAAME,EAAgB,giB,MCwBTC,EAAU,MAsCrB,WAAAC,CAAAC,G,UAlCiBP,KAAAQ,uBAAyBC,EAAgBC,IAAIC,GAC7CX,KAAAY,sBAAwBH,EAAgBC,IAAIG,GAC5Cb,KAAAc,yBAA2BL,EAAgBC,IAAIK,GAcvDf,KAAegB,gBAAG,MAClBhB,KAAaiB,cAAY,KACzBjB,KAAAkB,WAAalB,KAAKmB,uBASVnB,KAAAoB,cAAkC,IAAIC,EAE/CrB,KAAiBsB,kBAAG,MAM1BtB,KAAKuB,qBAAuB/B,GAAS,IAAMQ,KAAKwB,uBAAuB,IACvEC,EAAcC,YAAYC,iBAAiB,UAAW3B,KAAK4B,oBAC5D,CAED,gBAAAC,GACE7B,KAAKwB,qB,CAGP,iBAAAM,GACE9B,KAAK+B,6BACL/B,KAAKgC,mBAELhC,KAAKoB,cAAca,IAAIjC,KAAKQ,uBAAuB0B,0BAA0BC,GAAoBnC,KAAKoC,cAAcD,MACpHnC,KAAKoB,cAAca,IACjBxB,EAAgBC,IAAI2B,GAAcC,UAAUC,EAAUC,gBAAiBC,IACrEzC,KAAKc,yBAAyB4B,oBAAoBD,EAAqBE,QACvE3C,KAAKoC,cAAcpC,KAAKQ,uBAAuBoC,qBAAqB,KAExE5C,KAAKoC,cAAcpC,KAAKQ,uBAAuBoC,qB,CAOjD,oBAAAC,GACE7C,KAAKoB,cAAc0B,gB,CAGrB,MAAAC,GACE,OACEC,EAACC,EAAK,CAAAC,IAAA,2CAAAC,MAAM,aAEVH,EAAK,OAAAE,IAAA,2CAAAC,MAAM,wBACTH,EAAA,QAAAE,IAAA,2CAAME,KAAK,aAEbJ,EAAQ,UAAAE,IAAA,2CAAAC,MAAM,aACXnD,KAAKqD,WAAaL,EAAA,eAAAE,IAAA,8CAGrBF,EAAK,OAAAE,IAAA,2CAAAC,MAAM,aACTH,EAAa,eAAAE,IAAA,2CAAAI,IAAKtD,KAAKuD,kBAAiB,mBACTvD,KAAKgB,mBAGrChB,KAAKiB,cACJ+B,EAAA,OAAKG,MAAM,qBACTH,EAAM,QAAAI,KAAK,UAEbJ,EAAA,+BAEFA,EAAQ,UAAAE,IAAA,2CAAAC,MAAM,aACXnD,KAAKqD,WAAaL,EAAA,eAAAE,IAAA,8CAErBF,EAA6B,gBAAAE,IAAA,6CAC7BF,EAA2B,eAAAE,IAAA,6C,CAcjC,eAAAM,CAAgBC,GACdzD,KAAKsB,kBAAoBmC,EAAMC,OAAOC,QACtC,GAAI3D,KAAKsB,kBAAmB,CAC1BtB,KAAK4D,YAAYC,UAAU5B,IAAI,W,KAC1B,CACLjC,KAAK4D,YAAYC,UAAUC,OAAO,W,EAStC,QAAAC,GACE/D,KAAKuB,sB,CAMC,mBAAAC,GACNxB,KAAKgB,gBAAkBS,EAAcC,YAAYsC,YAAc7D,EAC/D,IAAKH,KAAKgB,kBAAoBhB,KAAKsB,kBAAmB,CACpDtB,KAAK4D,YAAYC,UAAUC,OAAO,W,KAC7B,CACL9D,KAAK4D,YAAYC,UAAU5B,IAAI,W,EAI3B,mBAAAL,CAAoB6B,GAC1B,MAAMQ,EAAUxD,EAAgBC,IAAIwD,GACpCD,EAAQrC,oBAAoB6B,E,CAMtB,0BAAA1B,GACN,MAAMvB,EAAyBC,EAAgBC,IAAIC,GACnDX,KAAKoB,cAAca,IACjBzB,EAAuB2D,4BAA4BC,IACjDpE,KAAKoE,kBAAoBA,EACzBpE,KAAKgC,kBAAkB,KAI3BhC,KAAKoB,cAAca,IACjBzB,EAAuB6D,yBAAyBC,IAC9CtE,KAAKsE,eAAiBA,EACtBtE,KAAKgC,kBAAkB,KAI3BhC,KAAKoB,cAAca,IACjBxB,EAAgBC,IAAI2B,GAAcC,UAAUC,EAAUgC,QAAQ,KAC5DvE,KAAKwE,0BACLxE,KAAKgC,mBACLhC,KAAKQ,uBAAuBiE,sBAAsB,IAAIC,EAAkB,KAG5E1E,KAAKoB,cAAca,IACjBzB,EAAuBmE,oBAAmB,KACxC3E,KAAKwE,0BACLxE,KAAKgC,kBAAkB,I,CAKrB,aAAAI,CAAcwC,GACpB,GAAIA,EAAa,CACf,MAAMC,EAAOC,IAEb9E,KAAKiB,eAAiB2D,EAAYG,aAAaF,GAAQ,MAAQ7E,KAAKY,sBAAsBoE,c,KACrF,CAELhF,KAAKiB,cAAgB,I,CAGvB,MAAMgE,EAAcC,SAASC,cAAc,mBAC3C,GAAIF,EAAa,CACfA,EAAYG,MAAMC,QAAUrF,KAAKiB,cAAgB,QAAU,M,EAIvD,gBAAAe,GACN,IAAKhC,KAAKY,sBAAsB0E,oBAAqB,CACnDtF,KAAKqD,UAAY,KACjBrD,KAAKkB,WAAa,I,KACb,CACL,MAAMqE,IAAYvF,KAAKoE,qBAAuBpE,KAAKsE,eACnD,MAAMkB,EAAkBxF,KAAKY,sBAAsB4E,mBAAqBxF,KAAKY,sBAAsB6E,gBAEnGzF,KAAKqD,UAAYkC,GAAWC,EAC5BxF,KAAKkB,WAAasE,C,EAId,oBAAArE,GACN,MAAMuE,EAAcjF,EAAgBC,IAAIG,GACxC,OAAQ6E,EAAYJ,qBAAuBI,EAAYF,mBAAqBE,EAAYD,e,CAGlF,cAAAE,CAAeC,GACrB,OAAO5F,KAAKmB,wBACPV,EAAgBC,IAAIG,GAAuBgF,QAAQD,E,CAMlD,eAAArC,GACN,OAAQuC,IACN9F,KAAK+F,UAAYD,EACjB9F,KAAK+F,UAAUC,UAAYvE,EAAcC,YAAYuE,eAAevF,IAAI,aACxEV,KAAKwE,yBAAyB,C,CAI1B,uBAAAA,G,UACN,MAAK0B,EAAAlG,KAAK+F,aAAW,MAAAG,SAAA,SAAAA,EAAAF,WAAW,CAC9B,M,CAGF,MAAMG,EAAeC,I,MACnBA,EAAKC,WAAarG,KAAK2F,eAAeS,EAAKR,MAC3C,IAAIM,EAAAE,EAAKE,YAAU,MAAAJ,SAAA,SAAAA,EAAAK,OAAQ,CACzBH,EAAKE,SAASE,QAAQL,E,IAI1BM,GAAAC,EAAA1G,KAAK+F,aAAS,MAAAW,SAAA,SAAAA,EAAEV,aAAS,MAAAS,SAAA,SAAAA,EAAED,SAAQG,IACjCA,EAAOC,MAAMJ,QAAQL,EAAY,IAGnCnG,KAAK+F,UAAUC,UAAY,IAAIhG,KAAK+F,UAAUC,U","ignoreList":[]}