@api-client/ui 0.0.4 → 0.0.7
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/demo/elements/http/http-assertions.html +3 -0
- package/demo/elements/http/http-assertions.ts +1 -1
- package/demo/elements/http/http-flows.html +23 -0
- package/demo/elements/http/http-flows.ts +92 -0
- package/demo/elements/http/index.html +3 -0
- package/demo/pages/http-project/main.ts +5 -6
- 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/delete-cookie-action-dialog.d.ts +10 -0
- package/dist/define/dialog/delete-cookie-action-dialog.d.ts.map +1 -0
- package/dist/define/dialog/delete-cookie-action-dialog.js +14 -0
- package/dist/define/dialog/delete-cookie-action-dialog.js.map +1 -0
- package/dist/define/dialog/rename-dialog.js +1 -1
- package/dist/define/dialog/rename-dialog.js.map +1 -1
- package/dist/define/dialog/set-cookie-action-dialog.d.ts +10 -0
- package/dist/define/dialog/set-cookie-action-dialog.d.ts.map +1 -0
- package/dist/define/dialog/set-cookie-action-dialog.js +14 -0
- package/dist/define/dialog/set-cookie-action-dialog.js.map +1 -0
- 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.d.ts +1 -1
- package/dist/define/http/http-assertions.d.ts.map +1 -1
- package/dist/define/http/http-assertions.js +3 -3
- 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-flows.d.ts +10 -0
- package/dist/define/http/http-flows.d.ts.map +1 -0
- package/dist/define/http/http-flows.js +13 -0
- package/dist/define/http/http-flows.js.map +1 -0
- 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-divider.d.ts +4 -1
- package/dist/define/ui/ui-divider.d.ts.map +1 -1
- package/dist/define/ui/ui-divider.js +11 -2
- package/dist/define/ui/ui-divider.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.d.ts +4 -0
- package/dist/elements/ApiElement.d.ts.map +1 -1
- package/dist/elements/ApiElement.js +6 -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 +1 -33
- 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.d.ts.map +1 -1
- package/dist/elements/amf/ApiOperationDocument.element.js +2 -77
- 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 +1 -79
- 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.d.ts +0 -1
- package/dist/elements/amf/ApiRequestEditor.element.d.ts.map +1 -1
- package/dist/elements/amf/ApiRequestEditor.element.js +0 -121
- 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.d.ts +2 -1
- package/dist/elements/authorization/ui/Authorization.d.ts.map +1 -1
- package/dist/elements/authorization/ui/Authorization.js +18 -35
- 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/DeleteCookieAction.element.d.ts +20 -0
- package/dist/elements/dialog/DeleteCookieAction.element.d.ts.map +1 -0
- package/dist/elements/dialog/DeleteCookieAction.element.js +93 -0
- package/dist/elements/dialog/DeleteCookieAction.element.js.map +1 -0
- package/dist/elements/dialog/DeleteCookieAction.styles.d.ts +3 -0
- package/dist/elements/dialog/DeleteCookieAction.styles.d.ts.map +1 -0
- package/dist/elements/dialog/DeleteCookieAction.styles.js +13 -0
- package/dist/elements/dialog/DeleteCookieAction.styles.js.map +1 -0
- package/dist/elements/dialog/Rename.d.ts +7 -6
- package/dist/elements/dialog/Rename.d.ts.map +1 -1
- package/dist/elements/dialog/Rename.js +7 -12
- package/dist/elements/dialog/Rename.js.map +1 -1
- package/dist/elements/dialog/SetCookieAction.element.d.ts +22 -0
- package/dist/elements/dialog/SetCookieAction.element.d.ts.map +1 -0
- package/dist/elements/dialog/SetCookieAction.element.js +173 -0
- package/dist/elements/dialog/SetCookieAction.element.js.map +1 -0
- package/dist/elements/environment/EnvironmentEditor.d.ts +24 -3
- package/dist/elements/environment/EnvironmentEditor.d.ts.map +1 -1
- package/dist/elements/environment/EnvironmentEditor.js +73 -30
- package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
- package/dist/elements/environment/EnvironmentEditor.styles.d.ts.map +1 -1
- package/dist/elements/environment/EnvironmentEditor.styles.js +5 -0
- package/dist/elements/environment/EnvironmentEditor.styles.js.map +1 -1
- package/dist/elements/environment/ServerEditor.d.ts +3 -3
- package/dist/elements/environment/ServerEditor.d.ts.map +1 -1
- package/dist/elements/environment/ServerEditor.js +10 -51
- package/dist/elements/environment/ServerEditor.js.map +1 -1
- package/dist/elements/environment/VariablesEditor.d.ts +0 -1
- package/dist/elements/environment/VariablesEditor.d.ts.map +1 -1
- package/dist/elements/environment/VariablesEditor.js +10 -18
- 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/Prism.styles.d.ts.map +1 -1
- package/dist/elements/highlight/Prism.styles.js +12 -5
- package/dist/elements/highlight/Prism.styles.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.d.ts +0 -4
- package/dist/elements/http/BodyEditor.d.ts.map +1 -1
- package/dist/elements/http/BodyEditor.js +31 -49
- package/dist/elements/http/BodyEditor.js.map +1 -1
- package/dist/elements/http/BodyMultipartEditor.d.ts +3 -16
- package/dist/elements/http/BodyMultipartEditor.d.ts.map +1 -1
- package/dist/elements/http/BodyMultipartEditor.js +20 -37
- package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
- package/dist/elements/http/BodyTextEditor.d.ts +0 -1
- package/dist/elements/http/BodyTextEditor.d.ts.map +1 -1
- package/dist/elements/http/BodyTextEditor.js +2 -18
- package/dist/elements/http/BodyTextEditor.js.map +1 -1
- package/dist/elements/http/BodyUrlEncodedEditor.d.ts +3 -3
- package/dist/elements/http/BodyUrlEncodedEditor.d.ts.map +1 -1
- package/dist/elements/http/BodyUrlEncodedEditor.js +23 -26
- package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
- package/dist/elements/http/HeadersForm.d.ts +0 -4
- package/dist/elements/http/HeadersForm.d.ts.map +1 -1
- package/dist/elements/http/HeadersForm.js +16 -23
- package/dist/elements/http/HeadersForm.js.map +1 -1
- package/dist/elements/http/HttpAssertions.element.d.ts +55 -0
- package/dist/elements/http/HttpAssertions.element.d.ts.map +1 -0
- package/dist/elements/http/HttpAssertions.element.js +264 -0
- package/dist/elements/http/HttpAssertions.element.js.map +1 -0
- package/dist/elements/http/HttpAssertions.styles.d.ts.map +1 -1
- package/dist/elements/http/HttpAssertions.styles.js +7 -156
- package/dist/elements/http/HttpAssertions.styles.js.map +1 -1
- package/dist/elements/http/HttpFlows.common.d.ts +3 -0
- package/dist/elements/http/HttpFlows.common.d.ts.map +1 -0
- package/dist/elements/http/HttpFlows.common.js +181 -0
- package/dist/elements/http/HttpFlows.common.js.map +1 -0
- package/dist/elements/http/HttpFlows.element.d.ts +97 -0
- package/dist/elements/http/HttpFlows.element.d.ts.map +1 -0
- package/dist/elements/http/HttpFlows.element.js +684 -0
- package/dist/elements/http/HttpFlows.element.js.map +1 -0
- package/dist/elements/http/HttpFlows.styles.d.ts +3 -0
- package/dist/elements/http/HttpFlows.styles.d.ts.map +1 -0
- package/dist/elements/http/HttpFlows.styles.js +28 -0
- package/dist/elements/http/HttpFlows.styles.js.map +1 -0
- package/dist/elements/http/HttpFlowsUi.d.ts +172 -0
- package/dist/elements/http/HttpFlowsUi.d.ts.map +1 -0
- package/dist/elements/http/HttpFlowsUi.js +1256 -0
- package/dist/elements/http/HttpFlowsUi.js.map +1 -0
- 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.d.ts +0 -1
- package/dist/elements/http/RequestConfigElement.d.ts.map +1 -1
- package/dist/elements/http/RequestConfigElement.js +15 -15
- package/dist/elements/http/RequestConfigElement.js.map +1 -1
- package/dist/elements/http/RequestEditor.d.ts +10 -10
- package/dist/elements/http/RequestEditor.d.ts.map +1 -1
- package/dist/elements/http/RequestEditor.js +116 -111
- 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.d.ts +3 -3
- package/dist/elements/http/UrlInput.d.ts.map +1 -1
- package/dist/elements/http/UrlInput.js +17 -27
- package/dist/elements/http/UrlInput.js.map +1 -1
- package/dist/elements/http/UrlParamsForm.d.ts +0 -1
- package/dist/elements/http/UrlParamsForm.d.ts.map +1 -1
- package/dist/elements/http/UrlParamsForm.js +16 -16
- 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/layout/SplitView.styles.d.ts.map +1 -1
- package/dist/elements/layout/SplitView.styles.js +1 -0
- package/dist/elements/layout/SplitView.styles.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/AppNavigationItem.styles.d.ts.map +1 -1
- package/dist/elements/navigation/AppNavigationItem.styles.js +2 -0
- package/dist/elements/navigation/AppNavigationItem.styles.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.d.ts +2 -1
- package/dist/elements/project/HttpProjectRequest.d.ts.map +1 -1
- package/dist/elements/project/HttpProjectRequest.js +14 -43
- 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.d.ts +0 -1
- package/dist/elements/project/ProjectRunner.d.ts.map +1 -1
- package/dist/elements/project/ProjectRunner.js +3 -51
- package/dist/elements/project/ProjectRunner.js.map +1 -1
- package/dist/elements/schema-design/AssociationFormElement.d.ts +0 -1
- package/dist/elements/schema-design/AssociationFormElement.d.ts.map +1 -1
- package/dist/elements/schema-design/AssociationFormElement.js +2 -18
- package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
- package/dist/elements/schema-design/DataEntityEditorElement.d.ts +2 -2
- package/dist/elements/schema-design/DataEntityEditorElement.d.ts.map +1 -1
- package/dist/elements/schema-design/DataEntityEditorElement.js +5 -27
- 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.d.ts +0 -1
- package/dist/elements/schema-design/DataSchemaDocument.d.ts.map +1 -1
- package/dist/elements/schema-design/DataSchemaDocument.js +4 -43
- package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
- package/dist/elements/schema-design/EntityFormElement.d.ts +0 -1
- package/dist/elements/schema-design/EntityFormElement.d.ts.map +1 -1
- package/dist/elements/schema-design/EntityFormElement.js +4 -25
- package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
- package/dist/elements/schema-design/PropertyFormElement.d.ts +1 -2
- package/dist/elements/schema-design/PropertyFormElement.d.ts.map +1 -1
- package/dist/elements/schema-design/PropertyFormElement.js +8 -23
- 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.d.ts +1 -1
- package/dist/pages/ApplicationScreen.d.ts.map +1 -1
- package/dist/pages/ApplicationScreen.js +35 -56
- 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/ApiClient.styles.d.ts.map +1 -1
- package/dist/pages/api-client/ApiClient.styles.js +22 -3
- package/dist/pages/api-client/ApiClient.styles.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.d.ts +2 -0
- package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +23 -9
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/StoreConfig.screen.d.ts.map +1 -1
- package/dist/pages/api-client/StoreConfig.screen.js +25 -39
- package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
- package/dist/pages/api-client/StoreConfig.styles.d.ts.map +1 -1
- package/dist/pages/api-client/StoreConfig.styles.js +5 -0
- package/dist/pages/api-client/StoreConfig.styles.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.d.ts +1 -0
- package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +8 -28
- 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.d.ts +0 -8
- package/dist/pages/http-project/HttpProject.screen.d.ts.map +1 -1
- package/dist/pages/http-project/HttpProject.screen.js +39 -50
- package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
- package/dist/pages/http-project/types.d.ts +8 -6
- package/dist/pages/http-project/types.d.ts.map +1 -1
- package/dist/pages/http-project/types.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/styles/m3/surface.module.d.ts.map +1 -1
- package/dist/styles/m3/surface.module.js +11 -27
- package/dist/styles/m3/surface.module.js.map +1 -1
- package/dist/ui/UiElement.d.ts +4 -0
- package/dist/ui/UiElement.d.ts.map +1 -1
- package/dist/ui/UiElement.js +10 -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/SegmentedButton.styles.d.ts.map +1 -1
- package/dist/ui/button/SegmentedButton.styles.js +3 -1
- package/dist/ui/button/SegmentedButton.styles.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.d.ts +3 -0
- package/dist/ui/dialog/UiDialog.d.ts.map +1 -1
- package/dist/ui/dialog/UiDialog.js +17 -38
- package/dist/ui/dialog/UiDialog.js.map +1 -1
- package/dist/ui/effects/ripple.d.ts.map +1 -1
- package/dist/ui/effects/ripple.js +25 -19
- 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/Icons.d.ts +3 -2
- package/dist/ui/icons/Icons.d.ts.map +1 -1
- package/dist/ui/icons/Icons.js +2 -1
- package/dist/ui/icons/Icons.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.d.ts +1 -1
- package/dist/ui/input/CheckedElement.d.ts.map +1 -1
- package/dist/ui/input/CheckedElement.js +5 -16
- package/dist/ui/input/CheckedElement.js.map +1 -1
- package/dist/ui/input/Input.js +170 -235
- 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.d.ts → UiDivider.element.d.ts} +6 -6
- package/dist/ui/list/UiDivider.element.d.ts.map +1 -0
- package/dist/ui/list/UiDivider.element.js +39 -0
- package/dist/ui/list/UiDivider.element.js.map +1 -0
- package/dist/ui/list/UiDivider.styles.d.ts +3 -0
- package/dist/ui/list/UiDivider.styles.d.ts.map +1 -0
- package/dist/ui/list/UiDivider.styles.js +49 -0
- package/dist/ui/list/UiDivider.styles.js.map +1 -0
- 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.d.ts +13 -1
- package/dist/ui/tabs/UiTabs.d.ts.map +1 -1
- package/dist/ui/tabs/UiTabs.js +62 -47
- 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/src/define/dialog/delete-cookie-action-dialog.ts +16 -0
- package/src/define/dialog/set-cookie-action-dialog.ts +16 -0
- package/src/define/http/http-assertions.ts +3 -3
- package/src/define/http/http-flows.ts +15 -0
- package/src/define/ui/ui-divider.ts +7 -2
- package/src/elements/ApiElement.ts +7 -0
- package/src/elements/amf/ApiAuthorizationEditor.element.ts +1 -1
- package/src/elements/amf/ApiOperationDocument.element.ts +2 -1
- package/src/elements/amf/ApiRequest.element.ts +1 -1
- package/src/elements/amf/ApiRequestEditor.element.ts +0 -4
- package/src/elements/authorization/ui/Authorization.ts +3 -5
- package/src/elements/dialog/DeleteCookieAction.element.ts +100 -0
- package/src/elements/dialog/DeleteCookieAction.styles.ts +14 -0
- package/src/elements/dialog/Rename.ts +8 -7
- package/src/elements/dialog/SetCookieAction.element.ts +183 -0
- package/src/elements/environment/EnvironmentEditor.styles.ts +5 -0
- package/src/elements/environment/EnvironmentEditor.ts +81 -22
- package/src/elements/environment/ServerEditor.ts +4 -8
- package/src/elements/environment/VariablesEditor.ts +3 -7
- package/src/elements/highlight/Prism.styles.ts +12 -5
- package/src/elements/http/BodyEditor.ts +10 -17
- package/src/elements/http/BodyMultipartEditor.ts +3 -20
- package/src/elements/http/BodyTextEditor.ts +0 -4
- package/src/elements/http/BodyUrlEncodedEditor.ts +5 -8
- package/src/elements/http/HeadersForm.ts +2 -9
- package/src/elements/http/HttpAssertions.element.ts +286 -0
- package/src/elements/http/HttpAssertions.styles.ts +7 -156
- package/src/elements/http/HttpFlows.common.ts +181 -0
- package/src/elements/http/HttpFlows.element.ts +722 -0
- package/src/elements/http/HttpFlows.styles.ts +29 -0
- package/src/elements/http/HttpFlowsUi.ts +1327 -0
- package/src/elements/http/RequestConfigElement.ts +10 -14
- package/src/elements/http/RequestEditor.ts +77 -35
- package/src/elements/http/UrlInput.ts +6 -6
- package/src/elements/http/UrlParamsForm.ts +2 -6
- package/src/elements/layout/SplitView.styles.ts +1 -0
- package/src/elements/navigation/AppNavigationItem.styles.ts +2 -0
- package/src/elements/project/HttpProjectRequest.ts +16 -5
- package/src/elements/project/ProjectRunner.ts +3 -7
- package/src/elements/schema-design/AssociationFormElement.ts +4 -8
- package/src/elements/schema-design/DataEntityEditorElement.ts +8 -8
- package/src/elements/schema-design/DataSchemaDocument.ts +5 -9
- package/src/elements/schema-design/EntityFormElement.ts +6 -10
- package/src/elements/schema-design/PropertyFormElement.ts +11 -15
- package/src/pages/ApplicationScreen.ts +1 -1
- package/src/pages/api-client/ApiClient.styles.ts +22 -3
- package/src/pages/api-client/Authenticate.screen.ts +19 -3
- package/src/pages/api-client/StoreConfig.screen.ts +4 -2
- package/src/pages/api-client/StoreConfig.styles.ts +5 -0
- package/src/pages/api-client/pages/Files.page.ts +2 -1
- package/src/pages/http-project/HttpProject.screen.ts +14 -26
- package/src/pages/http-project/types.ts +8 -6
- package/src/styles/m3/surface.module.ts +11 -27
- package/src/styles/m3/theme.css +36 -0
- package/src/styles/m3/tokens.css +11 -0
- package/src/ui/UiElement.ts +7 -0
- package/src/ui/button/SegmentedButton.styles.ts +3 -1
- package/src/ui/dialog/UiDialog.ts +3 -0
- package/src/ui/effects/ripple.ts +6 -1
- package/src/ui/icons/Icons.ts +3 -2
- package/src/ui/input/CheckedElement.ts +3 -3
- package/src/ui/input/Input.ts +1 -1
- package/src/ui/list/UiDivider.element.ts +41 -0
- package/src/ui/list/UiDivider.styles.ts +49 -0
- package/src/ui/tabs/UiTabs.ts +55 -13
- package/test/amf/authorization/OAuth2Method.test.ts +1 -1
- package/test/elements/http/HttpAssertions.test.ts +5 -6
- package/test/elements/http/HttpFlows.test.ts +485 -0
- package/tsconfig.json +2 -2
- package/dist/elements/http/HttpAssertions.d.ts +0 -114
- package/dist/elements/http/HttpAssertions.d.ts.map +0 -1
- package/dist/elements/http/HttpAssertions.js +0 -1144
- package/dist/elements/http/HttpAssertions.js.map +0 -1
- package/dist/elements/http/internals.d.ts +0 -150
- package/dist/elements/http/internals.d.ts.map +0 -1
- package/dist/elements/http/internals.js +0 -150
- package/dist/elements/http/internals.js.map +0 -1
- package/dist/ui/list/DividerElement.d.ts.map +0 -1
- package/dist/ui/list/DividerElement.js +0 -87
- package/dist/ui/list/DividerElement.js.map +0 -1
- package/src/elements/http/HttpAssertions.ts +0 -1187
- package/src/elements/http/internals.ts +0 -151
- package/src/http-client/docs/Files.md +0 -28
- package/src/ui/list/DividerElement.ts +0 -84
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { NavigationBindings } from '../base/NavigationBindings.js';
|
|
2
2
|
export class WebNavigationBindings extends NavigationBindings {
|
|
3
|
-
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.handles = new Map();
|
|
6
|
+
}
|
|
4
7
|
open(id, url, sameWindow = false) {
|
|
5
8
|
if (sameWindow) {
|
|
6
9
|
window.location.href = url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebNavigationBindings.js","sourceRoot":"","sources":["../../../src/bindings/web/WebNavigationBindings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"file":"WebNavigationBindings.js","sourceRoot":"","sources":["../../../src/bindings/web/WebNavigationBindings.ts"],"names":[],"mappings":"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","sourcesContent":["import { INavDetail, INavRunHttpClient, INavRunHttpProjectDetail, INavRunSchemaDesignerDetail } from '../../events/NavigationEvents.js';\nimport { NavigationBindings } from '../base/NavigationBindings.js';\n\nexport class WebNavigationBindings extends NavigationBindings {\n handles = new Map<string, Window>();\n\n protected open(id: string, url: string, sameWindow = false): void {\n if (sameWindow) {\n window.location.href = url;\n return;\n }\n if (this.handles.has(id)) {\n const handle = this.handles.get(id) as Window;\n if (!handle.closed) {\n // handle.blur();\n // setTimeout(handle.focus, 0);\n // handle.location.href = url;\n return;\n }\n }\n const win = window.open(url);\n if (!win) {\n throw new Error(`Window blocked. Don't use timers and callbacks when creating a window.`);\n }\n this.handles.set(id, window);\n const handler = (): void => {\n this.handles.delete(id);\n window.removeEventListener('beforeunload', handler);\n }\n window.addEventListener('beforeunload', handler);\n }\n\n async openStoreConfiguration(): Promise<void> {\n const url = this.getPageUrl('../api-client/config.html').toString();\n this.open(url, url);\n }\n\n async openApiClient(init: INavRunHttpClient = {}): Promise<void> {\n const url = this.getPageUrl('../api-client/main.html');\n const { sameWindow, space } = init;\n if (space) {\n url.searchParams.set('space', space);\n }\n const id = url.toString();\n this.open(id, id, sameWindow);\n }\n\n async openHttpProject(init: INavRunHttpProjectDetail): Promise<void> {\n const url = this.getPageUrl('../http-project/main.html');\n const { sameWindow, space, key } = init;\n if (!space) {\n throw new Error(`Unable to complete navigation. The \"space\" parameter is required.`);\n }\n if (!key) {\n throw new Error(`Unable to complete navigation. The \"key\" parameter is required.`);\n }\n url.searchParams.set('space', space);\n url.searchParams.set('key', key);\n const id = url.toString();\n this.open(id, id, sameWindow);\n }\n \n async openStoreAuthenticate(init: INavDetail = {}): Promise<void> {\n const url = this.getPageUrl('../api-client/authenticate.html').toString();\n this.open(url, url, init.sameWindow);\n }\n\n async openTelemetry(init: INavDetail = {}): Promise<void> {\n const url = this.getPageUrl('../api-client/telemetry.html').toString();\n this.open(url, url, init.sameWindow);\n }\n\n async openSchemaDesigner(init: INavRunSchemaDesignerDetail): Promise<void> {\n const uri = this.getPageUrl('../schema-design/main.html');\n const { key, sameWindow } = init;\n uri.searchParams.set('key', key);\n uri.searchParams.set('space', init.space);\n const url = uri.toString();\n this.open(url, url, sameWindow);\n }\n}\n"]}
|
|
@@ -11,12 +11,6 @@ import { ProxyBindings } from "../base/ProxyBindings.js";
|
|
|
11
11
|
* The proxy detects payload for requests other than GET and HEAD.
|
|
12
12
|
*/
|
|
13
13
|
export class WebProxyBindings extends ProxyBindings {
|
|
14
|
-
proxyUrl;
|
|
15
|
-
/**
|
|
16
|
-
* Whether to use the current store environment to send the authentication credentials
|
|
17
|
-
* with the proxy request. This is required when using the `net-store`.
|
|
18
|
-
*/
|
|
19
|
-
authenticate = false;
|
|
20
14
|
/**
|
|
21
15
|
* @param app The application information
|
|
22
16
|
* @param proxyUrl The base URI to the HTTP proxy.
|
|
@@ -25,6 +19,11 @@ export class WebProxyBindings extends ProxyBindings {
|
|
|
25
19
|
constructor(app, proxyUrl, init = {}) {
|
|
26
20
|
super(app);
|
|
27
21
|
this.proxyUrl = proxyUrl;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to use the current store environment to send the authentication credentials
|
|
24
|
+
* with the proxy request. This is required when using the `net-store`.
|
|
25
|
+
*/
|
|
26
|
+
this.authenticate = false;
|
|
28
27
|
if (typeof init.authenticate === 'boolean') {
|
|
29
28
|
this.authenticate = init.authenticate;
|
|
30
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebProxyBindings.js","sourceRoot":"","sources":["../../../src/bindings/web/WebProxyBindings.ts"],"names":[],"mappings":"AAAA,OAAO,EACS,WAAW,EAAqC,OAAO,EAE1D,QAAQ,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAYzD;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"WebProxyBindings.js","sourceRoot":"","sources":["../../../src/bindings/web/WebProxyBindings.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n IHttpRequest, HttpRequest, IRequestLog, IProjectExecutionLog, Headers, IApplication, \n IRequestProxyInit, IProxyResult, IHttpProjectProxyInit, \n IApiError, ApiError, IHttpProjectStoreProxyInit \n} from \"@api-client/core/build/browser.js\";\nimport { Events } from \"../../events/Events.js\";\nimport { ProxyBindings } from \"../base/ProxyBindings.js\";\n\nexport interface IWebProxyInit {\n /**\n * Whether to use the current store environment to send the authentication credentials\n * with the proxy request. This is required when using the `net-store`.\n * \n * @default false\n */\n authenticate?: boolean;\n}\n\n/**\n * A class that acts as an HTTP proxy for the application.\n * Since the Project runner and the CoreEngine are strictly NodeJS modules, this needs to proxy the request to the server that supports \n * this API to make the request.\n * \n * When using the proxy, the logic first sends request to the proxy with initialization values: the request data, authorization, and configuration.\n * In response, the proxy server responds with a URL (or a path) to use to send the body. The method of the request is used with the second request.\n * The proxy detects payload for requests other than GET and HEAD.\n */\nexport class WebProxyBindings extends ProxyBindings {\n /**\n * Whether to use the current store environment to send the authentication credentials\n * with the proxy request. This is required when using the `net-store`.\n */\n protected authenticate = false;\n\n /**\n * @param app The application information\n * @param proxyUrl The base URI to the HTTP proxy. \n * @param authenticate Whether to use the current store environment to send authentication credentials.\n */\n constructor(app: IApplication, public proxyUrl: string, init: IWebProxyInit = {}) {\n super(app);\n if (typeof init.authenticate === 'boolean') {\n this.authenticate = init.authenticate;\n }\n }\n\n protected async listHeaders(): Promise<Record<string, string>> {\n const result: Record<string, string> = {\n 'content-type': 'application/json',\n };\n if (this.authenticate) {\n const env = await Events.Store.Global.getEnv();\n if (!env || !env.token) {\n throw new Error(`You are not authorized in the store to make a proxy request.`);\n }\n result.authorization = `Bearer ${env.token}, ${env.location}`;\n }\n return result;\n }\n\n protected async proxy(body: IRequestProxyInit | IHttpProjectProxyInit | IHttpProjectStoreProxyInit): Promise<IProxyResult> {\n const copy = { ...body };\n const { signal } = copy;\n delete copy.signal;\n\n const headers = await this.listHeaders();\n const init: RequestInit = {\n body: JSON.stringify(body),\n method: 'POST',\n headers,\n cache: 'no-cache',\n signal,\n };\n const response = await fetch(this.proxyUrl, init);\n if (response.status !== 200) {\n const error = await response.json() as IApiError;\n throw new ApiError(error);\n }\n return response.json() as Promise<IProxyResult>;\n }\n\n async coreRequest(init: IRequestProxyInit): Promise<IProxyResult<IRequestLog>> {\n return this.proxy(init) as Promise<IProxyResult<IRequestLog>>;\n }\n\n async coreHttpProject(init: IHttpProjectProxyInit | IHttpProjectStoreProxyInit): Promise<IProxyResult<IProjectExecutionLog>> {\n return this.proxy(init) as Promise<IProxyResult<IProjectExecutionLog>>;\n }\n\n async httpSend(request: IHttpRequest, init: RequestInit = {}): Promise<Response> {\n const config: RequestInit = { ...init };\n if (request.headers) {\n if (!config.headers) {\n config.headers = {};\n }\n const parser = new Headers(request.headers);\n const headers = config.headers as Record<string, string>;\n parser.forEach((value: string, name: string) => {\n if (headers[name]) {\n headers[name] += `, ${value}`;\n } else {\n headers[name] = value;\n }\n });\n }\n if (request.method) {\n config.method = request.method;\n }\n if (request.payload) {\n const r = new HttpRequest(request);\n const payload = await r.readPayload();\n config.body = payload;\n }\n return fetch(request.url, config);\n }\n}\n"]}
|
|
@@ -7,57 +7,52 @@ import { EnvironmentsKey } from '../base/ConfigurationBindings.js';
|
|
|
7
7
|
* API store bindings that handles communication with the store.
|
|
8
8
|
*/
|
|
9
9
|
export class WebStoreBindings extends StoreBindings {
|
|
10
|
-
/**
|
|
11
|
-
* The base URI of the "local" store to be used when the user chooses
|
|
12
|
-
* the local store over the
|
|
13
|
-
*/
|
|
14
|
-
storeBaseUri;
|
|
15
10
|
/**
|
|
16
11
|
* @param storeBaseUri The base URI of the "local" store to be used when the user chooses
|
|
17
12
|
* the local store over the
|
|
18
13
|
*/
|
|
19
14
|
constructor(app, storeBaseUri) {
|
|
20
15
|
super(app);
|
|
16
|
+
this.environment = {
|
|
17
|
+
init: async (init) => {
|
|
18
|
+
const env = {
|
|
19
|
+
key: uuidV4(),
|
|
20
|
+
location: init.source === 'local-store' ? this.storeBaseUri : init.location,
|
|
21
|
+
name: init.name || 'New store',
|
|
22
|
+
source: init.source,
|
|
23
|
+
authenticated: false,
|
|
24
|
+
};
|
|
25
|
+
const store = new HttpStore(env);
|
|
26
|
+
const info = await store.sdk.store.getInfo();
|
|
27
|
+
const setDefault = init.reason === 'first-run' || !!init.asDefault;
|
|
28
|
+
if (info.mode === 'single-user') {
|
|
29
|
+
// this store does not require authentication but does require setting up
|
|
30
|
+
// a session.
|
|
31
|
+
await store.getStoreSessionToken(env);
|
|
32
|
+
// this event is handled by the application controller
|
|
33
|
+
// and redirects the user to the next step.
|
|
34
|
+
await Events.Config.Environment.add(env, setDefault);
|
|
35
|
+
}
|
|
36
|
+
else if (init.reason === 'first-run') {
|
|
37
|
+
// the store needs authentication. We redirect the user to the
|
|
38
|
+
// authentication screen.
|
|
39
|
+
await Events.Config.Session.set(`${EnvironmentsKey}.creating`, env);
|
|
40
|
+
Events.Navigation.Store.authenticate({ sameWindow: true });
|
|
41
|
+
}
|
|
42
|
+
else if (init.reason === 'add') {
|
|
43
|
+
// this is adding an environment from the configuration screen.
|
|
44
|
+
// We save the configuration in the store.
|
|
45
|
+
await Events.Config.Environment.add(env, setDefault);
|
|
46
|
+
}
|
|
47
|
+
// http://localhost:8487/v1/
|
|
48
|
+
// http://localhost:8489/v1/
|
|
49
|
+
},
|
|
50
|
+
readStoreInfo: async (baseUri) => {
|
|
51
|
+
const store = new HttpStore(baseUri);
|
|
52
|
+
return store.sdk.store.getInfo();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
21
55
|
this.storeBaseUri = storeBaseUri;
|
|
22
56
|
}
|
|
23
|
-
environment = {
|
|
24
|
-
init: async (init) => {
|
|
25
|
-
const env = {
|
|
26
|
-
key: uuidV4(),
|
|
27
|
-
location: init.source === 'local-store' ? this.storeBaseUri : init.location,
|
|
28
|
-
name: init.name || 'New store',
|
|
29
|
-
source: init.source,
|
|
30
|
-
authenticated: false,
|
|
31
|
-
};
|
|
32
|
-
const store = new HttpStore(env);
|
|
33
|
-
const info = await store.sdk.store.getInfo();
|
|
34
|
-
const setDefault = init.reason === 'first-run' || !!init.asDefault;
|
|
35
|
-
if (info.mode === 'single-user') {
|
|
36
|
-
// this store does not require authentication but does require setting up
|
|
37
|
-
// a session.
|
|
38
|
-
await store.getStoreSessionToken(env);
|
|
39
|
-
// this event is handled by the application controller
|
|
40
|
-
// and redirects the user to the next step.
|
|
41
|
-
await Events.Config.Environment.add(env, setDefault);
|
|
42
|
-
}
|
|
43
|
-
else if (init.reason === 'first-run') {
|
|
44
|
-
// the store needs authentication. We redirect the user to the
|
|
45
|
-
// authentication screen.
|
|
46
|
-
await Events.Config.Session.set(`${EnvironmentsKey}.creating`, env);
|
|
47
|
-
Events.Navigation.Store.authenticate({ sameWindow: true });
|
|
48
|
-
}
|
|
49
|
-
else if (init.reason === 'add') {
|
|
50
|
-
// this is adding an environment from the configuration screen.
|
|
51
|
-
// We save the configuration in the store.
|
|
52
|
-
await Events.Config.Environment.add(env, setDefault);
|
|
53
|
-
}
|
|
54
|
-
// http://localhost:8487/v1/
|
|
55
|
-
// http://localhost:8489/v1/
|
|
56
|
-
},
|
|
57
|
-
readStoreInfo: async (baseUri) => {
|
|
58
|
-
const store = new HttpStore(baseUri);
|
|
59
|
-
return store.sdk.store.getInfo();
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
57
|
}
|
|
63
58
|
//# sourceMappingURL=WebStoreBindings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebStoreBindings.js","sourceRoot":"","sources":["../../../src/bindings/web/WebStoreBindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA8B,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAuB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"WebStoreBindings.js","sourceRoot":"","sources":["../../../src/bindings/web/WebStoreBindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA8B,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAuB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAOjD;;;OAGG;IACH,YAAY,GAAiB,EAAE,YAAoB;QACjD,KAAK,CAAC,GAAG,CAAC,CAAC;QAIb,gBAAW,GAAwB;YACjC,IAAI,EAAE,KAAK,EAAE,IAAiB,EAAiB,EAAE;gBAC/C,MAAM,GAAG,GAAuB;oBAC9B,GAAG,EAAE,MAAM,EAAE;oBACb,QAAQ,EAAE,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAkB;oBACrF,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,WAAW;oBAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,aAAa,EAAE,KAAK;iBACrB,CAAC;gBACF,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnE,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;oBAC/B,0EAA0E;oBAC1E,aAAa;oBACb,MAAM,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBACtC,uDAAuD;oBACvD,2CAA2C;oBAC3C,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;iBACtD;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;oBACtC,+DAA+D;oBAC/D,yBAAyB;oBACzB,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,WAAW,EAAE,GAAG,CAAC,CAAC;oBACpE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;iBAC3D;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;oBAChC,+DAA+D;oBAC/D,0CAA0C;oBAC1C,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;iBACtD;gBACD,4BAA4B;gBAC5B,4BAA4B;YAC9B,CAAC;YAED,aAAa,EAAE,KAAK,EAAE,OAAe,EAAyB,EAAE;gBAC9D,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;gBACrC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,CAAC;SACF,CAAA;QAxCC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CAwCF","sourcesContent":["import { uuidV4, IBackendInfo, IApplication } from '@api-client/core/build/browser.js';\nimport { Events } from '../../events/Events.js';\nimport { HttpStore } from '../../store/HttpStore.js';\nimport { EnvironmentSettings, StoreBindings } from '../base/StoreBindings.js';\nimport { IConfigEnvironment, IConfigInit } from '../../lib/config/Config.js';\nimport { EnvironmentsKey } from '../base/ConfigurationBindings.js';\n\n/**\n * API store bindings that handles communication with the store.\n */\nexport class WebStoreBindings extends StoreBindings {\n /**\n * The base URI of the \"local\" store to be used when the user chooses \n * the local store over the \n */\n storeBaseUri: string;\n\n /**\n * @param storeBaseUri The base URI of the \"local\" store to be used when the user chooses \n * the local store over the \n */\n constructor(app: IApplication, storeBaseUri: string) {\n super(app);\n this.storeBaseUri = storeBaseUri;\n }\n\n environment: EnvironmentSettings = {\n init: async (init: IConfigInit): Promise<void> => {\n const env: IConfigEnvironment = {\n key: uuidV4(),\n location: init.source === 'local-store' ? this.storeBaseUri : init.location as string,\n name: init.name || 'New store',\n source: init.source,\n authenticated: false,\n };\n const store = new HttpStore(env);\n const info = await store.sdk.store.getInfo();\n const setDefault = init.reason === 'first-run' || !!init.asDefault;\n if (info.mode === 'single-user') {\n // this store does not require authentication but does require setting up \n // a session.\n await store.getStoreSessionToken(env);\n // this event is handled by the application controller \n // and redirects the user to the next step.\n await Events.Config.Environment.add(env, setDefault);\n } else if (init.reason === 'first-run') {\n // the store needs authentication. We redirect the user to the \n // authentication screen.\n await Events.Config.Session.set(`${EnvironmentsKey}.creating`, env);\n Events.Navigation.Store.authenticate({ sameWindow: true })\n } else if (init.reason === 'add') {\n // this is adding an environment from the configuration screen.\n // We save the configuration in the store.\n await Events.Config.Environment.add(env, setDefault);\n }\n // http://localhost:8487/v1/\n // http://localhost:8489/v1/\n },\n\n readStoreInfo: async (baseUri: string): Promise<IBackendInfo> => {\n const store = new HttpStore(baseUri);\n return store.sdk.store.getInfo();\n }\n }\n}\n"]}
|
|
@@ -13,31 +13,13 @@ function cancelEvent(e) {
|
|
|
13
13
|
* @template S - The definition of the store passed to commands.
|
|
14
14
|
*/
|
|
15
15
|
export class ContextualMenu extends EventTarget {
|
|
16
|
-
|
|
17
|
-
#connectedValue = false;
|
|
16
|
+
#connectedValue;
|
|
18
17
|
/**
|
|
19
18
|
* @returns true when the menu is connected to the `workspace`.
|
|
20
19
|
*/
|
|
21
20
|
get connected() {
|
|
22
21
|
return this.#connectedValue;
|
|
23
22
|
}
|
|
24
|
-
/**
|
|
25
|
-
* The store initialized with this context menu. Passed to the lifecycle functions.
|
|
26
|
-
*/
|
|
27
|
-
store = new Map();
|
|
28
|
-
/**
|
|
29
|
-
* The root level menu commands
|
|
30
|
-
*/
|
|
31
|
-
commands = [];
|
|
32
|
-
/**
|
|
33
|
-
* An information about the trigger that initialized this menu.
|
|
34
|
-
*/
|
|
35
|
-
triggerInfo;
|
|
36
|
-
/**
|
|
37
|
-
* The Menu configuration options.
|
|
38
|
-
*/
|
|
39
|
-
options;
|
|
40
|
-
currentMenu;
|
|
41
23
|
/**
|
|
42
24
|
* @param workspace The root element that is the click handler
|
|
43
25
|
* @param opts The Menu configuration options.
|
|
@@ -45,6 +27,15 @@ export class ContextualMenu extends EventTarget {
|
|
|
45
27
|
constructor(workspace, opts = {}) {
|
|
46
28
|
super();
|
|
47
29
|
this.workspace = workspace;
|
|
30
|
+
this.#connectedValue = false;
|
|
31
|
+
/**
|
|
32
|
+
* The store initialized with this context menu. Passed to the lifecycle functions.
|
|
33
|
+
*/
|
|
34
|
+
this.store = new Map();
|
|
35
|
+
/**
|
|
36
|
+
* The root level menu commands
|
|
37
|
+
*/
|
|
38
|
+
this.commands = [];
|
|
48
39
|
this.options = { ...opts };
|
|
49
40
|
this.contextHandler = this.contextHandler.bind(this);
|
|
50
41
|
this.clickHandler = this.clickHandler.bind(this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextualMenu.js","sourceRoot":"","sources":["../../src/contextual-menu/ContextualMenu.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { MenuItem } from './MenuItem.js';\nimport { genId } from './IdGenerator.js';\nimport { ICommandBase, IContextMenuCommand, IContextMenuExecuteDetail, ICustomMenuEventDetail, IMenuOptions, iPoint, ITriggerInfo, ObjectLikeMap } from './types.js';\nimport ContextMenuElement from './ContextualMenuElement.js';\nimport '../define/contextual-menu/contextual-menu.js';\n\nfunction cancelEvent(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n}\n\n/**\n * The base class for the context menu. It can be used as is but in some specific cases\n * you may want to extend this class to be able to find command target accurately.\n * \n * @template S - The definition of the store passed to commands.\n */\nexport class ContextualMenu extends EventTarget {\n #connectedValue = false;\n\n /**\n * @returns true when the menu is connected to the `workspace`.\n */\n get connected(): boolean {\n return this.#connectedValue;\n }\n\n /** \n * The store initialized with this context menu. Passed to the lifecycle functions.\n */\n store = new Map<string, unknown>();\n\n /** \n * The root level menu commands\n */\n commands: MenuItem[] = [];\n\n /**\n * An information about the trigger that initialized this menu.\n */\n triggerInfo?: ITriggerInfo;\n\n /**\n * The Menu configuration options.\n */\n options: IMenuOptions;\n\n currentMenu?: ContextMenuElement;\n\n /**\n * @param workspace The root element that is the click handler\n * @param opts The Menu configuration options.\n */\n constructor(public workspace: HTMLElement, opts: IMenuOptions = {}) {\n super();\n \n this.options = { ...opts };\n\n this.contextHandler = this.contextHandler.bind(this);\n this.clickHandler = this.clickHandler.bind(this);\n this.keydownHandler = this.keydownHandler.bind(this);\n this.customMenuHandler = this.customMenuHandler.bind(this);\n this.menuTriggerHandler = this.menuTriggerHandler.bind(this);\n }\n\n /**\n * Starts listening on user events\n */\n connect(): void {\n this.workspace.addEventListener('contextmenu', this.contextHandler);\n this.workspace.addEventListener('custommenu', this.customMenuHandler as EventListener);\n window.addEventListener('click', this.clickHandler);\n window.addEventListener('keydown', this.keydownHandler);\n this.#connectedValue = true;\n }\n\n /**\n * Cleans up the listeners\n */\n disconnect(): void {\n this.workspace.removeEventListener('contextmenu', this.contextHandler);\n this.workspace.removeEventListener('custommenu', this.customMenuHandler as EventListener);\n window.removeEventListener('click', this.clickHandler);\n window.removeEventListener('keydown', this.keydownHandler);\n this.#connectedValue = false;\n }\n\n /**\n * Reads {x,y} point of the click from the pointer event.\n * \n * Override this method to customize position reading.\n */\n readTargetClickPosition(e: MouseEvent): iPoint {\n return {\n x: e.clientX,\n y: e.clientY,\n }\n }\n\n /**\n * Override this method to customize finding event click target.\n * @param e Finds the click target from the event\n */\n findTarget(e: MouseEvent): HTMLElement | SVGElement | undefined {\n return e.target as HTMLElement | SVGElement | undefined;\n }\n\n /**\n * Maps an element to the target name used by the commands.\n * By default it returns `root` when the click target element is the `workspace` or\n * a combination of element name and list of all classes otherwise.\n * \n * Override this method to customize target name reading.\n *\n * @param element The context click target\n * @returns The target name.\n */\n elementToTarget(element: HTMLElement | SVGElement): string | undefined {\n if (element === this.workspace) {\n return 'root';\n }\n if (!element.localName) {\n return undefined;\n }\n let name = element.localName;\n const cls = Array.from(element.classList).join('.');\n if (cls) {\n name += `.${cls}`;\n }\n return name;\n }\n\n /**\n * Handler for the context menu event.\n */\n protected contextHandler(e: MouseEvent): void {\n // if (!this.options.cancelNativeWhenHandled) {\n // cancelEvent(e);\n // }\n this.destroy();\n const target = this.findTarget(e);\n if (!target) {\n return;\n }\n const name = this.elementToTarget(target);\n if (!name) {\n return;\n }\n // since the context menu has fixed position it doesn't matter what the context \n // is as the menu is rendered over all elements.\n // The `readTargetClickPosition()` is used to determine click target for the commands.\n const clickPoint = {\n x: e.clientX,\n y: e.clientY,\n }\n const targetPoint = this.readTargetClickPosition(e);\n const rendered = this.build(target, name, clickPoint, targetPoint);\n if (rendered) {\n cancelEvent(e);\n } else if (this.options.cancelNativeWhenHandled) {\n cancelEvent(e);\n }\n }\n\n /**\n * A handler for the `custommenu` event handler to trigger the menu without the user interaction.\n */\n protected customMenuHandler(e: CustomEvent<ICustomMenuEventDetail>): void {\n cancelEvent(e);\n const { name, x = 0, y = 0, actionTarget = this.workspace, clickEvent, customData } = e.detail;\n const clickPoint = {\n x,\n y,\n };\n const targetPoint = clickEvent ? this.readTargetClickPosition(clickEvent) : clickPoint;\n this.build(actionTarget, name, clickPoint, targetPoint, customData);\n }\n\n /**\n * Handles the click event on the document to close the menu is the click\n * is outside the menu.\n * @param {MouseEvent} e\n */\n protected clickHandler(e: MouseEvent): void {\n if (!this.currentMenu || e.defaultPrevented) {\n return;\n }\n const elm = e.target as Element;\n const inside = this.currentMenu.contains(elm);\n if (!inside) {\n this.destroy();\n }\n }\n\n /**\n * Closes the menu when ESC is pressed\n */\n protected keydownHandler(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.currentMenu) {\n this.destroy();\n }\n }\n\n /**\n * Register a list of commands to be rendered in the menu when triggered.\n * This overrides previously registered commands.\n */\n registerCommands(commands: ICommandBase[]): void {\n if (!Array.isArray(commands) || !commands.length) {\n return;\n }\n this.commands = this.prepareCommands(commands);\n }\n\n /**\n * Adds a single command to the menu.\n */\n addCommand(command: ICommandBase): void {\n if (!this.commands) {\n this.commands = [];\n }\n const item = this.prepareCommands([command])[0];\n this.commands.push(item);\n }\n\n /**\n * Prepares incoming commands for the internal use.\n * @param commands - The commands to process.\n */\n protected prepareCommands(commands: ICommandBase[]): MenuItem[] {\n const result: MenuItem[] = [];\n commands.forEach((item) => {\n if (!item) {\n return;\n }\n const { type = 'normal' } = item;\n switch (type) {\n case 'separator': result.push(new MenuItem(item)); break;\n case 'label': result.push(new MenuItem(item)); break;\n case 'normal':\n case 'radio':\n {\n const normalized = this.normalizeMenuItem(item as IContextMenuCommand);\n result.push(new MenuItem(normalized));\n }\n break;\n default:\n }\n });\n return result;\n }\n\n protected normalizeMenuItem(item: IContextMenuCommand): IContextMenuCommand {\n const cp = { ...item };\n if (!cp.id) {\n cp.id = genId();\n }\n if (Array.isArray(cp.children) && cp.children.length) {\n cp.children = this.prepareCommands(cp.children);\n } else if (cp.children) {\n cp.children = undefined;\n }\n return cp;\n }\n\n /**\n * Builds the menu for the target.\n *\n * @param target The element that triggered the menu\n * @param name The `target` name declared in the commands.\n * @param placementPoint The workspace position of where to place the menu.\n * @param targetPoint The workspace position of the click target\n * @param customData Any data to set on the instance to pass to the `execute` and `enabled` functions.\n */\n build(target: HTMLElement | SVGElement, name: string, placementPoint: iPoint, targetPoint: iPoint, customData?: unknown): boolean {\n this.triggerInfo = undefined;\n const commands = this.listCommands(name, target);\n if (!commands.length) {\n return false;\n }\n this.triggerInfo = {\n point: targetPoint,\n customData,\n target,\n };\n this.render(placementPoint, commands);\n target.setAttribute('active', '');\n return true;\n }\n\n /**\n * @param placementPoint The workspace position of where to place the menu.\n * @param commands The commands render\n */\n render(placementPoint: iPoint, commands: MenuItem[]): void {\n const { workspace } = this;\n const menu = document.createElement('contextual-menu');\n menu.store = this.store;\n menu.target = this.triggerInfo?.target;\n menu.customData = this.triggerInfo?.customData;\n menu.workspace = workspace;\n menu.classList.add('context-menu');\n menu.commands = commands;\n menu.style.top = `${placementPoint.y}px`;\n menu.style.left = `${placementPoint.x}px`;\n menu.setAttribute('tabindex', '0');\n\n if (workspace.shadowRoot) {\n workspace.shadowRoot.append(menu);\n } else {\n this.workspace.append(menu);\n }\n this.currentMenu = menu;\n menu.focus();\n menu.addEventListener('trigger', this.menuTriggerHandler as EventListener);\n }\n\n /**\n * Lists all commands that matches the target.\n *\n * @param targetName The build target name\n * @param targetElement The element that triggered the menu\n */\n listCommands(targetName: string, targetElement: HTMLElement | SVGElement): MenuItem[] {\n const { commands = [] } = this;\n const result: MenuItem[] = [];\n const filter = ['all', targetName];\n commands.forEach((cmd) => {\n if (Array.isArray(cmd.target)) {\n const hasTarget = cmd.target.some((item) => filter.includes(item));\n if (hasTarget) {\n result.push(cmd);\n }\n } else if (filter.includes(cmd.target || '')) {\n result.push(cmd);\n } else {\n try {\n if (targetElement.matches(cmd.target || '')) {\n result.push(cmd);\n }\n } catch (e) {\n // \n }\n }\n });\n return result;\n }\n\n /**\n * Removes the currently rendered menu.\n */\n destroy(): void {\n if (!this.currentMenu) {\n return;\n }\n (this.triggerInfo as ITriggerInfo).target.removeAttribute('active');\n this.triggerInfo = undefined;\n const { workspace } = this;\n if (workspace.shadowRoot) {\n workspace.shadowRoot.removeChild(this.currentMenu);\n } else {\n workspace.removeChild(this.currentMenu);\n }\n this.currentMenu.removeEventListener('trigger', this.menuTriggerHandler as EventListener);\n this.currentMenu = undefined;\n }\n\n /**\n * Handler for the `trigger` event dispatched by the menu\n */\n protected menuTriggerHandler(e: CustomEvent): void {\n const { item, command, parent } = e.detail;\n const cmd = command as MenuItem;\n const parentCommand = parent as MenuItem;\n const { triggerInfo, workspace, store } = this;\n const { point, target, customData } = triggerInfo as ITriggerInfo;\n this.destroy();\n if (parentCommand && parentCommand.execute && !cmd.execute) {\n parentCommand.trigger(cmd, store as unknown as ObjectLikeMap<object>, target, workspace, point, customData, item);\n } else if (cmd.execute) {\n cmd.trigger(cmd, store as unknown as ObjectLikeMap<object>, target, workspace, point, customData);\n } else {\n const detail: IContextMenuExecuteDetail = {\n id: cmd.id,\n store: store as unknown as ObjectLikeMap<object>,\n target,\n root: workspace,\n clickPoint: point,\n customData,\n selectedSubcommand: item,\n item: cmd,\n };\n this.dispatchEvent(new CustomEvent('execute', {\n detail,\n }));\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ContextualMenu.js","sourceRoot":"","sources":["../../src/contextual-menu/ContextualMenu.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { MenuItem } from './MenuItem.js';\nimport { genId } from './IdGenerator.js';\nimport { ICommandBase, IContextMenuCommand, IContextMenuExecuteDetail, ICustomMenuEventDetail, IMenuOptions, iPoint, ITriggerInfo, ObjectLikeMap } from './types.js';\nimport ContextMenuElement from './ContextualMenuElement.js';\nimport '../define/contextual-menu/contextual-menu.js';\n\nfunction cancelEvent(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n}\n\n/**\n * The base class for the context menu. It can be used as is but in some specific cases\n * you may want to extend this class to be able to find command target accurately.\n * \n * @template S - The definition of the store passed to commands.\n */\nexport class ContextualMenu extends EventTarget {\n #connectedValue = false;\n\n /**\n * @returns true when the menu is connected to the `workspace`.\n */\n get connected(): boolean {\n return this.#connectedValue;\n }\n\n /** \n * The store initialized with this context menu. Passed to the lifecycle functions.\n */\n store = new Map<string, unknown>();\n\n /** \n * The root level menu commands\n */\n commands: MenuItem[] = [];\n\n /**\n * An information about the trigger that initialized this menu.\n */\n triggerInfo?: ITriggerInfo;\n\n /**\n * The Menu configuration options.\n */\n options: IMenuOptions;\n\n currentMenu?: ContextMenuElement;\n\n /**\n * @param workspace The root element that is the click handler\n * @param opts The Menu configuration options.\n */\n constructor(public workspace: HTMLElement, opts: IMenuOptions = {}) {\n super();\n \n this.options = { ...opts };\n\n this.contextHandler = this.contextHandler.bind(this);\n this.clickHandler = this.clickHandler.bind(this);\n this.keydownHandler = this.keydownHandler.bind(this);\n this.customMenuHandler = this.customMenuHandler.bind(this);\n this.menuTriggerHandler = this.menuTriggerHandler.bind(this);\n }\n\n /**\n * Starts listening on user events\n */\n connect(): void {\n this.workspace.addEventListener('contextmenu', this.contextHandler);\n this.workspace.addEventListener('custommenu', this.customMenuHandler as EventListener);\n window.addEventListener('click', this.clickHandler);\n window.addEventListener('keydown', this.keydownHandler);\n this.#connectedValue = true;\n }\n\n /**\n * Cleans up the listeners\n */\n disconnect(): void {\n this.workspace.removeEventListener('contextmenu', this.contextHandler);\n this.workspace.removeEventListener('custommenu', this.customMenuHandler as EventListener);\n window.removeEventListener('click', this.clickHandler);\n window.removeEventListener('keydown', this.keydownHandler);\n this.#connectedValue = false;\n }\n\n /**\n * Reads {x,y} point of the click from the pointer event.\n * \n * Override this method to customize position reading.\n */\n readTargetClickPosition(e: MouseEvent): iPoint {\n return {\n x: e.clientX,\n y: e.clientY,\n }\n }\n\n /**\n * Override this method to customize finding event click target.\n * @param e Finds the click target from the event\n */\n findTarget(e: MouseEvent): HTMLElement | SVGElement | undefined {\n return e.target as HTMLElement | SVGElement | undefined;\n }\n\n /**\n * Maps an element to the target name used by the commands.\n * By default it returns `root` when the click target element is the `workspace` or\n * a combination of element name and list of all classes otherwise.\n * \n * Override this method to customize target name reading.\n *\n * @param element The context click target\n * @returns The target name.\n */\n elementToTarget(element: HTMLElement | SVGElement): string | undefined {\n if (element === this.workspace) {\n return 'root';\n }\n if (!element.localName) {\n return undefined;\n }\n let name = element.localName;\n const cls = Array.from(element.classList).join('.');\n if (cls) {\n name += `.${cls}`;\n }\n return name;\n }\n\n /**\n * Handler for the context menu event.\n */\n protected contextHandler(e: MouseEvent): void {\n // if (!this.options.cancelNativeWhenHandled) {\n // cancelEvent(e);\n // }\n this.destroy();\n const target = this.findTarget(e);\n if (!target) {\n return;\n }\n const name = this.elementToTarget(target);\n if (!name) {\n return;\n }\n // since the context menu has fixed position it doesn't matter what the context \n // is as the menu is rendered over all elements.\n // The `readTargetClickPosition()` is used to determine click target for the commands.\n const clickPoint = {\n x: e.clientX,\n y: e.clientY,\n }\n const targetPoint = this.readTargetClickPosition(e);\n const rendered = this.build(target, name, clickPoint, targetPoint);\n if (rendered) {\n cancelEvent(e);\n } else if (this.options.cancelNativeWhenHandled) {\n cancelEvent(e);\n }\n }\n\n /**\n * A handler for the `custommenu` event handler to trigger the menu without the user interaction.\n */\n protected customMenuHandler(e: CustomEvent<ICustomMenuEventDetail>): void {\n cancelEvent(e);\n const { name, x = 0, y = 0, actionTarget = this.workspace, clickEvent, customData } = e.detail;\n const clickPoint = {\n x,\n y,\n };\n const targetPoint = clickEvent ? this.readTargetClickPosition(clickEvent) : clickPoint;\n this.build(actionTarget, name, clickPoint, targetPoint, customData);\n }\n\n /**\n * Handles the click event on the document to close the menu is the click\n * is outside the menu.\n * @param {MouseEvent} e\n */\n protected clickHandler(e: MouseEvent): void {\n if (!this.currentMenu || e.defaultPrevented) {\n return;\n }\n const elm = e.target as Element;\n const inside = this.currentMenu.contains(elm);\n if (!inside) {\n this.destroy();\n }\n }\n\n /**\n * Closes the menu when ESC is pressed\n */\n protected keydownHandler(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.currentMenu) {\n this.destroy();\n }\n }\n\n /**\n * Register a list of commands to be rendered in the menu when triggered.\n * This overrides previously registered commands.\n */\n registerCommands(commands: ICommandBase[]): void {\n if (!Array.isArray(commands) || !commands.length) {\n return;\n }\n this.commands = this.prepareCommands(commands);\n }\n\n /**\n * Adds a single command to the menu.\n */\n addCommand(command: ICommandBase): void {\n if (!this.commands) {\n this.commands = [];\n }\n const item = this.prepareCommands([command])[0];\n this.commands.push(item);\n }\n\n /**\n * Prepares incoming commands for the internal use.\n * @param commands - The commands to process.\n */\n protected prepareCommands(commands: ICommandBase[]): MenuItem[] {\n const result: MenuItem[] = [];\n commands.forEach((item) => {\n if (!item) {\n return;\n }\n const { type = 'normal' } = item;\n switch (type) {\n case 'separator': result.push(new MenuItem(item)); break;\n case 'label': result.push(new MenuItem(item)); break;\n case 'normal':\n case 'radio':\n {\n const normalized = this.normalizeMenuItem(item as IContextMenuCommand);\n result.push(new MenuItem(normalized));\n }\n break;\n default:\n }\n });\n return result;\n }\n\n protected normalizeMenuItem(item: IContextMenuCommand): IContextMenuCommand {\n const cp = { ...item };\n if (!cp.id) {\n cp.id = genId();\n }\n if (Array.isArray(cp.children) && cp.children.length) {\n cp.children = this.prepareCommands(cp.children);\n } else if (cp.children) {\n cp.children = undefined;\n }\n return cp;\n }\n\n /**\n * Builds the menu for the target.\n *\n * @param target The element that triggered the menu\n * @param name The `target` name declared in the commands.\n * @param placementPoint The workspace position of where to place the menu.\n * @param targetPoint The workspace position of the click target\n * @param customData Any data to set on the instance to pass to the `execute` and `enabled` functions.\n */\n build(target: HTMLElement | SVGElement, name: string, placementPoint: iPoint, targetPoint: iPoint, customData?: unknown): boolean {\n this.triggerInfo = undefined;\n const commands = this.listCommands(name, target);\n if (!commands.length) {\n return false;\n }\n this.triggerInfo = {\n point: targetPoint,\n customData,\n target,\n };\n this.render(placementPoint, commands);\n target.setAttribute('active', '');\n return true;\n }\n\n /**\n * @param placementPoint The workspace position of where to place the menu.\n * @param commands The commands render\n */\n render(placementPoint: iPoint, commands: MenuItem[]): void {\n const { workspace } = this;\n const menu = document.createElement('contextual-menu');\n menu.store = this.store;\n menu.target = this.triggerInfo?.target;\n menu.customData = this.triggerInfo?.customData;\n menu.workspace = workspace;\n menu.classList.add('context-menu');\n menu.commands = commands;\n menu.style.top = `${placementPoint.y}px`;\n menu.style.left = `${placementPoint.x}px`;\n menu.setAttribute('tabindex', '0');\n\n if (workspace.shadowRoot) {\n workspace.shadowRoot.append(menu);\n } else {\n this.workspace.append(menu);\n }\n this.currentMenu = menu;\n menu.focus();\n menu.addEventListener('trigger', this.menuTriggerHandler as EventListener);\n }\n\n /**\n * Lists all commands that matches the target.\n *\n * @param targetName The build target name\n * @param targetElement The element that triggered the menu\n */\n listCommands(targetName: string, targetElement: HTMLElement | SVGElement): MenuItem[] {\n const { commands = [] } = this;\n const result: MenuItem[] = [];\n const filter = ['all', targetName];\n commands.forEach((cmd) => {\n if (Array.isArray(cmd.target)) {\n const hasTarget = cmd.target.some((item) => filter.includes(item));\n if (hasTarget) {\n result.push(cmd);\n }\n } else if (filter.includes(cmd.target || '')) {\n result.push(cmd);\n } else {\n try {\n if (targetElement.matches(cmd.target || '')) {\n result.push(cmd);\n }\n } catch (e) {\n // \n }\n }\n });\n return result;\n }\n\n /**\n * Removes the currently rendered menu.\n */\n destroy(): void {\n if (!this.currentMenu) {\n return;\n }\n (this.triggerInfo as ITriggerInfo).target.removeAttribute('active');\n this.triggerInfo = undefined;\n const { workspace } = this;\n if (workspace.shadowRoot) {\n workspace.shadowRoot.removeChild(this.currentMenu);\n } else {\n workspace.removeChild(this.currentMenu);\n }\n this.currentMenu.removeEventListener('trigger', this.menuTriggerHandler as EventListener);\n this.currentMenu = undefined;\n }\n\n /**\n * Handler for the `trigger` event dispatched by the menu\n */\n protected menuTriggerHandler(e: CustomEvent): void {\n const { item, command, parent } = e.detail;\n const cmd = command as MenuItem;\n const parentCommand = parent as MenuItem;\n const { triggerInfo, workspace, store } = this;\n const { point, target, customData } = triggerInfo as ITriggerInfo;\n this.destroy();\n if (parentCommand && parentCommand.execute && !cmd.execute) {\n parentCommand.trigger(cmd, store as unknown as ObjectLikeMap<object>, target, workspace, point, customData, item);\n } else if (cmd.execute) {\n cmd.trigger(cmd, store as unknown as ObjectLikeMap<object>, target, workspace, point, customData);\n } else {\n const detail: IContextMenuExecuteDetail = {\n id: cmd.id,\n store: store as unknown as ObjectLikeMap<object>,\n target,\n root: workspace,\n clickPoint: point,\n customData,\n selectedSubcommand: item,\n item: cmd,\n };\n this.dispatchEvent(new CustomEvent('execute', {\n detail,\n }));\n }\n }\n}\n"]}
|
|
@@ -16,7 +16,6 @@ export const check = iconWrapper(svg `<path d="M0 0h24v24H0V0z" fill="none"/><pa
|
|
|
16
16
|
* @fires trigger - when a command is triggered
|
|
17
17
|
*/
|
|
18
18
|
export default class ContextualMenuElement extends UiList {
|
|
19
|
-
_items;
|
|
20
19
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
21
20
|
// @ts-ignore
|
|
22
21
|
set items(value) {
|
|
@@ -25,39 +24,12 @@ export default class ContextualMenuElement extends UiList {
|
|
|
25
24
|
get items() {
|
|
26
25
|
return Array.from(this._items);
|
|
27
26
|
}
|
|
28
|
-
/**
|
|
29
|
-
* The list of commands to render.
|
|
30
|
-
*/
|
|
31
|
-
commands;
|
|
32
|
-
/**
|
|
33
|
-
* The commands store.
|
|
34
|
-
*/
|
|
35
|
-
store;
|
|
36
|
-
/**
|
|
37
|
-
* The menu triggering click target
|
|
38
|
-
*/
|
|
39
|
-
target;
|
|
40
|
-
/**
|
|
41
|
-
* The current workspace
|
|
42
|
-
*/
|
|
43
|
-
workspace;
|
|
44
|
-
/**
|
|
45
|
-
* Any arbitrary data to pass to the lifecycle functions.
|
|
46
|
-
*/
|
|
47
|
-
customData;
|
|
48
|
-
/**
|
|
49
|
-
* The timeout after which the sub menu become visible or is removed from the menu.
|
|
50
|
-
*/
|
|
51
|
-
subMenuTimeout = 300;
|
|
52
|
-
/**
|
|
53
|
-
* The id of the parent command, in case when this menu is a sub-menu.
|
|
54
|
-
*/
|
|
55
|
-
parentCommand;
|
|
56
|
-
nestedIdValue;
|
|
57
|
-
nestedTimeout;
|
|
58
|
-
removingTimeout;
|
|
59
27
|
constructor() {
|
|
60
28
|
super();
|
|
29
|
+
/**
|
|
30
|
+
* The timeout after which the sub menu become visible or is removed from the menu.
|
|
31
|
+
*/
|
|
32
|
+
this.subMenuTimeout = 300;
|
|
61
33
|
this.subTriggerHandler = this.subTriggerHandler.bind(this);
|
|
62
34
|
this.addEventListener('mousemove', this.mouseoverHandler.bind(this));
|
|
63
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextualMenuElement.js","sourceRoot":"","sources":["../../src/contextual-menu/ContextualMenuElement.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { html, svg, SVGTemplateResult, TemplateResult } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { property, queryAll } from 'lit/decorators.js';\nimport { iconWrapper } from '../ui/icons/Icons.js';\nimport { MenuItem } from './MenuItem.js';\nimport UiListItem from '../ui/list/UiListItem.js';\nimport { ElementPositioning } from '../ui/lib/ElementPositioning.js';\nimport UiList from '../ui/list/UiList.js';\nimport '../define/ui/ui-list-item.js';\nimport '../define/ui/ui-divider.js';\nimport { ObjectLikeMap } from './types.js';\n\nexport const arrowRight = iconWrapper(svg`<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M10 17l5-5-5-5v10z\"/>`);\nexport const check = iconWrapper(svg`<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/>`);\n\ninterface IMenuFocusOptions extends FocusOptions {\n /**\n * When set it focuses on the first menu item.\n */\n selectFirst?: boolean;\n}\n\ninterface CreateNestedOptions {\n /**\n * When using keyboard navigation.\n * When set it focuses on the first created event.\n */\n keyboard?: boolean;\n}\n\n/**\n * @fires close - when the menu closes.\n * @fires trigger - when a command is triggered\n */\nexport default class ContextualMenuElement extends UiList {\n @queryAll('ui-list-item')\n _items!: NodeListOf<UiListItem>;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n override set items(value: UiListItem[]) {\n // \n }\n\n override get items(): UiListItem[] {\n return Array.from(this._items);\n }\n\n /** \n * The list of commands to render.\n */\n @property({ type: Array }) commands?: MenuItem[];\n \n /** \n * The commands store.\n */\n @property({ type: Object }) store?: Map<string, unknown>;\n\n /** \n * The menu triggering click target\n */\n @property({ type: Object }) target?: HTMLElement | SVGElement;\n\n /** \n * The current workspace\n */\n @property({ type: Object }) workspace?: HTMLElement;\n\n /** \n * Any arbitrary data to pass to the lifecycle functions.\n */\n @property() customData?: unknown;\n\n /** \n * The timeout after which the sub menu become visible or is removed from the menu.\n */\n @property({ type: Number }) subMenuTimeout = 300;\n\n /** \n * The id of the parent command, in case when this menu is a sub-menu.\n */\n @property({ type: String }) parentCommand?: string;\n \n protected nestedIdValue?: string;\n\n protected nestedTimeout?: number;\n\n protected removingTimeout?: number;\n \n constructor() {\n super();\n this.subTriggerHandler = this.subTriggerHandler.bind(this);\n\n this.addEventListener('mousemove', this.mouseoverHandler.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', \"menu\");\n }\n if (!this.hasAttribute('aria-label')) {\n this.setAttribute('aria-label', \"Context menu\");\n }\n }\n\n close(): void {\n this.dispatchEvent(new Event('close'));\n }\n\n /**\n * Triggest nested menu when hovering an item that has a nested menu.\n */\n protected mouseoverHandler(e: MouseEvent): void {\n if (e.defaultPrevented) {\n return;\n }\n e.preventDefault();\n const path = e.composedPath();\n const target = path.find(i => (i as Element).localName === 'ui-list-item');\n if (!target) {\n return;\n }\n const { nested, cmd } = (target as HTMLElement).dataset;\n if (nested === 'true') {\n this.buildNested(cmd as string);\n } else if (this.nestedIdValue) {\n this.removeNested();\n }\n }\n\n /**\n * Builds a nested menu for a command.\n * @param id The id of the command\n */\n protected buildNested(id: string): void {\n if (!id || id === this.nestedIdValue) {\n return;\n }\n if (this.nestedIdValue) {\n this.clearNested();\n }\n const cmd = this.commands?.find((item) => item.id === id);\n if (!cmd || !cmd.hasChildren) {\n return;\n }\n this.nestedIdValue = id;\n if (this.nestedTimeout) {\n clearTimeout(this.nestedTimeout);\n }\n this.nestedTimeout = setTimeout(() => {\n this.nestedTimeout = undefined;\n this.createNested();\n }, this.subMenuTimeout) as unknown as number;\n }\n\n /**\n * Adds the nested menu to the local DOM.\n */\n protected createNested(opts: CreateNestedOptions = {}): void {\n const id = this.nestedIdValue;\n if (!id) {\n return;\n }\n const ref = ((this.shadowRoot as ShadowRoot).querySelector(`[data-cmd=\"${id}\"]`)) as HTMLElement;\n // const box = ref.getBoundingClientRect();\n const cmd = this.commands?.find((item) => item.id === id);\n if (!cmd) {\n return;\n }\n const { children } = cmd;\n const menu = document.createElement('contextual-menu');\n // TODO: create a type definition for processed internally menu items\n menu.commands = children as MenuItem[];\n menu.store = this.store;\n menu.target = this.target;\n menu.workspace = this.workspace;\n menu.customData = this.customData;\n const styles = ElementPositioning.positionOverlay(menu, ref, {\n horizontal: 'left',\n vertical: 'top',\n noOverlap: true,\n verticalOffset: -56,\n horizontalOffset: -4,\n });\n if (styles.top) {\n menu.style.top = styles.top;\n }\n if (styles.left) {\n menu.style.left = styles.left;\n }\n\n menu.parentCommand = id;\n menu.addEventListener('close', this.handleCloseNested.bind(this));\n menu.addEventListener('trigger', this.subTriggerHandler as EventListener);\n this.shadowRoot?.append(menu);\n if (opts.keyboard) {\n menu.focus({ selectFirst: true });\n } else {\n menu.focus();\n }\n }\n\n protected handleCloseNested(): void {\n this.clearNested();\n }\n\n /**\n * Triggers the remove nested menu action.\n */\n protected removeNested(): void {\n if (this.removingTimeout) {\n return;\n }\n this.removingTimeout = setTimeout(() => {\n this.removingTimeout = undefined;\n this.clearNested();\n }, this.subMenuTimeout) as unknown as number;\n }\n\n override focus(options?: IMenuFocusOptions): void {\n const { activeListItem } = this;\n if (activeListItem) {\n activeListItem.focus(options);\n } else if (options && options.selectFirst) {\n this.focusAfterUpdate();\n } else {\n super.focus(options);\n }\n }\n\n /**\n * Waits for the update to complete and focuses on the first item\n * or self when there are no items.\n */\n protected async focusAfterUpdate(options?: IMenuFocusOptions): Promise<void> {\n await this.updateComplete;\n if (this.items.length) {\n this.activeListItem = this.items[0] as UiListItem;\n this.activateListItem(this.activeListItem);\n } else {\n super.focus(options);\n }\n }\n\n /**\n * Removes the nested menu from the DOM.\n */\n protected clearNested(): void {\n if (!this.nestedIdValue) {\n return;\n }\n this.nestedIdValue = undefined;\n const menu = this.shadowRoot?.querySelector('contextual-menu');\n if (menu) {\n this.shadowRoot?.removeChild(menu);\n }\n this.focus();\n }\n\n /**\n * Opens the menu when the current focused item has a sub menu.\n */\n protected moveRight(): void {\n const { activeListItem } = this;\n if (!activeListItem) {\n return;\n }\n const { nested, cmd } = activeListItem.dataset;\n if (nested === 'true') {\n this.clearNested();\n this.nestedIdValue = cmd;\n this.createNested({ keyboard: true });\n }\n }\n\n /**\n * Closes the menu when this is a sub menu.\n */\n protected moveLeft(): void {\n if (!this.parentCommand) {\n return;\n }\n this.close();\n }\n\n /**\n * A handler for the sub-menu `trigger` event.\n * Retargets the event to the parent.\n * It adds `parent` to the detail, when the parent (currently selected command) has\n * the execute function.\n */\n protected subTriggerHandler(e: CustomEvent): void {\n if (!e.detail.parent) {\n const id = this.nestedIdValue;\n const cmd = this.commands?.find((item) => item.id === id);\n if (!cmd) {\n return;\n }\n if (typeof cmd.execute === 'function') {\n e.detail.parent = cmd;\n }\n }\n this.dispatchEvent(new CustomEvent('trigger', {\n detail: e.detail,\n }));\n }\n\n override handleKeydown(e: KeyboardEvent): void {\n e.stopPropagation();\n e.stopImmediatePropagation();\n super.handleKeydown(e);\n if (e.code === 'Escape' || e.code === 'Tab') {\n this.close();\n } else if (['Enter', 'Space'].includes(e.code)) {\n e.preventDefault();\n this.activateFromEvent(e);\n } else if (e.code === 'ArrowRight') {\n e.preventDefault();\n this.moveRight();\n } else if (e.code === 'ArrowLeft') {\n e.preventDefault();\n this.moveLeft();\n }\n }\n\n protected override activateFromEvent(e: Event): void {\n const path = e.composedPath();\n const item = path.find(i => (i as Element).localName === 'ui-list-item');\n if (!item) {\n return;\n }\n this.activate((item as HTMLElement).dataset.cmd);\n }\n\n protected activate(id?: string): void {\n const { commands } = this;\n if (!id || !commands) {\n return;\n }\n const index = commands.findIndex((item) => item.id === id);\n const cmd = commands[index];\n if (!cmd) {\n return;\n }\n if (cmd.hasChildren) {\n this.buildNested(id);\n } else {\n const detail = {\n command: cmd,\n item: index,\n };\n this.dispatchEvent(new CustomEvent('trigger', {\n detail,\n }));\n }\n }\n\n override render(): TemplateResult {\n const { commands } = this;\n if (!Array.isArray(commands) || !commands.length) {\n return html``;\n }\n return html`\n ${commands.map((item) => this.renderMenuItem(item))}\n `;\n }\n\n protected renderMenuItem(item: MenuItem): TemplateResult | string {\n switch (item.type) {\n case 'normal': return this.renderMenuEntry(item);\n case 'separator': return this.renderSeparator(item);\n case 'label': return this.renderLabel(item);\n case 'radio': return this.renderRadioEntry(item);\n default: return '';\n }\n }\n\n protected renderSeparator(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n 'menu-divider': true,\n hidden: !visible,\n };\n return html`\n <ui-divider type=\"inset\" class=\"${classMap(classes)}\" data-cmd=\"${item.id}\"></ui-divider>\n `;\n }\n\n protected renderLabel(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n 'menu-section-label': true,\n hidden: !visible,\n };\n return html`\n <div class=\"${classMap(classes)}\" data-cmd=\"${item.id}\">${item.label}</div>\n `;\n }\n\n protected renderMenuEntry(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n item.beforeRenderCallback(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const enabled = item.isEnabled(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n item: true,\n disabled: !enabled,\n hidden: !visible,\n };\n const { title, icon, label, id, hasChildren } = item;\n return html`\n <ui-list-item \n role=\"menuitem\" \n class=\"${classMap(classes)}\" \n ?disabled=\"${!visible || !enabled}\"\n aria-hidden=\"${!visible}\"\n title=\"${ifDefined(title)}\"\n data-cmd=\"${id}\"\n data-nested=\"${hasChildren}\"\n aria-haspopup=\"${hasChildren}\"\n >\n ${this.renderMenuEntryIcon(icon)}\n <span class=\"menu-label\">${label}</span>\n ${hasChildren ? this.renderChildIcon() : ''}\n </ui-list-item>\n `;\n }\n\n protected renderRadioEntry(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n item.beforeRenderCallback(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const enabled = item.isEnabled(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const checked = item.isChecked(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n item: true,\n disabled: !enabled,\n hidden: !visible,\n };\n const { title, label, id, hasChildren } = item;\n return html`\n <ui-list-item\n role=\"menuitem\"\n class=\"${classMap(classes)}\" \n ?disabled=\"${!visible || !enabled}\"\n aria-hidden=\"${!visible}\"\n title=\"${ifDefined(title)}\"\n data-cmd=\"${id}\"\n data-nested=\"${hasChildren}\"\n data-type=\"radio\"\n aria-haspopup=\"${hasChildren}\"\n >\n ${this.renderCheckMark(checked)}\n <span class=\"menu-label\">${label}</span>\n ${hasChildren ? this.renderChildIcon() : ''}\n </ui-list-item>\n `;\n }\n\n /**\n * @param icon The icon is not required.\n */\n protected renderMenuEntryIcon(icon?: SVGTemplateResult): TemplateResult {\n if (!icon) {\n return html``;\n }\n return html`\n <div class=\"menu-icon\" slot=\"start\">${icon}</div>\n `;\n }\n\n /**\n * @return The template for sub-menu icon\n */\n protected renderChildIcon(): TemplateResult {\n return html`\n <div class=\"sub-menu-icon\" slot=\"end\">${arrowRight}</div>\n `;\n }\n\n /**\n * @return The template for the menu entry checked mark.\n */\n protected renderCheckMark(checked: boolean): TemplateResult | string {\n if (!checked) {\n return html`<div class=\"menu-icon\" data-state=\"unchecked\" slot=\"start\"></div>`;\n }\n return html`\n <div class=\"menu-icon\" data-state=\"checked\" slot=\"start\">${check}</div>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ContextualMenuElement.js","sourceRoot":"","sources":["../../src/contextual-menu/ContextualMenuElement.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { html, svg, SVGTemplateResult, TemplateResult } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { property, queryAll } from 'lit/decorators.js';\nimport { iconWrapper } from '../ui/icons/Icons.js';\nimport { MenuItem } from './MenuItem.js';\nimport UiListItem from '../ui/list/UiListItem.js';\nimport { ElementPositioning } from '../ui/lib/ElementPositioning.js';\nimport UiList from '../ui/list/UiList.js';\nimport '../define/ui/ui-list-item.js';\nimport '../define/ui/ui-divider.js';\nimport { ObjectLikeMap } from './types.js';\n\nexport const arrowRight = iconWrapper(svg`<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M10 17l5-5-5-5v10z\"/>`);\nexport const check = iconWrapper(svg`<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/>`);\n\ninterface IMenuFocusOptions extends FocusOptions {\n /**\n * When set it focuses on the first menu item.\n */\n selectFirst?: boolean;\n}\n\ninterface CreateNestedOptions {\n /**\n * When using keyboard navigation.\n * When set it focuses on the first created event.\n */\n keyboard?: boolean;\n}\n\n/**\n * @fires close - when the menu closes.\n * @fires trigger - when a command is triggered\n */\nexport default class ContextualMenuElement extends UiList {\n @queryAll('ui-list-item')\n _items!: NodeListOf<UiListItem>;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n override set items(value: UiListItem[]) {\n // \n }\n\n override get items(): UiListItem[] {\n return Array.from(this._items);\n }\n\n /** \n * The list of commands to render.\n */\n @property({ type: Array }) commands?: MenuItem[];\n \n /** \n * The commands store.\n */\n @property({ type: Object }) store?: Map<string, unknown>;\n\n /** \n * The menu triggering click target\n */\n @property({ type: Object }) target?: HTMLElement | SVGElement;\n\n /** \n * The current workspace\n */\n @property({ type: Object }) workspace?: HTMLElement;\n\n /** \n * Any arbitrary data to pass to the lifecycle functions.\n */\n @property() customData?: unknown;\n\n /** \n * The timeout after which the sub menu become visible or is removed from the menu.\n */\n @property({ type: Number }) subMenuTimeout = 300;\n\n /** \n * The id of the parent command, in case when this menu is a sub-menu.\n */\n @property({ type: String }) parentCommand?: string;\n \n protected nestedIdValue?: string;\n\n protected nestedTimeout?: number;\n\n protected removingTimeout?: number;\n \n constructor() {\n super();\n this.subTriggerHandler = this.subTriggerHandler.bind(this);\n\n this.addEventListener('mousemove', this.mouseoverHandler.bind(this));\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', \"menu\");\n }\n if (!this.hasAttribute('aria-label')) {\n this.setAttribute('aria-label', \"Context menu\");\n }\n }\n\n close(): void {\n this.dispatchEvent(new Event('close'));\n }\n\n /**\n * Triggest nested menu when hovering an item that has a nested menu.\n */\n protected mouseoverHandler(e: MouseEvent): void {\n if (e.defaultPrevented) {\n return;\n }\n e.preventDefault();\n const path = e.composedPath();\n const target = path.find(i => (i as Element).localName === 'ui-list-item');\n if (!target) {\n return;\n }\n const { nested, cmd } = (target as HTMLElement).dataset;\n if (nested === 'true') {\n this.buildNested(cmd as string);\n } else if (this.nestedIdValue) {\n this.removeNested();\n }\n }\n\n /**\n * Builds a nested menu for a command.\n * @param id The id of the command\n */\n protected buildNested(id: string): void {\n if (!id || id === this.nestedIdValue) {\n return;\n }\n if (this.nestedIdValue) {\n this.clearNested();\n }\n const cmd = this.commands?.find((item) => item.id === id);\n if (!cmd || !cmd.hasChildren) {\n return;\n }\n this.nestedIdValue = id;\n if (this.nestedTimeout) {\n clearTimeout(this.nestedTimeout);\n }\n this.nestedTimeout = setTimeout(() => {\n this.nestedTimeout = undefined;\n this.createNested();\n }, this.subMenuTimeout) as unknown as number;\n }\n\n /**\n * Adds the nested menu to the local DOM.\n */\n protected createNested(opts: CreateNestedOptions = {}): void {\n const id = this.nestedIdValue;\n if (!id) {\n return;\n }\n const ref = ((this.shadowRoot as ShadowRoot).querySelector(`[data-cmd=\"${id}\"]`)) as HTMLElement;\n // const box = ref.getBoundingClientRect();\n const cmd = this.commands?.find((item) => item.id === id);\n if (!cmd) {\n return;\n }\n const { children } = cmd;\n const menu = document.createElement('contextual-menu');\n // TODO: create a type definition for processed internally menu items\n menu.commands = children as MenuItem[];\n menu.store = this.store;\n menu.target = this.target;\n menu.workspace = this.workspace;\n menu.customData = this.customData;\n const styles = ElementPositioning.positionOverlay(menu, ref, {\n horizontal: 'left',\n vertical: 'top',\n noOverlap: true,\n verticalOffset: -56,\n horizontalOffset: -4,\n });\n if (styles.top) {\n menu.style.top = styles.top;\n }\n if (styles.left) {\n menu.style.left = styles.left;\n }\n\n menu.parentCommand = id;\n menu.addEventListener('close', this.handleCloseNested.bind(this));\n menu.addEventListener('trigger', this.subTriggerHandler as EventListener);\n this.shadowRoot?.append(menu);\n if (opts.keyboard) {\n menu.focus({ selectFirst: true });\n } else {\n menu.focus();\n }\n }\n\n protected handleCloseNested(): void {\n this.clearNested();\n }\n\n /**\n * Triggers the remove nested menu action.\n */\n protected removeNested(): void {\n if (this.removingTimeout) {\n return;\n }\n this.removingTimeout = setTimeout(() => {\n this.removingTimeout = undefined;\n this.clearNested();\n }, this.subMenuTimeout) as unknown as number;\n }\n\n override focus(options?: IMenuFocusOptions): void {\n const { activeListItem } = this;\n if (activeListItem) {\n activeListItem.focus(options);\n } else if (options && options.selectFirst) {\n this.focusAfterUpdate();\n } else {\n super.focus(options);\n }\n }\n\n /**\n * Waits for the update to complete and focuses on the first item\n * or self when there are no items.\n */\n protected async focusAfterUpdate(options?: IMenuFocusOptions): Promise<void> {\n await this.updateComplete;\n if (this.items.length) {\n this.activeListItem = this.items[0] as UiListItem;\n this.activateListItem(this.activeListItem);\n } else {\n super.focus(options);\n }\n }\n\n /**\n * Removes the nested menu from the DOM.\n */\n protected clearNested(): void {\n if (!this.nestedIdValue) {\n return;\n }\n this.nestedIdValue = undefined;\n const menu = this.shadowRoot?.querySelector('contextual-menu');\n if (menu) {\n this.shadowRoot?.removeChild(menu);\n }\n this.focus();\n }\n\n /**\n * Opens the menu when the current focused item has a sub menu.\n */\n protected moveRight(): void {\n const { activeListItem } = this;\n if (!activeListItem) {\n return;\n }\n const { nested, cmd } = activeListItem.dataset;\n if (nested === 'true') {\n this.clearNested();\n this.nestedIdValue = cmd;\n this.createNested({ keyboard: true });\n }\n }\n\n /**\n * Closes the menu when this is a sub menu.\n */\n protected moveLeft(): void {\n if (!this.parentCommand) {\n return;\n }\n this.close();\n }\n\n /**\n * A handler for the sub-menu `trigger` event.\n * Retargets the event to the parent.\n * It adds `parent` to the detail, when the parent (currently selected command) has\n * the execute function.\n */\n protected subTriggerHandler(e: CustomEvent): void {\n if (!e.detail.parent) {\n const id = this.nestedIdValue;\n const cmd = this.commands?.find((item) => item.id === id);\n if (!cmd) {\n return;\n }\n if (typeof cmd.execute === 'function') {\n e.detail.parent = cmd;\n }\n }\n this.dispatchEvent(new CustomEvent('trigger', {\n detail: e.detail,\n }));\n }\n\n override handleKeydown(e: KeyboardEvent): void {\n e.stopPropagation();\n e.stopImmediatePropagation();\n super.handleKeydown(e);\n if (e.code === 'Escape' || e.code === 'Tab') {\n this.close();\n } else if (['Enter', 'Space'].includes(e.code)) {\n e.preventDefault();\n this.activateFromEvent(e);\n } else if (e.code === 'ArrowRight') {\n e.preventDefault();\n this.moveRight();\n } else if (e.code === 'ArrowLeft') {\n e.preventDefault();\n this.moveLeft();\n }\n }\n\n protected override activateFromEvent(e: Event): void {\n const path = e.composedPath();\n const item = path.find(i => (i as Element).localName === 'ui-list-item');\n if (!item) {\n return;\n }\n this.activate((item as HTMLElement).dataset.cmd);\n }\n\n protected activate(id?: string): void {\n const { commands } = this;\n if (!id || !commands) {\n return;\n }\n const index = commands.findIndex((item) => item.id === id);\n const cmd = commands[index];\n if (!cmd) {\n return;\n }\n if (cmd.hasChildren) {\n this.buildNested(id);\n } else {\n const detail = {\n command: cmd,\n item: index,\n };\n this.dispatchEvent(new CustomEvent('trigger', {\n detail,\n }));\n }\n }\n\n override render(): TemplateResult {\n const { commands } = this;\n if (!Array.isArray(commands) || !commands.length) {\n return html``;\n }\n return html`\n ${commands.map((item) => this.renderMenuItem(item))}\n `;\n }\n\n protected renderMenuItem(item: MenuItem): TemplateResult | string {\n switch (item.type) {\n case 'normal': return this.renderMenuEntry(item);\n case 'separator': return this.renderSeparator(item);\n case 'label': return this.renderLabel(item);\n case 'radio': return this.renderRadioEntry(item);\n default: return '';\n }\n }\n\n protected renderSeparator(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n 'menu-divider': true,\n hidden: !visible,\n };\n return html`\n <ui-divider type=\"inset\" class=\"${classMap(classes)}\" data-cmd=\"${item.id}\"></ui-divider>\n `;\n }\n\n protected renderLabel(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n 'menu-section-label': true,\n hidden: !visible,\n };\n return html`\n <div class=\"${classMap(classes)}\" data-cmd=\"${item.id}\">${item.label}</div>\n `;\n }\n\n protected renderMenuEntry(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n item.beforeRenderCallback(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const enabled = item.isEnabled(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n item: true,\n disabled: !enabled,\n hidden: !visible,\n };\n const { title, icon, label, id, hasChildren } = item;\n return html`\n <ui-list-item \n role=\"menuitem\" \n class=\"${classMap(classes)}\" \n ?disabled=\"${!visible || !enabled}\"\n aria-hidden=\"${!visible}\"\n title=\"${ifDefined(title)}\"\n data-cmd=\"${id}\"\n data-nested=\"${hasChildren}\"\n aria-haspopup=\"${hasChildren}\"\n >\n ${this.renderMenuEntryIcon(icon)}\n <span class=\"menu-label\">${label}</span>\n ${hasChildren ? this.renderChildIcon() : ''}\n </ui-list-item>\n `;\n }\n\n protected renderRadioEntry(item: MenuItem): TemplateResult {\n const { store, target, workspace, customData } = this;\n if (!store || !target || !workspace) {\n return html``;\n }\n item.beforeRenderCallback(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const visible = item.isVisible(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const enabled = item.isEnabled(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const checked = item.isChecked(store as unknown as ObjectLikeMap<object>, target, workspace, customData);\n const classes = {\n item: true,\n disabled: !enabled,\n hidden: !visible,\n };\n const { title, label, id, hasChildren } = item;\n return html`\n <ui-list-item\n role=\"menuitem\"\n class=\"${classMap(classes)}\" \n ?disabled=\"${!visible || !enabled}\"\n aria-hidden=\"${!visible}\"\n title=\"${ifDefined(title)}\"\n data-cmd=\"${id}\"\n data-nested=\"${hasChildren}\"\n data-type=\"radio\"\n aria-haspopup=\"${hasChildren}\"\n >\n ${this.renderCheckMark(checked)}\n <span class=\"menu-label\">${label}</span>\n ${hasChildren ? this.renderChildIcon() : ''}\n </ui-list-item>\n `;\n }\n\n /**\n * @param icon The icon is not required.\n */\n protected renderMenuEntryIcon(icon?: SVGTemplateResult): TemplateResult {\n if (!icon) {\n return html``;\n }\n return html`\n <div class=\"menu-icon\" slot=\"start\">${icon}</div>\n `;\n }\n\n /**\n * @return The template for sub-menu icon\n */\n protected renderChildIcon(): TemplateResult {\n return html`\n <div class=\"sub-menu-icon\" slot=\"end\">${arrowRight}</div>\n `;\n }\n\n /**\n * @return The template for the menu entry checked mark.\n */\n protected renderCheckMark(checked: boolean): TemplateResult | string {\n if (!checked) {\n return html`<div class=\"menu-icon\" data-state=\"unchecked\" slot=\"start\"></div>`;\n }\n return html`\n <div class=\"menu-icon\" data-state=\"checked\" slot=\"start\">${check}</div>\n `;\n }\n}\n"]}
|
|
@@ -3,18 +3,6 @@ import { genId } from './IdGenerator.js';
|
|
|
3
3
|
* An object representing a single menu item in the menu.
|
|
4
4
|
*/
|
|
5
5
|
export class MenuItem {
|
|
6
|
-
type;
|
|
7
|
-
target;
|
|
8
|
-
visible;
|
|
9
|
-
id;
|
|
10
|
-
label;
|
|
11
|
-
children;
|
|
12
|
-
enabled;
|
|
13
|
-
checked;
|
|
14
|
-
execute;
|
|
15
|
-
beforeRender;
|
|
16
|
-
icon;
|
|
17
|
-
title;
|
|
18
6
|
constructor(init) {
|
|
19
7
|
const { type = 'normal', target, visible = true, id = genId(), } = init;
|
|
20
8
|
this.type = type;
|