graphdb-workbench 3.1.0-TR7 → 3.1.0-TR9
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.
- package/dist/10142.50847c485a7f78a9840b.bundle.js +2 -0
- package/dist/10142.50847c485a7f78a9840b.bundle.js.map +1 -0
- package/dist/{12396.75b93ca806a447ab1996.bundle.js → 12396.cbd351b8adc2b5af44ae.bundle.js} +2 -2
- package/dist/{12396.75b93ca806a447ab1996.bundle.js.map → 12396.cbd351b8adc2b5af44ae.bundle.js.map} +1 -1
- package/dist/{15535.19ce46b0a4b36dd0f96b.bundle.js → 15535.4f979f5a7dbe8a2658e4.bundle.js} +2 -2
- package/dist/{15535.19ce46b0a4b36dd0f96b.bundle.js.map → 15535.4f979f5a7dbe8a2658e4.bundle.js.map} +1 -1
- package/dist/{16162.a3441017ce868475ef7c.bundle.js → 16162.e14694e038f17d230885.bundle.js} +2 -2
- package/dist/{16162.a3441017ce868475ef7c.bundle.js.map → 16162.e14694e038f17d230885.bundle.js.map} +1 -1
- package/dist/{20287.ea17646466c254199b21.bundle.js → 20287.1e9afb2423c3fe873e36.bundle.js} +2 -2
- package/dist/{20287.ea17646466c254199b21.bundle.js.map → 20287.1e9afb2423c3fe873e36.bundle.js.map} +1 -1
- package/dist/{21136.8ef598aef32fdc172c2c.bundle.js → 21136.5a1250377772cb3195a3.bundle.js} +2 -2
- package/dist/{21136.8ef598aef32fdc172c2c.bundle.js.map → 21136.5a1250377772cb3195a3.bundle.js.map} +1 -1
- package/dist/{21142.f1544ad2137f8de986d3.bundle.js → 21142.9dcd7e03e12facac1086.bundle.js} +2 -2
- package/dist/{21142.f1544ad2137f8de986d3.bundle.js.map → 21142.9dcd7e03e12facac1086.bundle.js.map} +1 -1
- package/dist/{21170.c0de17dbd2943fd44ce4.bundle.js → 21170.d94a531bf4739c9b8605.bundle.js} +2 -2
- package/dist/{21170.c0de17dbd2943fd44ce4.bundle.js.map → 21170.d94a531bf4739c9b8605.bundle.js.map} +1 -1
- package/dist/{21195.7800fd930cfbe20d39d9.bundle.js → 21195.49a6f9b0fdea13e4fa1a.bundle.js} +2 -2
- package/dist/{21195.7800fd930cfbe20d39d9.bundle.js.map → 21195.49a6f9b0fdea13e4fa1a.bundle.js.map} +1 -1
- package/dist/{25747.c589e0dddaf47030673f.bundle.js → 25747.56693e59322edce9791b.bundle.js} +2 -2
- package/dist/{25747.c589e0dddaf47030673f.bundle.js.map → 25747.56693e59322edce9791b.bundle.js.map} +1 -1
- package/dist/{27580.7dc5844c4afaabfeaae7.bundle.js → 27580.46e0085c4f0549e4bb9f.bundle.js} +2 -2
- package/dist/{27580.7dc5844c4afaabfeaae7.bundle.js.map → 27580.46e0085c4f0549e4bb9f.bundle.js.map} +1 -1
- package/dist/{31636.f50ca2ade67b87d63f12.bundle.js → 31636.825216a6a817aea7c2e5.bundle.js} +2 -2
- package/dist/{31636.f50ca2ade67b87d63f12.bundle.js.map → 31636.825216a6a817aea7c2e5.bundle.js.map} +1 -1
- package/dist/{32489.9307b8976b5b3187223e.bundle.js → 32489.ff95b720e4c6b3fb21d6.bundle.js} +2 -2
- package/dist/{32489.9307b8976b5b3187223e.bundle.js.map → 32489.ff95b720e4c6b3fb21d6.bundle.js.map} +1 -1
- package/dist/{33524.10558ac848ce64b2b722.bundle.js → 33524.35fe079bcb99a78babaf.bundle.js} +2 -2
- package/dist/33524.35fe079bcb99a78babaf.bundle.js.map +1 -0
- package/dist/36644.b8ead0ab81253aa03ade.bundle.js +2 -0
- package/dist/36644.b8ead0ab81253aa03ade.bundle.js.map +1 -0
- package/dist/{38360.53936cc1df95e7a1b39d.bundle.js → 38360.d06f8ac25d4347b8c94a.bundle.js} +2 -2
- package/dist/{38360.53936cc1df95e7a1b39d.bundle.js.map → 38360.d06f8ac25d4347b8c94a.bundle.js.map} +1 -1
- package/dist/{38644.e8d7a8ff0b538f59f6c3.bundle.js → 38644.1370edd16031835a57fc.bundle.js} +2 -2
- package/dist/{38644.e8d7a8ff0b538f59f6c3.bundle.js.map → 38644.1370edd16031835a57fc.bundle.js.map} +1 -1
- package/dist/{38843.9124577a5f2e542b8135.bundle.js → 38843.1b8dad7984c1368e0f26.bundle.js} +2 -2
- package/dist/{38843.9124577a5f2e542b8135.bundle.js.map → 38843.1b8dad7984c1368e0f26.bundle.js.map} +1 -1
- package/dist/{39518.506568d61f094739e414.bundle.js → 39518.460c8138d3b1479470eb.bundle.js} +2 -2
- package/dist/{39518.506568d61f094739e414.bundle.js.map → 39518.460c8138d3b1479470eb.bundle.js.map} +1 -1
- package/dist/{39539.bf87d8eda9342eba37cf.bundle.js → 39539.e69068aea8046d154307.bundle.js} +2 -2
- package/dist/{39539.bf87d8eda9342eba37cf.bundle.js.map → 39539.e69068aea8046d154307.bundle.js.map} +1 -1
- package/dist/39874.6ca23ead080b52dc1bc6.bundle.js +2 -0
- package/dist/39874.6ca23ead080b52dc1bc6.bundle.js.map +1 -0
- package/dist/{41453.cbb85e8825e15d9875dc.bundle.js → 41453.f2e20c7c42ea9e9ca281.bundle.js} +2 -2
- package/dist/{41453.cbb85e8825e15d9875dc.bundle.js.map → 41453.f2e20c7c42ea9e9ca281.bundle.js.map} +1 -1
- package/dist/{42129.5369407e5c39404263ed.bundle.js → 42129.8894dd599262ed62f5f9.bundle.js} +2 -2
- package/dist/{42129.5369407e5c39404263ed.bundle.js.map → 42129.8894dd599262ed62f5f9.bundle.js.map} +1 -1
- package/dist/{44444.8b07608bcd9f51e6ce1c.bundle.js → 44444.751ec83bdd2a4fd15395.bundle.js} +2 -2
- package/dist/{44444.8b07608bcd9f51e6ce1c.bundle.js.map → 44444.751ec83bdd2a4fd15395.bundle.js.map} +1 -1
- package/dist/{5470.27701a523ebe9e973fc2.bundle.js → 5470.7c17c7d3b58c8c0d0786.bundle.js} +2 -2
- package/dist/5470.7c17c7d3b58c8c0d0786.bundle.js.map +1 -0
- package/dist/{55862.f9264ede1f9e8641e979.bundle.js → 55862.4ff9c451d6d5b20139aa.bundle.js} +2 -2
- package/dist/{55862.f9264ede1f9e8641e979.bundle.js.map → 55862.4ff9c451d6d5b20139aa.bundle.js.map} +1 -1
- package/dist/{58306.afb4bed817c836e63e58.bundle.js → 58306.448be402acad05bbb584.bundle.js} +2 -2
- package/dist/{58306.afb4bed817c836e63e58.bundle.js.map → 58306.448be402acad05bbb584.bundle.js.map} +1 -1
- package/dist/{66014.5e25419235a79d858595.bundle.js → 66014.336bc4291da2fbc96cd1.bundle.js} +2 -2
- package/dist/66014.336bc4291da2fbc96cd1.bundle.js.map +1 -0
- package/dist/{67888.859075c676ffe04298bf.bundle.js → 67888.17384107edbc72dadc2d.bundle.js} +2 -2
- package/dist/{67888.859075c676ffe04298bf.bundle.js.map → 67888.17384107edbc72dadc2d.bundle.js.map} +1 -1
- package/dist/{72379.86c189a27a254f8ad22b.bundle.js → 72379.275ae82f8396d9088028.bundle.js} +2 -2
- package/dist/{72379.86c189a27a254f8ad22b.bundle.js.map → 72379.275ae82f8396d9088028.bundle.js.map} +1 -1
- package/dist/{73667.350239676e59334fff54.bundle.js → 73667.e746a61fe0db60bf2b6a.bundle.js} +2 -2
- package/dist/{73667.350239676e59334fff54.bundle.js.map → 73667.e746a61fe0db60bf2b6a.bundle.js.map} +1 -1
- package/dist/{73793.fcde01f064aa64e84b9c.bundle.js → 73793.05e78e0c3ccbe1ad5f09.bundle.js} +2 -2
- package/dist/{73793.fcde01f064aa64e84b9c.bundle.js.map → 73793.05e78e0c3ccbe1ad5f09.bundle.js.map} +1 -1
- package/dist/{75282.5094de293638333c7097.bundle.js → 75282.4033542c93f0fda84c66.bundle.js} +2 -2
- package/dist/{75282.5094de293638333c7097.bundle.js.map → 75282.4033542c93f0fda84c66.bundle.js.map} +1 -1
- package/dist/{75849.d329e1cb6909ad19ab6e.bundle.js → 75849.fca2b927fc8d73fd31ee.bundle.js} +2 -2
- package/dist/{75849.d329e1cb6909ad19ab6e.bundle.js.map → 75849.fca2b927fc8d73fd31ee.bundle.js.map} +1 -1
- package/dist/{78250.a137ba2afa4989250f69.bundle.js → 78250.9032061f1de28529cc5b.bundle.js} +2 -2
- package/dist/{78250.a137ba2afa4989250f69.bundle.js.map → 78250.9032061f1de28529cc5b.bundle.js.map} +1 -1
- package/dist/79329.5e745025419b44e7a2f6.bundle.js +2 -0
- package/dist/79329.5e745025419b44e7a2f6.bundle.js.map +1 -0
- package/dist/82206.b3b37c3e0cc1aa18148c.bundle.js +2 -0
- package/dist/82206.b3b37c3e0cc1aa18148c.bundle.js.map +1 -0
- package/dist/{82926.f01799164b6cc7a909a5.bundle.js → 82926.c948b5ffd52a13d07e9a.bundle.js} +2 -2
- package/dist/{82926.f01799164b6cc7a909a5.bundle.js.map → 82926.c948b5ffd52a13d07e9a.bundle.js.map} +1 -1
- package/dist/{86287.2a9cda65f67eb0a277d5.bundle.js → 86287.c47005c01ccbdfb1dc23.bundle.js} +2 -2
- package/dist/{86287.2a9cda65f67eb0a277d5.bundle.js.map → 86287.c47005c01ccbdfb1dc23.bundle.js.map} +1 -1
- package/dist/{9062.6f9de79a28c9bd48ec14.bundle.js → 9062.1ed9bc6c2668d65d1cfd.bundle.js} +2 -2
- package/dist/{9062.6f9de79a28c9bd48ec14.bundle.js.map → 9062.1ed9bc6c2668d65d1cfd.bundle.js.map} +1 -1
- package/dist/{95953.04709fa59d2ed50632d3.bundle.js → 95953.55471092942564b75541.bundle.js} +2 -2
- package/dist/95953.55471092942564b75541.bundle.js.map +1 -0
- package/dist/{99448.08fbd142db866ed20f97.bundle.js → 99448.c6f1cb6efb46d34452fa.bundle.js} +2 -2
- package/dist/{99448.08fbd142db866ed20f97.bundle.js.map → 99448.c6f1cb6efb46d34452fa.bundle.js.map} +1 -1
- package/dist/api/ontotext-workbench-api.d.ts +1 -0
- package/dist/api/ontotext-workbench-api.js +1 -1
- package/dist/api/ontotext-workbench-api.js.map +1 -1
- package/dist/api/services/security/authentication-storage.service.d.ts +3 -0
- package/dist/api/services/window/index.d.ts +1 -0
- package/dist/api/services/window/window.service.d.ts +4 -10
- package/dist/i18n/locale-en.json +5 -1
- package/dist/i18n/locale-fr.json +5 -1
- package/dist/index.html +8 -8
- package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
- package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
- package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
- package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
- package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +1 -1
- package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
- package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
- package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
- package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
- package/dist/js/angular/core/templates/search-resource-input.html +1 -1
- package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
- package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
- package/dist/js/angular/graphql/templates/graphql-playground.html +1 -1
- package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
- package/dist/js/angular/security/templates/user.html +2 -2
- package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
- package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
- package/dist/js/angular/ttyg/templates/autocomplete-iri-discovery-search.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
- package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
- package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +4 -4
- package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
- package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
- package/dist/legacyWorkbench.5ed5aeadc238c6ce65fa.js +3 -0
- package/dist/{legacyWorkbench.cbccad23cea068ec41a9.js.map → legacyWorkbench.5ed5aeadc238c6ce65fa.js.map} +1 -1
- package/dist/{main.224d2a416195ee7c3d4a.js → main.95051b60e5b08481a1ff.js} +3 -3
- package/dist/main.95051b60e5b08481a1ff.js.map +1 -0
- package/dist/pages/aclmanagement.html +2 -2
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +3 -3
- package/dist/pages/create-index.html +1 -1
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +8 -8
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/guides.html +1 -1
- package/dist/pages/import.html +2 -2
- package/dist/pages/jdbc-create.html +1 -1
- package/dist/pages/login.html +1 -1
- package/dist/pages/monitor/backup-and-restore.html +1 -1
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +1 -1
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +1 -1
- package/dist/pages/repository.html +1 -1
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-editor.html +1 -1
- package/dist/pages/sparql-template-create.html +1 -1
- package/dist/pages/ux-test1.html +2 -2
- package/dist/pages/webapi.html +2 -2
- package/dist/plugins.js +1 -1
- package/dist/res/swagger5/index.html +11 -11
- package/dist/shared-components/cjs/onto-footer.onto-header.onto-navbar.onto-permission-banner.onto-toastr.onto-tooltip.entry.cjs.js.map +1 -1
- package/dist/shared-components/cjs/onto-footer_6.cjs.entry.js +1 -1
- package/dist/shared-components/cjs/onto-footer_6.cjs.entry.js.map +1 -1
- package/dist/shared-components/cjs/onto-language-selector.onto-license-alert.onto-operations-notification.onto-rdf-search.onto-repository-selector.onto-search-icon.onto-search-resource-input.onto-user-login.onto-user-menu.entry.cjs.js.map +1 -1
- package/dist/shared-components/cjs/onto-language-selector_9.cjs.entry.js +1 -1
- package/dist/shared-components/cjs/onto-language-selector_9.cjs.entry.js.map +1 -1
- package/dist/shared-components/cjs/onto-layout.cjs.entry.js +1 -1
- package/dist/shared-components/cjs/onto-layout.cjs.entry.js.map +1 -1
- package/dist/shared-components/cjs/onto-layout.entry.cjs.js.map +1 -1
- package/dist/shared-components/collection/components/onto-footer/onto-footer.js +1 -1
- package/dist/shared-components/collection/components/onto-footer/onto-footer.js.map +1 -1
- package/dist/shared-components/collection/components/onto-header/onto-header.js +1 -1
- package/dist/shared-components/collection/components/onto-header/onto-header.js.map +1 -1
- package/dist/shared-components/collection/components/onto-layout/onto-layout.js +1 -1
- package/dist/shared-components/collection/components/onto-layout/onto-layout.js.map +1 -1
- package/dist/shared-components/collection/components/onto-license-alert/onto-license-alert.js +1 -1
- package/dist/shared-components/collection/components/onto-license-alert/onto-license-alert.js.map +1 -1
- package/dist/shared-components/collection/components/onto-operations-notification/onto-operations-notification.js +1 -1
- package/dist/shared-components/collection/components/onto-operations-notification/onto-operations-notification.js.map +1 -1
- package/dist/shared-components/collection/components/onto-toastr/onto-toastr.js +1 -1
- package/dist/shared-components/collection/components/onto-toastr/onto-toastr.js.map +1 -1
- package/dist/shared-components/collection/components/onto-user-login/onto-user-login.js +1 -1
- package/dist/shared-components/collection/components/onto-user-login/onto-user-login.js.map +1 -1
- package/dist/shared-components/esm/onto-footer.onto-header.onto-navbar.onto-permission-banner.onto-toastr.onto-tooltip.entry.js.map +1 -1
- package/dist/shared-components/esm/onto-footer_6.entry.js +1 -1
- package/dist/shared-components/esm/onto-footer_6.entry.js.map +1 -1
- package/dist/shared-components/esm/onto-language-selector.onto-license-alert.onto-operations-notification.onto-rdf-search.onto-repository-selector.onto-search-icon.onto-search-resource-input.onto-user-login.onto-user-menu.entry.js.map +1 -1
- package/dist/shared-components/esm/onto-language-selector_9.entry.js +1 -1
- package/dist/shared-components/esm/onto-language-selector_9.entry.js.map +1 -1
- package/dist/shared-components/esm/onto-layout.entry.js +1 -1
- package/dist/shared-components/esm/onto-layout.entry.js.map +1 -1
- package/dist/shared-components/shared-components/onto-footer.onto-header.onto-navbar.onto-permission-banner.onto-toastr.onto-tooltip.entry.esm.js.map +1 -1
- package/dist/shared-components/shared-components/onto-language-selector.onto-license-alert.onto-operations-notification.onto-rdf-search.onto-repository-selector.onto-search-icon.onto-search-resource-input.onto-user-login.onto-user-menu.entry.esm.js.map +1 -1
- package/dist/shared-components/shared-components/onto-layout.entry.esm.js.map +1 -1
- package/dist/shared-components/shared-components/p-28a4ce8f.entry.js +1 -0
- package/dist/shared-components/shared-components/p-28a4ce8f.entry.js.map +1 -0
- package/dist/shared-components/shared-components/p-b2cc3f1e.entry.js +1 -0
- package/dist/shared-components/shared-components/p-b2cc3f1e.entry.js.map +1 -0
- package/dist/shared-components/shared-components/p-fa30a30a.entry.js +1 -0
- package/dist/shared-components/shared-components/p-fa30a30a.entry.js.map +1 -0
- package/dist/shared-components/shared-components/shared-components.esm.js +1 -1
- package/dist/shared-components/types/components/onto-license-alert/onto-license-alert.d.ts +0 -1
- package/dist/shared-components/types/components/onto-operations-notification/onto-operations-notification.d.ts +0 -1
- package/dist/shared-components/types/home/ubuntu/workspace/PRO/GraphDB UI Jobs/graphdb-workbench-release/packages/shared-components/.stencil/api/src/services/window/index.d.ts +1 -0
- package/dist/shared-components/types/home/ubuntu/workspace/PRO/GraphDB UI Jobs/graphdb-workbench-release/packages/shared-components/.stencil/api/src/services/window/window.service.d.ts +11 -0
- package/package.json +1 -1
- package/dist/10142.aeee60d794f7a5458f7e.bundle.js +0 -2
- package/dist/10142.aeee60d794f7a5458f7e.bundle.js.map +0 -1
- package/dist/33524.10558ac848ce64b2b722.bundle.js.map +0 -1
- package/dist/36644.836e5d041e0d9261c165.bundle.js +0 -2
- package/dist/36644.836e5d041e0d9261c165.bundle.js.map +0 -1
- package/dist/39874.d024d8dcc51bd55a9c59.bundle.js +0 -2
- package/dist/39874.d024d8dcc51bd55a9c59.bundle.js.map +0 -1
- package/dist/5470.27701a523ebe9e973fc2.bundle.js.map +0 -1
- package/dist/66014.5e25419235a79d858595.bundle.js.map +0 -1
- package/dist/79329.dd73d019c61e2414ed51.bundle.js +0 -2
- package/dist/79329.dd73d019c61e2414ed51.bundle.js.map +0 -1
- package/dist/82206.c251c5be920eed354934.bundle.js +0 -2
- package/dist/82206.c251c5be920eed354934.bundle.js.map +0 -1
- package/dist/95953.04709fa59d2ed50632d3.bundle.js.map +0 -1
- package/dist/legacyWorkbench.cbccad23cea068ec41a9.js +0 -3
- package/dist/main.224d2a416195ee7c3d4a.js.map +0 -1
- package/dist/shared-components/shared-components/p-ca82e5cb.entry.js +0 -1
- package/dist/shared-components/shared-components/p-ca82e5cb.entry.js.map +0 -1
- package/dist/shared-components/shared-components/p-d37f4d40.entry.js +0 -1
- package/dist/shared-components/shared-components/p-d37f4d40.entry.js.map +0 -1
- package/dist/shared-components/shared-components/p-e101f18e.entry.js +0 -1
- package/dist/shared-components/shared-components/p-e101f18e.entry.js.map +0 -1
- /package/dist/{legacyWorkbench.cbccad23cea068ec41a9.js.LICENSE.txt → legacyWorkbench.5ed5aeadc238c6ce65fa.js.LICENSE.txt} +0 -0
- /package/dist/{main.224d2a416195ee7c3d4a.js.LICENSE.txt → main.95051b60e5b08481a1ff.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"onto-language-selector.onto-license-alert.onto-operations-notification.onto-rdf-search.onto-repository-selector.onto-search-icon.onto-search-resource-input.onto-user-login.onto-user-menu.entry.js","mappings":"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","names":[],"sources":["src/components/onto-language-selector/onto-language-selector.scss?tag=onto-language-selector","src/components/onto-language-selector/onto-language-selector.tsx","src/components/onto-license-alert/onto-license-alert.scss?tag=onto-license-alert","src/components/onto-license-alert/onto-license-alert.tsx","src/components/onto-operations-notification/onto-operations-notification.scss?tag=onto-operations-notification","src/components/onto-operations-notification/onto-operations-notification.tsx","src/components/onto-rdf-search/onto-rdf-search.scss?tag=onto-rdf-search","src/components/onto-rdf-search/onto-rdf-search.tsx","src/components/onto-repository-selector/repository-selection.tsx","src/components/onto-repository-selector/onto-repository-selector.scss?tag=onto-repository-selector","src/components/onto-repository-selector/onto-repository-selector.tsx","src/components/onto-search-icon/onto-search-icon.scss?tag=onto-search-icon","src/components/onto-search-icon/onto-search-icon.tsx","src/components/onto-search-resource-input/onto-search-resource-input.scss?tag=onto-search-resource-input","src/components/onto-search-resource-input/onto-search-resource-input.tsx","src/components/onto-user-login/onto-user-login.scss?tag=onto-user-login","src/components/onto-user-login/onto-user-login.tsx","src/components/onto-user-menu/onto-user-menu.scss?tag=onto-user-menu","src/components/onto-user-menu/onto-user-menu.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\nonto-language-selector {\n display: block;\n\n .onto-dropdown {\n height: 100%;\n\n &.open {\n .onto-dropdown-button {\n height: fit-content;\n }\n }\n\n &.closed {\n\n .onto-dropdown-button {\n background-color: transparent;\n\n .icon-translation {\n font-size: 1.5em;\n }\n }\n\n .onto-dropdown-button:hover {\n background-color: #d4d4d4;\n }\n }\n }\n}\n","import {Component, Host, h, State, Prop} from '@stencil/core';\nimport {DropdownItem} from '../../models/dropdown/dropdown-item';\nimport {\n ServiceProvider,\n LanguageService,\n LanguageContextService,\n} from \"@ontotext/workbench-api\";\nimport {DropdownItemAlignment} from '../../models/dropdown/dropdown-item-alignment';\n\n@Component({\n tag: 'onto-language-selector',\n styleUrl: 'onto-language-selector.scss',\n shadow: false,\n})\nexport class OntoLanguageSelector {\n private readonly languageService = ServiceProvider.get(LanguageService);\n private readonly languageContextService = ServiceProvider.get(LanguageContextService);\n private items: DropdownItem<string>[] = [];\n private onLanguageChangeSubscription: () => void;\n\n /**\n * Specifies the dropdown items' alignment. If not provided, the items and the dropdown button will be aligned to the left.\n *\n */\n @Prop() dropdownAlignment: DropdownItemAlignment = DropdownItemAlignment.LEFT;\n\n /**\n * Holds the currently selected language, such as 'en' or 'fr'.\n */\n @State() currentLanguage: string;\n\n connectedCallback() {\n this.onLanguageChangeSubscription = this.languageContextService.onSelectedLanguageChanged((newLanguage) => this.changeLanguage(newLanguage));\n this.items = this.getLanguageDropdownOptions();\n }\n\n disconnectedCallback(): void {\n if (this.onLanguageChangeSubscription) {\n this.onLanguageChangeSubscription();\n }\n }\n\n render() {\n return (\n <Host>\n <onto-dropdown\n class='onto-language-selector'\n onValueChanged={this.valueChangeHandler()}\n dropdownButtonNameLabelKey={!this.currentLanguage ? 'language_selector.toggle_menu.label' : undefined}\n dropdownButtonName={this.currentLanguage ?? undefined}\n dropdownButtonTooltipLabelKey={this.currentLanguage ? 'language_selector.toggle_menu.tooltip' : 'language_selector.toggle_menu.label'}\n dropdownAlignment={this.dropdownAlignment ?? DropdownItemAlignment.RIGHT}\n dropdownTooltipTrigger={'mouseenter focus'}\n iconClass='icon-translation'\n items={this.items}>\n </onto-dropdown>\n </Host>\n );\n }\n\n private valueChangeHandler() {\n return (newLanguage: any) => this.onSelectedLanguageChanged(newLanguage);\n }\n\n private changeLanguage(newLanguage: string): void {\n let selectedLanguage = newLanguage;\n if (!selectedLanguage) {\n selectedLanguage = this.languageService.getDefaultLanguage();\n }\n\n this.currentLanguage = selectedLanguage;\n this.items = this.getLanguageDropdownOptions();\n }\n\n private onSelectedLanguageChanged(newLanguageEvent: CustomEvent): void {\n this.languageContextService.updateSelectedLanguage(newLanguageEvent.detail);\n }\n\n private getLanguageDropdownOptions(): DropdownItem<string>[] {\n return this.languageService.getSupportedLanguages().map((locale) => {\n const iconClass = this.currentLanguage === locale ? 'icon-tick' : '';\n return new DropdownItem<string>()\n .setNameLabelKey(`language_selector.language.${locale}.label`)\n .setTooltipLabelKey(`language_selector.language.${locale}.tooltip.` + (this.currentLanguage === locale ? 'selected' : 'not_selected'))\n .setIconClass(iconClass)\n .setCssClass(locale)\n .setValue(locale)\n .setDropdownTooltipTrigger('mouseenter focus');\n });\n }\n}\n",":host {\n display: block;\n}\n\n.onto-license-alert {\n animation: fade-button 2s infinite;\n --fade-color: var(--color-danger-medium);\n border: 1px solid transparent !important;\n\n &:hover {\n text-decoration: none;\n background-color: var(--color-danger-medium) !important;\n border-color: var(--color-danger-medium) !important;\n\n & span {\n transform: scale(1.2);\n }\n }\n\n & span {\n transition: transform 0.15s ease-out;\n }\n\n & .icon-warning {\n margin-right: 0.2em;\n line-height: 0.75;\n font-size: 1.4em;\n display: inline-block;\n vertical-align: middle;\n }\n}\n","import { License } from '@ontotext/workbench-api';\nimport { Component, Host, h, Prop } from '@stencil/core';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\n\n@Component({\n tag: 'onto-license-alert',\n styleUrl: 'onto-license-alert.scss'\n})\n/**\n * OntoLicenseAlert component\n *\n * This component displays a license alert button with a tooltip.\n * It is used to show license-related information and provide a link to the license page.\n */\nexport class OntoLicenseAlert {\n\n /** The current license information */\n @Prop() license: License;\n\n render() {\n return (\n <Host tooltip-content={this.license?.message} tooltip-placement={OntoTooltipPlacement.BOTTOM} data-test='onto-license-alert'>\n <button class=\"onto-license-alert onto-btn\" onClick={this.onLicenseAlertClick}>\n <span class=\"icon-warning\"></span>\n <translate-label labelKey={'license_alert.label'}></translate-label>\n </button>\n </Host>\n );\n }\n\n private onLicenseAlertClick(event: Event) {\n event.preventDefault();\n // Navigate to the license page without reloading.\n // @ts-ignore\n window.singleSpa.navigateToUrl('license');\n }\n}\n","$hover-color: #d4d4d4;\n\n.operations-statuses {\n position: relative;\n\n & .operations-statuses-dropdown-toggle {\n display: flex;\n font-weight: 400;\n line-height: 1.25;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: 1px solid transparent;\n padding: .4rem 1rem;\n font-size: 1rem;\n gap: 0.75em;\n transition: all 0.15s ease-out;\n\n &:hover {\n background-color: $hover-color;\n border-color: $hover-color;\n\n i:not(.fa-angle-down) {\n transform: scale(1.2);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n &.open {\n background-color: #bbb !important;\n border-color: #bbb !important;\n }\n\n & .operation-status-header {\n display: flex;\n\n & .running-operation-count {\n color: white;\n padding: 1px 2px;\n line-height: 1;\n align-self: center;\n top: -1em;\n font-size: 60%;\n }\n }\n }\n\n & .operations-dropdown {\n position: absolute;\n right: 0;\n z-index: 1000;\n border: none;\n background-color: var(--primary-color, #9e2b0a);\n border-radius: 0;\n list-style: none;\n padding: 0;\n -moz-transition: all 150ms ease-out; /* FF4+ */\n -o-transition: all 150ms ease-out; /* Opera 10.5+ */\n -webkit-transition: all 150ms ease-out; /* Saf3.2+, Chrome */\n transition: all 150ms ease-out;\n\n & .operations-statuses-content {\n display: flex;\n flex-direction: column;\n background-color: #bbb;\n margin: 0;\n\n & li:first-child {\n margin-top: 5px;\n }\n\n & li:last-child {\n margin-bottom: 5px;\n }\n\n & .operation-status-content {\n display: flex;\n flex-direction: row;\n margin: 5px 10px;\n align-items: center;\n justify-content: start;\n cursor: pointer;\n text-decoration: none;\n width: auto;\n gap: 0.5em;\n background-color: #EBEBEB;\n border-color: #EBEBEB;\n\n & i {\n width: 8.33%\n }\n\n & .operation-number {\n min-width: 50px;\n display: block;\n\n & .operation-status-running-operation-count {\n display: block;\n width: 100%;\n color: white;\n border-radius: 2px;\n padding: 3px 2px 2px;\n text-align: center;\n font-size: 75%;\n background-color: var(--color-info-dark, #004177) !important;\n }\n }\n\n & .operation-status-content > * {\n padding: 0;\n }\n\n & .operation-status-label {\n width: 66.66%;\n padding-left: 5px;\n line-height: 0;\n text-align: start;\n }\n\n &:hover {\n text-decoration: none;\n background-color: $hover-color;\n border-color: $hover-color;\n\n & i {\n transform: scale(1.2);\n }\n }\n }\n }\n }\n\n .status-information {\n color: var(--color-info-dark, #004177) !important;\n }\n\n .status-warning {\n color: var(--color-warning-dark, #7e2308) !important;\n }\n\n .status-critical {\n color: var(--color-danger-dark, #a31425) !important;\n }\n\n i {\n padding-left: 3px;\n padding-right: 3px;\n font-size: 1.1em;\n line-height: 1.6rem !important;\n align-content: center;\n transition: transform 0.15s ease-out;\n\n &.fa-angle-down {\n color: rgba(0, 0, 0, .35);\n transition: all 0.2s ease-in;\n }\n }\n\n // TODO: remove, once the import icon is replaced with the font awesome version\n .icon-import {\n font-size: 21px;\n }\n}\n","import {Component, h, Prop, State, Listen, Element} from '@stencil/core';\nimport {\n OperationGroup,\n OperationStatus,\n OperationStatusSummary,\n OperationGroupSummaryList, MapperProvider, OperationGroupSummaryListMapper\n} from '@ontotext/workbench-api';\n\nconst operationGroupToIcon = {\n [OperationGroup.BACKUP]: 'fa-regular fa-archive',\n [OperationGroup.QUERY]: 'fa-regular fa-arrow-right-arrow-left',\n [OperationGroup.CLUSTER]: 'fa-regular fa-sitemap',\n // TODO: change import icon to font awesome one, when available\n [OperationGroup.IMPORT]: 'icon-import'\n};\n\nconst operationStatusToWarningClass = {\n [OperationStatus.WARNING]: 'status-warning',\n [OperationStatus.INFORMATION]: 'status-information',\n [OperationStatus.CRITICAL]: 'status-critical'\n};\n\nconst operationStatusToFadeClass = {\n [OperationStatus.WARNING]: 'onto-btn-fade-warning',\n [OperationStatus.CRITICAL]: 'onto-btn-fade-danger'\n};\n\n@Component({\n tag: 'onto-operations-notification',\n styleUrl: 'onto-operations-notification.scss'\n})\nexport class OntoOperationsNotification {\n @Element() el: HTMLElement;\n\n /** The active operations summary. Holds general status and all current operations */\n @Prop() activeOperations: OperationStatusSummary;\n\n /** Whether the dropdown menu is open or closed */\n @State() isOpen: boolean = false;\n\n /** Grouped info about operations, to be displayed in the button */\n private operationGroups: OperationGroupSummaryList;\n\n @Listen('click', {target: 'window'})\n handleOutsideClick() {\n if (this.isOpen) {\n this.isOpen = false;\n }\n }\n\n render() {\n this.operationGroups = MapperProvider\n .get(OperationGroupSummaryListMapper)\n .mapToModel(this.activeOperations.toOperationsGroupSummary());\n\n return (\n <section class=\"operations-statuses\">\n <button\n class={`operations-statuses-dropdown-toggle ${this.isOpen ? 'open' : 'closed'} ${operationStatusToFadeClass[this.activeOperations.status] ?? ''}`}\n onClick={this.toggleDropdown}>\n {this.operationGroups.getItems().map((groupSummary) => (\n <section key={groupSummary.id} class=\"operation-status-header\">\n <i\n class={`${operationGroupToIcon[groupSummary.group]} ${operationStatusToWarningClass[groupSummary.status]}`}></i>\n {groupSummary.totalOperations\n ? <sup class=\"running-operation-count tag-info\">{groupSummary.totalOperations}</sup>\n : ''\n }\n </section>\n ))}\n <i class={`fa-light fa-angle-down ${this.isOpen ? 'fa-rotate-180' : ''}`}></i>\n </button>\n {this.isOpen &&\n <ul class=\"operations-dropdown\">\n <section class=\"operations-statuses-content\">\n {this.activeOperations.allRunningOperations.getItems().map((operation) => (\n <li key={operation.id}>\n <a class={`operation-status-content onto-btn ${operationStatusToWarningClass[operation.status]}`}\n target=\"_blank\"\n onClick={this.onLinkClicked(operation.href)}>\n <i class={operationGroupToIcon[operation.group]}></i>\n <span class=\"operation-status-label\">\n <translate-label\n labelKey={`operations_notification.links.${operation.labelKey}`}>\n </translate-label>\n </span>\n\n <span class=\"operation-number\">\n {operation.count\n ? <span class=\"operation-status-running-operation-count\">{operation.count}</span>\n : ''\n }\n </span>\n </a>\n </li>\n ))}\n </section>\n </ul>}\n </section>\n );\n }\n\n private toggleDropdown = (event: Event) => {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n };\n\n private onLinkClicked= (href: string): ((event: Event) => void) => {\n return (event: Event) => {\n event.preventDefault();\n // Navigate to the license page without reloading.\n // @ts-ignore\n window.singleSpa.navigateToUrl(href);\n }\n }\n}\n",":root {\n --search-primary-color: var(--primary-color, #9e2b0a);\n}\n\n.onto-rdf-search {\n display: flex;\n align-items: center;\n line-height: .75;\n font-size: 1.4em;\n height: auto;\n\n & .search-area {\n white-space: nowrap;\n text-align: start;\n font-weight: 300;\n max-width: 100vw;\n position: fixed;\n right: 3em;\n z-index: 1;\n display: block;\n width: 60vw;\n\n -webkit-transition: top 0.3s ease-in, opacity 0.5s ease;\n transition: top 0.3s ease-in, opacity 0.5s ease;\n\n box-shadow: 0 3px 6px rgba(0,0,0,.1);\n border-radius: 0;\n margin-bottom: 1em;\n background-color: white;\n padding: 1.6rem;\n border: 1px solid rgba(0,0,0,.125);\n\n &.visible {\n top: 40px;\n opacity: 1;\n }\n\n &.invisible {\n top: -550px;\n opacity: 0;\n }\n\n & .close-btn {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n font-size: 1.5rem;\n }\n }\n\n & i {\n cursor: pointer;\n color: var(--search-primary-color);\n transition: all 0.15s ease-out;\n\n &.fa-magnifying-glass, &.close-btn {\n padding: .5rem .8rem;\n }\n\n &:hover {\n transform: scale(1.2);\n }\n }\n}\n","import {\n EventService, openInNewTab, ResourceSearchStorageService,\n SearchButton,\n SearchButtonConfig,\n ServiceProvider,\n SubscriptionList, SuggestionSelectedPayload, UriUtil\n} from '@ontotext/workbench-api';\nimport {Component, h, Listen, State} from '@stencil/core';\nimport {TranslationService} from '../../services/translation.service';\nimport {HtmlUtil} from '../../utils/html-util';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\nimport {ResourceSearchConstants} from '../../models/resource-search/resource-search-constants';\n\n/**\n * OntoRdfSearch component for RDF resource search.\n * This component is responsible for showing/hiding the search menu in the header\n */\n@Component({\n tag: 'onto-rdf-search',\n styleUrl: 'onto-rdf-search.scss'\n})\nexport class OntoRdfSearch {\n private readonly subscriptions: SubscriptionList = new SubscriptionList();\n private readonly eventService = ServiceProvider.get(EventService);\n private readonly resourceSearchStorageService = ServiceProvider.get(ResourceSearchStorageService);\n\n private readonly RDF_CONTEXT = 'rdfSearchContext';\n\n @State() private isOpen: boolean = false;\n @State() private buttonConfig: SearchButtonConfig;\n\n private redirectUrl: string = UriUtil.RESOURCE_URL;\n private rdfSearchRef: HTMLElement;\n\n /**\n * Handles click events on the window.\n * Closes the search area if it's open and the click is outside the search area.\n * @param event - The MouseEvent object.\n */\n @Listen('click', {target: 'window'})\n handleClick(event: MouseEvent) {\n if (!this.isOpen) {\n return;\n }\n if (!this.rdfSearchRef?.contains(event.target as Node)) {\n this.isOpen = false;\n }\n }\n\n connectedCallback() {\n this.onSuggestionSelected();\n }\n\n disconnectedCallback() {\n this.subscriptions.unsubscribeAll();\n }\n\n componentDidRender() {\n this.focusSearchInput();\n }\n\n componentDidLoad() {\n this.buttonConfig = this.createButtonConfig();\n }\n\n\n render() {\n return (\n <section ref={(ref) => this.rdfSearchRef = ref}\n class=\"onto-rdf-search\"\n onKeyDown={this.onKeyDown()}\n data-test='onto-rdf-search-component'>\n <section class={`search-area ${this.isOpen ? 'visible' : 'invisible'}`}>\n <i onClick={this.setIsOpen(false)}\n tooltip-content={TranslationService.translate('rdf_search.tooltips.close_search_area')}\n tooltip-placement={OntoTooltipPlacement.BOTTOM}\n data-test='onto-rdf-resource-search-close-btn'\n class=\"fa-light fa-xmark-large close-btn\"></i>\n <onto-search-resource-input buttonConfig={this.buttonConfig}\n preserveSearch={true}\n isHidden={!this.isOpen}\n data-test='onto-rdf-resource-search-input'\n context={this.RDF_CONTEXT}></onto-search-resource-input>\n </section>\n {!this.isOpen ? <onto-search-icon onClick={this.setIsOpen(true)}></onto-search-icon> : ''}\n </section>\n );\n }\n\n /**\n * Creates a function to set the open state of the search area.\n * @param isOpen - Boolean indicating whether the search area should be open.\n */\n private setIsOpen(isOpen: boolean) {\n return () => {\n this.isOpen = isOpen;\n if (this.isOpen) {\n this.loadSelectedViewFromStorage();\n }\n };\n }\n\n /**\n * Creates the configuration for search buttons.\n * @returns A SearchButtonConfig object with radio buttons for table and visual search.\n */\n private createButtonConfig(): SearchButtonConfig {\n return new SearchButtonConfig({\n isRadio: true,\n buttons: [\n this.createSearchButton(\n ResourceSearchConstants.TABLE_VIEW,\n 'rdf_search.buttons.table',\n () => {\n this.redirectUrl = UriUtil.RESOURCE_URL;\n this.resourceSearchStorageService.setSelectedView(ResourceSearchConstants.TABLE_VIEW);\n },\n true\n ),\n this.createSearchButton(\n ResourceSearchConstants.VISUAL_VIEW,\n 'rdf_search.buttons.visual',\n () => {\n this.redirectUrl = UriUtil.GRAPHS_VISUALIZATIONS_URL;\n this.resourceSearchStorageService.setSelectedView(ResourceSearchConstants.VISUAL_VIEW);\n },\n false\n )\n ]\n });\n }\n\n /**\n * Creates a search button with the given parameters.\n * @param id - The id for the button.\n * @param labelKey - The key for the button's label translation.\n * @param callback - The function to be called when the button is clicked.\n * @param selected - Boolean indicating whether the button should be initially selected.\n * @returns A SearchButton object.\n */\n private createSearchButton(id: string, labelKey: string, callback: () => void, selected: boolean): SearchButton {\n return new SearchButton({\n label: TranslationService.translate(labelKey),\n id,\n callback,\n selected\n } as SearchButton);\n }\n\n private onSuggestionSelected() {\n this.subscriptions.add(\n this.eventService.subscribe<SuggestionSelectedPayload>(ResourceSearchConstants.SUGGESTION_SELECTED_EVENT, (payload) => {\n if (payload.getContext() === this.RDF_CONTEXT) {\n const redirectUrl = payload.getSuggestion().getOverrideToVisual()\n ? UriUtil.GRAPHS_VISUALIZATIONS_URL\n : this.redirectUrl;\n openInNewTab(UriUtil.createAutocompleteRedirect(redirectUrl, payload.getSuggestion().getValue()));\n }\n })\n );\n }\n\n private onKeyDown() {\n return (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.isOpen = false;\n }\n }\n }\n\n private focusSearchInput() {\n if (this.isOpen) {\n HtmlUtil.focusElement(`#${this.RDF_CONTEXT}`);\n }\n }\n\n private loadSelectedViewFromStorage() {\n const selectedView = this.resourceSearchStorageService.getSelectedView();\n if (selectedView) {\n const selectedButton = this.buttonConfig.getButtons().find((button) => button.id === selectedView);\n if (selectedButton) {\n this.buttonConfig = this.buttonConfig.selectButton(selectedButton)\n }\n }\n }\n}\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {Repository} from '@ontotext/workbench-api';\n\ninterface RepositorySelectionProps {\n repository: Repository;\n defaultToggleButtonName: string;\n location: string;\n}\n\n/**\n *\n * A StencilJS component that renders a repository selection. The element displays the repository's icon and ID\n * if a repository is selected; otherwise, it shows a translated toggle button name. The component dynamically\n * updates the name when the translation changes.\n *\n * @example\n * <RepositorySelection repository={repository}></>\n *\n */\nexport const RepositorySelection: FunctionalComponent<RepositorySelectionProps> = ({repository, defaultToggleButtonName, location}) => {\n const className = repository ? 'repository-selection active-repository' : 'repository-selection no-selected-repository';\n return (\n <div class={className}\n data-test={'repository-selection'}>\n {/* TODO: add tooltip with repository info*/}\n {repository && <i class={'button-icon icon-repo-' + repository.type}></i>} {repository?.id ?? defaultToggleButtonName}{location}\n </div>\n );\n};\n\n",":root {\n --onto-repository-selector-color: var(--secondary-color, #373a3c);\n}\n\n:host {\n display: block;\n}\n\n.onto-repository-selector {\n\n .onto-dropdown {\n\n &.closed {\n .onto-dropdown-button {\n background-color: #ebebeb;\n color: var(--onto-repository-selector-color);\n\n &:hover {\n background-color: #d4d4d4;\n }\n }\n }\n }\n\n .repository-selector-dropdown-item {\n display: flex;\n align-items: center;\n gap: 0.4em;\n\n .item-icon {\n font-size: 1.4em;\n }\n\n .item-label {\n line-height: 0.75em;\n display: inline-block;\n vertical-align: middle;\n text-align: left;\n\n .repository-id {\n line-height: .75em;\n }\n\n .repository-location {\n font-weight: 300;\n font-size: .75em;\n margin-top: .4em;\n display: inline-block;\n max-width: 120px;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n }\n }\n}\n\n.tippy-box[data-theme=\"light-border\"] {\n border-radius: 0;\n\n .tippy-content {\n padding: 0;\n color: #373a3c;\n border: 1px solid rgba(0, 0, 0, .125);\n box-shadow: 1px 3px 6px rgba(0, 0, 0, 0.2);\n\n .repository-tooltip-title {\n font-size: 1rem;\n font-weight: 400;\n padding: 8px 14px;\n background-color: #f7f7f7;\n border-bottom: #EBEBEB 1px solid;\n\n .value {\n word-wrap: break-word;\n }\n }\n\n .repository-tooltip-content {\n padding: 1.5rem 0.5rem;\n display: flex;\n flex-direction: column;\n gap: 0.8em;\n font-weight: 400;\n font-size: 0.875rem;\n }\n\n .repository-tooltip-row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n &.total {\n margin-top: 1.2em;\n }\n\n .value {\n margin-left: .6em;\n }\n }\n }\n}\n","import {Component, Host, h, State, Prop, Watch} from '@stencil/core';\nimport {\n Repository,\n ServiceProvider,\n RepositoryContextService,\n UriUtil, RepositorySizeInfo\n} from '@ontotext/workbench-api';\nimport {DropdownItem} from '../../models/dropdown/dropdown-item';\nimport {DropdownItemAlignment} from '../../models/dropdown/dropdown-item-alignment';\nimport {RepositorySelection} from './repository-selection';\nimport {TranslationService} from '../../services/translation.service';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\n\n@Component({\n tag: 'onto-repository-selector',\n styleUrl: 'onto-repository-selector.scss',\n shadow: false,\n})\n/**\n * A StencilJS component that renders a repository selector dropdown. This component fetches the list of repositories\n * from the `RepositoryService` and displays them in a dropdown. It allows users to select a repository, and automatically\n * updates the current repository when a selection is made.\n *\n * @example\n * <onto-repository-selector\n * currentRepository={this.currentRepository}\n * items={this.items}\n * repositorySizeInfoFetcher={...}\n * totalTripletsFormatter={...}\n * canWriteRepo={...}>\n * </onto-repository-selector>\n */\nexport class OntoRepositorySelector {\n private readonly repositoryContextService = ServiceProvider.get(RepositoryContextService);\n private readonly subscriptions: (() => void)[] = [];\n\n /**\n * The currently selected repository.\n */\n @Prop() currentRepository: Repository;\n\n /**\n * The list of repositories to show in the dropdown.\n */\n @Prop() items: DropdownItem<Repository>[];\n\n /**\n * Fetches repository size info used to build tooltips.\n */\n @Prop() repositorySizeInfoFetcher: (repo: Repository) => Promise<RepositorySizeInfo>;\n\n /**\n * Formatter for numeric values in tooltips.\n */\n @Prop() totalTripletsFormatter: Intl.NumberFormat;\n\n /**\n * Determines whether the current user has write access to the repository.\n */\n @Prop() canWriteRepo: (repo: Repository) => boolean;\n\n /**\n * The default name of the toggle button that will be displayed in the dropdown.\n */\n @State() defaultToggleButtonName: string;\n\n /**\n * The message to display when there are no repositories available.\n */\n @State() noRepositoriesButtonMessage: string;\n\n /**\n * A list derived from the `items` input prop, with tooltip functions attached.\n *\n * Tooltip generation is centralized here to ensure consistency and avoid redundant operations.\n */\n private dropdownItems: DropdownItem<Repository>[];\n\n /**\n * Re-applies tooltip functions to all dropdown items when the items prop changes.\n */\n @Watch('items')\n onItemsChanged(newItems: DropdownItem<Repository>[]) {\n if (!(newItems?.length)) {\n this.dropdownItems = [];\n return;\n }\n\n this.dropdownItems = this.attachTooltipsToItems(this.items);\n }\n\n connectedCallback() {\n this.subscriptions.push(...this.subscribeToTranslationChanged());\n\n // Manually apply tooltip functions to each item on first mount.\n if (this.items?.length) {\n this.dropdownItems = this.attachTooltipsToItems(this.items);\n } else {\n this.dropdownItems = [];\n }\n }\n\n /**\n * Cleans up the subscriptions when the component is removed from the DOM to avoid memory leaks.\n * This method unsubscribes from both the repository change and selected repository change events.\n */\n disconnectedCallback(): void {\n this.subscriptions.forEach((subscription) => subscription());\n }\n\n render() {\n const repositorySelection = <RepositorySelection repository={this.currentRepository}\n defaultToggleButtonName={this.getButtonLabel()}\n location={this.getLocation()}/>;\n return (\n <Host>\n <onto-dropdown\n class='onto-repository-selector'\n data-test={'onto-repository-selector'}\n onValueChanged={this.onValueChanged()}\n dropdownButtonName={repositorySelection}\n dropdownButtonTooltip={this.createTooltipFunctionForRepository(this.currentRepository)}\n {...(this.currentRepository ? { 'dropdownButtonGuideSelector': `repository-id-${this.currentRepository.id}` } : {})}\n dropdownTooltipTrigger='mouseenter focus'\n dropdownAlignment={DropdownItemAlignment.RIGHT}\n tooltipPlacement={this.tooltipAlignment}\n tooltipTheme='light-border'\n items={this.dropdownItems}>\n </onto-dropdown>\n </Host>\n );\n }\n\n private attachTooltipsToItems(items: DropdownItem<Repository>[]): DropdownItem<Repository>[] {\n if (!items) {\n return [];\n }\n return items.map((item) => item.setTooltip(this.createTooltipFunctionForRepository(item.value)));\n }\n\n private tooltipAlignment(isOpen: boolean): OntoTooltipPlacement {\n if (isOpen) {\n return OntoTooltipPlacement.LEFT;\n }\n return OntoTooltipPlacement.BOTTOM;\n }\n\n private onValueChanged() {\n return (valueChangeEvent: CustomEvent) => this.onRepositoryChanged(valueChangeEvent.detail);\n }\n\n /**\n * Returns an async function that generates HTML tooltip content for the given repository.\n */\n private createTooltipFunctionForRepository(repository: Repository): () => Promise<string> {\n return async () => {\n if (!repository) {\n return '';\n }\n\n const repositorySizeInfo = await this.repositorySizeInfoFetcher(repository);\n return this.buildRepositoryTooltipHtml(repository, repositorySizeInfo);\n };\n }\n\n /**\n * Builds the complete HTML string used as tooltip content for a repository.\n */\n private buildRepositoryTooltipHtml(repository: Repository, repositorySizeInfo: RepositorySizeInfo): string {\n let html = `\n <div class=\"repository-tooltip-title\">\n <span class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository')}</span>\n <span class=\"value\">${repository.id}</span>\n </div>\n <div class=\"repository-tooltip-content\">\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.location')}:</div>\n <div class=\"value\">${repository.location ? repository.location : TranslationService.translate('repository-selector.tooltip.local')}</div>\n </div>\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.type')}:</div>\n <div class=\"value\">${TranslationService.translate('repository-selector.tooltip.types.' + (repository.type || 'unknown'))}</div>\n </div>\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.access')}:</div>\n <div class=\"value\">${TranslationService.translate(this.canWriteRepo(repository) ? 'repository-selector.tooltip.accesses.read_write' : 'repository-selector.tooltip.accesses.read')}</div>\n </div>`;\n\n html += this.buildRepositorySizeInfoHtml(repositorySizeInfo);\n html += '</div>';\n return html;\n }\n\n /**\n * Builds the repository size section of the tooltip.\n */\n private buildRepositorySizeInfoHtml(repositorySizeInfo: RepositorySizeInfo): string {\n if (!repositorySizeInfo || repositorySizeInfo.total < 0) {\n return '';\n }\n\n let html = `\n <div class=\"repository-tooltip-row total\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.total')}:</div>\n <div class=\"value\">${this.totalTripletsFormatter.format(repositorySizeInfo.total)}</div>\n </div>`;\n\n if (repositorySizeInfo.explicit >= 0) {\n html += `\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.explicit')}:</div>\n <div class=\"value\">${this.totalTripletsFormatter.format(repositorySizeInfo.explicit)}</div>\n </div>`;\n }\n\n if (repositorySizeInfo.inferred >= 0) {\n html += `\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.inferred')}:</div>\n <div class=\"value\">${this.totalTripletsFormatter.format(repositorySizeInfo.inferred)}</div>\n </div>`;\n }\n\n if (repositorySizeInfo.total >= 0) {\n let value = '-';\n if (repositorySizeInfo.explicit > 0) {\n value = this.totalTripletsFormatter.format(repositorySizeInfo.total / repositorySizeInfo.explicit);\n }\n\n html += `\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.expansion_ratio')}:</div>\n <div class=\"value\">${value}</div>\n </div>`;\n }\n\n return html;\n }\n\n private subscribeToTranslationChanged(): Array<() => void> {\n return [\n TranslationService.onTranslate('repository-selector.btn.toggle', [], (toggleButtonName) => {\n this.defaultToggleButtonName = toggleButtonName;\n }),\n TranslationService.onTranslate('repository-selector.btn.no_repositories', [], (noRepositoriesButtonMessage) => {\n this.noRepositoriesButtonMessage = noRepositoriesButtonMessage;\n })\n ];\n }\n\n private onRepositoryChanged(selectedRepository: Repository): void {\n this.repositoryContextService.updateSelectedRepository(selectedRepository);\n }\n\n private getLocation() {\n if (!this.currentRepository?.location) {\n return ``;\n }\n return `@${UriUtil.shortenIri(this.currentRepository.location)}`;\n }\n\n private getButtonLabel() {\n return this.items?.length\n ? this.defaultToggleButtonName\n : this.noRepositoriesButtonMessage;\n }\n}\n",".onto-search-icon {\n cursor: pointer;\n color: var(--primary-color, #9e2b0a);\n transition: all 0.15s ease-out;\n font-size: 1.6rem;\n\n &.fa-magnifying-glass {\n padding: .5rem .8rem;\n }\n\n &:hover {\n transform: scale(1.2);\n }\n}\n","import {Component, h, State} from '@stencil/core';\nimport {SubscriptionList} from '@ontotext/workbench-api';\nimport {TranslationService} from '../../services/translation.service';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\n\n@Component({\n tag: 'onto-search-icon',\n styleUrl: 'onto-search-icon.scss'\n})\nexport class OntoSearchIcon {\n @State() private tooltipLabel: string;\n\n private readonly tooltipKey: string = 'rdf_search.labels.search';\n private readonly subscriptions = new SubscriptionList();\n\n\n // ========================\n // Lifecycle methods\n // ========================\n connectedCallback() {\n this.onTooltipChange();\n }\n\n disconnectedCallback() {\n this.subscriptions.unsubscribeAll();\n }\n\n render() {\n return (\n <i tooltip-content={this.tooltipLabel}\n tooltip-placement={OntoTooltipPlacement.BOTTOM}\n class=\"onto-search-icon fa-light fa-magnifying-glass\"></i>\n );\n }\n\n private onTooltipChange() {\n this.subscriptions.add(\n TranslationService.onTranslate(this.tooltipKey, [], (translation) => this.tooltipLabel = translation)\n );\n }\n}\n",".search-resources-input {\n padding-right: 20px;\n\n & .input-row {\n gap: 3px;\n display: flex;\n flex-wrap: wrap;\n\n & .input-wrapper {\n position: relative;\n display: flex;\n flex: 1;\n min-width: 20vw;\n\n & input {\n flex: 1;\n padding: .5rem .75rem;\n font-size: 1rem;\n line-height: 1.25;\n color: #55595c;\n background-color: #fff;\n background-image: none;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid rgba(0,0,0,.15);\n min-width: inherit;\n\n &:focus {\n color: #55595c;\n border-color: #66afe9;\n outline: 0;\n }\n }\n }\n\n & i.fa-xmark {\n position: absolute;\n right: 10px;\n top: 7px;\n z-index: 10;\n font-size: 1.6rem;\n }\n\n & button {\n display: inline-block;\n font-weight: 400;\n line-height: 1.25;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n transition: all .15s ease-out;\n user-select: none;\n border: 1px solid transparent;\n padding: .5rem 1rem;\n font-size: 1rem;\n color: var(--secondary-color, #003663);\n\n &.selected {\n background-color: var(--primary-color, #9e2b0a);\n color: white;\n }\n\n &:focus {\n outline: none;\n }\n\n &:hover:not(.selected) {\n background-color: #d4d4d4;\n border-color: #d4d4d4;\n }\n }\n }\n\n & .hint {\n font-size: 0.8rem;\n color: #818a91;\n }\n\n & .autocomplete-results-wrapper {\n margin-top: 6px;\n max-height: 204px;\n overflow: auto;\n\n & p {\n font-size: 1.1rem;\n line-height: 1.5;\n color: #373a3c;\n background-color: #fff;\n margin-bottom: 0;\n padding: 5px 25px;\n cursor: pointer;\n\n & b {\n color: var(--secondary-color, #003663);\n }\n\n &.selected {\n background-color: var(--autocomplete-background-selected, #02A99A);\n }\n\n &.hovered:not(.selected), &:hover:not(.selected) {\n background-color: var(--autocomplete-background, #02a98f4d);\n }\n }\n }\n}\n","import {Component, h, Prop, State, Watch} from '@stencil/core';\nimport {\n AutocompleteContextService,\n AutocompleteSearchResult,\n AutocompleteService,\n AutocompleteStorageService,\n EventService,\n NamespaceMap,\n NamespacesContextService,\n navigateTo,\n OntoToastrService, ResourceSearchStorageService,\n SearchButton,\n SearchButtonConfig,\n ServiceProvider,\n SubscriptionList,\n Suggestion,\n SuggestionSelectedPayload,\n SuggestionType,\n UriUtil\n} from '@ontotext/workbench-api';\nimport {TranslationService} from '../../services/translation.service';\nimport {HtmlUtil} from '../../utils/html-util';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\nimport {ResourceSearchConstants} from '../../models/resource-search/resource-search-constants';\n\n/**\n * A component for rendering RDF search resource input with configurable buttons.\n * This component provides a text input for search queries and a set of configurable buttons.\n */\n@Component({\n tag: 'onto-search-resource-input',\n styleUrl: 'onto-search-resource-input.scss'\n})\nexport class OntoSearchResourceInput {\n private readonly autocompleteService = ServiceProvider.get(AutocompleteService);\n private readonly autocompleteContextService = ServiceProvider.get(AutocompleteContextService);\n private readonly autocompleteStorageService = ServiceProvider.get(AutocompleteStorageService);\n private readonly resourceSearchStorageService = ServiceProvider.get(ResourceSearchStorageService);\n private readonly toastrService = ServiceProvider.get(OntoToastrService);\n private readonly eventService = ServiceProvider.get(EventService);\n private readonly namespaceContextService = ServiceProvider.get(NamespacesContextService);\n\n private readonly subscriptions = new SubscriptionList();\n private autocompleteWarningShown = false;\n private inputRef: HTMLInputElement;\n private namespaces: NamespaceMap;\n\n /**\n * The search resource component can appear more than once per page. This context\n * is used to differentiate them. When a suggestion is selected different parents\n * may need to do different things. The context is emitted alongside the suggestion\n * upon select.\n */\n @Prop() context: string;\n\n /** Whether the rdf resource pre-search validation should be skipped. */\n @Prop() skipValidation = false;\n\n /**\n * Whether to preserve the input value and last selected suggestion\n * If true, both will be stored in local storage and loaded, when the component is rendered\n */\n @Prop() preserveSearch: boolean;\n\n /**\n * Whether the search component is currently hidden. Can be shown/hidden in the RDF search\n */\n @Prop() isHidden = false;\n\n @Watch('isHidden')\n onVisibilityChange(isHidden: boolean) {\n if (isHidden) {\n this.searchResult?.clearSuggestions();\n } else {\n this.setInputValue(this.resourceSearchStorageService.getInputValue());\n }\n }\n\n /**\n * Button configuration for the search resource input.\n * Holds buttons to be displayed, as well as additional configuration,\n * such as whether the buttons should be treated as radio buttons.\n */\n @Prop() buttonConfig: SearchButtonConfig;\n\n /**\n * The current value of the search input field.\n */\n @State() private inputValue: string;\n\n /**\n * The current autocomplete search result\n */\n @State() private searchResult: AutocompleteSearchResult;\n\n /**\n * Whether the autocomplete setting is enabled.\n */\n @State() private isAutocompleteEnabled = false;\n\n connectedCallback() {\n this.onAutocompleteEnabledChange();\n this.onNamespaceChange();\n this.loadInputFromStorage();\n }\n\n disconnectedCallback() {\n this.subscriptions.unsubscribeAll();\n }\n\n render() {\n return (\n <section class=\"search-resources-input\">\n <div class=\"input-row\">\n <span class=\"input-wrapper\">\n <input value={this.inputValue}\n id={this.context}\n type=\"text\"\n autocomplete=\"off\"\n placeholder={`${TranslationService.translate('rdf_search.labels.search')}...`}\n ref={(ref) => this.inputRef = ref}\n onKeyDown={this.onKeyDown}\n data-test={this.context}\n onInput={this.handleInput}/>\n {this.inputValue?.length ?\n <i onClick={this.clearInput}\n tooltip-content={TranslationService.translate('rdf_search.tooltips.clear')}\n tooltip-placement={OntoTooltipPlacement.BOTTOM}\n class=\"fa-light fa-xmark clear-input\"></i> : ''\n }\n </span>\n {this.buttonConfig?.getButtons().getItems().map((button) => (\n <button key={button.label}\n onClick={this.handleButtonClick(button)}\n class={`${button.selected ? 'selected' : ''}`}>{button.label}</button>\n ))}\n </div>\n <span class=\"hint\">{TranslationService.translate('rdf_search.labels.hint')}</span>\n <section class=\"autocomplete-results-wrapper\" data-test='onto-autocomplete-results'>\n {this.searchResult?.getSuggestions().getItems().map((suggestion) => (\n <p key={suggestion.getId()}\n onClick={this.onSuggestionClick(suggestion)}\n data-test='onto-autocomplete-suggestion'\n onMouseMove={this.hoverSuggestion(suggestion)}\n class={`${suggestion.isHovered() ? 'hovered' : ''} ${suggestion.isSelected() ? 'selected' : ''}`}\n innerHTML={suggestion.getDescription()}></p>\n ))}\n </section>\n </section>\n );\n }\n\n /**\n * Handles the click event for a search button.\n * If the button configuration is set to radio mode and the clicked button is not selected,\n * it deselects all other buttons and selects the clicked one.\n * @param {SearchButton} button - The button that was clicked.\n */\n private handleButtonClick(button: SearchButton) {\n return () => this.buttonConfig = this.buttonConfig.selectButton(button);\n }\n\n /**\n * Updates the local inputValue with the html input element's value.'\n */\n private readonly handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (!target.value) {\n this.clearInput();\n return;\n }\n this.setInputValue(target.value);\n this.checkForAutocomplete();\n };\n\n private loadAutocompleteResults() {\n if (!this.inputValue) {\n this.searchResult?.clearSuggestions();\n return;\n }\n if (this.isAutocompleteEnabled) {\n this.autocompleteService.search(this.inputValue)\n .then((searchResult) => {\n this.onResultsReceived(searchResult);\n });\n }\n }\n\n /**\n * Clears the search input field.\n */\n private readonly clearInput = () => {\n this.setInputValue('');\n if(this.preserveSearch) {\n this.resourceSearchStorageService.clearStoredSearch();\n }\n };\n\n private hoverSuggestion(suggestion: Suggestion) {\n return () => this.searchResult = this.searchResult.hoverSuggestion(suggestion);\n }\n\n private onAutocompleteEnabledChange() {\n this.isAutocompleteEnabled = this.autocompleteStorageService.isEnabled();\n this.subscriptions.add(\n this.autocompleteContextService.onAutocompleteEnabledChanged((enabled) => {\n this.isAutocompleteEnabled = enabled ?? this.isAutocompleteEnabled;\n })\n );\n }\n\n private checkForAutocomplete() {\n if (this.inputValue.length > 0 && !this.isAutocompleteEnabled && !this.autocompleteWarningShown) {\n this.autocompleteWarningShown = true;\n const message = TranslationService.translate('rdf_search.toasts.autocomplete_is_off');\n this.toastrService.warning(`<a class=\"no-underline\" style=\"font-weight: 500\">${message}</a>`,\n {\n onClick: navigateTo('autocomplete'),\n removeOnClick: true\n });\n }\n }\n\n private onSuggestionClick(suggestion: Suggestion) {\n return (event: MouseEvent) => {\n suggestion.setOverrideToVisual(event.ctrlKey || event.metaKey);\n this.searchRdfResource(suggestion);\n };\n }\n\n private searchRdfResource(suggestion: Suggestion) {\n if (suggestion.getType() === SuggestionType.PREFIX) {\n this.expandPrefix(suggestion);\n } else {\n this.notifyRdfResourceSelected(suggestion);\n if (this.preserveSearch) {\n this.resourceSearchStorageService.setLastSelected(suggestion);\n }\n }\n }\n\n private notifyRdfResourceSelected(suggestion: Suggestion) {\n this.searchResult = this.searchResult?.selectSuggestion(suggestion);\n this.eventService.emit({\n NAME: ResourceSearchConstants.SUGGESTION_SELECTED_EVENT,\n payload: new SuggestionSelectedPayload(suggestion, this.context)\n });\n }\n\n private expandPrefix(suggestion: Suggestion) {\n this.setInputValue(this.namespaces.getByPrefix(suggestion.getValue()));\n this.inputRef.focus();\n }\n\n private setInputValue(value: string) {\n this.inputValue = value;\n if (this.preserveSearch) {\n this.resourceSearchStorageService.setInputValue(this.inputValue);\n }\n this.loadAutocompleteResults();\n }\n\n private onNamespaceChange() {\n this.subscriptions.add(\n this.namespaceContextService.onNamespacesChanged((namespaces) => {\n this.namespaces = namespaces;\n })\n );\n }\n\n private readonly onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n this.onEnter(event);\n break;\n case 'Escape':\n this.onEscape();\n break;\n case 'ArrowUp':\n this.onArrowUp(event);\n break;\n case 'ArrowDown':\n this.onArrowDown(event);\n break;\n default:\n break;\n }\n };\n\n private onEnter(event: KeyboardEvent) {\n let selectedSuggestion = this.searchResult?.getHoveredSuggestion();\n if (!selectedSuggestion) {\n selectedSuggestion = new Suggestion({\n value: UriUtil.removeAngleBrackets(this.inputValue),\n type: SuggestionType.URI\n });\n }\n selectedSuggestion.setOverrideToVisual(event.ctrlKey || event.metaKey);\n this.validateAndSearch(selectedSuggestion);\n }\n\n private onArrowUp(event: KeyboardEvent) {\n this.searchResult = this.searchResult.hoverPreviousSuggestion();\n this.displaySuggestion(event);\n }\n\n private onArrowDown(event: KeyboardEvent) {\n this.searchResult = this.searchResult.hoverNextSuggestion();\n this.displaySuggestion(event);\n }\n\n private displaySuggestion(event: KeyboardEvent) {\n event.preventDefault();\n // Update the input directly, because the value should only be displayed,\n // without triggering a new search and altering the autocomplete results\n this.inputRef.value = this.searchResult.getHoveredSuggestion().getValue();\n this.scrollToSuggestionBySelector('p.hovered');\n }\n\n private getSuggestionValue(suggestion: Suggestion): string {\n return suggestion.getType() === SuggestionType.PREFIX\n ? this.namespaces.getByPrefix(suggestion.getValue())\n : suggestion.getValue();\n }\n\n private scrollToSuggestionBySelector(selector: string, options?: ScrollIntoViewOptions): void {\n HtmlUtil.waitForElement(selector)\n .then(() => {\n HtmlUtil.scrollElementIntoView(selector, options);\n });\n }\n\n private validateAndSearch(suggestion: Suggestion) {\n if (!this.skipValidation) {\n if (!suggestion.getValue()) {\n this.toastrService.error(TranslationService.translate('rdf_search.toasts.empty_input'));\n return;\n }\n\n if (!UriUtil.isValidUri(this.getSuggestionValue(suggestion))) {\n this.toastrService.error(TranslationService.translate('rdf_search.toasts.invalid_uri'));\n return;\n }\n }\n\n this.searchRdfResource(suggestion);\n }\n\n private onEscape() {\n if (this.preserveSearch) {\n return;\n }\n this.clearInput();\n }\n\n private loadInputFromStorage() {\n if (!this.preserveSearch) {\n return;\n }\n this.inputValue = this.resourceSearchStorageService.getInputValue() || '';\n }\n\n private onResultsReceived(searchResult: AutocompleteSearchResult) {\n const lastSelected = searchResult?.getByValue(this.resourceSearchStorageService.getLastSelectedValue());\n if (lastSelected && this.preserveSearch) {\n // No need to reassign twice in the same thread tick. One will trigger the re-render\n searchResult.hoverSuggestion(lastSelected);\n this.searchResult = searchResult.selectSuggestion(lastSelected);\n this.scrollToSuggestionBySelector('p.hovered.selected', {block: 'start'});\n } else {\n this.searchResult = searchResult.hoverFirstSuggestion();\n this.scrollToSuggestionBySelector('p.hovered', {block: 'start'});\n }\n }\n}\n",":root {\n --onto-user-login-color: var(--secondary-color, #373a3c);\n}\n\n.onto-user-login {\n position: relative;\n width: fit-content;\n\n button {\n display: flex;\n color: var(--onto-user-login-color);\n flex-direction: row;\n line-height: 1.5;\n font-weight: 400;\n font-size: 1rem;\n text-align: center;\n user-select: none;\n border: 1px solid transparent;\n padding: .4em 1rem;\n cursor: pointer;\n white-space: nowrap;\n place-items: center;\n transition: all 0.15s ease-out;\n\n & .user-login-label {\n padding: 0 .4rem;\n }\n\n &:hover {\n background-color: #d4d4d4;\n border-color: #d4d4d4;\n\n & .fa-user {\n transform: scale(1.2);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n\n i {\n color: var(--user-menu-primary-color);\n line-height: .75;\n font-size: 1.2em;\n transition: 0.15s ease-out;\n\n &.fa-angle-down {\n color: rgba(0, 0, 0, .35);\n font-size: 1.1em;\n transition: all 0.2s ease-in;\n }\n }\n }\n}\n","import { Component, h } from '@stencil/core';\nimport {navigateTo} from '@ontotext/workbench-api';\n\n@Component({\n tag: 'onto-user-login',\n styleUrl: 'onto-user-login.scss',\n shadow: false,\n})\nexport class OntoUserLogin {\n render() {\n return (\n <section class=\"onto-user-login\">\n <button onClick={navigateTo('/login')}>\n <i class=\"icon-arrow-right\"></i>\n <translate-label\n class=\"user-login-label\"\n labelKey=\"user_menu.login\"\n ></translate-label>\n </button>\n </section>\n );\n }\n}\n",":root {\n --user-menu-primary-color: var(--primary-color, #9e2b0a);\n}\n\n.onto-user-menu {\n position: relative;\n width: fit-content;\n\n button {\n display: flex;\n flex-direction: row;\n line-height: 1.5;\n font-weight: 400;\n font-size: 1rem;\n text-align: center;\n user-select: none;\n border: 1px solid transparent;\n padding: .4em 1rem;\n cursor: pointer;\n white-space: nowrap;\n place-items: center;\n transition: all 0.15s ease-out;\n color: var(--secondary-color);\n\n &:hover {\n background-color: #d4d4d4;\n border-color: #d4d4d4;\n\n & .fa-user {\n transform: scale(1.2);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n &.open {\n color: white;\n background-color: var(--user-menu-primary-color);\n border-color: var(--user-menu-primary-color);\n\n & .fa-user {\n color: var(--icon-on-primary-color, #ffffffcc);\n }\n\n &:hover {\n .fa-user {\n transform: scale(1.2);\n }\n }\n }\n\n .username {\n padding: 0 5px;\n }\n\n i {\n color: var(--user-menu-primary-color);\n line-height: .75;\n font-size: 1.2em;\n transition: 0.15s ease-out;\n\n &.fa-angle-down {\n color: rgba(0, 0, 0, .35);\n font-size: 1.1em;\n transition: all 0.2s ease-in;\n }\n }\n }\n\n & .onto-user-menu-dropdown {\n position: absolute;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n cursor: pointer;\n color: white;\n text-decoration: none;\n right: 0;\n min-width: 7rem;\n font-size: 1rem;\n width: 100%;\n background-color: var(--user-menu-primary-color);\n\n & translate-label {\n padding: .4rem 1rem;\n user-select: none;\n white-space: nowrap;\n font-weight: 400;\n\n &:hover, &:focus {\n background-color: rgba(0, 0, 0, .1);\n }\n }\n }\n}\n","import {Component, h, Prop, State, Element} from '@stencil/core';\nimport {\n AuthenticatedUser,\n AuthenticationService,\n navigateTo,\n SecurityConfig,\n ServiceProvider\n} from '@ontotext/workbench-api';\n\n/**\n * This component displays the current user's name and provides options\n * for navigating to settings and logging out.\n */\n@Component({\n tag: 'onto-user-menu',\n styleUrl: 'onto-user-menu.scss'\n})\nexport class OntoUserMenu {\n /** Whether the dropdown menu is open or closed */\n @State() private isOpen: boolean;\n\n /** Currently authenticated user */\n @Prop() user: AuthenticatedUser;\n /** Current security config */\n @Prop() securityConfig: SecurityConfig;\n\n /** Reference to host element for outside click detection */\n @Element() hostElement: HTMLElement;\n\n connectedCallback() {\n document.addEventListener('click', this.handleOutsideClick);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleOutsideClick);\n }\n\n render() {\n return (\n <section class='onto-user-menu'>\n <div class='dropdown-toggle-wrapper' onClick={this.toggleDropdown}>\n <button class={`${this.isOpen ? 'open' : ''}`}>\n <i class='fa-solid fa-user'></i>\n <span class='username'>{this.user.username}</span>\n <i class={`fa-light fa-angle-down ${this.isOpen ? 'fa-rotate-180' : ''}`}></i>\n </button>\n {this.isOpen ?\n <section class='onto-user-menu-dropdown'>\n <translate-label onClick={navigateTo('settings')}\n labelKey={'user_menu.my_settings'}></translate-label>\n {!this.securityConfig?.hasExternalAuthUser ?\n <translate-label onClick={this.logout}\n labelKey={'user_menu.logout'}></translate-label> : ''}\n </section> : ''}\n </div>\n </section>\n );\n }\n\n /**\n * Log out the current user.\n */\n private readonly logout = (): void => {\n ServiceProvider.get(AuthenticationService).logout();\n }\n\n /**\n * Toggles the dropdown menu's open state.\n *\n * @returns A function that toggles the `isOpen` state between true and false.\n */\n private readonly toggleDropdown = (): void => {\n this.isOpen = !this.isOpen;\n }\n\n /**\n * Closes the dropdown if the user clicks outside the component.\n */\n private readonly handleOutsideClick = (event: MouseEvent) => {\n if (this.isOpen && !this.hostElement.contains(event.target as Node)) {\n this.isOpen = false;\n }\n };\n}\n"],"version":3}
|
|
1
|
+
{"file":"onto-language-selector.onto-license-alert.onto-operations-notification.onto-rdf-search.onto-repository-selector.onto-search-icon.onto-search-resource-input.onto-user-login.onto-user-menu.entry.js","mappings":"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","names":[],"sources":["src/components/onto-language-selector/onto-language-selector.scss?tag=onto-language-selector","src/components/onto-language-selector/onto-language-selector.tsx","src/components/onto-license-alert/onto-license-alert.scss?tag=onto-license-alert","src/components/onto-license-alert/onto-license-alert.tsx","src/components/onto-operations-notification/onto-operations-notification.scss?tag=onto-operations-notification","src/components/onto-operations-notification/onto-operations-notification.tsx","src/components/onto-rdf-search/onto-rdf-search.scss?tag=onto-rdf-search","src/components/onto-rdf-search/onto-rdf-search.tsx","src/components/onto-repository-selector/repository-selection.tsx","src/components/onto-repository-selector/onto-repository-selector.scss?tag=onto-repository-selector","src/components/onto-repository-selector/onto-repository-selector.tsx","src/components/onto-search-icon/onto-search-icon.scss?tag=onto-search-icon","src/components/onto-search-icon/onto-search-icon.tsx","src/components/onto-search-resource-input/onto-search-resource-input.scss?tag=onto-search-resource-input","src/components/onto-search-resource-input/onto-search-resource-input.tsx","src/components/onto-user-login/onto-user-login.scss?tag=onto-user-login","src/components/onto-user-login/onto-user-login.tsx","src/components/onto-user-menu/onto-user-menu.scss?tag=onto-user-menu","src/components/onto-user-menu/onto-user-menu.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\nonto-language-selector {\n display: block;\n\n .onto-dropdown {\n height: 100%;\n\n &.open {\n .onto-dropdown-button {\n height: fit-content;\n }\n }\n\n &.closed {\n\n .onto-dropdown-button {\n background-color: transparent;\n\n .icon-translation {\n font-size: 1.5em;\n }\n }\n\n .onto-dropdown-button:hover {\n background-color: #d4d4d4;\n }\n }\n }\n}\n","import {Component, Host, h, State, Prop} from '@stencil/core';\nimport {DropdownItem} from '../../models/dropdown/dropdown-item';\nimport {\n ServiceProvider,\n LanguageService,\n LanguageContextService,\n} from \"@ontotext/workbench-api\";\nimport {DropdownItemAlignment} from '../../models/dropdown/dropdown-item-alignment';\n\n@Component({\n tag: 'onto-language-selector',\n styleUrl: 'onto-language-selector.scss',\n shadow: false,\n})\nexport class OntoLanguageSelector {\n private readonly languageService = ServiceProvider.get(LanguageService);\n private readonly languageContextService = ServiceProvider.get(LanguageContextService);\n private items: DropdownItem<string>[] = [];\n private onLanguageChangeSubscription: () => void;\n\n /**\n * Specifies the dropdown items' alignment. If not provided, the items and the dropdown button will be aligned to the left.\n *\n */\n @Prop() dropdownAlignment: DropdownItemAlignment = DropdownItemAlignment.LEFT;\n\n /**\n * Holds the currently selected language, such as 'en' or 'fr'.\n */\n @State() currentLanguage: string;\n\n connectedCallback() {\n this.onLanguageChangeSubscription = this.languageContextService.onSelectedLanguageChanged((newLanguage) => this.changeLanguage(newLanguage));\n this.items = this.getLanguageDropdownOptions();\n }\n\n disconnectedCallback(): void {\n if (this.onLanguageChangeSubscription) {\n this.onLanguageChangeSubscription();\n }\n }\n\n render() {\n return (\n <Host>\n <onto-dropdown\n class='onto-language-selector'\n onValueChanged={this.valueChangeHandler()}\n dropdownButtonNameLabelKey={!this.currentLanguage ? 'language_selector.toggle_menu.label' : undefined}\n dropdownButtonName={this.currentLanguage ?? undefined}\n dropdownButtonTooltipLabelKey={this.currentLanguage ? 'language_selector.toggle_menu.tooltip' : 'language_selector.toggle_menu.label'}\n dropdownAlignment={this.dropdownAlignment ?? DropdownItemAlignment.RIGHT}\n dropdownTooltipTrigger={'mouseenter focus'}\n iconClass='icon-translation'\n items={this.items}>\n </onto-dropdown>\n </Host>\n );\n }\n\n private valueChangeHandler() {\n return (newLanguage: any) => this.onSelectedLanguageChanged(newLanguage);\n }\n\n private changeLanguage(newLanguage: string): void {\n let selectedLanguage = newLanguage;\n if (!selectedLanguage) {\n selectedLanguage = this.languageService.getDefaultLanguage();\n }\n\n this.currentLanguage = selectedLanguage;\n this.items = this.getLanguageDropdownOptions();\n }\n\n private onSelectedLanguageChanged(newLanguageEvent: CustomEvent): void {\n this.languageContextService.updateSelectedLanguage(newLanguageEvent.detail);\n }\n\n private getLanguageDropdownOptions(): DropdownItem<string>[] {\n return this.languageService.getSupportedLanguages().map((locale) => {\n const iconClass = this.currentLanguage === locale ? 'icon-tick' : '';\n return new DropdownItem<string>()\n .setNameLabelKey(`language_selector.language.${locale}.label`)\n .setTooltipLabelKey(`language_selector.language.${locale}.tooltip.` + (this.currentLanguage === locale ? 'selected' : 'not_selected'))\n .setIconClass(iconClass)\n .setCssClass(locale)\n .setValue(locale)\n .setDropdownTooltipTrigger('mouseenter focus');\n });\n }\n}\n",":host {\n display: block;\n}\n\n.onto-license-alert {\n animation: fade-button 2s infinite;\n --fade-color: var(--color-danger-medium);\n border: 1px solid transparent !important;\n\n &:hover {\n text-decoration: none;\n background-color: var(--color-danger-medium) !important;\n border-color: var(--color-danger-medium) !important;\n\n & span {\n transform: scale(1.2);\n }\n }\n\n & span {\n transition: transform 0.15s ease-out;\n }\n\n & .icon-warning {\n margin-right: 0.2em;\n line-height: 0.75;\n font-size: 1.4em;\n display: inline-block;\n vertical-align: middle;\n }\n}\n","import {License, navigateTo} from '@ontotext/workbench-api';\nimport { Component, Host, h, Prop } from '@stencil/core';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\n\n@Component({\n tag: 'onto-license-alert',\n styleUrl: 'onto-license-alert.scss'\n})\n/**\n * OntoLicenseAlert component\n *\n * This component displays a license alert button with a tooltip.\n * It is used to show license-related information and provide a link to the license page.\n */\nexport class OntoLicenseAlert {\n\n /** The current license information */\n @Prop() license: License;\n\n render() {\n return (\n <Host tooltip-content={this.license?.message} tooltip-placement={OntoTooltipPlacement.BOTTOM} data-test='onto-license-alert'>\n <button class=\"onto-license-alert onto-btn\" onClick={navigateTo('license')}>\n <span class=\"icon-warning\"></span>\n <translate-label labelKey={'license_alert.label'}></translate-label>\n </button>\n </Host>\n );\n }\n}\n","$hover-color: #d4d4d4;\n\n.operations-statuses {\n position: relative;\n\n & .operations-statuses-dropdown-toggle {\n display: flex;\n font-weight: 400;\n line-height: 1.25;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: 1px solid transparent;\n padding: .4rem 1rem;\n font-size: 1rem;\n gap: 0.75em;\n transition: all 0.15s ease-out;\n\n &:hover {\n background-color: $hover-color;\n border-color: $hover-color;\n\n i:not(.fa-angle-down) {\n transform: scale(1.2);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n &.open {\n background-color: #bbb !important;\n border-color: #bbb !important;\n }\n\n & .operation-status-header {\n display: flex;\n\n & .running-operation-count {\n color: white;\n padding: 1px 2px;\n line-height: 1;\n align-self: center;\n top: -1em;\n font-size: 60%;\n }\n }\n }\n\n & .operations-dropdown {\n position: absolute;\n right: 0;\n z-index: 1000;\n border: none;\n background-color: var(--primary-color, #9e2b0a);\n border-radius: 0;\n list-style: none;\n padding: 0;\n -moz-transition: all 150ms ease-out; /* FF4+ */\n -o-transition: all 150ms ease-out; /* Opera 10.5+ */\n -webkit-transition: all 150ms ease-out; /* Saf3.2+, Chrome */\n transition: all 150ms ease-out;\n\n & .operations-statuses-content {\n display: flex;\n flex-direction: column;\n background-color: #bbb;\n margin: 0;\n\n & li:first-child {\n margin-top: 5px;\n }\n\n & li:last-child {\n margin-bottom: 5px;\n }\n\n & .operation-status-content {\n display: flex;\n flex-direction: row;\n margin: 5px 10px;\n align-items: center;\n justify-content: start;\n cursor: pointer;\n text-decoration: none;\n width: auto;\n gap: 0.5em;\n background-color: #EBEBEB;\n border-color: #EBEBEB;\n\n & i {\n width: 8.33%\n }\n\n & .operation-number {\n min-width: 50px;\n display: block;\n\n & .operation-status-running-operation-count {\n display: block;\n width: 100%;\n color: white;\n border-radius: 2px;\n padding: 3px 2px 2px;\n text-align: center;\n font-size: 75%;\n background-color: var(--color-info-dark, #004177) !important;\n }\n }\n\n & .operation-status-content > * {\n padding: 0;\n }\n\n & .operation-status-label {\n width: 66.66%;\n padding-left: 5px;\n line-height: 0;\n text-align: start;\n }\n\n &:hover {\n text-decoration: none;\n background-color: $hover-color;\n border-color: $hover-color;\n\n & i {\n transform: scale(1.2);\n }\n }\n }\n }\n }\n\n .status-information {\n color: var(--color-info-dark, #004177) !important;\n }\n\n .status-warning {\n color: var(--color-warning-dark, #7e2308) !important;\n }\n\n .status-critical {\n color: var(--color-danger-dark, #a31425) !important;\n }\n\n i {\n padding-left: 3px;\n padding-right: 3px;\n font-size: 1.1em;\n line-height: 1.6rem !important;\n align-content: center;\n transition: transform 0.15s ease-out;\n\n &.fa-angle-down {\n color: rgba(0, 0, 0, .35);\n transition: all 0.2s ease-in;\n }\n }\n\n // TODO: remove, once the import icon is replaced with the font awesome version\n .icon-import {\n font-size: 21px;\n }\n}\n","import {Component, h, Prop, State, Listen, Element} from '@stencil/core';\nimport {\n OperationGroup,\n OperationStatus,\n OperationStatusSummary,\n OperationGroupSummaryList, MapperProvider, OperationGroupSummaryListMapper, navigateTo\n} from '@ontotext/workbench-api';\n\nconst operationGroupToIcon = {\n [OperationGroup.BACKUP]: 'fa-regular fa-archive',\n [OperationGroup.QUERY]: 'fa-regular fa-arrow-right-arrow-left',\n [OperationGroup.CLUSTER]: 'fa-regular fa-sitemap',\n // TODO: change import icon to font awesome one, when available\n [OperationGroup.IMPORT]: 'icon-import'\n};\n\nconst operationStatusToWarningClass = {\n [OperationStatus.WARNING]: 'status-warning',\n [OperationStatus.INFORMATION]: 'status-information',\n [OperationStatus.CRITICAL]: 'status-critical'\n};\n\nconst operationStatusToFadeClass = {\n [OperationStatus.WARNING]: 'onto-btn-fade-warning',\n [OperationStatus.CRITICAL]: 'onto-btn-fade-danger'\n};\n\n@Component({\n tag: 'onto-operations-notification',\n styleUrl: 'onto-operations-notification.scss'\n})\nexport class OntoOperationsNotification {\n @Element() el: HTMLElement;\n\n /** The active operations summary. Holds general status and all current operations */\n @Prop() activeOperations: OperationStatusSummary;\n\n /** Whether the dropdown menu is open or closed */\n @State() isOpen: boolean = false;\n\n /** Grouped info about operations, to be displayed in the button */\n private operationGroups: OperationGroupSummaryList;\n\n @Listen('click', {target: 'window'})\n handleOutsideClick() {\n if (this.isOpen) {\n this.isOpen = false;\n }\n }\n\n render() {\n this.operationGroups = MapperProvider\n .get(OperationGroupSummaryListMapper)\n .mapToModel(this.activeOperations.toOperationsGroupSummary());\n\n return (\n <section class=\"operations-statuses\">\n <button\n class={`operations-statuses-dropdown-toggle ${this.isOpen ? 'open' : 'closed'} ${operationStatusToFadeClass[this.activeOperations.status] ?? ''}`}\n onClick={this.toggleDropdown}>\n {this.operationGroups.getItems().map((groupSummary) => (\n <section key={groupSummary.id} class=\"operation-status-header\">\n <i\n class={`${operationGroupToIcon[groupSummary.group]} ${operationStatusToWarningClass[groupSummary.status]}`}></i>\n {groupSummary.totalOperations\n ? <sup class=\"running-operation-count tag-info\">{groupSummary.totalOperations}</sup>\n : ''\n }\n </section>\n ))}\n <i class={`fa-light fa-angle-down ${this.isOpen ? 'fa-rotate-180' : ''}`}></i>\n </button>\n {this.isOpen &&\n <ul class=\"operations-dropdown\">\n <section class=\"operations-statuses-content\">\n {this.activeOperations.allRunningOperations.getItems().map((operation) => (\n <li key={operation.id}>\n <a class={`operation-status-content onto-btn no-underline ${operationStatusToWarningClass[operation.status]}`}\n target=\"_blank\"\n onClick={navigateTo(operation.href)}>\n <i class={operationGroupToIcon[operation.group]}></i>\n <span class=\"operation-status-label\">\n <translate-label\n labelKey={`operations_notification.links.${operation.labelKey}`}>\n </translate-label>\n </span>\n\n <span class=\"operation-number\">\n {operation.count\n ? <span class=\"operation-status-running-operation-count\">{operation.count}</span>\n : ''\n }\n </span>\n </a>\n </li>\n ))}\n </section>\n </ul>}\n </section>\n );\n }\n\n private toggleDropdown = (event: Event) => {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n };\n}\n",":root {\n --search-primary-color: var(--primary-color, #9e2b0a);\n}\n\n.onto-rdf-search {\n display: flex;\n align-items: center;\n line-height: .75;\n font-size: 1.4em;\n height: auto;\n\n & .search-area {\n white-space: nowrap;\n text-align: start;\n font-weight: 300;\n max-width: 100vw;\n position: fixed;\n right: 3em;\n z-index: 1;\n display: block;\n width: 60vw;\n\n -webkit-transition: top 0.3s ease-in, opacity 0.5s ease;\n transition: top 0.3s ease-in, opacity 0.5s ease;\n\n box-shadow: 0 3px 6px rgba(0,0,0,.1);\n border-radius: 0;\n margin-bottom: 1em;\n background-color: white;\n padding: 1.6rem;\n border: 1px solid rgba(0,0,0,.125);\n\n &.visible {\n top: 40px;\n opacity: 1;\n }\n\n &.invisible {\n top: -550px;\n opacity: 0;\n }\n\n & .close-btn {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n font-size: 1.5rem;\n }\n }\n\n & i {\n cursor: pointer;\n color: var(--search-primary-color);\n transition: all 0.15s ease-out;\n\n &.fa-magnifying-glass, &.close-btn {\n padding: .5rem .8rem;\n }\n\n &:hover {\n transform: scale(1.2);\n }\n }\n}\n","import {\n EventService, openInNewTab, ResourceSearchStorageService,\n SearchButton,\n SearchButtonConfig,\n ServiceProvider,\n SubscriptionList, SuggestionSelectedPayload, UriUtil\n} from '@ontotext/workbench-api';\nimport {Component, h, Listen, State} from '@stencil/core';\nimport {TranslationService} from '../../services/translation.service';\nimport {HtmlUtil} from '../../utils/html-util';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\nimport {ResourceSearchConstants} from '../../models/resource-search/resource-search-constants';\n\n/**\n * OntoRdfSearch component for RDF resource search.\n * This component is responsible for showing/hiding the search menu in the header\n */\n@Component({\n tag: 'onto-rdf-search',\n styleUrl: 'onto-rdf-search.scss'\n})\nexport class OntoRdfSearch {\n private readonly subscriptions: SubscriptionList = new SubscriptionList();\n private readonly eventService = ServiceProvider.get(EventService);\n private readonly resourceSearchStorageService = ServiceProvider.get(ResourceSearchStorageService);\n\n private readonly RDF_CONTEXT = 'rdfSearchContext';\n\n @State() private isOpen: boolean = false;\n @State() private buttonConfig: SearchButtonConfig;\n\n private redirectUrl: string = UriUtil.RESOURCE_URL;\n private rdfSearchRef: HTMLElement;\n\n /**\n * Handles click events on the window.\n * Closes the search area if it's open and the click is outside the search area.\n * @param event - The MouseEvent object.\n */\n @Listen('click', {target: 'window'})\n handleClick(event: MouseEvent) {\n if (!this.isOpen) {\n return;\n }\n if (!this.rdfSearchRef?.contains(event.target as Node)) {\n this.isOpen = false;\n }\n }\n\n connectedCallback() {\n this.onSuggestionSelected();\n }\n\n disconnectedCallback() {\n this.subscriptions.unsubscribeAll();\n }\n\n componentDidRender() {\n this.focusSearchInput();\n }\n\n componentDidLoad() {\n this.buttonConfig = this.createButtonConfig();\n }\n\n\n render() {\n return (\n <section ref={(ref) => this.rdfSearchRef = ref}\n class=\"onto-rdf-search\"\n onKeyDown={this.onKeyDown()}\n data-test='onto-rdf-search-component'>\n <section class={`search-area ${this.isOpen ? 'visible' : 'invisible'}`}>\n <i onClick={this.setIsOpen(false)}\n tooltip-content={TranslationService.translate('rdf_search.tooltips.close_search_area')}\n tooltip-placement={OntoTooltipPlacement.BOTTOM}\n data-test='onto-rdf-resource-search-close-btn'\n class=\"fa-light fa-xmark-large close-btn\"></i>\n <onto-search-resource-input buttonConfig={this.buttonConfig}\n preserveSearch={true}\n isHidden={!this.isOpen}\n data-test='onto-rdf-resource-search-input'\n context={this.RDF_CONTEXT}></onto-search-resource-input>\n </section>\n {!this.isOpen ? <onto-search-icon onClick={this.setIsOpen(true)}></onto-search-icon> : ''}\n </section>\n );\n }\n\n /**\n * Creates a function to set the open state of the search area.\n * @param isOpen - Boolean indicating whether the search area should be open.\n */\n private setIsOpen(isOpen: boolean) {\n return () => {\n this.isOpen = isOpen;\n if (this.isOpen) {\n this.loadSelectedViewFromStorage();\n }\n };\n }\n\n /**\n * Creates the configuration for search buttons.\n * @returns A SearchButtonConfig object with radio buttons for table and visual search.\n */\n private createButtonConfig(): SearchButtonConfig {\n return new SearchButtonConfig({\n isRadio: true,\n buttons: [\n this.createSearchButton(\n ResourceSearchConstants.TABLE_VIEW,\n 'rdf_search.buttons.table',\n () => {\n this.redirectUrl = UriUtil.RESOURCE_URL;\n this.resourceSearchStorageService.setSelectedView(ResourceSearchConstants.TABLE_VIEW);\n },\n true\n ),\n this.createSearchButton(\n ResourceSearchConstants.VISUAL_VIEW,\n 'rdf_search.buttons.visual',\n () => {\n this.redirectUrl = UriUtil.GRAPHS_VISUALIZATIONS_URL;\n this.resourceSearchStorageService.setSelectedView(ResourceSearchConstants.VISUAL_VIEW);\n },\n false\n )\n ]\n });\n }\n\n /**\n * Creates a search button with the given parameters.\n * @param id - The id for the button.\n * @param labelKey - The key for the button's label translation.\n * @param callback - The function to be called when the button is clicked.\n * @param selected - Boolean indicating whether the button should be initially selected.\n * @returns A SearchButton object.\n */\n private createSearchButton(id: string, labelKey: string, callback: () => void, selected: boolean): SearchButton {\n return new SearchButton({\n label: TranslationService.translate(labelKey),\n id,\n callback,\n selected\n } as SearchButton);\n }\n\n private onSuggestionSelected() {\n this.subscriptions.add(\n this.eventService.subscribe<SuggestionSelectedPayload>(ResourceSearchConstants.SUGGESTION_SELECTED_EVENT, (payload) => {\n if (payload.getContext() === this.RDF_CONTEXT) {\n const redirectUrl = payload.getSuggestion().getOverrideToVisual()\n ? UriUtil.GRAPHS_VISUALIZATIONS_URL\n : this.redirectUrl;\n openInNewTab(UriUtil.createAutocompleteRedirect(redirectUrl, payload.getSuggestion().getValue()));\n }\n })\n );\n }\n\n private onKeyDown() {\n return (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.isOpen = false;\n }\n }\n }\n\n private focusSearchInput() {\n if (this.isOpen) {\n HtmlUtil.focusElement(`#${this.RDF_CONTEXT}`);\n }\n }\n\n private loadSelectedViewFromStorage() {\n const selectedView = this.resourceSearchStorageService.getSelectedView();\n if (selectedView) {\n const selectedButton = this.buttonConfig.getButtons().find((button) => button.id === selectedView);\n if (selectedButton) {\n this.buttonConfig = this.buttonConfig.selectButton(selectedButton)\n }\n }\n }\n}\n","import {FunctionalComponent, h} from '@stencil/core';\nimport {Repository} from '@ontotext/workbench-api';\n\ninterface RepositorySelectionProps {\n repository: Repository;\n defaultToggleButtonName: string;\n location: string;\n}\n\n/**\n *\n * A StencilJS component that renders a repository selection. The element displays the repository's icon and ID\n * if a repository is selected; otherwise, it shows a translated toggle button name. The component dynamically\n * updates the name when the translation changes.\n *\n * @example\n * <RepositorySelection repository={repository}></>\n *\n */\nexport const RepositorySelection: FunctionalComponent<RepositorySelectionProps> = ({repository, defaultToggleButtonName, location}) => {\n const className = repository ? 'repository-selection active-repository' : 'repository-selection no-selected-repository';\n return (\n <div class={className}\n data-test={'repository-selection'}>\n {/* TODO: add tooltip with repository info*/}\n {repository && <i class={'button-icon icon-repo-' + repository.type}></i>} {repository?.id ?? defaultToggleButtonName}{location}\n </div>\n );\n};\n\n",":root {\n --onto-repository-selector-color: var(--secondary-color, #373a3c);\n}\n\n:host {\n display: block;\n}\n\n.onto-repository-selector {\n\n .onto-dropdown {\n\n &.closed {\n .onto-dropdown-button {\n background-color: #ebebeb;\n color: var(--onto-repository-selector-color);\n\n &:hover {\n background-color: #d4d4d4;\n }\n }\n }\n }\n\n .repository-selector-dropdown-item {\n display: flex;\n align-items: center;\n gap: 0.4em;\n\n .item-icon {\n font-size: 1.4em;\n }\n\n .item-label {\n line-height: 0.75em;\n display: inline-block;\n vertical-align: middle;\n text-align: left;\n\n .repository-id {\n line-height: .75em;\n }\n\n .repository-location {\n font-weight: 300;\n font-size: .75em;\n margin-top: .4em;\n display: inline-block;\n max-width: 120px;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n }\n }\n}\n\n.tippy-box[data-theme=\"light-border\"] {\n border-radius: 0;\n\n .tippy-content {\n padding: 0;\n color: #373a3c;\n border: 1px solid rgba(0, 0, 0, .125);\n box-shadow: 1px 3px 6px rgba(0, 0, 0, 0.2);\n\n .repository-tooltip-title {\n font-size: 1rem;\n font-weight: 400;\n padding: 8px 14px;\n background-color: #f7f7f7;\n border-bottom: #EBEBEB 1px solid;\n\n .value {\n word-wrap: break-word;\n }\n }\n\n .repository-tooltip-content {\n padding: 1.5rem 0.5rem;\n display: flex;\n flex-direction: column;\n gap: 0.8em;\n font-weight: 400;\n font-size: 0.875rem;\n }\n\n .repository-tooltip-row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n &.total {\n margin-top: 1.2em;\n }\n\n .value {\n margin-left: .6em;\n }\n }\n }\n}\n","import {Component, Host, h, State, Prop, Watch} from '@stencil/core';\nimport {\n Repository,\n ServiceProvider,\n RepositoryContextService,\n UriUtil, RepositorySizeInfo\n} from '@ontotext/workbench-api';\nimport {DropdownItem} from '../../models/dropdown/dropdown-item';\nimport {DropdownItemAlignment} from '../../models/dropdown/dropdown-item-alignment';\nimport {RepositorySelection} from './repository-selection';\nimport {TranslationService} from '../../services/translation.service';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\n\n@Component({\n tag: 'onto-repository-selector',\n styleUrl: 'onto-repository-selector.scss',\n shadow: false,\n})\n/**\n * A StencilJS component that renders a repository selector dropdown. This component fetches the list of repositories\n * from the `RepositoryService` and displays them in a dropdown. It allows users to select a repository, and automatically\n * updates the current repository when a selection is made.\n *\n * @example\n * <onto-repository-selector\n * currentRepository={this.currentRepository}\n * items={this.items}\n * repositorySizeInfoFetcher={...}\n * totalTripletsFormatter={...}\n * canWriteRepo={...}>\n * </onto-repository-selector>\n */\nexport class OntoRepositorySelector {\n private readonly repositoryContextService = ServiceProvider.get(RepositoryContextService);\n private readonly subscriptions: (() => void)[] = [];\n\n /**\n * The currently selected repository.\n */\n @Prop() currentRepository: Repository;\n\n /**\n * The list of repositories to show in the dropdown.\n */\n @Prop() items: DropdownItem<Repository>[];\n\n /**\n * Fetches repository size info used to build tooltips.\n */\n @Prop() repositorySizeInfoFetcher: (repo: Repository) => Promise<RepositorySizeInfo>;\n\n /**\n * Formatter for numeric values in tooltips.\n */\n @Prop() totalTripletsFormatter: Intl.NumberFormat;\n\n /**\n * Determines whether the current user has write access to the repository.\n */\n @Prop() canWriteRepo: (repo: Repository) => boolean;\n\n /**\n * The default name of the toggle button that will be displayed in the dropdown.\n */\n @State() defaultToggleButtonName: string;\n\n /**\n * The message to display when there are no repositories available.\n */\n @State() noRepositoriesButtonMessage: string;\n\n /**\n * A list derived from the `items` input prop, with tooltip functions attached.\n *\n * Tooltip generation is centralized here to ensure consistency and avoid redundant operations.\n */\n private dropdownItems: DropdownItem<Repository>[];\n\n /**\n * Re-applies tooltip functions to all dropdown items when the items prop changes.\n */\n @Watch('items')\n onItemsChanged(newItems: DropdownItem<Repository>[]) {\n if (!(newItems?.length)) {\n this.dropdownItems = [];\n return;\n }\n\n this.dropdownItems = this.attachTooltipsToItems(this.items);\n }\n\n connectedCallback() {\n this.subscriptions.push(...this.subscribeToTranslationChanged());\n\n // Manually apply tooltip functions to each item on first mount.\n if (this.items?.length) {\n this.dropdownItems = this.attachTooltipsToItems(this.items);\n } else {\n this.dropdownItems = [];\n }\n }\n\n /**\n * Cleans up the subscriptions when the component is removed from the DOM to avoid memory leaks.\n * This method unsubscribes from both the repository change and selected repository change events.\n */\n disconnectedCallback(): void {\n this.subscriptions.forEach((subscription) => subscription());\n }\n\n render() {\n const repositorySelection = <RepositorySelection repository={this.currentRepository}\n defaultToggleButtonName={this.getButtonLabel()}\n location={this.getLocation()}/>;\n return (\n <Host>\n <onto-dropdown\n class='onto-repository-selector'\n data-test={'onto-repository-selector'}\n onValueChanged={this.onValueChanged()}\n dropdownButtonName={repositorySelection}\n dropdownButtonTooltip={this.createTooltipFunctionForRepository(this.currentRepository)}\n {...(this.currentRepository ? { 'dropdownButtonGuideSelector': `repository-id-${this.currentRepository.id}` } : {})}\n dropdownTooltipTrigger='mouseenter focus'\n dropdownAlignment={DropdownItemAlignment.RIGHT}\n tooltipPlacement={this.tooltipAlignment}\n tooltipTheme='light-border'\n items={this.dropdownItems}>\n </onto-dropdown>\n </Host>\n );\n }\n\n private attachTooltipsToItems(items: DropdownItem<Repository>[]): DropdownItem<Repository>[] {\n if (!items) {\n return [];\n }\n return items.map((item) => item.setTooltip(this.createTooltipFunctionForRepository(item.value)));\n }\n\n private tooltipAlignment(isOpen: boolean): OntoTooltipPlacement {\n if (isOpen) {\n return OntoTooltipPlacement.LEFT;\n }\n return OntoTooltipPlacement.BOTTOM;\n }\n\n private onValueChanged() {\n return (valueChangeEvent: CustomEvent) => this.onRepositoryChanged(valueChangeEvent.detail);\n }\n\n /**\n * Returns an async function that generates HTML tooltip content for the given repository.\n */\n private createTooltipFunctionForRepository(repository: Repository): () => Promise<string> {\n return async () => {\n if (!repository) {\n return '';\n }\n\n const repositorySizeInfo = await this.repositorySizeInfoFetcher(repository);\n return this.buildRepositoryTooltipHtml(repository, repositorySizeInfo);\n };\n }\n\n /**\n * Builds the complete HTML string used as tooltip content for a repository.\n */\n private buildRepositoryTooltipHtml(repository: Repository, repositorySizeInfo: RepositorySizeInfo): string {\n let html = `\n <div class=\"repository-tooltip-title\">\n <span class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository')}</span>\n <span class=\"value\">${repository.id}</span>\n </div>\n <div class=\"repository-tooltip-content\">\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.location')}:</div>\n <div class=\"value\">${repository.location ? repository.location : TranslationService.translate('repository-selector.tooltip.local')}</div>\n </div>\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.type')}:</div>\n <div class=\"value\">${TranslationService.translate('repository-selector.tooltip.types.' + (repository.type || 'unknown'))}</div>\n </div>\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.access')}:</div>\n <div class=\"value\">${TranslationService.translate(this.canWriteRepo(repository) ? 'repository-selector.tooltip.accesses.read_write' : 'repository-selector.tooltip.accesses.read')}</div>\n </div>`;\n\n html += this.buildRepositorySizeInfoHtml(repositorySizeInfo);\n html += '</div>';\n return html;\n }\n\n /**\n * Builds the repository size section of the tooltip.\n */\n private buildRepositorySizeInfoHtml(repositorySizeInfo: RepositorySizeInfo): string {\n if (!repositorySizeInfo || repositorySizeInfo.total < 0) {\n return '';\n }\n\n let html = `\n <div class=\"repository-tooltip-row total\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.total')}:</div>\n <div class=\"value\">${this.totalTripletsFormatter.format(repositorySizeInfo.total)}</div>\n </div>`;\n\n if (repositorySizeInfo.explicit >= 0) {\n html += `\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.explicit')}:</div>\n <div class=\"value\">${this.totalTripletsFormatter.format(repositorySizeInfo.explicit)}</div>\n </div>`;\n }\n\n if (repositorySizeInfo.inferred >= 0) {\n html += `\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.inferred')}:</div>\n <div class=\"value\">${this.totalTripletsFormatter.format(repositorySizeInfo.inferred)}</div>\n </div>`;\n }\n\n if (repositorySizeInfo.total >= 0) {\n let value = '-';\n if (repositorySizeInfo.explicit > 0) {\n value = this.totalTripletsFormatter.format(repositorySizeInfo.total / repositorySizeInfo.explicit);\n }\n\n html += `\n <div class=\"repository-tooltip-row\">\n <div class=\"label\">${TranslationService.translate('repository-selector.tooltip.repository-size.expansion_ratio')}:</div>\n <div class=\"value\">${value}</div>\n </div>`;\n }\n\n return html;\n }\n\n private subscribeToTranslationChanged(): Array<() => void> {\n return [\n TranslationService.onTranslate('repository-selector.btn.toggle', [], (toggleButtonName) => {\n this.defaultToggleButtonName = toggleButtonName;\n }),\n TranslationService.onTranslate('repository-selector.btn.no_repositories', [], (noRepositoriesButtonMessage) => {\n this.noRepositoriesButtonMessage = noRepositoriesButtonMessage;\n })\n ];\n }\n\n private onRepositoryChanged(selectedRepository: Repository): void {\n this.repositoryContextService.updateSelectedRepository(selectedRepository);\n }\n\n private getLocation() {\n if (!this.currentRepository?.location) {\n return ``;\n }\n return `@${UriUtil.shortenIri(this.currentRepository.location)}`;\n }\n\n private getButtonLabel() {\n return this.items?.length\n ? this.defaultToggleButtonName\n : this.noRepositoriesButtonMessage;\n }\n}\n",".onto-search-icon {\n cursor: pointer;\n color: var(--primary-color, #9e2b0a);\n transition: all 0.15s ease-out;\n font-size: 1.6rem;\n\n &.fa-magnifying-glass {\n padding: .5rem .8rem;\n }\n\n &:hover {\n transform: scale(1.2);\n }\n}\n","import {Component, h, State} from '@stencil/core';\nimport {SubscriptionList} from '@ontotext/workbench-api';\nimport {TranslationService} from '../../services/translation.service';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\n\n@Component({\n tag: 'onto-search-icon',\n styleUrl: 'onto-search-icon.scss'\n})\nexport class OntoSearchIcon {\n @State() private tooltipLabel: string;\n\n private readonly tooltipKey: string = 'rdf_search.labels.search';\n private readonly subscriptions = new SubscriptionList();\n\n\n // ========================\n // Lifecycle methods\n // ========================\n connectedCallback() {\n this.onTooltipChange();\n }\n\n disconnectedCallback() {\n this.subscriptions.unsubscribeAll();\n }\n\n render() {\n return (\n <i tooltip-content={this.tooltipLabel}\n tooltip-placement={OntoTooltipPlacement.BOTTOM}\n class=\"onto-search-icon fa-light fa-magnifying-glass\"></i>\n );\n }\n\n private onTooltipChange() {\n this.subscriptions.add(\n TranslationService.onTranslate(this.tooltipKey, [], (translation) => this.tooltipLabel = translation)\n );\n }\n}\n",".search-resources-input {\n padding-right: 20px;\n\n & .input-row {\n gap: 3px;\n display: flex;\n flex-wrap: wrap;\n\n & .input-wrapper {\n position: relative;\n display: flex;\n flex: 1;\n min-width: 20vw;\n\n & input {\n flex: 1;\n padding: .5rem .75rem;\n font-size: 1rem;\n line-height: 1.25;\n color: #55595c;\n background-color: #fff;\n background-image: none;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid rgba(0,0,0,.15);\n min-width: inherit;\n\n &:focus {\n color: #55595c;\n border-color: #66afe9;\n outline: 0;\n }\n }\n }\n\n & i.fa-xmark {\n position: absolute;\n right: 10px;\n top: 7px;\n z-index: 10;\n font-size: 1.6rem;\n }\n\n & button {\n display: inline-block;\n font-weight: 400;\n line-height: 1.25;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n transition: all .15s ease-out;\n user-select: none;\n border: 1px solid transparent;\n padding: .5rem 1rem;\n font-size: 1rem;\n color: var(--secondary-color, #003663);\n\n &.selected {\n background-color: var(--primary-color, #9e2b0a);\n color: white;\n }\n\n &:focus {\n outline: none;\n }\n\n &:hover:not(.selected) {\n background-color: #d4d4d4;\n border-color: #d4d4d4;\n }\n }\n }\n\n & .hint {\n font-size: 0.8rem;\n color: #818a91;\n }\n\n & .autocomplete-results-wrapper {\n margin-top: 6px;\n max-height: 204px;\n overflow: auto;\n\n & p {\n font-size: 1.1rem;\n line-height: 1.5;\n color: #373a3c;\n background-color: #fff;\n margin-bottom: 0;\n padding: 5px 25px;\n cursor: pointer;\n\n & b {\n color: var(--secondary-color, #003663);\n }\n\n &.selected {\n background-color: var(--autocomplete-background-selected, #02A99A);\n }\n\n &.hovered:not(.selected), &:hover:not(.selected) {\n background-color: var(--autocomplete-background, #02a98f4d);\n }\n }\n }\n}\n","import {Component, h, Prop, State, Watch} from '@stencil/core';\nimport {\n AutocompleteContextService,\n AutocompleteSearchResult,\n AutocompleteService,\n AutocompleteStorageService,\n EventService,\n NamespaceMap,\n NamespacesContextService,\n navigateTo,\n OntoToastrService, ResourceSearchStorageService,\n SearchButton,\n SearchButtonConfig,\n ServiceProvider,\n SubscriptionList,\n Suggestion,\n SuggestionSelectedPayload,\n SuggestionType,\n UriUtil\n} from '@ontotext/workbench-api';\nimport {TranslationService} from '../../services/translation.service';\nimport {HtmlUtil} from '../../utils/html-util';\nimport {OntoTooltipPlacement} from \"../onto-tooltip/models/onto-tooltip-placement\";\nimport {ResourceSearchConstants} from '../../models/resource-search/resource-search-constants';\n\n/**\n * A component for rendering RDF search resource input with configurable buttons.\n * This component provides a text input for search queries and a set of configurable buttons.\n */\n@Component({\n tag: 'onto-search-resource-input',\n styleUrl: 'onto-search-resource-input.scss'\n})\nexport class OntoSearchResourceInput {\n private readonly autocompleteService = ServiceProvider.get(AutocompleteService);\n private readonly autocompleteContextService = ServiceProvider.get(AutocompleteContextService);\n private readonly autocompleteStorageService = ServiceProvider.get(AutocompleteStorageService);\n private readonly resourceSearchStorageService = ServiceProvider.get(ResourceSearchStorageService);\n private readonly toastrService = ServiceProvider.get(OntoToastrService);\n private readonly eventService = ServiceProvider.get(EventService);\n private readonly namespaceContextService = ServiceProvider.get(NamespacesContextService);\n\n private readonly subscriptions = new SubscriptionList();\n private autocompleteWarningShown = false;\n private inputRef: HTMLInputElement;\n private namespaces: NamespaceMap;\n\n /**\n * The search resource component can appear more than once per page. This context\n * is used to differentiate them. When a suggestion is selected different parents\n * may need to do different things. The context is emitted alongside the suggestion\n * upon select.\n */\n @Prop() context: string;\n\n /** Whether the rdf resource pre-search validation should be skipped. */\n @Prop() skipValidation = false;\n\n /**\n * Whether to preserve the input value and last selected suggestion\n * If true, both will be stored in local storage and loaded, when the component is rendered\n */\n @Prop() preserveSearch: boolean;\n\n /**\n * Whether the search component is currently hidden. Can be shown/hidden in the RDF search\n */\n @Prop() isHidden = false;\n\n @Watch('isHidden')\n onVisibilityChange(isHidden: boolean) {\n if (isHidden) {\n this.searchResult?.clearSuggestions();\n } else {\n this.setInputValue(this.resourceSearchStorageService.getInputValue());\n }\n }\n\n /**\n * Button configuration for the search resource input.\n * Holds buttons to be displayed, as well as additional configuration,\n * such as whether the buttons should be treated as radio buttons.\n */\n @Prop() buttonConfig: SearchButtonConfig;\n\n /**\n * The current value of the search input field.\n */\n @State() private inputValue: string;\n\n /**\n * The current autocomplete search result\n */\n @State() private searchResult: AutocompleteSearchResult;\n\n /**\n * Whether the autocomplete setting is enabled.\n */\n @State() private isAutocompleteEnabled = false;\n\n connectedCallback() {\n this.onAutocompleteEnabledChange();\n this.onNamespaceChange();\n this.loadInputFromStorage();\n }\n\n disconnectedCallback() {\n this.subscriptions.unsubscribeAll();\n }\n\n render() {\n return (\n <section class=\"search-resources-input\">\n <div class=\"input-row\">\n <span class=\"input-wrapper\">\n <input value={this.inputValue}\n id={this.context}\n type=\"text\"\n autocomplete=\"off\"\n placeholder={`${TranslationService.translate('rdf_search.labels.search')}...`}\n ref={(ref) => this.inputRef = ref}\n onKeyDown={this.onKeyDown}\n data-test={this.context}\n onInput={this.handleInput}/>\n {this.inputValue?.length ?\n <i onClick={this.clearInput}\n tooltip-content={TranslationService.translate('rdf_search.tooltips.clear')}\n tooltip-placement={OntoTooltipPlacement.BOTTOM}\n class=\"fa-light fa-xmark clear-input\"></i> : ''\n }\n </span>\n {this.buttonConfig?.getButtons().getItems().map((button) => (\n <button key={button.label}\n onClick={this.handleButtonClick(button)}\n class={`${button.selected ? 'selected' : ''}`}>{button.label}</button>\n ))}\n </div>\n <span class=\"hint\">{TranslationService.translate('rdf_search.labels.hint')}</span>\n <section class=\"autocomplete-results-wrapper\" data-test='onto-autocomplete-results'>\n {this.searchResult?.getSuggestions().getItems().map((suggestion) => (\n <p key={suggestion.getId()}\n onClick={this.onSuggestionClick(suggestion)}\n data-test='onto-autocomplete-suggestion'\n onMouseMove={this.hoverSuggestion(suggestion)}\n class={`${suggestion.isHovered() ? 'hovered' : ''} ${suggestion.isSelected() ? 'selected' : ''}`}\n innerHTML={suggestion.getDescription()}></p>\n ))}\n </section>\n </section>\n );\n }\n\n /**\n * Handles the click event for a search button.\n * If the button configuration is set to radio mode and the clicked button is not selected,\n * it deselects all other buttons and selects the clicked one.\n * @param {SearchButton} button - The button that was clicked.\n */\n private handleButtonClick(button: SearchButton) {\n return () => this.buttonConfig = this.buttonConfig.selectButton(button);\n }\n\n /**\n * Updates the local inputValue with the html input element's value.'\n */\n private readonly handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n if (!target.value) {\n this.clearInput();\n return;\n }\n this.setInputValue(target.value);\n this.checkForAutocomplete();\n };\n\n private loadAutocompleteResults() {\n if (!this.inputValue) {\n this.searchResult?.clearSuggestions();\n return;\n }\n if (this.isAutocompleteEnabled) {\n this.autocompleteService.search(this.inputValue)\n .then((searchResult) => {\n this.onResultsReceived(searchResult);\n });\n }\n }\n\n /**\n * Clears the search input field.\n */\n private readonly clearInput = () => {\n this.setInputValue('');\n if(this.preserveSearch) {\n this.resourceSearchStorageService.clearStoredSearch();\n }\n };\n\n private hoverSuggestion(suggestion: Suggestion) {\n return () => this.searchResult = this.searchResult.hoverSuggestion(suggestion);\n }\n\n private onAutocompleteEnabledChange() {\n this.isAutocompleteEnabled = this.autocompleteStorageService.isEnabled();\n this.subscriptions.add(\n this.autocompleteContextService.onAutocompleteEnabledChanged((enabled) => {\n this.isAutocompleteEnabled = enabled ?? this.isAutocompleteEnabled;\n })\n );\n }\n\n private checkForAutocomplete() {\n if (this.inputValue.length > 0 && !this.isAutocompleteEnabled && !this.autocompleteWarningShown) {\n this.autocompleteWarningShown = true;\n const message = TranslationService.translate('rdf_search.toasts.autocomplete_is_off');\n this.toastrService.warning(`<a class=\"no-underline\" style=\"font-weight: 500\">${message}</a>`,\n {\n onClick: navigateTo('autocomplete'),\n removeOnClick: true\n });\n }\n }\n\n private onSuggestionClick(suggestion: Suggestion) {\n return (event: MouseEvent) => {\n suggestion.setOverrideToVisual(event.ctrlKey || event.metaKey);\n this.searchRdfResource(suggestion);\n };\n }\n\n private searchRdfResource(suggestion: Suggestion) {\n if (suggestion.getType() === SuggestionType.PREFIX) {\n this.expandPrefix(suggestion);\n } else {\n this.notifyRdfResourceSelected(suggestion);\n if (this.preserveSearch) {\n this.resourceSearchStorageService.setLastSelected(suggestion);\n }\n }\n }\n\n private notifyRdfResourceSelected(suggestion: Suggestion) {\n this.searchResult = this.searchResult?.selectSuggestion(suggestion);\n this.eventService.emit({\n NAME: ResourceSearchConstants.SUGGESTION_SELECTED_EVENT,\n payload: new SuggestionSelectedPayload(suggestion, this.context)\n });\n }\n\n private expandPrefix(suggestion: Suggestion) {\n this.setInputValue(this.namespaces.getByPrefix(suggestion.getValue()));\n this.inputRef.focus();\n }\n\n private setInputValue(value: string) {\n this.inputValue = value;\n if (this.preserveSearch) {\n this.resourceSearchStorageService.setInputValue(this.inputValue);\n }\n this.loadAutocompleteResults();\n }\n\n private onNamespaceChange() {\n this.subscriptions.add(\n this.namespaceContextService.onNamespacesChanged((namespaces) => {\n this.namespaces = namespaces;\n })\n );\n }\n\n private readonly onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n this.onEnter(event);\n break;\n case 'Escape':\n this.onEscape();\n break;\n case 'ArrowUp':\n this.onArrowUp(event);\n break;\n case 'ArrowDown':\n this.onArrowDown(event);\n break;\n default:\n break;\n }\n };\n\n private onEnter(event: KeyboardEvent) {\n let selectedSuggestion = this.searchResult?.getHoveredSuggestion();\n if (!selectedSuggestion) {\n selectedSuggestion = new Suggestion({\n value: UriUtil.removeAngleBrackets(this.inputValue),\n type: SuggestionType.URI\n });\n }\n selectedSuggestion.setOverrideToVisual(event.ctrlKey || event.metaKey);\n this.validateAndSearch(selectedSuggestion);\n }\n\n private onArrowUp(event: KeyboardEvent) {\n this.searchResult = this.searchResult.hoverPreviousSuggestion();\n this.displaySuggestion(event);\n }\n\n private onArrowDown(event: KeyboardEvent) {\n this.searchResult = this.searchResult.hoverNextSuggestion();\n this.displaySuggestion(event);\n }\n\n private displaySuggestion(event: KeyboardEvent) {\n event.preventDefault();\n // Update the input directly, because the value should only be displayed,\n // without triggering a new search and altering the autocomplete results\n this.inputRef.value = this.searchResult.getHoveredSuggestion().getValue();\n this.scrollToSuggestionBySelector('p.hovered');\n }\n\n private getSuggestionValue(suggestion: Suggestion): string {\n return suggestion.getType() === SuggestionType.PREFIX\n ? this.namespaces.getByPrefix(suggestion.getValue())\n : suggestion.getValue();\n }\n\n private scrollToSuggestionBySelector(selector: string, options?: ScrollIntoViewOptions): void {\n HtmlUtil.waitForElement(selector)\n .then(() => {\n HtmlUtil.scrollElementIntoView(selector, options);\n });\n }\n\n private validateAndSearch(suggestion: Suggestion) {\n if (!this.skipValidation) {\n if (!suggestion.getValue()) {\n this.toastrService.error(TranslationService.translate('rdf_search.toasts.empty_input'));\n return;\n }\n\n if (!UriUtil.isValidUri(this.getSuggestionValue(suggestion))) {\n this.toastrService.error(TranslationService.translate('rdf_search.toasts.invalid_uri'));\n return;\n }\n }\n\n this.searchRdfResource(suggestion);\n }\n\n private onEscape() {\n if (this.preserveSearch) {\n return;\n }\n this.clearInput();\n }\n\n private loadInputFromStorage() {\n if (!this.preserveSearch) {\n return;\n }\n this.inputValue = this.resourceSearchStorageService.getInputValue() || '';\n }\n\n private onResultsReceived(searchResult: AutocompleteSearchResult) {\n const lastSelected = searchResult?.getByValue(this.resourceSearchStorageService.getLastSelectedValue());\n if (lastSelected && this.preserveSearch) {\n // No need to reassign twice in the same thread tick. One will trigger the re-render\n searchResult.hoverSuggestion(lastSelected);\n this.searchResult = searchResult.selectSuggestion(lastSelected);\n this.scrollToSuggestionBySelector('p.hovered.selected', {block: 'start'});\n } else {\n this.searchResult = searchResult.hoverFirstSuggestion();\n this.scrollToSuggestionBySelector('p.hovered', {block: 'start'});\n }\n }\n}\n",":root {\n --onto-user-login-color: var(--secondary-color, #373a3c);\n}\n\n.onto-user-login {\n position: relative;\n width: fit-content;\n\n button {\n display: flex;\n color: var(--onto-user-login-color);\n flex-direction: row;\n line-height: 1.5;\n font-weight: 400;\n font-size: 1rem;\n text-align: center;\n user-select: none;\n border: 1px solid transparent;\n padding: .4em 1rem;\n cursor: pointer;\n white-space: nowrap;\n place-items: center;\n transition: all 0.15s ease-out;\n\n & .user-login-label {\n padding: 0 .4rem;\n }\n\n &:hover {\n background-color: #d4d4d4;\n border-color: #d4d4d4;\n\n & .fa-user {\n transform: scale(1.2);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n\n i {\n color: var(--user-menu-primary-color);\n line-height: .75;\n font-size: 1.2em;\n transition: 0.15s ease-out;\n\n &.fa-angle-down {\n color: rgba(0, 0, 0, .35);\n font-size: 1.1em;\n transition: all 0.2s ease-in;\n }\n }\n }\n}\n","import { Component, h } from '@stencil/core';\nimport {navigateTo} from '@ontotext/workbench-api';\n\n@Component({\n tag: 'onto-user-login',\n styleUrl: 'onto-user-login.scss',\n shadow: false,\n})\nexport class OntoUserLogin {\n render() {\n return (\n <section class=\"onto-user-login\">\n <button onClick={navigateTo('login')}>\n <i class=\"icon-arrow-right\"></i>\n <translate-label\n class=\"user-login-label\"\n labelKey=\"user_menu.login\"\n ></translate-label>\n </button>\n </section>\n );\n }\n}\n",":root {\n --user-menu-primary-color: var(--primary-color, #9e2b0a);\n}\n\n.onto-user-menu {\n position: relative;\n width: fit-content;\n\n button {\n display: flex;\n flex-direction: row;\n line-height: 1.5;\n font-weight: 400;\n font-size: 1rem;\n text-align: center;\n user-select: none;\n border: 1px solid transparent;\n padding: .4em 1rem;\n cursor: pointer;\n white-space: nowrap;\n place-items: center;\n transition: all 0.15s ease-out;\n color: var(--secondary-color);\n\n &:hover {\n background-color: #d4d4d4;\n border-color: #d4d4d4;\n\n & .fa-user {\n transform: scale(1.2);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n &.open {\n color: white;\n background-color: var(--user-menu-primary-color);\n border-color: var(--user-menu-primary-color);\n\n & .fa-user {\n color: var(--icon-on-primary-color, #ffffffcc);\n }\n\n &:hover {\n .fa-user {\n transform: scale(1.2);\n }\n }\n }\n\n .username {\n padding: 0 5px;\n }\n\n i {\n color: var(--user-menu-primary-color);\n line-height: .75;\n font-size: 1.2em;\n transition: 0.15s ease-out;\n\n &.fa-angle-down {\n color: rgba(0, 0, 0, .35);\n font-size: 1.1em;\n transition: all 0.2s ease-in;\n }\n }\n }\n\n & .onto-user-menu-dropdown {\n position: absolute;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n cursor: pointer;\n color: white;\n text-decoration: none;\n right: 0;\n min-width: 7rem;\n font-size: 1rem;\n width: 100%;\n background-color: var(--user-menu-primary-color);\n\n & translate-label {\n padding: .4rem 1rem;\n user-select: none;\n white-space: nowrap;\n font-weight: 400;\n\n &:hover, &:focus {\n background-color: rgba(0, 0, 0, .1);\n }\n }\n }\n}\n","import {Component, h, Prop, State, Element} from '@stencil/core';\nimport {\n AuthenticatedUser,\n AuthenticationService,\n navigateTo,\n SecurityConfig,\n ServiceProvider\n} from '@ontotext/workbench-api';\n\n/**\n * This component displays the current user's name and provides options\n * for navigating to settings and logging out.\n */\n@Component({\n tag: 'onto-user-menu',\n styleUrl: 'onto-user-menu.scss'\n})\nexport class OntoUserMenu {\n /** Whether the dropdown menu is open or closed */\n @State() private isOpen: boolean;\n\n /** Currently authenticated user */\n @Prop() user: AuthenticatedUser;\n /** Current security config */\n @Prop() securityConfig: SecurityConfig;\n\n /** Reference to host element for outside click detection */\n @Element() hostElement: HTMLElement;\n\n connectedCallback() {\n document.addEventListener('click', this.handleOutsideClick);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleOutsideClick);\n }\n\n render() {\n return (\n <section class='onto-user-menu'>\n <div class='dropdown-toggle-wrapper' onClick={this.toggleDropdown}>\n <button class={`${this.isOpen ? 'open' : ''}`}>\n <i class='fa-solid fa-user'></i>\n <span class='username'>{this.user.username}</span>\n <i class={`fa-light fa-angle-down ${this.isOpen ? 'fa-rotate-180' : ''}`}></i>\n </button>\n {this.isOpen ?\n <section class='onto-user-menu-dropdown'>\n <translate-label onClick={navigateTo('settings')}\n labelKey={'user_menu.my_settings'}></translate-label>\n {!this.securityConfig?.hasExternalAuthUser ?\n <translate-label onClick={this.logout}\n labelKey={'user_menu.logout'}></translate-label> : ''}\n </section> : ''}\n </div>\n </section>\n );\n }\n\n /**\n * Log out the current user.\n */\n private readonly logout = (): void => {\n ServiceProvider.get(AuthenticationService).logout();\n }\n\n /**\n * Toggles the dropdown menu's open state.\n *\n * @returns A function that toggles the `isOpen` state between true and false.\n */\n private readonly toggleDropdown = (): void => {\n this.isOpen = !this.isOpen;\n }\n\n /**\n * Closes the dropdown if the user clicks outside the component.\n */\n private readonly handleOutsideClick = (event: MouseEvent) => {\n if (this.isOpen && !this.hostElement.contains(event.target as Node)) {\n this.isOpen = false;\n }\n };\n}\n"],"version":3}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as registerInstance,h,a as Host,g as getElement}from"./index-I_gcXFWK.js";import{ServiceProvider,SecurityContextService,AuthenticationService,NavigationContextService,SubscriptionList,EventService,EventName,LocalStorageSubscriptionHandlerService,RestrictedPages,getPathName}from"@ontotext/workbench-api";function debounce(e,t=300){let i;return(...s)=>{clearTimeout(i),i=setTimeout(()=>e.apply(this,s),t)}}const RESPONSIVE_BREAKPOINTS={MD:768},WINDOW_WIDTH_FOR_COLLAPSED_NAVBAR=RESPONSIVE_BREAKPOINTS.MD,ontoLayoutCss=':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}',OntoLayout=class{constructor(e){registerInstance(this,e),this.securityContextService=ServiceProvider.get(SecurityContextService),this.authenticationService=ServiceProvider.get(AuthenticationService),this.navigationContextService=ServiceProvider.get(NavigationContextService),this.isLowResolution=!1,this.hasPermission=!0,this.showFooter=this.isAuthenticatedFully(),this.subscriptions=new SubscriptionList,this.isNavbarCollapsed=!1,this.windowResizeObserver=debounce(()=>this.windowResizeHandler(),50),
|
|
1
|
+
import{r as registerInstance,h,a as Host,g as getElement}from"./index-I_gcXFWK.js";import{ServiceProvider,SecurityContextService,AuthenticationService,NavigationContextService,SubscriptionList,WindowService,EventService,EventName,LocalStorageSubscriptionHandlerService,RestrictedPages,getPathName}from"@ontotext/workbench-api";function debounce(e,t=300){let i;return(...s)=>{clearTimeout(i),i=setTimeout(()=>e.apply(this,s),t)}}const RESPONSIVE_BREAKPOINTS={MD:768},WINDOW_WIDTH_FOR_COLLAPSED_NAVBAR=RESPONSIVE_BREAKPOINTS.MD,ontoLayoutCss=':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}',OntoLayout=class{constructor(e){registerInstance(this,e),this.securityContextService=ServiceProvider.get(SecurityContextService),this.authenticationService=ServiceProvider.get(AuthenticationService),this.navigationContextService=ServiceProvider.get(NavigationContextService),this.isLowResolution=!1,this.hasPermission=!0,this.showFooter=this.isAuthenticatedFully(),this.subscriptions=new SubscriptionList,this.isNavbarCollapsed=!1,this.windowResizeObserver=debounce(()=>this.windowResizeHandler(),50),WindowService.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(ServiceProvider.get(EventService).subscribe(EventName.NAVIGATION_END,e=>{this.navigationContextService.updatePreviousRoute(e.oldUrl),this.setPermission(this.securityContextService.getRestrictedPages())})),this.setPermission(this.securityContextService.getRestrictedPages())}disconnectedCallback(){this.subscriptions.unsubscribeAll()}render(){return h(Host,{key:"5d814f892fde4148f87848dbfb6a1297479b110d",class:"wb-layout"},h("div",{key:"3189f4fd2434630807d924b656e70e0f91aac9ec",class:"default-slot-wrapper"},h("slot",{key:"58aafe83a0ca87647bf9de541228b07f2acebdc8",name:"default"})),h("header",{key:"ee1a6fc5254f30e198b190725bdbfebf76c3932d",class:"wb-header"},this.isVisible&&h("onto-header",{key:"6eed310ab3e1707d24c4331fe70962b41e628bb9"})),h("nav",{key:"7759747f8d91d95e569e9a603b9d11c20d46a75c",class:"wb-navbar"},h("onto-navbar",{key:"08946fa871e0cb2bd84831b4ab57592ade2813b1",ref:this.assignNavbarRef(),"navbar-collapsed":this.isLowResolution})),this.hasPermission?h("div",{class:"main-slot-wrapper"},h("slot",{name:"main"})):h("onto-permission-banner",null),h("footer",{key:"c7340dc1f4f10ff700a89fe2500e63ea782b341d",class:"wb-footer"},this.isVisible&&h("onto-footer",{key:"cb8907cf8f7254be6624a1891ca3a31edaa6554c"})),h("onto-tooltip",{key:"23f587a3461d7deae856897b7ceb92e5fc1446a8"}),h("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=WindowService.getWindow().innerWidth<=WINDOW_WIDTH_FOR_COLLAPSED_NAVBAR,this.isLowResolution||this.isNavbarCollapsed?this.hostElement.classList.add("expanded"):this.hostElement.classList.remove("expanded")}handleStorageChange(e){ServiceProvider.get(LocalStorageSubscriptionHandlerService).handleStorageChange(e)}subscribeToSecurityChanges(){const e=ServiceProvider.get(SecurityContextService);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(ServiceProvider.get(EventService).subscribe(EventName.LOGOUT,()=>{this.setNavbarItemVisibility(),this.updateVisibility(),this.securityContextService.updateRestrictedPages(new RestrictedPages)})),this.subscriptions.add(e.onAuthTokenChanged(()=>{this.setNavbarItemVisibility(),this.updateVisibility()}))}setPermission(e){if(e){const t=getPathName();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=ServiceProvider.get(AuthenticationService);return!e.isSecurityEnabled()||e.isAuthenticated()||e.hasFreeAccess()}shouldShowMenu(e){return this.isAuthenticatedFully()&&ServiceProvider.get(AuthenticationService).hasRole(e)}assignNavbarRef(){return e=>{this.navbarRef=e,this.navbarRef.menuItems=WindowService.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 getElement(this)}};OntoLayout.style=ontoLayoutCss;export{OntoLayout as onto_layout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onto-layout.entry.js","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\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 window.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 = window.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 = window.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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onto-layout.entry.js","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"],"names":[],"mappings":"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"}
|