@api-client/ui 0.0.4 → 0.0.5
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/amf/lib/AmfParameters.js +0 -4
- package/dist/amf/lib/AmfParameters.js.map +1 -1
- package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
- package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
- package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
- package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
- package/dist/amf/store/AmfGraphStore.js +0 -2
- package/dist/amf/store/AmfGraphStore.js.map +1 -1
- package/dist/amf/store/AmfStore.js +0 -7
- package/dist/amf/store/AmfStore.js.map +1 -1
- package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
- package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/base/PlatformBindings.js +6 -10
- package/dist/bindings/base/PlatformBindings.js.map +1 -1
- package/dist/bindings/base/ProxyBindings.js +9 -6
- package/dist/bindings/base/ProxyBindings.js.map +1 -1
- package/dist/bindings/base/SharedWorkerThread.js +4 -1
- package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
- package/dist/bindings/base/StoreBindings.js +162 -170
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/bindings/web/WebConfigurationBindings.js +22 -24
- package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
- package/dist/bindings/web/WebFileBindings.js +7 -4
- package/dist/bindings/web/WebFileBindings.js.map +1 -1
- package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
- package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/web/WebNavigationBindings.js +4 -1
- package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
- package/dist/bindings/web/WebProxyBindings.js +5 -6
- package/dist/bindings/web/WebProxyBindings.js.map +1 -1
- package/dist/bindings/web/WebStoreBindings.js +39 -44
- package/dist/bindings/web/WebStoreBindings.js.map +1 -1
- package/dist/contextual-menu/ContextualMenu.js +10 -19
- package/dist/contextual-menu/ContextualMenu.js.map +1 -1
- package/dist/contextual-menu/ContextualMenuElement.js +4 -32
- package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
- package/dist/contextual-menu/MenuItem.js +0 -12
- package/dist/contextual-menu/MenuItem.js.map +1 -1
- package/dist/define/amf/api-annotation-document.js +1 -1
- package/dist/define/amf/api-annotation-document.js.map +1 -1
- package/dist/define/amf/api-authorization-editor.js +1 -1
- package/dist/define/amf/api-authorization-editor.js.map +1 -1
- package/dist/define/amf/api-channel-document.js +1 -1
- package/dist/define/amf/api-channel-document.js.map +1 -1
- package/dist/define/amf/api-documentation-document.js +1 -1
- package/dist/define/amf/api-documentation-document.js.map +1 -1
- package/dist/define/amf/api-documentation.js +1 -1
- package/dist/define/amf/api-documentation.js.map +1 -1
- package/dist/define/amf/api-navigation.js +1 -1
- package/dist/define/amf/api-navigation.js.map +1 -1
- package/dist/define/amf/api-operation-document.js +1 -1
- package/dist/define/amf/api-operation-document.js.map +1 -1
- package/dist/define/amf/api-parameter-document.js +1 -1
- package/dist/define/amf/api-parameter-document.js.map +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
- package/dist/define/amf/api-payload-document.js +1 -1
- package/dist/define/amf/api-payload-document.js.map +1 -1
- package/dist/define/amf/api-request-document.js +1 -1
- package/dist/define/amf/api-request-document.js.map +1 -1
- package/dist/define/amf/api-request-editor.js +1 -1
- package/dist/define/amf/api-request-editor.js.map +1 -1
- package/dist/define/amf/api-request.js +1 -1
- package/dist/define/amf/api-request.js.map +1 -1
- package/dist/define/amf/api-resource-document.js +1 -1
- package/dist/define/amf/api-resource-document.js.map +1 -1
- package/dist/define/amf/api-response-document.js +1 -1
- package/dist/define/amf/api-response-document.js.map +1 -1
- package/dist/define/amf/api-schema-document.js +1 -1
- package/dist/define/amf/api-schema-document.js.map +1 -1
- package/dist/define/amf/api-security-document.js +1 -1
- package/dist/define/amf/api-security-document.js.map +1 -1
- package/dist/define/amf/api-security-requirement-document.js +1 -1
- package/dist/define/amf/api-security-requirement-document.js.map +1 -1
- package/dist/define/amf/api-server-picker.js +1 -1
- package/dist/define/amf/api-server-picker.js.map +1 -1
- package/dist/define/amf/api-summary.js +1 -1
- package/dist/define/amf/api-summary.js.map +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
- package/dist/define/authorization/apikey-authorization.js +1 -1
- package/dist/define/authorization/apikey-authorization.js.map +1 -1
- package/dist/define/authorization/basic-authorization.js +1 -1
- package/dist/define/authorization/basic-authorization.js.map +1 -1
- package/dist/define/authorization/bearer-authorization.js +1 -1
- package/dist/define/authorization/bearer-authorization.js.map +1 -1
- package/dist/define/authorization/cc-authorization.js +1 -1
- package/dist/define/authorization/cc-authorization.js.map +1 -1
- package/dist/define/authorization/ntlm-authorization.js +1 -1
- package/dist/define/authorization/ntlm-authorization.js.map +1 -1
- package/dist/define/authorization/oauth2-authorization.js +1 -1
- package/dist/define/authorization/oauth2-authorization.js.map +1 -1
- package/dist/define/authorization/oidc-authorization.js +1 -1
- package/dist/define/authorization/oidc-authorization.js.map +1 -1
- package/dist/define/contextual-menu/contextual-menu.js +1 -1
- package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
- package/dist/define/dialog/rename-dialog.js +1 -1
- package/dist/define/dialog/rename-dialog.js.map +1 -1
- package/dist/define/files/share-file.js +1 -1
- package/dist/define/files/share-file.js.map +1 -1
- package/dist/define/har/har-viewer.js +1 -1
- package/dist/define/har/har-viewer.js.map +1 -1
- package/dist/define/highlight/marked-highlight.js +1 -1
- package/dist/define/highlight/marked-highlight.js.map +1 -1
- package/dist/define/highlight/prism-highlight.js +1 -1
- package/dist/define/highlight/prism-highlight.js.map +1 -1
- package/dist/define/http/http-assertions.js +1 -1
- package/dist/define/http/http-assertions.js.map +1 -1
- package/dist/define/http/http-body-editor.js +1 -1
- package/dist/define/http/http-body-editor.js.map +1 -1
- package/dist/define/http/http-body-multipart-editor.js +1 -1
- package/dist/define/http/http-body-multipart-editor.js.map +1 -1
- package/dist/define/http/http-body-text-editor.js +1 -1
- package/dist/define/http/http-body-text-editor.js.map +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
- package/dist/define/http/http-headers-form.js +1 -1
- package/dist/define/http/http-headers-form.js.map +1 -1
- package/dist/define/http/http-log-body.js +1 -1
- package/dist/define/http/http-log-body.js.map +1 -1
- package/dist/define/http/http-log-headers.js +1 -1
- package/dist/define/http/http-log-headers.js.map +1 -1
- package/dist/define/http/http-log-timings.js +1 -1
- package/dist/define/http/http-log-timings.js.map +1 -1
- package/dist/define/http/http-request-config.js +1 -1
- package/dist/define/http/http-request-config.js.map +1 -1
- package/dist/define/http/http-request-editor.js +1 -1
- package/dist/define/http/http-request-editor.js.map +1 -1
- package/dist/define/http/http-request-log.js +1 -1
- package/dist/define/http/http-request-log.js.map +1 -1
- package/dist/define/http/http-snippets.js +1 -1
- package/dist/define/http/http-snippets.js.map +1 -1
- package/dist/define/http/http-url-input.js +1 -1
- package/dist/define/http/http-url-input.js.map +1 -1
- package/dist/define/http/http-url-params-form.js +1 -1
- package/dist/define/http/http-url-params-form.js.map +1 -1
- package/dist/define/http-project/http-project-request-history.js +1 -1
- package/dist/define/http-project/http-project-request-history.js.map +1 -1
- package/dist/define/http-project/http-project-request.js +2 -2
- package/dist/define/http-project/http-project-request.js.map +1 -1
- package/dist/define/http-project/project-navigation.js +1 -1
- package/dist/define/http-project/project-navigation.js.map +1 -1
- package/dist/define/http-project/project-run-report.js +1 -1
- package/dist/define/http-project/project-run-report.js.map +1 -1
- package/dist/define/http-project/project-runner.js +2 -2
- package/dist/define/http-project/project-runner.js.map +1 -1
- package/dist/define/layout/split-view.js +1 -1
- package/dist/define/layout/split-view.js.map +1 -1
- package/dist/define/schema-design/schema-design-navigation.js +1 -1
- package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
- package/dist/define/ui/ui-button.js +1 -1
- package/dist/define/ui/ui-button.js.map +1 -1
- package/dist/define/ui/ui-chip.js +1 -1
- package/dist/define/ui/ui-chip.js.map +1 -1
- package/dist/define/ui/ui-collapse.js +1 -1
- package/dist/define/ui/ui-collapse.js.map +1 -1
- package/dist/define/ui/ui-dialog.js +1 -1
- package/dist/define/ui/ui-dialog.js.map +1 -1
- package/dist/define/ui/ui-dropdown-list.js +1 -1
- package/dist/define/ui/ui-dropdown-list.js.map +1 -1
- package/dist/define/ui/ui-icon-button.js +1 -1
- package/dist/define/ui/ui-icon-button.js.map +1 -1
- package/dist/define/ui/ui-icon.js +1 -1
- package/dist/define/ui/ui-icon.js.map +1 -1
- package/dist/define/ui/ui-list-item.js +1 -1
- package/dist/define/ui/ui-list-item.js.map +1 -1
- package/dist/define/ui/ui-list.js +1 -1
- package/dist/define/ui/ui-list.js.map +1 -1
- package/dist/define/ui/ui-listbox.js +1 -1
- package/dist/define/ui/ui-listbox.js.map +1 -1
- package/dist/define/ui/ui-progress.js +1 -1
- package/dist/define/ui/ui-progress.js.map +1 -1
- package/dist/define/ui/ui-segmented-button-set.js +1 -1
- package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
- package/dist/define/ui/ui-segmented-button.js +1 -1
- package/dist/define/ui/ui-segmented-button.js.map +1 -1
- package/dist/define/ui/ui-snackbar.js +1 -1
- package/dist/define/ui/ui-snackbar.js.map +1 -1
- package/dist/define/ui/ui-tab.js +1 -1
- package/dist/define/ui/ui-tab.js.map +1 -1
- package/dist/define/ui/ui-tabs.js +1 -1
- package/dist/define/ui/ui-tabs.js.map +1 -1
- package/dist/directives/data-attr.js +0 -1
- package/dist/directives/data-attr.js.map +1 -1
- package/dist/elements/ApiElement.js +0 -7
- package/dist/elements/ApiElement.js.map +1 -1
- package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
- package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
- package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentation.element.js +0 -91
- package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationBase.js +0 -9
- package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiNavigation.element.js +0 -97
- package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
- package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
- package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
- package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequest.element.js +0 -78
- package/dist/elements/amf/ApiRequest.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
- package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
- package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
- package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
- package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
- package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
- package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiServerPicker.element.js +2 -65
- package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
- package/dist/elements/amf/ApiSummary.element.js +0 -26
- package/dist/elements/amf/ApiSummary.element.js.map +1 -1
- package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
- package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBasic.js +0 -4
- package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBearer.js +0 -4
- package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
- package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOidc.js +0 -4
- package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
- package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
- package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
- package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
- package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
- package/dist/elements/authorization/OAuth2Authorize.js +0 -14
- package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
- package/dist/elements/authorization/OidcAuthorize.js +0 -14
- package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/Authorization.js +18 -32
- package/dist/elements/authorization/ui/Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
- package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
- package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
- package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
- package/dist/elements/code/HttpSnippets.js +9 -8
- package/dist/elements/code/HttpSnippets.js.map +1 -1
- package/dist/elements/dialog/ConfirmDelete.js +0 -12
- package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
- package/dist/elements/dialog/Rename.js +0 -6
- package/dist/elements/dialog/Rename.js.map +1 -1
- package/dist/elements/environment/EnvironmentEditor.js +8 -11
- package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
- package/dist/elements/environment/ServerEditor.js +7 -45
- package/dist/elements/environment/ServerEditor.js.map +1 -1
- package/dist/elements/environment/VariablesEditor.js +7 -12
- package/dist/elements/environment/VariablesEditor.js.map +1 -1
- package/dist/elements/files/ShareFile.js +19 -57
- package/dist/elements/files/ShareFile.js.map +1 -1
- package/dist/elements/har/HarViewer.js +6 -7
- package/dist/elements/har/HarViewer.js.map +1 -1
- package/dist/elements/highlight/MarkedHighlight.js +4 -56
- package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlight.js +9 -18
- package/dist/elements/highlight/PrismHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlighter.js +4 -6
- package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
- package/dist/elements/http/BodyEditor.js +21 -33
- package/dist/elements/http/BodyEditor.js.map +1 -1
- package/dist/elements/http/BodyMultipartEditor.js +17 -18
- package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
- package/dist/elements/http/BodyTextEditor.js +2 -15
- package/dist/elements/http/BodyTextEditor.js.map +1 -1
- package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
- package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
- package/dist/elements/http/HeadersForm.js +16 -17
- package/dist/elements/http/HeadersForm.js.map +1 -1
- package/dist/elements/http/HttpAssertions.js +8 -6
- package/dist/elements/http/HttpAssertions.js.map +1 -1
- package/dist/elements/http/LogBody.js +10 -21
- package/dist/elements/http/LogBody.js.map +1 -1
- package/dist/elements/http/LogHeaders.js +4 -23
- package/dist/elements/http/LogHeaders.js.map +1 -1
- package/dist/elements/http/LogTimings.js +11 -13
- package/dist/elements/http/LogTimings.js.map +1 -1
- package/dist/elements/http/RequestConfigElement.js +7 -4
- package/dist/elements/http/RequestConfigElement.js.map +1 -1
- package/dist/elements/http/RequestEditor.js +54 -88
- package/dist/elements/http/RequestEditor.js.map +1 -1
- package/dist/elements/http/RequestLog.js +9 -14
- package/dist/elements/http/RequestLog.js.map +1 -1
- package/dist/elements/http/UrlInput.js +15 -25
- package/dist/elements/http/UrlInput.js.map +1 -1
- package/dist/elements/http/UrlParamsForm.js +16 -13
- package/dist/elements/http/UrlParamsForm.js.map +1 -1
- package/dist/elements/layout/LayoutManager.js +16 -24
- package/dist/elements/layout/LayoutManager.js.map +1 -1
- package/dist/elements/layout/LayoutPanelElement.js +17 -23
- package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
- package/dist/elements/layout/SplitItem.js +4 -12
- package/dist/elements/layout/SplitItem.js.map +1 -1
- package/dist/elements/layout/SplitLayout.js +18 -24
- package/dist/elements/layout/SplitLayout.js.map +1 -1
- package/dist/elements/layout/SplitPanel.js +10 -16
- package/dist/elements/layout/SplitPanel.js.map +1 -1
- package/dist/elements/layout/SplitView.js +17 -26
- package/dist/elements/layout/SplitView.js.map +1 -1
- package/dist/elements/navigation/AppNavigationElement.js +8 -47
- package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
- package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
- package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
- package/dist/elements/project/HttpProjectRequest.js +0 -38
- package/dist/elements/project/HttpProjectRequest.js.map +1 -1
- package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
- package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
- package/dist/elements/project/ProjectNavigation.js +0 -4
- package/dist/elements/project/ProjectNavigation.js.map +1 -1
- package/dist/elements/project/ProjectRunReport.js +4 -15
- package/dist/elements/project/ProjectRunReport.js.map +1 -1
- package/dist/elements/project/ProjectRunner.js +2 -47
- package/dist/elements/project/ProjectRunner.js.map +1 -1
- package/dist/elements/schema-design/AssociationFormElement.js +0 -13
- package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
- package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
- package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
- package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
- package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
- package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
- package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
- package/dist/elements/schema-design/EntityFormElement.js +0 -18
- package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
- package/dist/elements/schema-design/PropertyFormElement.js +0 -12
- package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
- package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
- package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
- package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
- package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
- package/dist/elements/user/UserAvatarElement.js +0 -9
- package/dist/elements/user/UserAvatarElement.js.map +1 -1
- package/dist/events/http-client/models/CertificatesEvents.js +2 -2
- package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
- package/dist/http-client/idb/Base.js +5 -10
- package/dist/http-client/idb/Base.js.map +1 -1
- package/dist/http-client/idb/LegacyMockedStore.js +0 -1
- package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
- package/dist/http-client/idb/MockedStore.js +3 -1
- package/dist/http-client/idb/MockedStore.js.map +1 -1
- package/dist/http-client/store/DataImportProcessor.js +0 -3
- package/dist/http-client/store/DataImportProcessor.js.map +1 -1
- package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
- package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
- package/dist/http-client/store/IdbThread.js +23 -20
- package/dist/http-client/store/IdbThread.js.map +1 -1
- package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
- package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
- package/dist/http-client/store/idb/IdbStore.js +0 -2
- package/dist/http-client/store/idb/IdbStore.js.map +1 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
- package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
- package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
- package/dist/lib/chart/HttpHistoryChart.js +7 -8
- package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
- package/dist/mixins/FileDropMixin.js +0 -1
- package/dist/mixins/FileDropMixin.js.map +1 -1
- package/dist/mixins/RenderableMixin.js +11 -15
- package/dist/mixins/RenderableMixin.js.map +1 -1
- package/dist/pages/ApplicationScreen.js +34 -55
- package/dist/pages/ApplicationScreen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +11 -20
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +4 -6
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/StoreConfig.screen.js +21 -37
- package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
- package/dist/pages/api-client/Telemetry.screen.js +1 -2
- package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +6 -27
- package/dist/pages/api-client/pages/Files.page.js.map +1 -1
- package/dist/pages/api-client/pages/Settings.page.js +2 -4
- package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
- package/dist/pages/api-client/pages/Trash.page.js +2 -13
- package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
- package/dist/pages/demo/DemoPage.js +13 -13
- package/dist/pages/demo/DemoPage.js.map +1 -1
- package/dist/pages/http-project/HttpProject.screen.js +25 -35
- package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
- package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
- package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
- package/dist/store/HttpStore.js +0 -3
- package/dist/store/HttpStore.js.map +1 -1
- package/dist/store/UserCache.js +5 -5
- package/dist/store/UserCache.js.map +1 -1
- package/dist/ui/UiElement.js +4 -5
- package/dist/ui/UiElement.js.map +1 -1
- package/dist/ui/button/SegmentedButton.js +9 -11
- package/dist/ui/button/SegmentedButton.js.map +1 -1
- package/dist/ui/button/SegmentedButtonsSet.js +6 -7
- package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
- package/dist/ui/button/UiButton.js +17 -39
- package/dist/ui/button/UiButton.js.map +1 -1
- package/dist/ui/button/UiIconButton.js +9 -35
- package/dist/ui/button/UiIconButton.js.map +1 -1
- package/dist/ui/chip/UiChip.js +9 -49
- package/dist/ui/chip/UiChip.js.map +1 -1
- package/dist/ui/collapse/UiCollapse.js +15 -20
- package/dist/ui/collapse/UiCollapse.js.map +1 -1
- package/dist/ui/controllers/ActionController.js +143 -144
- package/dist/ui/controllers/ActionController.js.map +1 -1
- package/dist/ui/controllers/RadioSelectionController.js +0 -1
- package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
- package/dist/ui/date/DateTime.js +3 -3
- package/dist/ui/date/DateTime.js.map +1 -1
- package/dist/ui/dialog/UiDialog.js +14 -38
- package/dist/ui/dialog/UiDialog.js.map +1 -1
- package/dist/ui/effects/ripple.js +20 -18
- package/dist/ui/effects/ripple.js.map +1 -1
- package/dist/ui/effects/rippleDirective.js +6 -7
- package/dist/ui/effects/rippleDirective.js.map +1 -1
- package/dist/ui/icons/UiIcon.js +4 -3
- package/dist/ui/icons/UiIcon.js.map +1 -1
- package/dist/ui/input/CheckboxElement.js +12 -10
- package/dist/ui/input/CheckboxElement.js.map +1 -1
- package/dist/ui/input/CheckedElement.js +2 -13
- package/dist/ui/input/CheckedElement.js.map +1 -1
- package/dist/ui/input/Input.js +169 -234
- package/dist/ui/input/Input.js.map +1 -1
- package/dist/ui/input/RadioElement.js +13 -11
- package/dist/ui/input/RadioElement.js.map +1 -1
- package/dist/ui/input/SwitchElement.js +0 -18
- package/dist/ui/input/SwitchElement.js.map +1 -1
- package/dist/ui/input/TextAreaElement.js +0 -15
- package/dist/ui/input/TextAreaElement.js.map +1 -1
- package/dist/ui/list/DividerElement.js +5 -10
- package/dist/ui/list/DividerElement.js.map +1 -1
- package/dist/ui/list/UiDropdownList.js +7 -48
- package/dist/ui/list/UiDropdownList.js.map +1 -1
- package/dist/ui/list/UiList.js +3 -15
- package/dist/ui/list/UiList.js.map +1 -1
- package/dist/ui/list/UiListItem.js +4 -17
- package/dist/ui/list/UiListItem.js.map +1 -1
- package/dist/ui/list/UiListbox.js +0 -1
- package/dist/ui/list/UiListbox.js.map +1 -1
- package/dist/ui/notification/SnackNotifications.js +1 -2
- package/dist/ui/notification/SnackNotifications.js.map +1 -1
- package/dist/ui/notification/Snackbar.js +27 -51
- package/dist/ui/notification/Snackbar.js.map +1 -1
- package/dist/ui/progress/Range.js +24 -23
- package/dist/ui/progress/Range.js.map +1 -1
- package/dist/ui/progress/UiProgress.js +0 -11
- package/dist/ui/progress/UiProgress.js.map +1 -1
- package/dist/ui/table/DataTable.js +7 -12
- package/dist/ui/table/DataTable.js.map +1 -1
- package/dist/ui/tabs/UiTab.js +24 -25
- package/dist/ui/tabs/UiTab.js.map +1 -1
- package/dist/ui/tabs/UiTabs.js +21 -35
- package/dist/ui/tabs/UiTabs.js.map +1 -1
- package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
- package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
- package/dist/visualization/lib/AssociationAnchors.js +16 -28
- package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
- package/dist/visualization/lib/Point.js +0 -2
- package/dist/visualization/lib/Point.js.map +1 -1
- package/dist/visualization/lib/SelectionManager.js +10 -11
- package/dist/visualization/lib/SelectionManager.js.map +1 -1
- package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
- package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
- package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
- package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
- package/dist/visualization/lib/WorkspaceEdges.js +17 -19
- package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
- package/dist/visualization/lib/WorkspaceGestures.js +0 -3
- package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
- package/dist/visualization/lib/WorkspaceSizing.js +4 -6
- package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
- package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
- package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
- package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
- package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
- package/dist/visualization/lib/tips/TipArtist.js +0 -3
- package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
- package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
- package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
- package/package.json +3 -2
- package/tsconfig.json +2 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { __decorate } from "tslib";
|
|
2
3
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
3
4
|
/* eslint-disable class-methods-use-this */
|
|
@@ -32,7 +33,6 @@ export default class VizWorkspaceElement extends LitElement {
|
|
|
32
33
|
static get styles() {
|
|
33
34
|
return [elementStyles];
|
|
34
35
|
}
|
|
35
|
-
[zoomValue];
|
|
36
36
|
/**
|
|
37
37
|
* The zoom level of the current visualization
|
|
38
38
|
* @attribute
|
|
@@ -83,21 +83,18 @@ export default class VizWorkspaceElement extends LitElement {
|
|
|
83
83
|
set scrollTop(value) {
|
|
84
84
|
this.gestures.top = value;
|
|
85
85
|
}
|
|
86
|
-
[canvasRef];
|
|
87
86
|
get canvas() {
|
|
88
87
|
if (!this[canvasRef]) {
|
|
89
88
|
this[canvasRef] = this.shadowRoot?.querySelector('.canvas');
|
|
90
89
|
}
|
|
91
90
|
return this[canvasRef];
|
|
92
91
|
}
|
|
93
|
-
[svgRef];
|
|
94
92
|
get associationSvg() {
|
|
95
93
|
if (!this[svgRef]) {
|
|
96
94
|
this[svgRef] = this.shadowRoot?.querySelector('.association');
|
|
97
95
|
}
|
|
98
96
|
return this[svgRef];
|
|
99
97
|
}
|
|
100
|
-
[widthValue];
|
|
101
98
|
/**
|
|
102
99
|
* The width of the canvas element, in pixels
|
|
103
100
|
*/
|
|
@@ -117,7 +114,6 @@ export default class VizWorkspaceElement extends LitElement {
|
|
|
117
114
|
}
|
|
118
115
|
this.requestUpdate('width', old);
|
|
119
116
|
}
|
|
120
|
-
[heightValue];
|
|
121
117
|
/**
|
|
122
118
|
* The height of the canvas element, in pixels
|
|
123
119
|
*/
|
|
@@ -137,7 +133,6 @@ export default class VizWorkspaceElement extends LitElement {
|
|
|
137
133
|
}
|
|
138
134
|
this.requestUpdate('height', old);
|
|
139
135
|
}
|
|
140
|
-
[autoResizeValue] = false;
|
|
141
136
|
/**
|
|
142
137
|
* When set it instruct the visualization workspace to grow over the currently set `width` and `height`
|
|
143
138
|
* when a new added item is placed outside the bounds of the workspace.
|
|
@@ -159,22 +154,18 @@ export default class VizWorkspaceElement extends LitElement {
|
|
|
159
154
|
this.sizing.disconnect();
|
|
160
155
|
}
|
|
161
156
|
}
|
|
162
|
-
/**
|
|
163
|
-
* Enables some limited debugging information.
|
|
164
|
-
*/
|
|
165
|
-
debug;
|
|
166
|
-
/**
|
|
167
|
-
* The current scale of the visualization
|
|
168
|
-
*/
|
|
169
|
-
scale = 1;
|
|
170
|
-
[zoomTimeout];
|
|
171
|
-
gestures = new WorkspaceGestures(this);
|
|
172
|
-
selection = new SelectionManager(this);
|
|
173
|
-
edges = new WorkspaceEdges(this);
|
|
174
|
-
anchors = new AssociationAnchors(this);
|
|
175
|
-
sizing = new WorkspaceSizing(this);
|
|
176
157
|
constructor() {
|
|
177
158
|
super();
|
|
159
|
+
this[_a] = false;
|
|
160
|
+
/**
|
|
161
|
+
* The current scale of the visualization
|
|
162
|
+
*/
|
|
163
|
+
this.scale = 1;
|
|
164
|
+
this.gestures = new WorkspaceGestures(this);
|
|
165
|
+
this.selection = new SelectionManager(this);
|
|
166
|
+
this.edges = new WorkspaceEdges(this);
|
|
167
|
+
this.anchors = new AssociationAnchors(this);
|
|
168
|
+
this.sizing = new WorkspaceSizing(this);
|
|
178
169
|
this.addEventListener('geometrychange', this[geometryChangeHandler].bind(this));
|
|
179
170
|
}
|
|
180
171
|
connectedCallback() {
|
|
@@ -220,7 +211,7 @@ export default class VizWorkspaceElement extends LitElement {
|
|
|
220
211
|
this.gestures.left = -left;
|
|
221
212
|
this.gestures.top = -top;
|
|
222
213
|
}
|
|
223
|
-
[notifyZoom]() {
|
|
214
|
+
[(_a = autoResizeValue, notifyZoom)]() {
|
|
224
215
|
if (this[zoomTimeout]) {
|
|
225
216
|
clearTimeout(this[zoomTimeout]);
|
|
226
217
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VizWorkspaceElement.js","sourceRoot":"","sources":["../../../src/visualization/elements/VizWorkspaceElement.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\nimport { CSSResult, html, LitElement, PropertyValueMap, PropertyValues, svg, SVGTemplateResult, TemplateResult } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { AssociationAnchors } from \"../lib/AssociationAnchors.js\";\nimport { SelectionManager } from \"../lib/SelectionManager.js\";\nimport { ShapeArtist } from \"../lib/ShapeArtist.js\";\nimport { WorkspaceEdges } from \"../lib/WorkspaceEdges.js\";\nimport { WorkspaceGestures } from \"../lib/WorkspaceGestures.js\";\nimport { WorkspaceSizing } from \"../lib/WorkspaceSizing.js\";\nimport elementStyles from './WorkspaceStyles.js';\n\nconst defaultCanvasWidth = 3840;\nconst defaultCanvasHeight = 2160;\n\nexport const canvasRef = Symbol('canvasRef');\nexport const svgRef = Symbol('svgRef');\nexport const attributeTypeEditHandler = Symbol('attributeTypeEditHandler');\nexport const attributeTypeDropdownClosedHandler = Symbol('attributeTypeDropdownClosedHandler');\nexport const attributeTypeSelectHandler = Symbol('attributeTypeSelectHandler');\nexport const geometryChangeHandler = Symbol('geometryChangeHandler');\nexport const widthValue = Symbol('widthValue');\nexport const heightValue = Symbol('heightValue');\nexport const autoResizeValue = Symbol('autoResizeValue');\nexport const zoomValue = Symbol('zoomValue');\nexport const notifyZoom = Symbol('notifyZoom');\nexport const zoomTimeout = Symbol('zoomTimeout');\n\n/**\n * @fires positionchange\n */\nexport default class VizWorkspaceElement extends LitElement {\n static override get styles(): CSSResult[] {\n return [elementStyles];\n }\n\n [zoomValue]?: number;\n\n /**\n * The zoom level of the current visualization\n * @attribute\n */\n @property({ type: Number, reflect: true })\n get zoom(): number {\n return this[zoomValue] || 0;\n }\n\n set zoom(value: number) {\n const localValue = Number(value);\n if (Number.isNaN(localValue)) {\n return;\n }\n const old = this[zoomValue];\n if (old === localValue) {\n return;\n }\n this[zoomValue] = localValue;\n this.gestures.updateScale();\n this.requestUpdate('zoom', old);\n }\n\n /**\n * Gets or sets the number of pixels that an element's content is scrolled horizontally.\n * Unlike regular HTML elements, this can be a negative value as it is possible to\n * scroll outside the working area.\n */\n @property({ type: Number })\n override get scrollLeft(): number {\n const s = this.gestures;\n return s && s.left || 0;\n }\n\n /**\n * @param value The x-axis position value\n */\n override set scrollLeft(value: number) {\n this.gestures.left = value;\n }\n\n /**\n * Gets or sets the number of pixels that an element's content is scrolled vertically.\n * Unlike regular HTML elements, this can be a negative value as it is possible to\n * scroll outside the working area.\n */\n @property({ type: Number })\n override get scrollTop(): number {\n const s = this.gestures;\n return s && s.top || 0;\n }\n\n /**\n * @param value The y-axis position value\n */\n override set scrollTop(value: number) {\n this.gestures.top = value;\n }\n\n [canvasRef]?: HTMLDivElement;\n\n get canvas(): HTMLDivElement | null {\n if (!this[canvasRef]) {\n this[canvasRef] = this.shadowRoot?.querySelector('.canvas') as HTMLDivElement;\n }\n return this[canvasRef] as HTMLDivElement;\n }\n\n [svgRef]?: SVGElement;\n\n get associationSvg(): SVGElement {\n if (!this[svgRef]) {\n this[svgRef] = this.shadowRoot?.querySelector('.association') as SVGElement;\n }\n return this[svgRef] as SVGElement;\n }\n\n [widthValue]?: number;\n\n /**\n * The width of the canvas element, in pixels\n */\n @property({ type: Number })\n get width(): number {\n return this[widthValue] || defaultCanvasWidth;\n }\n\n set width(value: number) {\n const old = this[widthValue];\n if (old === value) {\n return;\n }\n if (!value || Number.isNaN(value)) {\n this[widthValue] = undefined;\n } else {\n this[widthValue] = value;\n }\n this.requestUpdate('width', old);\n }\n\n [heightValue]?: number;\n\n /**\n * The height of the canvas element, in pixels\n */\n @property({ type: Number })\n get height(): number {\n return this[heightValue] || defaultCanvasHeight;\n }\n\n set height(value: number) {\n const old = this[heightValue];\n if (old === value) {\n return;\n }\n if (!value || Number.isNaN(value)) {\n this[heightValue] = undefined;\n } else {\n this[heightValue] = value;\n }\n this.requestUpdate('height', old);\n }\n\n [autoResizeValue] = false;\n\n /** \n * When set it instruct the visualization workspace to grow over the currently set `width` and `height` \n * when a new added item is placed outside the bounds of the workspace.\n */\n @property({ type: Number, reflect: true })\n get autoResize(): boolean {\n return this[autoResizeValue];\n }\n\n set autoResize(value: boolean) {\n const old = this[autoResizeValue];\n if (old === value) {\n return;\n }\n this[autoResizeValue] = value;\n this.requestUpdate('autoResize', old);\n if (value === true) {\n this.sizing.connect();\n } else if (this.sizing.connected) {\n this.sizing.disconnect();\n }\n }\n\n /** \n * Enables some limited debugging information.\n */\n @property({ type: Boolean, reflect: true }) debug?: boolean;\n\n /** \n * The current scale of the visualization\n */\n @property({ type: Number }) scale = 1;\n\n [zoomTimeout]?: number;\n\n gestures = new WorkspaceGestures(this);\n\n selection = new SelectionManager(this);\n\n edges = new WorkspaceEdges(this);\n\n anchors = new AssociationAnchors(this);\n\n sizing = new WorkspaceSizing(this);\n\n constructor() {\n super();\n this.addEventListener('geometrychange', this[geometryChangeHandler].bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.gestures.connect();\n this.selection.connect();\n this.edges.connect();\n this.anchors.connect();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.gestures.disconnect();\n this.selection.disconnect();\n this.edges.disconnect();\n this.anchors.disconnect();\n }\n\n protected override firstUpdated(cp: PropertyValues<this>): void {\n super.firstUpdated(cp);\n const { top, left } = this.gestures;\n if (top === null || left === null) {\n this.gestures.scrollTo(0, 0);\n // this.center();\n }\n this.edges.listenContent();\n }\n\n /**\n * Clears the state of the workspace.\n */\n clear(): void {\n this.edges.clear();\n this.selection.deselectAll();\n }\n\n /**\n * Centers the workspace.\n */\n center(): void {\n const { width: cWidth = defaultCanvasWidth, height: cHeight = defaultCanvasHeight } = this;\n const { height, width } = this.getBoundingClientRect();\n const midWidth = cWidth / 2;\n const midHeight = cHeight / 2;\n const left = midWidth - width / 2;\n const top = midHeight - height / 2;\n this.gestures.left = -left;\n this.gestures.top = -top;\n }\n\n [notifyZoom](): void {\n if (this[zoomTimeout]) {\n clearTimeout(this[zoomTimeout]);\n }\n this[zoomTimeout] = setTimeout(() => {\n this.dispatchEvent(new Event('zoomchange'));\n }, 1) as unknown as number;\n }\n\n async [geometryChangeHandler](e: Event): Promise<void> {\n const source = e.target as HTMLElement;\n await this.edges.update(source.dataset.key as string);\n }\n\n override scrollBy(options: ScrollToOptions): void;\n\n override scrollBy(x: number, y: number): void;\n\n /**\n * Scrolls the element by the given amount.\n * @param {ScrollToOptions|number} xCoordOrOptions The horizontal pixel value that you want to scroll by\n * or the scroll options. When passed value is the `ScrollToOptions` interface then\n * the second argument is ignored.\n * @param {number=} yCoord The vertical pixel value that you want to scroll by.\n */\n override scrollBy(xCoordOrOptions: ScrollToOptions | number, yCoord?: number | undefined): void {\n this.gestures.scrollBy(xCoordOrOptions, yCoord);\n }\n\n override scrollTo(options: ScrollToOptions): void;\n\n override scrollTo(x: number, y: number): void;\n\n /**\n * Scrolls to a particular set of coordinates inside the element.\n *\n * @param xCoordOrOptions The pixel along the horizontal axis of the element\n * that you want displayed in the upper left. When passed value is the `ScrollToOptions` interface then\n * the second argument is ignored.\n * @param yCoord The pixel along the vertical axis of the element that you want displayed in the upper left.\n */\n override scrollTo(xCoordOrOptions: ScrollToOptions | number, yCoord?: number): void {\n this.gestures.scrollTo(xCoordOrOptions, yCoord);\n }\n\n /**\n * Scrolls the view if the position defined by `x` and `y` arguments requires\n * the view to be moved.\n *\n * @param x The x coordinate of the point\n * @param y The y coordinate of the point\n * @returns true if the canvas was moved\n */\n scrollIfNeeded(x: number, y: number): boolean {\n return this.gestures.scrollIfNeeded(x, y);\n }\n\n override render(): TemplateResult {\n const { scale, scrollLeft, scrollTop } = this;\n const styles = {\n transform: `scale(${scale}) translate(${scrollLeft}px, ${scrollTop}px)`,\n width: `${this.width}px`,\n height: `${this.height}px`,\n };\n return html`\n <div\n class=\"content canvas\"\n style=\"${styleMap(styles)}\"\n >\n ${this.renderLinesTemplate()}\n <slot></slot>\n </div>\n `;\n }\n\n /**\n * @return {SVGTemplateResult} The template for the associations\n */\n renderLinesTemplate(): SVGTemplateResult {\n const { debug } = this;\n const { edges } = this.edges;\n const primarySelected: (string | SVGTemplateResult)[] = [];\n const secondarySelected: (string | SVGTemplateResult)[] = [];\n const hovered: (string | SVGTemplateResult)[] = [];\n const rest: (string | SVGTemplateResult)[] = [];\n edges.forEach((item) => {\n const line = ShapeArtist.line(item, debug);\n const { shape } = item;\n const { selection = {} } = shape;\n if (selection.primary) {\n primarySelected.push(line);\n } else if (selection.secondary) {\n secondarySelected.push(line);\n } else if (selection.hover) {\n hovered.push(line);\n } else {\n rest.push(line);\n }\n });\n const edgesResult = primarySelected.concat(secondarySelected).concat(hovered).concat(rest).reverse();\n return svg`\n <svg width=\"100%\" height=\"100%\" class=\"association\">\n ${edgesResult.length ? edgesResult : ''}\n </svg>`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"VizWorkspaceElement.js","sourceRoot":"","sources":["../../../src/visualization/elements/VizWorkspaceElement.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\nimport { CSSResult, html, LitElement, PropertyValueMap, PropertyValues, svg, SVGTemplateResult, TemplateResult } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { AssociationAnchors } from \"../lib/AssociationAnchors.js\";\nimport { SelectionManager } from \"../lib/SelectionManager.js\";\nimport { ShapeArtist } from \"../lib/ShapeArtist.js\";\nimport { WorkspaceEdges } from \"../lib/WorkspaceEdges.js\";\nimport { WorkspaceGestures } from \"../lib/WorkspaceGestures.js\";\nimport { WorkspaceSizing } from \"../lib/WorkspaceSizing.js\";\nimport elementStyles from './WorkspaceStyles.js';\n\nconst defaultCanvasWidth = 3840;\nconst defaultCanvasHeight = 2160;\n\nexport const canvasRef = Symbol('canvasRef');\nexport const svgRef = Symbol('svgRef');\nexport const attributeTypeEditHandler = Symbol('attributeTypeEditHandler');\nexport const attributeTypeDropdownClosedHandler = Symbol('attributeTypeDropdownClosedHandler');\nexport const attributeTypeSelectHandler = Symbol('attributeTypeSelectHandler');\nexport const geometryChangeHandler = Symbol('geometryChangeHandler');\nexport const widthValue = Symbol('widthValue');\nexport const heightValue = Symbol('heightValue');\nexport const autoResizeValue = Symbol('autoResizeValue');\nexport const zoomValue = Symbol('zoomValue');\nexport const notifyZoom = Symbol('notifyZoom');\nexport const zoomTimeout = Symbol('zoomTimeout');\n\n/**\n * @fires positionchange\n */\nexport default class VizWorkspaceElement extends LitElement {\n static override get styles(): CSSResult[] {\n return [elementStyles];\n }\n\n [zoomValue]?: number;\n\n /**\n * The zoom level of the current visualization\n * @attribute\n */\n @property({ type: Number, reflect: true })\n get zoom(): number {\n return this[zoomValue] || 0;\n }\n\n set zoom(value: number) {\n const localValue = Number(value);\n if (Number.isNaN(localValue)) {\n return;\n }\n const old = this[zoomValue];\n if (old === localValue) {\n return;\n }\n this[zoomValue] = localValue;\n this.gestures.updateScale();\n this.requestUpdate('zoom', old);\n }\n\n /**\n * Gets or sets the number of pixels that an element's content is scrolled horizontally.\n * Unlike regular HTML elements, this can be a negative value as it is possible to\n * scroll outside the working area.\n */\n @property({ type: Number })\n override get scrollLeft(): number {\n const s = this.gestures;\n return s && s.left || 0;\n }\n\n /**\n * @param value The x-axis position value\n */\n override set scrollLeft(value: number) {\n this.gestures.left = value;\n }\n\n /**\n * Gets or sets the number of pixels that an element's content is scrolled vertically.\n * Unlike regular HTML elements, this can be a negative value as it is possible to\n * scroll outside the working area.\n */\n @property({ type: Number })\n override get scrollTop(): number {\n const s = this.gestures;\n return s && s.top || 0;\n }\n\n /**\n * @param value The y-axis position value\n */\n override set scrollTop(value: number) {\n this.gestures.top = value;\n }\n\n [canvasRef]?: HTMLDivElement;\n\n get canvas(): HTMLDivElement | null {\n if (!this[canvasRef]) {\n this[canvasRef] = this.shadowRoot?.querySelector('.canvas') as HTMLDivElement;\n }\n return this[canvasRef] as HTMLDivElement;\n }\n\n [svgRef]?: SVGElement;\n\n get associationSvg(): SVGElement {\n if (!this[svgRef]) {\n this[svgRef] = this.shadowRoot?.querySelector('.association') as SVGElement;\n }\n return this[svgRef] as SVGElement;\n }\n\n [widthValue]?: number;\n\n /**\n * The width of the canvas element, in pixels\n */\n @property({ type: Number })\n get width(): number {\n return this[widthValue] || defaultCanvasWidth;\n }\n\n set width(value: number) {\n const old = this[widthValue];\n if (old === value) {\n return;\n }\n if (!value || Number.isNaN(value)) {\n this[widthValue] = undefined;\n } else {\n this[widthValue] = value;\n }\n this.requestUpdate('width', old);\n }\n\n [heightValue]?: number;\n\n /**\n * The height of the canvas element, in pixels\n */\n @property({ type: Number })\n get height(): number {\n return this[heightValue] || defaultCanvasHeight;\n }\n\n set height(value: number) {\n const old = this[heightValue];\n if (old === value) {\n return;\n }\n if (!value || Number.isNaN(value)) {\n this[heightValue] = undefined;\n } else {\n this[heightValue] = value;\n }\n this.requestUpdate('height', old);\n }\n\n [autoResizeValue] = false;\n\n /** \n * When set it instruct the visualization workspace to grow over the currently set `width` and `height` \n * when a new added item is placed outside the bounds of the workspace.\n */\n @property({ type: Number, reflect: true })\n get autoResize(): boolean {\n return this[autoResizeValue];\n }\n\n set autoResize(value: boolean) {\n const old = this[autoResizeValue];\n if (old === value) {\n return;\n }\n this[autoResizeValue] = value;\n this.requestUpdate('autoResize', old);\n if (value === true) {\n this.sizing.connect();\n } else if (this.sizing.connected) {\n this.sizing.disconnect();\n }\n }\n\n /** \n * Enables some limited debugging information.\n */\n @property({ type: Boolean, reflect: true }) debug?: boolean;\n\n /** \n * The current scale of the visualization\n */\n @property({ type: Number }) scale = 1;\n\n [zoomTimeout]?: number;\n\n gestures = new WorkspaceGestures(this);\n\n selection = new SelectionManager(this);\n\n edges = new WorkspaceEdges(this);\n\n anchors = new AssociationAnchors(this);\n\n sizing = new WorkspaceSizing(this);\n\n constructor() {\n super();\n this.addEventListener('geometrychange', this[geometryChangeHandler].bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.gestures.connect();\n this.selection.connect();\n this.edges.connect();\n this.anchors.connect();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.gestures.disconnect();\n this.selection.disconnect();\n this.edges.disconnect();\n this.anchors.disconnect();\n }\n\n protected override firstUpdated(cp: PropertyValues<this>): void {\n super.firstUpdated(cp);\n const { top, left } = this.gestures;\n if (top === null || left === null) {\n this.gestures.scrollTo(0, 0);\n // this.center();\n }\n this.edges.listenContent();\n }\n\n /**\n * Clears the state of the workspace.\n */\n clear(): void {\n this.edges.clear();\n this.selection.deselectAll();\n }\n\n /**\n * Centers the workspace.\n */\n center(): void {\n const { width: cWidth = defaultCanvasWidth, height: cHeight = defaultCanvasHeight } = this;\n const { height, width } = this.getBoundingClientRect();\n const midWidth = cWidth / 2;\n const midHeight = cHeight / 2;\n const left = midWidth - width / 2;\n const top = midHeight - height / 2;\n this.gestures.left = -left;\n this.gestures.top = -top;\n }\n\n [notifyZoom](): void {\n if (this[zoomTimeout]) {\n clearTimeout(this[zoomTimeout]);\n }\n this[zoomTimeout] = setTimeout(() => {\n this.dispatchEvent(new Event('zoomchange'));\n }, 1) as unknown as number;\n }\n\n async [geometryChangeHandler](e: Event): Promise<void> {\n const source = e.target as HTMLElement;\n await this.edges.update(source.dataset.key as string);\n }\n\n override scrollBy(options: ScrollToOptions): void;\n\n override scrollBy(x: number, y: number): void;\n\n /**\n * Scrolls the element by the given amount.\n * @param {ScrollToOptions|number} xCoordOrOptions The horizontal pixel value that you want to scroll by\n * or the scroll options. When passed value is the `ScrollToOptions` interface then\n * the second argument is ignored.\n * @param {number=} yCoord The vertical pixel value that you want to scroll by.\n */\n override scrollBy(xCoordOrOptions: ScrollToOptions | number, yCoord?: number | undefined): void {\n this.gestures.scrollBy(xCoordOrOptions, yCoord);\n }\n\n override scrollTo(options: ScrollToOptions): void;\n\n override scrollTo(x: number, y: number): void;\n\n /**\n * Scrolls to a particular set of coordinates inside the element.\n *\n * @param xCoordOrOptions The pixel along the horizontal axis of the element\n * that you want displayed in the upper left. When passed value is the `ScrollToOptions` interface then\n * the second argument is ignored.\n * @param yCoord The pixel along the vertical axis of the element that you want displayed in the upper left.\n */\n override scrollTo(xCoordOrOptions: ScrollToOptions | number, yCoord?: number): void {\n this.gestures.scrollTo(xCoordOrOptions, yCoord);\n }\n\n /**\n * Scrolls the view if the position defined by `x` and `y` arguments requires\n * the view to be moved.\n *\n * @param x The x coordinate of the point\n * @param y The y coordinate of the point\n * @returns true if the canvas was moved\n */\n scrollIfNeeded(x: number, y: number): boolean {\n return this.gestures.scrollIfNeeded(x, y);\n }\n\n override render(): TemplateResult {\n const { scale, scrollLeft, scrollTop } = this;\n const styles = {\n transform: `scale(${scale}) translate(${scrollLeft}px, ${scrollTop}px)`,\n width: `${this.width}px`,\n height: `${this.height}px`,\n };\n return html`\n <div\n class=\"content canvas\"\n style=\"${styleMap(styles)}\"\n >\n ${this.renderLinesTemplate()}\n <slot></slot>\n </div>\n `;\n }\n\n /**\n * @return {SVGTemplateResult} The template for the associations\n */\n renderLinesTemplate(): SVGTemplateResult {\n const { debug } = this;\n const { edges } = this.edges;\n const primarySelected: (string | SVGTemplateResult)[] = [];\n const secondarySelected: (string | SVGTemplateResult)[] = [];\n const hovered: (string | SVGTemplateResult)[] = [];\n const rest: (string | SVGTemplateResult)[] = [];\n edges.forEach((item) => {\n const line = ShapeArtist.line(item, debug);\n const { shape } = item;\n const { selection = {} } = shape;\n if (selection.primary) {\n primarySelected.push(line);\n } else if (selection.secondary) {\n secondarySelected.push(line);\n } else if (selection.hover) {\n hovered.push(line);\n } else {\n rest.push(line);\n }\n });\n const edgesResult = primarySelected.concat(secondarySelected).concat(hovered).concat(rest).reverse();\n return svg`\n <svg width=\"100%\" height=\"100%\" class=\"association\">\n ${edgesResult.length ? edgesResult : ''}\n </svg>`;\n }\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
3
|
/* eslint-disable class-methods-use-this */
|
|
3
4
|
import { getRelativeClickPoint } from './PositionUtils.js';
|
|
@@ -19,35 +20,22 @@ export const keydownHandler = Symbol('keydownHandler');
|
|
|
19
20
|
* After the user finish a DOM event is dispatched from the visualization workspace.
|
|
20
21
|
*/
|
|
21
22
|
export class AssociationAnchors {
|
|
22
|
-
workspace;
|
|
23
|
-
[connectedValue] = false;
|
|
24
|
-
/**
|
|
25
|
-
* Whether a line is being constructed.
|
|
26
|
-
*/
|
|
27
|
-
drawing = false;
|
|
28
|
-
/**
|
|
29
|
-
* A reference to the currently injected SVG element.
|
|
30
|
-
*/
|
|
31
|
-
lineElement;
|
|
32
|
-
/**
|
|
33
|
-
* Whether an association position is being updated.
|
|
34
|
-
* In such case it dispatches different event at the end.
|
|
35
|
-
*/
|
|
36
|
-
updating = false;
|
|
37
|
-
/**
|
|
38
|
-
* The processor used to draw lines
|
|
39
|
-
*/
|
|
40
|
-
lineProcessor = new LineSketch();
|
|
41
|
-
/**
|
|
42
|
-
* Set when a new association is being created
|
|
43
|
-
*/
|
|
44
|
-
createInfo;
|
|
45
|
-
/**
|
|
46
|
-
* Set when an association update is performed
|
|
47
|
-
*/
|
|
48
|
-
updateInfo;
|
|
49
23
|
constructor(workspace) {
|
|
50
24
|
this.workspace = workspace;
|
|
25
|
+
this[_a] = false;
|
|
26
|
+
/**
|
|
27
|
+
* Whether a line is being constructed.
|
|
28
|
+
*/
|
|
29
|
+
this.drawing = false;
|
|
30
|
+
/**
|
|
31
|
+
* Whether an association position is being updated.
|
|
32
|
+
* In such case it dispatches different event at the end.
|
|
33
|
+
*/
|
|
34
|
+
this.updating = false;
|
|
35
|
+
/**
|
|
36
|
+
* The processor used to draw lines
|
|
37
|
+
*/
|
|
38
|
+
this.lineProcessor = new LineSketch();
|
|
51
39
|
this.workspace = workspace;
|
|
52
40
|
this[mouseDownHandler] = this[mouseDownHandler].bind(this);
|
|
53
41
|
this[mouseMoveHandler] = this[mouseMoveHandler].bind(this);
|
|
@@ -85,7 +73,7 @@ export class AssociationAnchors {
|
|
|
85
73
|
});
|
|
86
74
|
return element;
|
|
87
75
|
}
|
|
88
|
-
[mouseDownHandler](e) {
|
|
76
|
+
[(_a = connectedValue, mouseDownHandler)](e) {
|
|
89
77
|
if (e.button !== 0) {
|
|
90
78
|
return;
|
|
91
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssociationAnchors.js","sourceRoot":"","sources":["../../../src/visualization/lib/AssociationAnchors.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\nimport { getRelativeClickPoint } from './PositionUtils.js';\nimport { anchorToPoint } from './AnchorUtils.js';\nimport { LineSketch } from './LineSketch.js';\nimport VizWorkspaceElement from '../elements/VizWorkspaceElement.js';\nimport { Point } from './Point.js';\n\nconst SvgNS = 'http://www.w3.org/2000/svg';\n\nexport const connectedValue = Symbol('connectedValue');\nexport const mouseDownHandler = Symbol('mouseDownHandler');\nexport const mouseMoveHandler = Symbol('mouseMoveHandler');\nexport const mouseUpHandler = Symbol('mouseUpHandler');\nexport const keydownHandler = Symbol('keydownHandler');\n\nexport interface EdgeCreateInfo {\n /** \n * The slot name of the source object.\n */\n slot: string;\n /** \n * The workspace coordinates of the staring point\n */\n point: Point;\n /** \n * The domain element that is the source of the association.\n */\n source: HTMLElement;\n}\n\nexport interface IEdgeUpdateInfo {\n /**\n * The name of the tip that is being dragged.\n * It's either `start` or `end`.\n */\n direction: string;\n /**\n * The association domain id.\n */\n id: string;\n /**\n * The start point of the line\n */\n sp: Point;\n /**\n * The end point of the line\n */\n ep: Point;\n}\n\n/**\n * A helper that allows to manually draw a line from one visualization object to another.\n * The visualization object has to have the `data-association-slots` attribute set on the element\n * and the mouse event target having the `data-association-slot` attribute with the index of the slot.\n * \n * The association line can be drawn to another object that has both attributes.\n * \n * After the user finish a DOM event is dispatched from the visualization workspace.\n */\nexport class AssociationAnchors {\n [connectedValue] = false\n\n /** \n * Whether a line is being constructed.\n */\n drawing = false;\n\n /** \n * A reference to the currently injected SVG element.\n */\n lineElement?: SVGElement;\n\n /** \n * Whether an association position is being updated. \n * In such case it dispatches different event at the end.\n */\n updating: boolean = false;\n\n /** \n * The processor used to draw lines\n */\n lineProcessor = new LineSketch();\n\n /** \n * Set when a new association is being created\n */\n createInfo?: EdgeCreateInfo;\n\n /** \n * Set when an association update is performed\n */\n updateInfo?: IEdgeUpdateInfo;\n\n\n constructor(public workspace: VizWorkspaceElement) {\n this.workspace = workspace;\n this[mouseDownHandler] = this[mouseDownHandler].bind(this);\n this[mouseMoveHandler] = this[mouseMoveHandler].bind(this);\n this[mouseUpHandler] = this[mouseUpHandler].bind(this);\n this[keydownHandler] = this[keydownHandler].bind(this);\n }\n\n /**\n * Starts listening for the user events\n */\n connect(): void {\n if (this[connectedValue]) {\n return;\n }\n this[connectedValue] = true;\n const { workspace } = this;\n // const { canvas } = workspace;\n workspace.addEventListener('mousedown', this[mouseDownHandler], true);\n }\n\n /**\n * Stops listening for the user events\n */\n disconnect(): void {\n this[connectedValue] = false;\n const { workspace } = this;\n // const { canvas } = workspace;\n workspace.removeEventListener('mousedown', this[mouseDownHandler], true);\n }\n\n findSlotParent(path: Node[]): Element {\n const element = path.find((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n const typed = node as Element;\n return typed.hasAttribute('data-association-slots');\n });\n return element as Element;\n }\n\n [mouseDownHandler](e: MouseEvent): void {\n if (e.button !== 0) {\n return;\n }\n let node = e.target as HTMLElement\n if (!e.composed || node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const [source] = e.composedPath() as HTMLElement[];\n if (node === source) {\n const parent = this.findSlotParent(e.composedPath() as Node[]);\n if (!parent) {\n return;\n }\n node = parent as HTMLElement;\n }\n const { dataset } = source;\n const isSvgDraggable = source.classList && source.classList.contains('association-draggable');\n if (isSvgDraggable) {\n e.preventDefault();\n e.stopPropagation();\n this.startUpdate(dataset.key!, dataset.dir!);\n return;\n }\n if (!node.hasAttribute('data-association-slots')) {\n return;\n }\n if (source.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n if (!dataset.associationSlot) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const startPoint = anchorToPoint(source, this.workspace);\n this.start(node, dataset.associationSlot, startPoint);\n }\n\n [mouseMoveHandler](e: MouseEvent): void {\n if (!this.drawing) {\n return;\n }\n const { clientX, clientY } = e;\n const pos = getRelativeClickPoint(clientX, clientY, this.workspace);\n this.updateLinePosition(pos);\n }\n\n [mouseUpHandler](e: MouseEvent): void {\n if (!this.drawing) {\n return;\n }\n this.drawing = false;\n this.cancel();\n let node = e.target as HTMLElement;\n if (!e.composed || node.nodeType !== Node.ELEMENT_NODE) {\n this.cleanup();\n return;\n }\n if (!node.hasAttribute('data-association-slots')) {\n const parent = this.findSlotParent(e.composedPath() as Node[]);\n if (!parent) {\n return;\n }\n node = parent as HTMLElement;\n }\n if (!node.hasAttribute('data-association-slots')) {\n this.cleanup();\n return;\n }\n const [source] = e.composedPath() as HTMLElement[];\n if (source.nodeType !== Node.ELEMENT_NODE) {\n this.cleanup();\n return;\n }\n const { dataset } = source;\n if (!dataset.associationSlot) {\n this.cleanup();\n return;\n }\n const { clientX, clientY } = e;\n const endPoint = getRelativeClickPoint(clientX, clientY, this.workspace);\n if (this.updating) {\n this.endUpdate(node.dataset.key!, dataset.associationSlot, endPoint);\n } else {\n this.end(node.dataset.key!, dataset.associationSlot, endPoint);\n }\n }\n\n [keydownHandler](e: KeyboardEvent): void {\n if (e.code !== 'Escape') {\n return;\n }\n this.cancel();\n this.cleanup();\n }\n\n /**\n * Cancels the operation.\n */\n cancel(): void {\n this.unlistenDargEvents();\n this.removeLine();\n if (this.updating) {\n const model = this.workspace.edges.get(this.updateInfo!.id)!;\n model.shape.selection!.hidden = false;\n this.workspace.requestUpdate();\n }\n }\n\n /**\n * Clears variables set in the `start()` function.\n */\n cleanup(): void {\n this.createInfo = undefined;\n this.updateInfo = undefined;\n this.updating = false;\n this.drawing = false;\n }\n\n start(domainObject: HTMLElement, slot: string, startPoint: Point): void {\n this.drawing = true;\n this.createInfo = {\n slot,\n point: startPoint,\n source: domainObject,\n };\n this.addLine(startPoint, startPoint);\n this.listenDargEvents();\n }\n\n /**\n * @param key The domain id of the association being updated\n * @param dir The name of the tip that is being dragged.\n */\n startUpdate(key: string, dir: string): void {\n const model = this.workspace.edges.get(key);\n if (!model) {\n throw new Error(`The edge is not prepared.`);\n }\n model.shape.selection!.hidden = true;\n const { coordinates } = model.shape.line;\n const [sp] = coordinates!;\n const ep = coordinates![coordinates!.length - 1];\n const startPoint = dir === 'end' ? sp : ep;\n const endPoint = dir === 'end' ? ep : sp;\n this.updating = true;\n this.updateInfo = {\n direction: dir,\n ep: endPoint,\n sp: startPoint,\n id: key,\n };\n this.drawing = true;\n this.addLine(startPoint, endPoint);\n this.listenDargEvents();\n this.workspace.requestUpdate();\n }\n\n end(id: string, slot: string, endPoint: Point): void {\n const { createInfo } = this;\n if (!createInfo) {\n throw new Error(`updateInfo is not set.`);\n }\n const detail = {\n source: {\n id: createInfo.source.dataset.key,\n point: createInfo.point,\n slot: createInfo.slot,\n },\n target: {\n id, // : domainObject.dataset.key,\n point: endPoint,\n slot,\n },\n };\n createInfo.source.dispatchEvent(new CustomEvent('anchorassociationcreate', {\n composed: true,\n cancelable: true,\n bubbles: true,\n detail,\n }));\n this.cleanup();\n }\n\n endUpdate(id: string, slot: string, endPoint: Point): void {\n const { updateInfo } = this;\n if (!updateInfo) {\n throw new Error(`updateInfo is not set.`);\n }\n const detail = {\n source: {\n associationId: updateInfo.id,\n direction: updateInfo.direction,\n },\n target: {\n id, // : domainObject.dataset.key,\n point: endPoint,\n slot,\n },\n };\n const model = this.workspace.edges.get(updateInfo.id)!;\n const eventTarget = this.workspace.querySelector(`[data-key=\"${model.source}\"]`)!;\n this.cleanup();\n eventTarget.dispatchEvent(new CustomEvent('anchorassociationupdate', {\n composed: true,\n cancelable: true,\n bubbles: true,\n detail,\n }));\n }\n\n /**\n * Insets a child with a line definition into the workspace's SVG element.\n * @param start The starting point of the line\n * @param end The ending point of the line\n */\n addLine(start: Point, end: Point): void {\n const line = document.createElementNS(SvgNS, 'line');\n line.setAttribute('x1', `${start.x}`);\n line.setAttribute('y1', `${start.y}`);\n line.setAttribute('x2', `${end.x}`);\n line.setAttribute('y2', `${end.y}`);\n line.classList.add('association-line');\n const { associationSvg } = this.workspace;\n associationSvg.append(line);\n this.lineElement = line;\n }\n\n /**\n * Removes the previously added line from the SVG\n */\n removeLine(): void {\n const { lineElement } = this;\n if (!lineElement) {\n return;\n }\n const { associationSvg } = this.workspace;\n associationSvg.removeChild(lineElement);\n this.lineElement = undefined;\n }\n\n /**\n * Updates the end position of the line.\n * @param {Point} point\n */\n updateLinePosition(point: Point): void {\n const { lineElement } = this;\n\n if (!lineElement) {\n return;\n }\n\n // lineElement.setAttribute('d', definition.path);\n lineElement.setAttribute('x2', `${point.x}`);\n lineElement.setAttribute('y2', `${point.y}`);\n }\n\n /**\n * Listens for the mouse move and mouse up events to draw the line and finish the operation.\n * This is only initialized when starting drawing a line.\n */\n listenDargEvents(): void {\n const { workspace } = this;\n workspace.addEventListener('mousemove', this[mouseMoveHandler]);\n workspace.addEventListener('mouseup', this[mouseUpHandler]);\n window.addEventListener('keydown', this[keydownHandler]);\n }\n\n /**\n * Removes previously registered events.\n */\n unlistenDargEvents(): void {\n const { workspace } = this;\n workspace.removeEventListener('mousemove', this[mouseMoveHandler]);\n workspace.removeEventListener('mouseup', this[mouseUpHandler]);\n window.removeEventListener('keydown', this[keydownHandler]);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AssociationAnchors.js","sourceRoot":"","sources":["../../../src/visualization/lib/AssociationAnchors.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable class-methods-use-this */\nimport { getRelativeClickPoint } from './PositionUtils.js';\nimport { anchorToPoint } from './AnchorUtils.js';\nimport { LineSketch } from './LineSketch.js';\nimport VizWorkspaceElement from '../elements/VizWorkspaceElement.js';\nimport { Point } from './Point.js';\n\nconst SvgNS = 'http://www.w3.org/2000/svg';\n\nexport const connectedValue = Symbol('connectedValue');\nexport const mouseDownHandler = Symbol('mouseDownHandler');\nexport const mouseMoveHandler = Symbol('mouseMoveHandler');\nexport const mouseUpHandler = Symbol('mouseUpHandler');\nexport const keydownHandler = Symbol('keydownHandler');\n\nexport interface EdgeCreateInfo {\n /** \n * The slot name of the source object.\n */\n slot: string;\n /** \n * The workspace coordinates of the staring point\n */\n point: Point;\n /** \n * The domain element that is the source of the association.\n */\n source: HTMLElement;\n}\n\nexport interface IEdgeUpdateInfo {\n /**\n * The name of the tip that is being dragged.\n * It's either `start` or `end`.\n */\n direction: string;\n /**\n * The association domain id.\n */\n id: string;\n /**\n * The start point of the line\n */\n sp: Point;\n /**\n * The end point of the line\n */\n ep: Point;\n}\n\n/**\n * A helper that allows to manually draw a line from one visualization object to another.\n * The visualization object has to have the `data-association-slots` attribute set on the element\n * and the mouse event target having the `data-association-slot` attribute with the index of the slot.\n * \n * The association line can be drawn to another object that has both attributes.\n * \n * After the user finish a DOM event is dispatched from the visualization workspace.\n */\nexport class AssociationAnchors {\n [connectedValue] = false\n\n /** \n * Whether a line is being constructed.\n */\n drawing = false;\n\n /** \n * A reference to the currently injected SVG element.\n */\n lineElement?: SVGElement;\n\n /** \n * Whether an association position is being updated. \n * In such case it dispatches different event at the end.\n */\n updating: boolean = false;\n\n /** \n * The processor used to draw lines\n */\n lineProcessor = new LineSketch();\n\n /** \n * Set when a new association is being created\n */\n createInfo?: EdgeCreateInfo;\n\n /** \n * Set when an association update is performed\n */\n updateInfo?: IEdgeUpdateInfo;\n\n\n constructor(public workspace: VizWorkspaceElement) {\n this.workspace = workspace;\n this[mouseDownHandler] = this[mouseDownHandler].bind(this);\n this[mouseMoveHandler] = this[mouseMoveHandler].bind(this);\n this[mouseUpHandler] = this[mouseUpHandler].bind(this);\n this[keydownHandler] = this[keydownHandler].bind(this);\n }\n\n /**\n * Starts listening for the user events\n */\n connect(): void {\n if (this[connectedValue]) {\n return;\n }\n this[connectedValue] = true;\n const { workspace } = this;\n // const { canvas } = workspace;\n workspace.addEventListener('mousedown', this[mouseDownHandler], true);\n }\n\n /**\n * Stops listening for the user events\n */\n disconnect(): void {\n this[connectedValue] = false;\n const { workspace } = this;\n // const { canvas } = workspace;\n workspace.removeEventListener('mousedown', this[mouseDownHandler], true);\n }\n\n findSlotParent(path: Node[]): Element {\n const element = path.find((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n const typed = node as Element;\n return typed.hasAttribute('data-association-slots');\n });\n return element as Element;\n }\n\n [mouseDownHandler](e: MouseEvent): void {\n if (e.button !== 0) {\n return;\n }\n let node = e.target as HTMLElement\n if (!e.composed || node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const [source] = e.composedPath() as HTMLElement[];\n if (node === source) {\n const parent = this.findSlotParent(e.composedPath() as Node[]);\n if (!parent) {\n return;\n }\n node = parent as HTMLElement;\n }\n const { dataset } = source;\n const isSvgDraggable = source.classList && source.classList.contains('association-draggable');\n if (isSvgDraggable) {\n e.preventDefault();\n e.stopPropagation();\n this.startUpdate(dataset.key!, dataset.dir!);\n return;\n }\n if (!node.hasAttribute('data-association-slots')) {\n return;\n }\n if (source.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n if (!dataset.associationSlot) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n const startPoint = anchorToPoint(source, this.workspace);\n this.start(node, dataset.associationSlot, startPoint);\n }\n\n [mouseMoveHandler](e: MouseEvent): void {\n if (!this.drawing) {\n return;\n }\n const { clientX, clientY } = e;\n const pos = getRelativeClickPoint(clientX, clientY, this.workspace);\n this.updateLinePosition(pos);\n }\n\n [mouseUpHandler](e: MouseEvent): void {\n if (!this.drawing) {\n return;\n }\n this.drawing = false;\n this.cancel();\n let node = e.target as HTMLElement;\n if (!e.composed || node.nodeType !== Node.ELEMENT_NODE) {\n this.cleanup();\n return;\n }\n if (!node.hasAttribute('data-association-slots')) {\n const parent = this.findSlotParent(e.composedPath() as Node[]);\n if (!parent) {\n return;\n }\n node = parent as HTMLElement;\n }\n if (!node.hasAttribute('data-association-slots')) {\n this.cleanup();\n return;\n }\n const [source] = e.composedPath() as HTMLElement[];\n if (source.nodeType !== Node.ELEMENT_NODE) {\n this.cleanup();\n return;\n }\n const { dataset } = source;\n if (!dataset.associationSlot) {\n this.cleanup();\n return;\n }\n const { clientX, clientY } = e;\n const endPoint = getRelativeClickPoint(clientX, clientY, this.workspace);\n if (this.updating) {\n this.endUpdate(node.dataset.key!, dataset.associationSlot, endPoint);\n } else {\n this.end(node.dataset.key!, dataset.associationSlot, endPoint);\n }\n }\n\n [keydownHandler](e: KeyboardEvent): void {\n if (e.code !== 'Escape') {\n return;\n }\n this.cancel();\n this.cleanup();\n }\n\n /**\n * Cancels the operation.\n */\n cancel(): void {\n this.unlistenDargEvents();\n this.removeLine();\n if (this.updating) {\n const model = this.workspace.edges.get(this.updateInfo!.id)!;\n model.shape.selection!.hidden = false;\n this.workspace.requestUpdate();\n }\n }\n\n /**\n * Clears variables set in the `start()` function.\n */\n cleanup(): void {\n this.createInfo = undefined;\n this.updateInfo = undefined;\n this.updating = false;\n this.drawing = false;\n }\n\n start(domainObject: HTMLElement, slot: string, startPoint: Point): void {\n this.drawing = true;\n this.createInfo = {\n slot,\n point: startPoint,\n source: domainObject,\n };\n this.addLine(startPoint, startPoint);\n this.listenDargEvents();\n }\n\n /**\n * @param key The domain id of the association being updated\n * @param dir The name of the tip that is being dragged.\n */\n startUpdate(key: string, dir: string): void {\n const model = this.workspace.edges.get(key);\n if (!model) {\n throw new Error(`The edge is not prepared.`);\n }\n model.shape.selection!.hidden = true;\n const { coordinates } = model.shape.line;\n const [sp] = coordinates!;\n const ep = coordinates![coordinates!.length - 1];\n const startPoint = dir === 'end' ? sp : ep;\n const endPoint = dir === 'end' ? ep : sp;\n this.updating = true;\n this.updateInfo = {\n direction: dir,\n ep: endPoint,\n sp: startPoint,\n id: key,\n };\n this.drawing = true;\n this.addLine(startPoint, endPoint);\n this.listenDargEvents();\n this.workspace.requestUpdate();\n }\n\n end(id: string, slot: string, endPoint: Point): void {\n const { createInfo } = this;\n if (!createInfo) {\n throw new Error(`updateInfo is not set.`);\n }\n const detail = {\n source: {\n id: createInfo.source.dataset.key,\n point: createInfo.point,\n slot: createInfo.slot,\n },\n target: {\n id, // : domainObject.dataset.key,\n point: endPoint,\n slot,\n },\n };\n createInfo.source.dispatchEvent(new CustomEvent('anchorassociationcreate', {\n composed: true,\n cancelable: true,\n bubbles: true,\n detail,\n }));\n this.cleanup();\n }\n\n endUpdate(id: string, slot: string, endPoint: Point): void {\n const { updateInfo } = this;\n if (!updateInfo) {\n throw new Error(`updateInfo is not set.`);\n }\n const detail = {\n source: {\n associationId: updateInfo.id,\n direction: updateInfo.direction,\n },\n target: {\n id, // : domainObject.dataset.key,\n point: endPoint,\n slot,\n },\n };\n const model = this.workspace.edges.get(updateInfo.id)!;\n const eventTarget = this.workspace.querySelector(`[data-key=\"${model.source}\"]`)!;\n this.cleanup();\n eventTarget.dispatchEvent(new CustomEvent('anchorassociationupdate', {\n composed: true,\n cancelable: true,\n bubbles: true,\n detail,\n }));\n }\n\n /**\n * Insets a child with a line definition into the workspace's SVG element.\n * @param start The starting point of the line\n * @param end The ending point of the line\n */\n addLine(start: Point, end: Point): void {\n const line = document.createElementNS(SvgNS, 'line');\n line.setAttribute('x1', `${start.x}`);\n line.setAttribute('y1', `${start.y}`);\n line.setAttribute('x2', `${end.x}`);\n line.setAttribute('y2', `${end.y}`);\n line.classList.add('association-line');\n const { associationSvg } = this.workspace;\n associationSvg.append(line);\n this.lineElement = line;\n }\n\n /**\n * Removes the previously added line from the SVG\n */\n removeLine(): void {\n const { lineElement } = this;\n if (!lineElement) {\n return;\n }\n const { associationSvg } = this.workspace;\n associationSvg.removeChild(lineElement);\n this.lineElement = undefined;\n }\n\n /**\n * Updates the end position of the line.\n * @param {Point} point\n */\n updateLinePosition(point: Point): void {\n const { lineElement } = this;\n\n if (!lineElement) {\n return;\n }\n\n // lineElement.setAttribute('d', definition.path);\n lineElement.setAttribute('x2', `${point.x}`);\n lineElement.setAttribute('y2', `${point.y}`);\n }\n\n /**\n * Listens for the mouse move and mouse up events to draw the line and finish the operation.\n * This is only initialized when starting drawing a line.\n */\n listenDargEvents(): void {\n const { workspace } = this;\n workspace.addEventListener('mousemove', this[mouseMoveHandler]);\n workspace.addEventListener('mouseup', this[mouseUpHandler]);\n window.addEventListener('keydown', this[keydownHandler]);\n }\n\n /**\n * Removes previously registered events.\n */\n unlistenDargEvents(): void {\n const { workspace } = this;\n workspace.removeEventListener('mousemove', this[mouseMoveHandler]);\n workspace.removeEventListener('mouseup', this[mouseUpHandler]);\n window.removeEventListener('keydown', this[keydownHandler]);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Point.js","sourceRoot":"","sources":["../../../src/visualization/lib/Point.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,KAAK;
|
|
1
|
+
{"version":3,"file":"Point.js","sourceRoot":"","sources":["../../../src/visualization/lib/Point.ts"],"names":[],"mappings":"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","sourcesContent":["import { xPositionOrCoord } from \"./types.js\";\n\n/**\n * An object representing a point in a 2-d space (Euclidean space)\n */\nexport class Point {\n x: number;\n\n y: number;\n\n /**\n * @param x The x coordinate or the array with x and y position values\n * @param y Optional when the `x` is an array. The y position of the point\n */\n constructor(x: xPositionOrCoord, y?: number) {\n let xValue;\n let yValue;\n if (Array.isArray(x)) {\n [xValue, yValue] = x;\n } else {\n xValue = x;\n yValue = y;\n }\n this.x = xValue;\n this.y = yValue!;\n }\n\n /**\n * Copies the current point as new object\n * @return A copy of the object\n */\n copy(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Validates the point value.\n * @return True if the point has valid values.\n */\n validate(): boolean {\n const { x, y } = this;\n return !Number.isNaN(x) && !Number.isNaN(y);\n }\n\n /**\n * Adds another point to this point and returns a new point.\n * @param v Point or a number to add.\n * @returns Created new point\n */\n add(v: Point | number): Point {\n if (v instanceof Point) {\n return new Point(this.x + v.x, this.y + v.y);\n }\n return new Point(this.x + v, this.y + v);\n }\n\n /**\n * Subtracts another point from this point and returns a new point.\n * @param v Point or a number to add.\n * @returns Created new point\n */\n subtract(v: Point | number): Point {\n if (v instanceof Point) {\n return new Point(this.x - v.x, this.y - v.y);\n }\n return new Point(this.x - v, this.y - v);\n }\n\n /**\n * Multiplies this point by another point or a number and returns a new point.\n * @param v Point or a number to add.\n * @returns Created new point\n */\n multiply(v: Point | number): Point {\n if (v instanceof Point) {\n return new Point(this.x * v.x, this.y * v.y);\n }\n return new Point(this.x * v, this.y * v);\n }\n\n /**\n * Divides this point by another point or a number and returns a new point.\n * @param v Point or a number to add.\n * @returns Created new point\n */\n divide(v: Point | number): Point {\n if (v instanceof Point) {\n return new Point(this.x / v.x, this.y / v.y)\n };\n return new Point(this.x / v, this.y / v);\n }\n\n /**\n * Subtracts another point to this point and returns a new point.\n * @param v Point or a number to add.\n * @returns True when points are equal\n */\n equals(v: Point): boolean {\n return this.x === v.x && this.y === v.y;\n }\n\n /**\n * Computes an angle to another point in radians.\n * @param v Point or a number to add.\n * @returns True when points are equal\n */\n angle(v: Point): number {\n return Math.atan2(v.y - this.y, v.x - this.x);\n }\n\n /**\n * Computes an angle to another point in degrees.\n * @param v Point or a number to add.\n * @returns True when points are equal\n */\n degrees(v: Point): number {\n return this.angle(v) * 180 / Math.PI;\n }\n\n /**\n * Computes the distance to the other point.\n */\n distance(other: Point): number {\n return Math.sqrt(\n (this.x - other.x) ** 2 + (this.y - other.y) ** 2\n );\n }\n\n /**\n * Computes the distance between two points.\n */\n static distance(p1: Point, p2: Point): number {\n return p1.distance(p2);\n }\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a, _b;
|
|
1
2
|
export const clickHandler = Symbol('clickHandler');
|
|
2
3
|
export const observeItems = Symbol('observeItems');
|
|
3
4
|
export const mutationHandler = Symbol('mutationHandler');
|
|
@@ -18,16 +19,6 @@ export const selectedIdsValue = Symbol('selectedIdsValue');
|
|
|
18
19
|
* A class that takes care of selection in the visualization workspace.
|
|
19
20
|
*/
|
|
20
21
|
export class SelectionManager {
|
|
21
|
-
target;
|
|
22
|
-
/**
|
|
23
|
-
* The list of currently selected elements
|
|
24
|
-
*/
|
|
25
|
-
[selectedItemsValue] = new Set();
|
|
26
|
-
/**
|
|
27
|
-
* The list of currently selected domain ids
|
|
28
|
-
*/
|
|
29
|
-
[selectedIdsValue] = [];
|
|
30
|
-
[mutationObserver];
|
|
31
22
|
/**
|
|
32
23
|
* @returns A set of currently selected items.
|
|
33
24
|
*/
|
|
@@ -49,6 +40,14 @@ export class SelectionManager {
|
|
|
49
40
|
}
|
|
50
41
|
constructor(target) {
|
|
51
42
|
this.target = target;
|
|
43
|
+
/**
|
|
44
|
+
* The list of currently selected elements
|
|
45
|
+
*/
|
|
46
|
+
this[_a] = new Set();
|
|
47
|
+
/**
|
|
48
|
+
* The list of currently selected domain ids
|
|
49
|
+
*/
|
|
50
|
+
this[_b] = [];
|
|
52
51
|
this[clickHandler] = this[clickHandler].bind(this);
|
|
53
52
|
this[mutationHandler] = this[mutationHandler].bind(this);
|
|
54
53
|
}
|
|
@@ -206,7 +205,7 @@ export class SelectionManager {
|
|
|
206
205
|
return node;
|
|
207
206
|
}
|
|
208
207
|
// PRIVATE APIS
|
|
209
|
-
[clickHandler](e) {
|
|
208
|
+
[(_a = selectedItemsValue, _b = selectedIdsValue, clickHandler)](e) {
|
|
210
209
|
const path = e.composedPath();
|
|
211
210
|
const svg = this.target.associationSvg;
|
|
212
211
|
if (path[0] !== svg && path.includes(svg)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../src/visualization/lib/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport VizWorkspaceElement from \"../elements/VizWorkspaceElement.js\";\nimport { ISelectedDomain } from \"./types.js\";\n\nexport const clickHandler = Symbol('clickHandler');\nexport const observeItems = Symbol('observeItems');\nexport const mutationHandler = Symbol('mutationHandler');\nexport const mutationObserver = Symbol('mutationObserver');\nexport const processAddedNodes = Symbol('processAddedNodes');\nexport const processRemovedNodes = Symbol('processRemovedNodes');\nexport const processAttributeChanged = Symbol('processAttributeChanged');\nexport const propagateSelection = Symbol('propagateSelection');\nexport const selectAssociations = Symbol('selectAssociation');\nexport const selectReverseAssociations = Symbol('selectReverseAssociations');\nexport const propagateDeselection = Symbol('propagateDeselection');\nexport const deselectAssociations = Symbol('deselectAssociations');\nexport const deselectReverseAssociations = Symbol('deselectReverseAssociations');\nexport const notifyChanged = Symbol('notifyChanged');\nexport const selectedItemsValue = Symbol('selectedItemsValue');\nexport const selectedIdsValue = Symbol('selectedIdsValue');\n\n/**\n * A class that takes care of selection in the visualization workspace.\n */\nexport class SelectionManager {\n /** \n * The list of currently selected elements\n */\n [selectedItemsValue] = new Set<Element>();\n\n /** \n * The list of currently selected domain ids\n */\n [selectedIdsValue]: ISelectedDomain[] = [];\n\n [mutationObserver]?: MutationObserver;\n\n /**\n * @returns A set of currently selected items.\n */\n get selectedItems(): Set<Element> {\n return this[selectedItemsValue];\n }\n\n /**\n * @returns A list of currently selected domain ids.\n */\n get selected(): ISelectedDomain[] {\n return this[selectedIdsValue];\n }\n\n /**\n * @returns A list of all selectable items\n */\n get selectable(): Element[] {\n const nodes = this.target.querySelectorAll('[data-selectable]');\n return Array.from(nodes) as Element[];\n }\n\n constructor(public target: VizWorkspaceElement) {\n this[clickHandler] = this[clickHandler].bind(this);\n this[mutationHandler] = this[mutationHandler].bind(this);\n }\n\n /**\n * Initializes the library. Should be called when the workspace is ready to render content.\n */\n connect(): void {\n this.target.addEventListener('click', this[clickHandler] as EventListener);\n this[mutationObserver] = this[observeItems]();\n }\n\n /**\n * Cleans up and removes listeners\n */\n disconnect(): void {\n const mo = this[mutationObserver];\n if (mo) {\n mo.disconnect();\n this[mutationObserver] = undefined;\n }\n this.target.removeEventListener('click', this[clickHandler] as EventListener);\n }\n\n /**\n * Checks if given element is marked as selectable target\n * @param selectable The element to test for `selectable` or `data-selectable` attribute\n * @returns True if the element can be selected\n */\n isSelectable(selectable: Element): boolean {\n return selectable.hasAttribute('data-selectable');\n }\n\n /**\n * Checks if given element is marked as selected\n * @param selectable The element to test for `selected` or `data-selected` attribute\n * @returns True if the element is marked as selected\n */\n isSelected(selectable: Element): boolean {\n return selectable.hasAttribute('data-selected');\n }\n\n /**\n * Marks an element as selected\n * @param selectable The element to add the selected mark to.\n */\n setSelected(selectable: Element): void {\n selectable.setAttribute('data-selected', '');\n }\n\n /**\n * Marks an element as not selected\n * @param selectable The element to remove the selected mark from.\n */\n setUnselected(selectable: Element): void {\n selectable.removeAttribute('data-selected');\n }\n\n /**\n * Deselects all currently selected items.\n */\n selectAll(): void {\n this.selectable.forEach((node) => {\n if (!this.isSelected(node)) {\n this.setSelected(node);\n }\n });\n }\n\n /**\n * Deselects all currently selected items.\n */\n deselectAll(): void {\n this.selectable.forEach((node) => {\n if (this.isSelected(node)) {\n this.setUnselected(node);\n }\n });\n const ids = [...this[selectedIdsValue]];\n ids.forEach((info) => {\n const elm = this.getDomainTarget(info.id);\n if (!elm) {\n const index = this[selectedIdsValue].indexOf(info);\n this[selectedIdsValue].splice(index, 1);\n } else if (this.isSelected(elm)) {\n this.setUnselected(elm);\n }\n });\n }\n\n /**\n * Selects objects that are selectable by their `key`.\n * \n * The `addToSelection` argument is equivalent of calling `deselectAll()` and then `select(...)`.\n * \n * @param keys The list of domain ids of objects to select. \n * @param addToSelection If true it adds to the current selection rather than replacing it.\n */\n select(keys: string[], addToSelection=false): void {\n if (!addToSelection) {\n this.deselectAll();\n }\n keys.forEach((id) => {\n const node = this.getSelectableDomainTarget(id);\n if (!node) {\n return;\n }\n if (this.isSelectable(node) && !this.isSelected(node)) {\n this.setSelected(node);\n }\n });\n }\n\n /**\n * Removes objects from selection.\n * \n * @param keys The list of domain ids of objects to deselect. \n */\n deselect(keys: string[]): void {\n keys.forEach((id) => {\n const node = this.getSelectableDomainTarget(id);\n if (!node) {\n return;\n }\n if (this.isSelectable(node) && this.isSelected(node)) {\n this.setUnselected(node);\n }\n });\n }\n\n /**\n * Synchronizes the selection state with the view\n */\n syncView(): void {\n const nodes = this.target.querySelectorAll(`[data-selectable][data-selected]`);\n if (this[selectedItemsValue].size !== nodes.length) {\n // eslint-disable-next-line no-console\n console.log('invalid selection', this[selectedItemsValue], nodes);\n }\n }\n\n /**\n * Reads the attribute value to get the `key` property.\n * @param selectable \n * @returns The domain id of the object or `null` when not found\n */\n readKey(selectable: Element): string | null {\n if (selectable.hasAttribute('data-key')) {\n return selectable.getAttribute('data-key');\n }\n return null;\n }\n\n /**\n * Finds a workspace element that has the domain id.\n * @param id Target domain id\n */\n getDomainTarget(id: string): Element | null {\n return this.target.querySelector(`[data-key=\"${id}\"]`);\n }\n\n /**\n * Finds a workspace element that has the domain id and is selectable.\n * @param id Target domain id\n */\n getSelectableDomainTarget(id: string): Element|null {\n const node = this.target.querySelector(`[data-key=\"${id}\"][data-selectable]`);\n return node;\n }\n\n // PRIVATE APIS\n\n [clickHandler](e: PointerEvent): void {\n const path = e.composedPath();\n const svg = this.target.associationSvg;\n if (path[0] !== svg && path.includes(svg)) {\n // Selection of the edges is managed by the workspace edges manager.\n return;\n }\n let selectableTarget;\n while (path.length > 0) {\n const tmp = path.shift() as Node;\n if (tmp.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n const typed = tmp as Element;\n if (this.isSelectable(typed)) {\n selectableTarget = typed;\n break\n }\n }\n if (!selectableTarget) {\n this.deselectAll();\n return;\n }\n const isSelected = this.isSelected(selectableTarget);\n // note: if toggle mode is required then this should toggle the attribute\n if (isSelected) {\n if (e.shiftKey) {\n this.setUnselected(selectableTarget);\n }\n return;\n }\n if (!e.shiftKey) {\n this.deselectAll();\n }\n this.setSelected(selectableTarget);\n }\n\n /**\n * Observe items change in the element's light DOM\n * @returns The observer handler\n */\n [observeItems](): MutationObserver {\n const config = { attributes: true, childList: true, subtree: true, };\n const observer = new MutationObserver(this[mutationHandler]);\n observer.observe(this.target, config);\n return observer;\n }\n\n /**\n * Processes mutations in the workspace and manages selection state.\n * @param mutationsList List of mutations.\n */\n [mutationHandler](mutationsList: MutationRecord[]): void {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n this[processAddedNodes](mutation.addedNodes);\n this[processRemovedNodes](mutation.removedNodes);\n } else if (mutation.type === 'attributes') {\n const { attributeName, target } = mutation;\n this[processAttributeChanged](target as Element, attributeName as string);\n }\n }\n requestAnimationFrame(() => this.syncView());\n }\n\n /**\n * Processes added to the canvas elements.\n * @param nodes The list of added nodes\n */\n [processAddedNodes](nodes: NodeList): void {\n nodes.forEach((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const typed = node as Element;\n const children = typed.querySelectorAll('*');\n this[processAddedNodes](children);\n if (!this.isSelectable(typed)) {\n return;\n }\n if (this.isSelected(typed)) {\n this[propagateSelection](typed);\n }\n });\n }\n\n /**\n * Processes removed from the canvas elements.\n * @param nodes The list of removed nodes\n */\n [processRemovedNodes](nodes: NodeList): void {\n nodes.forEach((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const typed = node as Element;\n const children = typed.querySelectorAll('*');\n this[processRemovedNodes](children);\n // An item might not be selectable but it may have a secondary selection \n // through association.\n // if (!this.isSelectable(typed)) {\n // return;\n // }\n if (this.isSelected(typed)) {\n this[propagateDeselection](typed);\n }\n });\n }\n\n /**\n * Processes changed attribute on any element in the canvas\n * @param node Changed element\n * @param prop Changed property\n */\n [processAttributeChanged](node: Element, prop: string): void {\n if (!['data-selected'].includes(prop)) {\n return;\n }\n if (node.hasAttribute(prop)) {\n this[propagateSelection](node);\n } else {\n this[propagateDeselection](node);\n }\n }\n\n /**\n * Sets selection to the elements that are related to the `selectable` element.\n * \n * A related element is an element that is an association target to the `selectable`\n * ot the `selectable` has `parent` attribute.\n * \n * The related are not added to the `selectedItems` set and does not have `selected` attribute.\n * They are marked with `second-selected` attribute.\n */\n [propagateSelection](selectable: Element): void {\n if (this.selectedItems.has(selectable)) {\n return;\n }\n this.selectedItems.add(selectable);\n const id = this.readKey(selectable);\n if (!id) {\n this[notifyChanged]();\n return;\n }\n const selected = this[selectedIdsValue];\n const index = selected.findIndex((item) => item.id === id);\n if (index === -1) {\n selected.push({\n id,\n name: selectable.localName,\n node: selectable,\n });\n }\n this[selectAssociations](selectable);\n this[selectReverseAssociations](selectable);\n this[notifyChanged]();\n }\n\n /**\n * Marks `viz-association` and referenced targets of the `selectable` as a secondary selection.\n */\n [selectAssociations](selectable: Element): void {\n const nodes = selectable.querySelectorAll('viz-association');\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.setAttribute('secondary-selected', '');\n const targetElement = this.getDomainTarget(target);\n if (targetElement) {\n targetElement.setAttribute('secondary-selected', '');\n }\n });\n }\n\n /**\n * Similar to `[selectAssociations]()` but it selects associations where \n * the `selectable` is the target.\n */\n [selectReverseAssociations](selectable: Element): void {\n const id = this.readKey(selectable);\n if (!id) {\n return;\n }\n const nodes = this.target.querySelectorAll(`viz-association[data-target=\"${id}\"]`);\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.setAttribute('secondary-selected', '');\n const targetElement = node.parentElement;\n if (targetElement) {\n targetElement.setAttribute('secondary-selected', '');\n }\n });\n }\n\n /**\n * Removes secondary selection from the elements that are related to the `selectable` element.\n * \n * A related element is an element that is an association target to the `selectable`\n * ot the `selectable` has `parent` attribute.\n */\n [propagateDeselection](selectable: Element): void {\n if (!this.selectedItems.has(selectable)) {\n return;\n }\n this.selectedItems.delete(selectable);\n const id = this.readKey(selectable);\n if (!id) {\n this[notifyChanged]();\n return;\n }\n const selected = this[selectedIdsValue];\n const index = selected.findIndex((item) => item.id === id);\n if (index !== -1) {\n this[selectedIdsValue].splice(index, 1);\n }\n this[deselectAssociations](selectable);\n this[deselectReverseAssociations](selectable);\n this[notifyChanged]();\n }\n\n /**\n * Removes secondary selection mark from `viz-association`\n */\n [deselectAssociations](selectable: Element): void {\n const nodes = selectable.querySelectorAll('viz-association');\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.removeAttribute('secondary-selected');\n const targetElement = this.getDomainTarget(target);\n if (targetElement) {\n targetElement.removeAttribute('secondary-selected');\n }\n });\n }\n\n /**\n * Similar to `[selectAssociation]()` but it selects associations where \n * the `selectable` is the target.\n */\n [deselectReverseAssociations](selectable: Element): void {\n const id = this.readKey(selectable);\n if (!id) {\n return;\n }\n const nodes = this.target.querySelectorAll(`viz-association[data-target=\"${id}\"]`);\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.removeAttribute('secondary-selected');\n const targetElement = node.parentElement;\n if (targetElement) {\n targetElement.removeAttribute('secondary-selected');\n }\n });\n }\n\n [notifyChanged](): void {\n this.target.dispatchEvent(new Event('selectedchange'));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionManager.js","sourceRoot":"","sources":["../../../src/visualization/lib/SelectionManager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport VizWorkspaceElement from \"../elements/VizWorkspaceElement.js\";\nimport { ISelectedDomain } from \"./types.js\";\n\nexport const clickHandler = Symbol('clickHandler');\nexport const observeItems = Symbol('observeItems');\nexport const mutationHandler = Symbol('mutationHandler');\nexport const mutationObserver = Symbol('mutationObserver');\nexport const processAddedNodes = Symbol('processAddedNodes');\nexport const processRemovedNodes = Symbol('processRemovedNodes');\nexport const processAttributeChanged = Symbol('processAttributeChanged');\nexport const propagateSelection = Symbol('propagateSelection');\nexport const selectAssociations = Symbol('selectAssociation');\nexport const selectReverseAssociations = Symbol('selectReverseAssociations');\nexport const propagateDeselection = Symbol('propagateDeselection');\nexport const deselectAssociations = Symbol('deselectAssociations');\nexport const deselectReverseAssociations = Symbol('deselectReverseAssociations');\nexport const notifyChanged = Symbol('notifyChanged');\nexport const selectedItemsValue = Symbol('selectedItemsValue');\nexport const selectedIdsValue = Symbol('selectedIdsValue');\n\n/**\n * A class that takes care of selection in the visualization workspace.\n */\nexport class SelectionManager {\n /** \n * The list of currently selected elements\n */\n [selectedItemsValue] = new Set<Element>();\n\n /** \n * The list of currently selected domain ids\n */\n [selectedIdsValue]: ISelectedDomain[] = [];\n\n [mutationObserver]?: MutationObserver;\n\n /**\n * @returns A set of currently selected items.\n */\n get selectedItems(): Set<Element> {\n return this[selectedItemsValue];\n }\n\n /**\n * @returns A list of currently selected domain ids.\n */\n get selected(): ISelectedDomain[] {\n return this[selectedIdsValue];\n }\n\n /**\n * @returns A list of all selectable items\n */\n get selectable(): Element[] {\n const nodes = this.target.querySelectorAll('[data-selectable]');\n return Array.from(nodes) as Element[];\n }\n\n constructor(public target: VizWorkspaceElement) {\n this[clickHandler] = this[clickHandler].bind(this);\n this[mutationHandler] = this[mutationHandler].bind(this);\n }\n\n /**\n * Initializes the library. Should be called when the workspace is ready to render content.\n */\n connect(): void {\n this.target.addEventListener('click', this[clickHandler] as EventListener);\n this[mutationObserver] = this[observeItems]();\n }\n\n /**\n * Cleans up and removes listeners\n */\n disconnect(): void {\n const mo = this[mutationObserver];\n if (mo) {\n mo.disconnect();\n this[mutationObserver] = undefined;\n }\n this.target.removeEventListener('click', this[clickHandler] as EventListener);\n }\n\n /**\n * Checks if given element is marked as selectable target\n * @param selectable The element to test for `selectable` or `data-selectable` attribute\n * @returns True if the element can be selected\n */\n isSelectable(selectable: Element): boolean {\n return selectable.hasAttribute('data-selectable');\n }\n\n /**\n * Checks if given element is marked as selected\n * @param selectable The element to test for `selected` or `data-selected` attribute\n * @returns True if the element is marked as selected\n */\n isSelected(selectable: Element): boolean {\n return selectable.hasAttribute('data-selected');\n }\n\n /**\n * Marks an element as selected\n * @param selectable The element to add the selected mark to.\n */\n setSelected(selectable: Element): void {\n selectable.setAttribute('data-selected', '');\n }\n\n /**\n * Marks an element as not selected\n * @param selectable The element to remove the selected mark from.\n */\n setUnselected(selectable: Element): void {\n selectable.removeAttribute('data-selected');\n }\n\n /**\n * Deselects all currently selected items.\n */\n selectAll(): void {\n this.selectable.forEach((node) => {\n if (!this.isSelected(node)) {\n this.setSelected(node);\n }\n });\n }\n\n /**\n * Deselects all currently selected items.\n */\n deselectAll(): void {\n this.selectable.forEach((node) => {\n if (this.isSelected(node)) {\n this.setUnselected(node);\n }\n });\n const ids = [...this[selectedIdsValue]];\n ids.forEach((info) => {\n const elm = this.getDomainTarget(info.id);\n if (!elm) {\n const index = this[selectedIdsValue].indexOf(info);\n this[selectedIdsValue].splice(index, 1);\n } else if (this.isSelected(elm)) {\n this.setUnselected(elm);\n }\n });\n }\n\n /**\n * Selects objects that are selectable by their `key`.\n * \n * The `addToSelection` argument is equivalent of calling `deselectAll()` and then `select(...)`.\n * \n * @param keys The list of domain ids of objects to select. \n * @param addToSelection If true it adds to the current selection rather than replacing it.\n */\n select(keys: string[], addToSelection=false): void {\n if (!addToSelection) {\n this.deselectAll();\n }\n keys.forEach((id) => {\n const node = this.getSelectableDomainTarget(id);\n if (!node) {\n return;\n }\n if (this.isSelectable(node) && !this.isSelected(node)) {\n this.setSelected(node);\n }\n });\n }\n\n /**\n * Removes objects from selection.\n * \n * @param keys The list of domain ids of objects to deselect. \n */\n deselect(keys: string[]): void {\n keys.forEach((id) => {\n const node = this.getSelectableDomainTarget(id);\n if (!node) {\n return;\n }\n if (this.isSelectable(node) && this.isSelected(node)) {\n this.setUnselected(node);\n }\n });\n }\n\n /**\n * Synchronizes the selection state with the view\n */\n syncView(): void {\n const nodes = this.target.querySelectorAll(`[data-selectable][data-selected]`);\n if (this[selectedItemsValue].size !== nodes.length) {\n // eslint-disable-next-line no-console\n console.log('invalid selection', this[selectedItemsValue], nodes);\n }\n }\n\n /**\n * Reads the attribute value to get the `key` property.\n * @param selectable \n * @returns The domain id of the object or `null` when not found\n */\n readKey(selectable: Element): string | null {\n if (selectable.hasAttribute('data-key')) {\n return selectable.getAttribute('data-key');\n }\n return null;\n }\n\n /**\n * Finds a workspace element that has the domain id.\n * @param id Target domain id\n */\n getDomainTarget(id: string): Element | null {\n return this.target.querySelector(`[data-key=\"${id}\"]`);\n }\n\n /**\n * Finds a workspace element that has the domain id and is selectable.\n * @param id Target domain id\n */\n getSelectableDomainTarget(id: string): Element|null {\n const node = this.target.querySelector(`[data-key=\"${id}\"][data-selectable]`);\n return node;\n }\n\n // PRIVATE APIS\n\n [clickHandler](e: PointerEvent): void {\n const path = e.composedPath();\n const svg = this.target.associationSvg;\n if (path[0] !== svg && path.includes(svg)) {\n // Selection of the edges is managed by the workspace edges manager.\n return;\n }\n let selectableTarget;\n while (path.length > 0) {\n const tmp = path.shift() as Node;\n if (tmp.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n const typed = tmp as Element;\n if (this.isSelectable(typed)) {\n selectableTarget = typed;\n break\n }\n }\n if (!selectableTarget) {\n this.deselectAll();\n return;\n }\n const isSelected = this.isSelected(selectableTarget);\n // note: if toggle mode is required then this should toggle the attribute\n if (isSelected) {\n if (e.shiftKey) {\n this.setUnselected(selectableTarget);\n }\n return;\n }\n if (!e.shiftKey) {\n this.deselectAll();\n }\n this.setSelected(selectableTarget);\n }\n\n /**\n * Observe items change in the element's light DOM\n * @returns The observer handler\n */\n [observeItems](): MutationObserver {\n const config = { attributes: true, childList: true, subtree: true, };\n const observer = new MutationObserver(this[mutationHandler]);\n observer.observe(this.target, config);\n return observer;\n }\n\n /**\n * Processes mutations in the workspace and manages selection state.\n * @param mutationsList List of mutations.\n */\n [mutationHandler](mutationsList: MutationRecord[]): void {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n this[processAddedNodes](mutation.addedNodes);\n this[processRemovedNodes](mutation.removedNodes);\n } else if (mutation.type === 'attributes') {\n const { attributeName, target } = mutation;\n this[processAttributeChanged](target as Element, attributeName as string);\n }\n }\n requestAnimationFrame(() => this.syncView());\n }\n\n /**\n * Processes added to the canvas elements.\n * @param nodes The list of added nodes\n */\n [processAddedNodes](nodes: NodeList): void {\n nodes.forEach((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const typed = node as Element;\n const children = typed.querySelectorAll('*');\n this[processAddedNodes](children);\n if (!this.isSelectable(typed)) {\n return;\n }\n if (this.isSelected(typed)) {\n this[propagateSelection](typed);\n }\n });\n }\n\n /**\n * Processes removed from the canvas elements.\n * @param nodes The list of removed nodes\n */\n [processRemovedNodes](nodes: NodeList): void {\n nodes.forEach((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const typed = node as Element;\n const children = typed.querySelectorAll('*');\n this[processRemovedNodes](children);\n // An item might not be selectable but it may have a secondary selection \n // through association.\n // if (!this.isSelectable(typed)) {\n // return;\n // }\n if (this.isSelected(typed)) {\n this[propagateDeselection](typed);\n }\n });\n }\n\n /**\n * Processes changed attribute on any element in the canvas\n * @param node Changed element\n * @param prop Changed property\n */\n [processAttributeChanged](node: Element, prop: string): void {\n if (!['data-selected'].includes(prop)) {\n return;\n }\n if (node.hasAttribute(prop)) {\n this[propagateSelection](node);\n } else {\n this[propagateDeselection](node);\n }\n }\n\n /**\n * Sets selection to the elements that are related to the `selectable` element.\n * \n * A related element is an element that is an association target to the `selectable`\n * ot the `selectable` has `parent` attribute.\n * \n * The related are not added to the `selectedItems` set and does not have `selected` attribute.\n * They are marked with `second-selected` attribute.\n */\n [propagateSelection](selectable: Element): void {\n if (this.selectedItems.has(selectable)) {\n return;\n }\n this.selectedItems.add(selectable);\n const id = this.readKey(selectable);\n if (!id) {\n this[notifyChanged]();\n return;\n }\n const selected = this[selectedIdsValue];\n const index = selected.findIndex((item) => item.id === id);\n if (index === -1) {\n selected.push({\n id,\n name: selectable.localName,\n node: selectable,\n });\n }\n this[selectAssociations](selectable);\n this[selectReverseAssociations](selectable);\n this[notifyChanged]();\n }\n\n /**\n * Marks `viz-association` and referenced targets of the `selectable` as a secondary selection.\n */\n [selectAssociations](selectable: Element): void {\n const nodes = selectable.querySelectorAll('viz-association');\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.setAttribute('secondary-selected', '');\n const targetElement = this.getDomainTarget(target);\n if (targetElement) {\n targetElement.setAttribute('secondary-selected', '');\n }\n });\n }\n\n /**\n * Similar to `[selectAssociations]()` but it selects associations where \n * the `selectable` is the target.\n */\n [selectReverseAssociations](selectable: Element): void {\n const id = this.readKey(selectable);\n if (!id) {\n return;\n }\n const nodes = this.target.querySelectorAll(`viz-association[data-target=\"${id}\"]`);\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.setAttribute('secondary-selected', '');\n const targetElement = node.parentElement;\n if (targetElement) {\n targetElement.setAttribute('secondary-selected', '');\n }\n });\n }\n\n /**\n * Removes secondary selection from the elements that are related to the `selectable` element.\n * \n * A related element is an element that is an association target to the `selectable`\n * ot the `selectable` has `parent` attribute.\n */\n [propagateDeselection](selectable: Element): void {\n if (!this.selectedItems.has(selectable)) {\n return;\n }\n this.selectedItems.delete(selectable);\n const id = this.readKey(selectable);\n if (!id) {\n this[notifyChanged]();\n return;\n }\n const selected = this[selectedIdsValue];\n const index = selected.findIndex((item) => item.id === id);\n if (index !== -1) {\n this[selectedIdsValue].splice(index, 1);\n }\n this[deselectAssociations](selectable);\n this[deselectReverseAssociations](selectable);\n this[notifyChanged]();\n }\n\n /**\n * Removes secondary selection mark from `viz-association`\n */\n [deselectAssociations](selectable: Element): void {\n const nodes = selectable.querySelectorAll('viz-association');\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.removeAttribute('secondary-selected');\n const targetElement = this.getDomainTarget(target);\n if (targetElement) {\n targetElement.removeAttribute('secondary-selected');\n }\n });\n }\n\n /**\n * Similar to `[selectAssociation]()` but it selects associations where \n * the `selectable` is the target.\n */\n [deselectReverseAssociations](selectable: Element): void {\n const id = this.readKey(selectable);\n if (!id) {\n return;\n }\n const nodes = this.target.querySelectorAll(`viz-association[data-target=\"${id}\"]`);\n if (!nodes.length) {\n return;\n }\n Array.from(nodes).forEach((node) => {\n const target = node.getAttribute('data-target');\n if (!target) {\n return;\n }\n node.removeAttribute('secondary-selected');\n const targetElement = node.parentElement;\n if (targetElement) {\n targetElement.removeAttribute('secondary-selected');\n }\n });\n }\n\n [notifyChanged](): void {\n this.target.dispatchEvent(new Event('selectedchange'));\n }\n}\n"]}
|