@api-client/ui 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/demo/amf/api-annotation.html +1 -0
- package/demo/amf/api-channel.html +1 -0
- package/demo/amf/api-console.html +1 -0
- package/demo/amf/api-documentation-document.html +1 -0
- package/demo/amf/api-documentation.html +1 -0
- package/demo/amf/api-editor.html +1 -0
- package/demo/amf/api-navigation.html +1 -0
- package/demo/amf/api-operation.html +1 -0
- package/demo/amf/api-payload.html +1 -0
- package/demo/amf/api-request.html +1 -0
- package/demo/amf/api-resource.html +1 -0
- package/demo/amf/api-schema-documentation.html +1 -0
- package/demo/amf/api-security-documentation.html +1 -0
- package/demo/amf/api-server-picker.html +1 -0
- package/demo/amf/api-summary.html +1 -0
- package/demo/amf/bare-components.html +2 -0
- package/demo/amf/index.html +2 -0
- package/demo/amf/oauth-authorize.html +2 -0
- package/demo/amf/request-editor.html +1 -0
- package/demo/elements/authorization/api-key.html +1 -0
- package/demo/elements/authorization/basic.html +1 -0
- package/demo/elements/authorization/bearer.html +1 -0
- package/demo/elements/authorization/cc.html +1 -0
- package/demo/elements/authorization/index.html +2 -0
- package/demo/elements/authorization/ntlm.html +1 -0
- package/demo/elements/authorization/oauth-error.html +2 -0
- package/demo/elements/authorization/oauth-popup.html +2 -0
- package/demo/elements/authorization/oauth2.html +1 -0
- package/demo/elements/authorization/oidc.html +1 -0
- package/demo/elements/authorization/redirect.html +3 -1
- package/demo/elements/context-menu/basic.html +2 -1
- package/demo/elements/context-menu/custom-data.html +2 -1
- package/demo/elements/context-menu/enabled-state.html +2 -1
- package/demo/elements/context-menu/icons.html +2 -1
- package/demo/elements/context-menu/index.html +2 -0
- package/demo/elements/context-menu/nested.html +2 -1
- package/demo/elements/context-menu/no-execute.html +2 -1
- package/demo/elements/context-menu/radio-menu.html +2 -1
- package/demo/elements/context-menu/separators.html +2 -1
- package/demo/elements/environment/environment-editor.html +1 -0
- package/demo/elements/environment/index.html +1 -0
- package/demo/elements/environment/server-editor.html +1 -1
- package/demo/elements/environment/variables-editor.html +1 -1
- package/demo/elements/har/har-viewer.html +1 -0
- package/demo/elements/highlight/index.html +1 -0
- package/demo/elements/highlight/marked-highlight.html +1 -0
- package/demo/elements/highlight/prism-highlight.html +1 -0
- package/demo/elements/http/body-editor.html +1 -0
- package/demo/elements/http/headers.html +1 -0
- package/demo/elements/http/http-assertions.html +1 -0
- package/demo/elements/http/request-editor.html +1 -0
- package/demo/elements/http/request-log.html +1 -0
- package/demo/elements/http/url-editing.html +1 -0
- package/demo/elements/icons/index.html +1 -0
- package/demo/elements/project/project-run-report.html +1 -0
- package/demo/elements/project/request-editor.html +1 -0
- package/demo/elements/ui/buttons/api-button.html +2 -1
- package/demo/elements/ui/buttons/api-icon-button.html +2 -1
- package/demo/elements/ui/buttons/segmented-buttons.html +2 -1
- package/demo/elements/ui/chip/api-chip.html +2 -1
- package/demo/elements/ui/collapse/ui-collapse.html +2 -1
- package/demo/elements/ui/dialog/ui-dialog.html +2 -1
- package/demo/elements/ui/inputs/api-checkbox.html +2 -1
- package/demo/elements/ui/inputs/api-input.html +2 -1
- package/demo/elements/ui/inputs/api-radio.html +2 -1
- package/demo/elements/ui/inputs/api-switch.html +2 -1
- package/demo/elements/ui/list/dropdown-list.html +2 -1
- package/demo/elements/ui/list/list.html +2 -1
- package/demo/elements/ui/notification/snack.html +2 -1
- package/demo/elements/ui/progress/ui-progress.html +2 -1
- package/demo/elements/ui/tabs/tabs.html +2 -1
- package/dist/amf/lib/AmfParameters.js +0 -4
- package/dist/amf/lib/AmfParameters.js.map +1 -1
- package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
- package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
- package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
- package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
- package/dist/amf/store/AmfGraphStore.js +0 -2
- package/dist/amf/store/AmfGraphStore.js.map +1 -1
- package/dist/amf/store/AmfStore.js +0 -7
- package/dist/amf/store/AmfStore.js.map +1 -1
- package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
- package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/base/PlatformBindings.js +6 -10
- package/dist/bindings/base/PlatformBindings.js.map +1 -1
- package/dist/bindings/base/ProxyBindings.js +9 -6
- package/dist/bindings/base/ProxyBindings.js.map +1 -1
- package/dist/bindings/base/SharedWorkerThread.js +4 -1
- package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
- package/dist/bindings/base/StoreBindings.js +162 -170
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/bindings/web/WebConfigurationBindings.js +22 -24
- package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
- package/dist/bindings/web/WebFileBindings.js +7 -4
- package/dist/bindings/web/WebFileBindings.js.map +1 -1
- package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
- package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/web/WebNavigationBindings.js +4 -1
- package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
- package/dist/bindings/web/WebProxyBindings.js +5 -6
- package/dist/bindings/web/WebProxyBindings.js.map +1 -1
- package/dist/bindings/web/WebStoreBindings.js +39 -44
- package/dist/bindings/web/WebStoreBindings.js.map +1 -1
- package/dist/contextual-menu/ContextualMenu.js +10 -19
- package/dist/contextual-menu/ContextualMenu.js.map +1 -1
- package/dist/contextual-menu/ContextualMenuElement.js +4 -32
- package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
- package/dist/contextual-menu/MenuItem.js +0 -12
- package/dist/contextual-menu/MenuItem.js.map +1 -1
- package/dist/define/amf/api-annotation-document.js +1 -1
- package/dist/define/amf/api-annotation-document.js.map +1 -1
- package/dist/define/amf/api-authorization-editor.js +1 -1
- package/dist/define/amf/api-authorization-editor.js.map +1 -1
- package/dist/define/amf/api-channel-document.js +1 -1
- package/dist/define/amf/api-channel-document.js.map +1 -1
- package/dist/define/amf/api-documentation-document.js +1 -1
- package/dist/define/amf/api-documentation-document.js.map +1 -1
- package/dist/define/amf/api-documentation.js +1 -1
- package/dist/define/amf/api-documentation.js.map +1 -1
- package/dist/define/amf/api-navigation.js +1 -1
- package/dist/define/amf/api-navigation.js.map +1 -1
- package/dist/define/amf/api-operation-document.js +1 -1
- package/dist/define/amf/api-operation-document.js.map +1 -1
- package/dist/define/amf/api-parameter-document.js +1 -1
- package/dist/define/amf/api-parameter-document.js.map +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
- package/dist/define/amf/api-payload-document.js +1 -1
- package/dist/define/amf/api-payload-document.js.map +1 -1
- package/dist/define/amf/api-request-document.js +1 -1
- package/dist/define/amf/api-request-document.js.map +1 -1
- package/dist/define/amf/api-request-editor.js +1 -1
- package/dist/define/amf/api-request-editor.js.map +1 -1
- package/dist/define/amf/api-request.js +1 -1
- package/dist/define/amf/api-request.js.map +1 -1
- package/dist/define/amf/api-resource-document.js +1 -1
- package/dist/define/amf/api-resource-document.js.map +1 -1
- package/dist/define/amf/api-response-document.js +1 -1
- package/dist/define/amf/api-response-document.js.map +1 -1
- package/dist/define/amf/api-schema-document.js +1 -1
- package/dist/define/amf/api-schema-document.js.map +1 -1
- package/dist/define/amf/api-security-document.js +1 -1
- package/dist/define/amf/api-security-document.js.map +1 -1
- package/dist/define/amf/api-security-requirement-document.js +1 -1
- package/dist/define/amf/api-security-requirement-document.js.map +1 -1
- package/dist/define/amf/api-server-picker.js +1 -1
- package/dist/define/amf/api-server-picker.js.map +1 -1
- package/dist/define/amf/api-summary.js +1 -1
- package/dist/define/amf/api-summary.js.map +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
- package/dist/define/authorization/apikey-authorization.js +1 -1
- package/dist/define/authorization/apikey-authorization.js.map +1 -1
- package/dist/define/authorization/basic-authorization.js +1 -1
- package/dist/define/authorization/basic-authorization.js.map +1 -1
- package/dist/define/authorization/bearer-authorization.js +1 -1
- package/dist/define/authorization/bearer-authorization.js.map +1 -1
- package/dist/define/authorization/cc-authorization.js +1 -1
- package/dist/define/authorization/cc-authorization.js.map +1 -1
- package/dist/define/authorization/ntlm-authorization.js +1 -1
- package/dist/define/authorization/ntlm-authorization.js.map +1 -1
- package/dist/define/authorization/oauth2-authorization.js +1 -1
- package/dist/define/authorization/oauth2-authorization.js.map +1 -1
- package/dist/define/authorization/oidc-authorization.js +1 -1
- package/dist/define/authorization/oidc-authorization.js.map +1 -1
- package/dist/define/contextual-menu/contextual-menu.js +1 -1
- package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
- package/dist/define/dialog/rename-dialog.js +1 -1
- package/dist/define/dialog/rename-dialog.js.map +1 -1
- package/dist/define/files/share-file.js +1 -1
- package/dist/define/files/share-file.js.map +1 -1
- package/dist/define/har/har-viewer.js +1 -1
- package/dist/define/har/har-viewer.js.map +1 -1
- package/dist/define/highlight/marked-highlight.js +1 -1
- package/dist/define/highlight/marked-highlight.js.map +1 -1
- package/dist/define/highlight/prism-highlight.js +1 -1
- package/dist/define/highlight/prism-highlight.js.map +1 -1
- package/dist/define/http/http-assertions.js +1 -1
- package/dist/define/http/http-assertions.js.map +1 -1
- package/dist/define/http/http-body-editor.js +1 -1
- package/dist/define/http/http-body-editor.js.map +1 -1
- package/dist/define/http/http-body-multipart-editor.js +1 -1
- package/dist/define/http/http-body-multipart-editor.js.map +1 -1
- package/dist/define/http/http-body-text-editor.js +1 -1
- package/dist/define/http/http-body-text-editor.js.map +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
- package/dist/define/http/http-headers-form.js +1 -1
- package/dist/define/http/http-headers-form.js.map +1 -1
- package/dist/define/http/http-log-body.js +1 -1
- package/dist/define/http/http-log-body.js.map +1 -1
- package/dist/define/http/http-log-headers.js +1 -1
- package/dist/define/http/http-log-headers.js.map +1 -1
- package/dist/define/http/http-log-timings.js +1 -1
- package/dist/define/http/http-log-timings.js.map +1 -1
- package/dist/define/http/http-request-config.js +1 -1
- package/dist/define/http/http-request-config.js.map +1 -1
- package/dist/define/http/http-request-editor.js +1 -1
- package/dist/define/http/http-request-editor.js.map +1 -1
- package/dist/define/http/http-request-log.js +1 -1
- package/dist/define/http/http-request-log.js.map +1 -1
- package/dist/define/http/http-snippets.js +1 -1
- package/dist/define/http/http-snippets.js.map +1 -1
- package/dist/define/http/http-url-input.js +1 -1
- package/dist/define/http/http-url-input.js.map +1 -1
- package/dist/define/http/http-url-params-form.js +1 -1
- package/dist/define/http/http-url-params-form.js.map +1 -1
- package/dist/define/http-project/http-project-request-history.js +1 -1
- package/dist/define/http-project/http-project-request-history.js.map +1 -1
- package/dist/define/http-project/http-project-request.js +2 -2
- package/dist/define/http-project/http-project-request.js.map +1 -1
- package/dist/define/http-project/project-navigation.js +1 -1
- package/dist/define/http-project/project-navigation.js.map +1 -1
- package/dist/define/http-project/project-run-report.js +1 -1
- package/dist/define/http-project/project-run-report.js.map +1 -1
- package/dist/define/http-project/project-runner.js +2 -2
- package/dist/define/http-project/project-runner.js.map +1 -1
- package/dist/define/layout/split-view.js +1 -1
- package/dist/define/layout/split-view.js.map +1 -1
- package/dist/define/schema-design/schema-design-navigation.js +1 -1
- package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
- package/dist/define/ui/ui-button.js +1 -1
- package/dist/define/ui/ui-button.js.map +1 -1
- package/dist/define/ui/ui-chip.js +1 -1
- package/dist/define/ui/ui-chip.js.map +1 -1
- package/dist/define/ui/ui-collapse.js +1 -1
- package/dist/define/ui/ui-collapse.js.map +1 -1
- package/dist/define/ui/ui-dialog.js +1 -1
- package/dist/define/ui/ui-dialog.js.map +1 -1
- package/dist/define/ui/ui-dropdown-list.js +1 -1
- package/dist/define/ui/ui-dropdown-list.js.map +1 -1
- package/dist/define/ui/ui-icon-button.js +1 -1
- package/dist/define/ui/ui-icon-button.js.map +1 -1
- package/dist/define/ui/ui-icon.js +1 -1
- package/dist/define/ui/ui-icon.js.map +1 -1
- package/dist/define/ui/ui-list-item.js +1 -1
- package/dist/define/ui/ui-list-item.js.map +1 -1
- package/dist/define/ui/ui-list.js +1 -1
- package/dist/define/ui/ui-list.js.map +1 -1
- package/dist/define/ui/ui-listbox.js +1 -1
- package/dist/define/ui/ui-listbox.js.map +1 -1
- package/dist/define/ui/ui-progress.js +1 -1
- package/dist/define/ui/ui-progress.js.map +1 -1
- package/dist/define/ui/ui-segmented-button-set.js +1 -1
- package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
- package/dist/define/ui/ui-segmented-button.js +1 -1
- package/dist/define/ui/ui-segmented-button.js.map +1 -1
- package/dist/define/ui/ui-snackbar.js +1 -1
- package/dist/define/ui/ui-snackbar.js.map +1 -1
- package/dist/define/ui/ui-tab.js +1 -1
- package/dist/define/ui/ui-tab.js.map +1 -1
- package/dist/define/ui/ui-tabs.js +1 -1
- package/dist/define/ui/ui-tabs.js.map +1 -1
- package/dist/directives/data-attr.js +0 -1
- package/dist/directives/data-attr.js.map +1 -1
- package/dist/elements/ApiElement.js +0 -7
- package/dist/elements/ApiElement.js.map +1 -1
- package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
- package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
- package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentation.element.js +0 -91
- package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationBase.js +0 -9
- package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiNavigation.element.js +0 -97
- package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
- package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
- package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
- package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequest.element.js +0 -78
- package/dist/elements/amf/ApiRequest.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
- package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
- package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
- package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
- package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
- package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
- package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiServerPicker.element.js +2 -65
- package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
- package/dist/elements/amf/ApiSummary.element.js +0 -26
- package/dist/elements/amf/ApiSummary.element.js.map +1 -1
- package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
- package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBasic.js +0 -4
- package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBearer.js +0 -4
- package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
- package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOidc.js +0 -4
- package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
- package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
- package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
- package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
- package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
- package/dist/elements/authorization/OAuth2Authorize.js +0 -14
- package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
- package/dist/elements/authorization/OidcAuthorize.js +0 -14
- package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/Authorization.js +18 -32
- package/dist/elements/authorization/ui/Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
- package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
- package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
- package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
- package/dist/elements/code/HttpSnippets.js +9 -8
- package/dist/elements/code/HttpSnippets.js.map +1 -1
- package/dist/elements/dialog/ConfirmDelete.js +0 -12
- package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
- package/dist/elements/dialog/Rename.js +0 -6
- package/dist/elements/dialog/Rename.js.map +1 -1
- package/dist/elements/environment/EnvironmentEditor.js +8 -11
- package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
- package/dist/elements/environment/ServerEditor.js +7 -45
- package/dist/elements/environment/ServerEditor.js.map +1 -1
- package/dist/elements/environment/VariablesEditor.js +7 -12
- package/dist/elements/environment/VariablesEditor.js.map +1 -1
- package/dist/elements/files/ShareFile.js +19 -57
- package/dist/elements/files/ShareFile.js.map +1 -1
- package/dist/elements/har/HarViewer.js +6 -7
- package/dist/elements/har/HarViewer.js.map +1 -1
- package/dist/elements/highlight/MarkedHighlight.js +4 -56
- package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlight.js +9 -18
- package/dist/elements/highlight/PrismHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlighter.js +4 -6
- package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
- package/dist/elements/http/BodyEditor.js +21 -33
- package/dist/elements/http/BodyEditor.js.map +1 -1
- package/dist/elements/http/BodyMultipartEditor.js +17 -18
- package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
- package/dist/elements/http/BodyTextEditor.js +2 -15
- package/dist/elements/http/BodyTextEditor.js.map +1 -1
- package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
- package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
- package/dist/elements/http/HeadersForm.js +16 -17
- package/dist/elements/http/HeadersForm.js.map +1 -1
- package/dist/elements/http/HttpAssertions.js +8 -6
- package/dist/elements/http/HttpAssertions.js.map +1 -1
- package/dist/elements/http/LogBody.js +10 -21
- package/dist/elements/http/LogBody.js.map +1 -1
- package/dist/elements/http/LogHeaders.js +4 -23
- package/dist/elements/http/LogHeaders.js.map +1 -1
- package/dist/elements/http/LogTimings.js +11 -13
- package/dist/elements/http/LogTimings.js.map +1 -1
- package/dist/elements/http/RequestConfigElement.js +7 -4
- package/dist/elements/http/RequestConfigElement.js.map +1 -1
- package/dist/elements/http/RequestEditor.js +54 -88
- package/dist/elements/http/RequestEditor.js.map +1 -1
- package/dist/elements/http/RequestLog.js +9 -14
- package/dist/elements/http/RequestLog.js.map +1 -1
- package/dist/elements/http/UrlInput.js +15 -25
- package/dist/elements/http/UrlInput.js.map +1 -1
- package/dist/elements/http/UrlParamsForm.js +16 -13
- package/dist/elements/http/UrlParamsForm.js.map +1 -1
- package/dist/elements/layout/LayoutManager.js +16 -24
- package/dist/elements/layout/LayoutManager.js.map +1 -1
- package/dist/elements/layout/LayoutPanelElement.js +17 -23
- package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
- package/dist/elements/layout/SplitItem.js +4 -12
- package/dist/elements/layout/SplitItem.js.map +1 -1
- package/dist/elements/layout/SplitLayout.js +18 -24
- package/dist/elements/layout/SplitLayout.js.map +1 -1
- package/dist/elements/layout/SplitPanel.js +10 -16
- package/dist/elements/layout/SplitPanel.js.map +1 -1
- package/dist/elements/layout/SplitView.js +17 -26
- package/dist/elements/layout/SplitView.js.map +1 -1
- package/dist/elements/navigation/AppNavigationElement.js +8 -47
- package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
- package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
- package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
- package/dist/elements/project/HttpProjectRequest.js +0 -38
- package/dist/elements/project/HttpProjectRequest.js.map +1 -1
- package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
- package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
- package/dist/elements/project/ProjectNavigation.js +0 -4
- package/dist/elements/project/ProjectNavigation.js.map +1 -1
- package/dist/elements/project/ProjectRunReport.js +4 -15
- package/dist/elements/project/ProjectRunReport.js.map +1 -1
- package/dist/elements/project/ProjectRunner.js +2 -47
- package/dist/elements/project/ProjectRunner.js.map +1 -1
- package/dist/elements/schema-design/AssociationFormElement.js +0 -13
- package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
- package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
- package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
- package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
- package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
- package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
- package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
- package/dist/elements/schema-design/EntityFormElement.js +0 -18
- package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
- package/dist/elements/schema-design/PropertyFormElement.js +0 -12
- package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
- package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
- package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
- package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
- package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
- package/dist/elements/user/UserAvatarElement.js +0 -9
- package/dist/elements/user/UserAvatarElement.js.map +1 -1
- package/dist/events/http-client/models/CertificatesEvents.js +2 -2
- package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
- package/dist/http-client/idb/Base.js +5 -10
- package/dist/http-client/idb/Base.js.map +1 -1
- package/dist/http-client/idb/LegacyMockedStore.js +0 -1
- package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
- package/dist/http-client/idb/MockedStore.js +3 -1
- package/dist/http-client/idb/MockedStore.js.map +1 -1
- package/dist/http-client/store/DataImportProcessor.js +0 -3
- package/dist/http-client/store/DataImportProcessor.js.map +1 -1
- package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
- package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
- package/dist/http-client/store/IdbThread.js +23 -20
- package/dist/http-client/store/IdbThread.js.map +1 -1
- package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
- package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
- package/dist/http-client/store/idb/IdbStore.js +0 -2
- package/dist/http-client/store/idb/IdbStore.js.map +1 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
- package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
- package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
- package/dist/lib/chart/HttpHistoryChart.js +7 -8
- package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
- package/dist/mixins/FileDropMixin.js +0 -1
- package/dist/mixins/FileDropMixin.js.map +1 -1
- package/dist/mixins/RenderableMixin.js +11 -15
- package/dist/mixins/RenderableMixin.js.map +1 -1
- package/dist/pages/ApplicationScreen.js +34 -55
- package/dist/pages/ApplicationScreen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +11 -20
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +4 -6
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/StoreConfig.screen.js +21 -37
- package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
- package/dist/pages/api-client/Telemetry.screen.js +1 -2
- package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +6 -27
- package/dist/pages/api-client/pages/Files.page.js.map +1 -1
- package/dist/pages/api-client/pages/Settings.page.js +2 -4
- package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
- package/dist/pages/api-client/pages/Trash.page.js +2 -13
- package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
- package/dist/pages/demo/DemoPage.d.ts.map +1 -1
- package/dist/pages/demo/DemoPage.js +25 -24
- package/dist/pages/demo/DemoPage.js.map +1 -1
- package/dist/pages/http-project/HttpProject.screen.js +25 -35
- package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
- package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
- package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
- package/dist/store/HttpStore.js +0 -3
- package/dist/store/HttpStore.js.map +1 -1
- package/dist/store/UserCache.js +5 -5
- package/dist/store/UserCache.js.map +1 -1
- package/dist/ui/UiElement.js +4 -5
- package/dist/ui/UiElement.js.map +1 -1
- package/dist/ui/button/SegmentedButton.js +9 -11
- package/dist/ui/button/SegmentedButton.js.map +1 -1
- package/dist/ui/button/SegmentedButtonsSet.js +6 -7
- package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
- package/dist/ui/button/UiButton.js +17 -39
- package/dist/ui/button/UiButton.js.map +1 -1
- package/dist/ui/button/UiIconButton.js +9 -35
- package/dist/ui/button/UiIconButton.js.map +1 -1
- package/dist/ui/chip/UiChip.js +9 -49
- package/dist/ui/chip/UiChip.js.map +1 -1
- package/dist/ui/collapse/UiCollapse.js +15 -20
- package/dist/ui/collapse/UiCollapse.js.map +1 -1
- package/dist/ui/controllers/ActionController.js +143 -144
- package/dist/ui/controllers/ActionController.js.map +1 -1
- package/dist/ui/controllers/RadioSelectionController.js +0 -1
- package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
- package/dist/ui/date/DateTime.js +3 -3
- package/dist/ui/date/DateTime.js.map +1 -1
- package/dist/ui/dialog/UiDialog.d.ts +1 -1
- package/dist/ui/dialog/UiDialog.d.ts.map +1 -1
- package/dist/ui/dialog/UiDialog.js +19 -41
- package/dist/ui/dialog/UiDialog.js.map +1 -1
- package/dist/ui/effects/ripple.js +20 -18
- package/dist/ui/effects/ripple.js.map +1 -1
- package/dist/ui/effects/rippleDirective.js +6 -7
- package/dist/ui/effects/rippleDirective.js.map +1 -1
- package/dist/ui/icons/UiIcon.js +4 -3
- package/dist/ui/icons/UiIcon.js.map +1 -1
- package/dist/ui/input/CheckboxElement.js +12 -10
- package/dist/ui/input/CheckboxElement.js.map +1 -1
- package/dist/ui/input/CheckedElement.js +2 -13
- package/dist/ui/input/CheckedElement.js.map +1 -1
- package/dist/ui/input/Input.js +169 -234
- package/dist/ui/input/Input.js.map +1 -1
- package/dist/ui/input/RadioElement.js +13 -11
- package/dist/ui/input/RadioElement.js.map +1 -1
- package/dist/ui/input/SwitchElement.js +0 -18
- package/dist/ui/input/SwitchElement.js.map +1 -1
- package/dist/ui/input/TextAreaElement.js +0 -15
- package/dist/ui/input/TextAreaElement.js.map +1 -1
- package/dist/ui/list/DividerElement.js +5 -10
- package/dist/ui/list/DividerElement.js.map +1 -1
- package/dist/ui/list/UiDropdownList.js +7 -48
- package/dist/ui/list/UiDropdownList.js.map +1 -1
- package/dist/ui/list/UiList.js +3 -15
- package/dist/ui/list/UiList.js.map +1 -1
- package/dist/ui/list/UiListItem.js +4 -17
- package/dist/ui/list/UiListItem.js.map +1 -1
- package/dist/ui/list/UiListbox.js +0 -1
- package/dist/ui/list/UiListbox.js.map +1 -1
- package/dist/ui/notification/SnackNotifications.js +1 -2
- package/dist/ui/notification/SnackNotifications.js.map +1 -1
- package/dist/ui/notification/Snackbar.js +27 -51
- package/dist/ui/notification/Snackbar.js.map +1 -1
- package/dist/ui/progress/Range.js +24 -23
- package/dist/ui/progress/Range.js.map +1 -1
- package/dist/ui/progress/UiProgress.js +0 -11
- package/dist/ui/progress/UiProgress.js.map +1 -1
- package/dist/ui/table/DataTable.js +7 -12
- package/dist/ui/table/DataTable.js.map +1 -1
- package/dist/ui/tabs/UiTab.js +24 -25
- package/dist/ui/tabs/UiTab.js.map +1 -1
- package/dist/ui/tabs/UiTabs.js +21 -35
- package/dist/ui/tabs/UiTabs.js.map +1 -1
- package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
- package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
- package/dist/visualization/lib/AssociationAnchors.js +16 -28
- package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
- package/dist/visualization/lib/Point.js +0 -2
- package/dist/visualization/lib/Point.js.map +1 -1
- package/dist/visualization/lib/SelectionManager.js +10 -11
- package/dist/visualization/lib/SelectionManager.js.map +1 -1
- package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
- package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
- package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
- package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
- package/dist/visualization/lib/WorkspaceEdges.js +17 -19
- package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
- package/dist/visualization/lib/WorkspaceGestures.js +0 -3
- package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
- package/dist/visualization/lib/WorkspaceSizing.js +4 -6
- package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
- package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
- package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
- package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
- package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
- package/dist/visualization/lib/tips/TipArtist.js +0 -3
- package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
- package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
- package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
- package/package.json +3 -2
- package/src/pages/demo/DemoPage.ts +12 -11
- package/src/ui/dialog/UiDialog.ts +6 -4
- package/test/ui/dialog/UiDialog.test.ts +236 -0
- package/tsconfig.json +2 -2
- package/demo/themes/default.css +0 -0
- package/demo/themes/m3/theme.dark.css +0 -40
- package/demo/themes/m3/theme.light.css +0 -40
- package/demo/themes/m3/tokens.css +0 -291
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderableMixin.js","sourceRoot":"","sources":["../../src/mixins/RenderableMixin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable max-classes-per-file */\nimport { dedupeMixin } from '@open-wc/dedupe-mixin';\nimport { html, TemplateResult, render, CSSResult, css } from 'lit';\nimport { reactive } from '../lib/decorators.js';\n\nexport const renderingValue = Symbol('renderingValue');\nexport const renderPage = Symbol('renderPage');\nexport const setUpdatePromise = Symbol('setUpdatePromise');\nexport const updateResolver = Symbol('updateResolver');\nexport const hasPendingUpdatePromise = Symbol('hasPendingUpdatePromise');\nexport const resolveUpdatePromise = Symbol('resolveUpdatePromise');\n\ntype Constructor<T = {}> = new (...args: any[]) => T;\n\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets =\n window.ShadowRoot &&\n 'adoptedStyleSheets' in Document.prototype &&\n 'replace' in CSSStyleSheet.prototype;\n\nexport declare class RenderableMixinInterface {\n /**\n * Determines whether the initial render had run and the `firstRender()`\n * function was called.\n *\n * @default false\n */\n firstRendered: boolean;\n\n /** \n * @type A promise resolved when the render finished.\n */\n updateComplete?: Promise<boolean>;\n\n /** \n * True when rendering debouncer is running.\n */\n get rendering(): boolean;\n\n /**\n * Helper function to be overridden by child classes. It is called when the view\n * is rendered for the first time.\n */\n firstRender(): void;\n\n /**\n * A function called when the template has been rendered\n */\n updated(): void;\n\n /**\n * This to be used by the child classes to render page template.\n * @returns Application page template\n */\n pageTemplate(): TemplateResult;\n\n /**\n * The main render function. Sub classes should not override this method.\n * Override `[renderPage]()` instead.\n *\n * The function calls `[renderPage]()` in a micro task so it is safe to call this\n * multiple time in the same event loop.\n */\n render(): TemplateResult | undefined;\n}\n\n/**\n * Adds methods that helps with asynchronous template rendering.\n * \n * The application page content is rendered into the `#app` container.\n *\n * @mixin\n */\nexport const RenderableMixin = dedupeMixin(<T extends Constructor<any>>(superClass: T): Constructor<RenderableMixinInterface> & T => {\n class RenderableMixinClass extends superClass {\n \n static get styles(): CSSResult | CSSResult[] {\n return css``;\n }\n\n /**\n * Determines whether the initial render had run and the `firstRender()`\n * function was called.\n *\n * @default false\n */\n @reactive() \n firstRendered = false;\n\n [renderingValue] = false;\n\n [hasPendingUpdatePromise] = false;\n\n [updateResolver]?: (value?: any) => void;\n \n\n /** \n * @type A promise resolved when the render finished.\n */\n updateComplete?: Promise<boolean>;\n\n /** \n * True when rendering debouncer is running.\n */\n get rendering(): boolean {\n return this[renderingValue];\n }\n\n constructor(...args: any[]) {\n super(...args);\n this[setUpdatePromise]();\n this.adaptStyles();\n }\n\n protected adaptStyles(): void {\n // @ts-ignore\n const input = this.constructor.styles as CSSResult | CSSResult[];\n if (!input) {\n return;\n }\n let styles = input as CSSResult[];\n if (!Array.isArray(input)) {\n styles = [input];\n }\n if (supportsAdoptingStyleSheets) {\n const sheets = styles.map(i => i.styleSheet);\n // @ts-ignore\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...sheets];\n } else {\n styles.forEach((s) => {\n const style = document.createElement('style');\n style.textContent = (s as CSSResult).cssText;\n document.head.appendChild(style);\n });\n }\n }\n\n /**\n * Helper function to be overridden by child classes. It is called when the view\n * is rendered for the first time.\n */\n firstRender(): void {\n // \n }\n\n /**\n * A function called when the template has been rendered\n */\n updated(): void {\n // \n }\n\n /**\n * This to be used by the child classes to render page template.\n * @returns Application page template\n */\n pageTemplate(): TemplateResult {\n return html``;\n }\n\n /**\n * The main render function. Sub classes should not override this method.\n * Override `[renderPage]()` instead.\n *\n * The function calls `[renderPage]()` in a micro task so it is safe to call this\n * multiple time in the same event loop.\n */\n render(): TemplateResult | undefined {\n if (this.rendering) {\n return;\n }\n this[renderingValue] = true;\n if (!this[hasPendingUpdatePromise]) {\n this[setUpdatePromise]();\n }\n requestAnimationFrame(() => {\n this[renderingValue] = false;\n this[renderPage]();\n });\n }\n\n [renderPage](): void {\n const root = document.querySelector('#app') as HTMLElement;\n if (!root) {\n // eslint-disable-next-line no-console\n console.warn(`The <div id=\"app\"></div> is not in the document.`);\n return;\n }\n if (!this.firstRendered) {\n this.firstRendered = true;\n // cleanup any pre-existing content.\n Array.from(root.childNodes).forEach(node => node.parentNode?.removeChild(node));\n setTimeout(() => this.firstRender());\n }\n render(this.pageTemplate(), root, { host: this, });\n this[resolveUpdatePromise]();\n this.updated();\n }\n\n [setUpdatePromise](): void {\n this.updateComplete = new Promise((resolve) => {\n this[updateResolver] = resolve;\n this[hasPendingUpdatePromise] = true;\n });\n }\n\n [resolveUpdatePromise](): void {\n if (!this[hasPendingUpdatePromise]) {\n return;\n }\n this[hasPendingUpdatePromise] = false;\n const resolver = this[updateResolver];\n if (resolver) {\n resolver();\n }\n }\n }\n return RenderableMixinClass as Constructor<RenderableMixinInterface> & T;\n});\n"]}
|
|
1
|
+
{"version":3,"file":"RenderableMixin.js","sourceRoot":"","sources":["../../src/mixins/RenderableMixin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable max-classes-per-file */\nimport { dedupeMixin } from '@open-wc/dedupe-mixin';\nimport { html, TemplateResult, render, CSSResult, css } from 'lit';\nimport { reactive } from '../lib/decorators.js';\n\nexport const renderingValue = Symbol('renderingValue');\nexport const renderPage = Symbol('renderPage');\nexport const setUpdatePromise = Symbol('setUpdatePromise');\nexport const updateResolver = Symbol('updateResolver');\nexport const hasPendingUpdatePromise = Symbol('hasPendingUpdatePromise');\nexport const resolveUpdatePromise = Symbol('resolveUpdatePromise');\n\ntype Constructor<T = {}> = new (...args: any[]) => T;\n\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets =\n window.ShadowRoot &&\n 'adoptedStyleSheets' in Document.prototype &&\n 'replace' in CSSStyleSheet.prototype;\n\nexport declare class RenderableMixinInterface {\n /**\n * Determines whether the initial render had run and the `firstRender()`\n * function was called.\n *\n * @default false\n */\n firstRendered: boolean;\n\n /** \n * @type A promise resolved when the render finished.\n */\n updateComplete?: Promise<boolean>;\n\n /** \n * True when rendering debouncer is running.\n */\n get rendering(): boolean;\n\n /**\n * Helper function to be overridden by child classes. It is called when the view\n * is rendered for the first time.\n */\n firstRender(): void;\n\n /**\n * A function called when the template has been rendered\n */\n updated(): void;\n\n /**\n * This to be used by the child classes to render page template.\n * @returns Application page template\n */\n pageTemplate(): TemplateResult;\n\n /**\n * The main render function. Sub classes should not override this method.\n * Override `[renderPage]()` instead.\n *\n * The function calls `[renderPage]()` in a micro task so it is safe to call this\n * multiple time in the same event loop.\n */\n render(): TemplateResult | undefined;\n}\n\n/**\n * Adds methods that helps with asynchronous template rendering.\n * \n * The application page content is rendered into the `#app` container.\n *\n * @mixin\n */\nexport const RenderableMixin = dedupeMixin(<T extends Constructor<any>>(superClass: T): Constructor<RenderableMixinInterface> & T => {\n class RenderableMixinClass extends superClass {\n \n static get styles(): CSSResult | CSSResult[] {\n return css``;\n }\n\n /**\n * Determines whether the initial render had run and the `firstRender()`\n * function was called.\n *\n * @default false\n */\n @reactive() \n firstRendered = false;\n\n [renderingValue] = false;\n\n [hasPendingUpdatePromise] = false;\n\n [updateResolver]?: (value?: any) => void;\n \n\n /** \n * @type A promise resolved when the render finished.\n */\n updateComplete?: Promise<boolean>;\n\n /** \n * True when rendering debouncer is running.\n */\n get rendering(): boolean {\n return this[renderingValue];\n }\n\n constructor(...args: any[]) {\n super(...args);\n this[setUpdatePromise]();\n this.adaptStyles();\n }\n\n protected adaptStyles(): void {\n // @ts-ignore\n const input = this.constructor.styles as CSSResult | CSSResult[];\n if (!input) {\n return;\n }\n let styles = input as CSSResult[];\n if (!Array.isArray(input)) {\n styles = [input];\n }\n if (supportsAdoptingStyleSheets) {\n const sheets = styles.map(i => i.styleSheet);\n // @ts-ignore\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...sheets];\n } else {\n styles.forEach((s) => {\n const style = document.createElement('style');\n style.textContent = (s as CSSResult).cssText;\n document.head.appendChild(style);\n });\n }\n }\n\n /**\n * Helper function to be overridden by child classes. It is called when the view\n * is rendered for the first time.\n */\n firstRender(): void {\n // \n }\n\n /**\n * A function called when the template has been rendered\n */\n updated(): void {\n // \n }\n\n /**\n * This to be used by the child classes to render page template.\n * @returns Application page template\n */\n pageTemplate(): TemplateResult {\n return html``;\n }\n\n /**\n * The main render function. Sub classes should not override this method.\n * Override `[renderPage]()` instead.\n *\n * The function calls `[renderPage]()` in a micro task so it is safe to call this\n * multiple time in the same event loop.\n */\n render(): TemplateResult | undefined {\n if (this.rendering) {\n return;\n }\n this[renderingValue] = true;\n if (!this[hasPendingUpdatePromise]) {\n this[setUpdatePromise]();\n }\n requestAnimationFrame(() => {\n this[renderingValue] = false;\n this[renderPage]();\n });\n }\n\n [renderPage](): void {\n const root = document.querySelector('#app') as HTMLElement;\n if (!root) {\n // eslint-disable-next-line no-console\n console.warn(`The <div id=\"app\"></div> is not in the document.`);\n return;\n }\n if (!this.firstRendered) {\n this.firstRendered = true;\n // cleanup any pre-existing content.\n Array.from(root.childNodes).forEach(node => node.parentNode?.removeChild(node));\n setTimeout(() => this.firstRender());\n }\n render(this.pageTemplate(), root, { host: this, });\n this[resolveUpdatePromise]();\n this.updated();\n }\n\n [setUpdatePromise](): void {\n this.updateComplete = new Promise((resolve) => {\n this[updateResolver] = resolve;\n this[hasPendingUpdatePromise] = true;\n });\n }\n\n [resolveUpdatePromise](): void {\n if (!this[hasPendingUpdatePromise]) {\n return;\n }\n this[hasPendingUpdatePromise] = false;\n const resolver = this[updateResolver];\n if (resolver) {\n resolver();\n }\n }\n }\n return RenderableMixinClass as Constructor<RenderableMixinInterface> & T;\n});\n"]}
|
|
@@ -27,41 +27,6 @@ import { SnackNotifications } from '../ui/notification/SnackNotifications.js';
|
|
|
27
27
|
* meaning, when the property change it calls the `render()` function.
|
|
28
28
|
*/
|
|
29
29
|
export class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget)) {
|
|
30
|
-
eventTarget = window;
|
|
31
|
-
/**
|
|
32
|
-
* True when the app should render mobile friendly view.
|
|
33
|
-
*/
|
|
34
|
-
isMobile = false;
|
|
35
|
-
/**
|
|
36
|
-
* The loading state information.
|
|
37
|
-
*/
|
|
38
|
-
loadingStatus = 'Initializing the application...';
|
|
39
|
-
/**
|
|
40
|
-
* A flag telling the application screen that the logic is initialized.
|
|
41
|
-
*
|
|
42
|
-
* The page can request different initialization logics. When the logic is
|
|
43
|
-
* loaded the flag is set to true.
|
|
44
|
-
*/
|
|
45
|
-
initialized = false;
|
|
46
|
-
/**
|
|
47
|
-
* The page on the screen currently being rendered.
|
|
48
|
-
*/
|
|
49
|
-
page;
|
|
50
|
-
/**
|
|
51
|
-
* The current user.
|
|
52
|
-
* Call the `loadUser()` to populate this.
|
|
53
|
-
*/
|
|
54
|
-
user;
|
|
55
|
-
/**
|
|
56
|
-
* True when the user meta is being loaded.
|
|
57
|
-
*/
|
|
58
|
-
loadingUser = false;
|
|
59
|
-
authenticated = false;
|
|
60
|
-
/**
|
|
61
|
-
* This is automatically set when initializing the store.
|
|
62
|
-
* Basic information about the store.
|
|
63
|
-
*/
|
|
64
|
-
storeInfo;
|
|
65
30
|
/**
|
|
66
31
|
* Checks whether the store is in the single user mode.
|
|
67
32
|
* It also returns true when the store info is not set (before the backend was initialized).
|
|
@@ -73,28 +38,42 @@ export class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget))
|
|
|
73
38
|
}
|
|
74
39
|
return storeInfo.mode === 'single-user';
|
|
75
40
|
}
|
|
76
|
-
pendingResolver;
|
|
77
|
-
/**
|
|
78
|
-
* Detected system theme.
|
|
79
|
-
*/
|
|
80
|
-
systemTheme = 'light';
|
|
81
|
-
/**
|
|
82
|
-
* The theme to use as selected by the user.
|
|
83
|
-
* Default to system default.
|
|
84
|
-
*/
|
|
85
|
-
userTheme = 'default';
|
|
86
|
-
/**
|
|
87
|
-
* Application configuration broadcast channel.
|
|
88
|
-
*/
|
|
89
|
-
configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);
|
|
90
|
-
bindings;
|
|
91
|
-
/**
|
|
92
|
-
* The store environment in use.
|
|
93
|
-
* This is set after the `initializeStore()` was called.
|
|
94
|
-
*/
|
|
95
|
-
env;
|
|
96
41
|
constructor(init) {
|
|
97
42
|
super();
|
|
43
|
+
this.eventTarget = window;
|
|
44
|
+
/**
|
|
45
|
+
* True when the app should render mobile friendly view.
|
|
46
|
+
*/
|
|
47
|
+
this.isMobile = false;
|
|
48
|
+
/**
|
|
49
|
+
* The loading state information.
|
|
50
|
+
*/
|
|
51
|
+
this.loadingStatus = 'Initializing the application...';
|
|
52
|
+
/**
|
|
53
|
+
* A flag telling the application screen that the logic is initialized.
|
|
54
|
+
*
|
|
55
|
+
* The page can request different initialization logics. When the logic is
|
|
56
|
+
* loaded the flag is set to true.
|
|
57
|
+
*/
|
|
58
|
+
this.initialized = false;
|
|
59
|
+
/**
|
|
60
|
+
* True when the user meta is being loaded.
|
|
61
|
+
*/
|
|
62
|
+
this.loadingUser = false;
|
|
63
|
+
this.authenticated = false;
|
|
64
|
+
/**
|
|
65
|
+
* Detected system theme.
|
|
66
|
+
*/
|
|
67
|
+
this.systemTheme = 'light';
|
|
68
|
+
/**
|
|
69
|
+
* The theme to use as selected by the user.
|
|
70
|
+
* Default to system default.
|
|
71
|
+
*/
|
|
72
|
+
this.userTheme = 'default';
|
|
73
|
+
/**
|
|
74
|
+
* Application configuration broadcast channel.
|
|
75
|
+
*/
|
|
76
|
+
this.configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);
|
|
98
77
|
this.bindings = {
|
|
99
78
|
config: init.config,
|
|
100
79
|
store: init.store,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationScreen.js","sourceRoot":"","sources":["../../src/pages/ApplicationScreen.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult } from 'lit';\nimport { IUser, Events as CoreEvents, IBackendInfo } from '@api-client/core/build/browser.js';\nimport { RenderableMixin } from '../mixins/RenderableMixin.js';\nimport { RouteMixin } from '../mixins/RouteMixin.js';\nimport { reactive } from '../lib/decorators.js';\nimport { Events } from '../events/Events.js';\nimport { EventTypes } from '../events/EventTypes.js';\nimport { ConfigBroadcast, ConfigBroadcastChannel, IConfigEnvironment, ThemeType } from '../lib/config/Config.js';\nimport supportedPlatform from '../lib/SupportedPlatform.js';\nimport { ButtonType } from '../ui/button/UiButton.js';\nimport '../define/ui/ui-button.js';\nimport { StoreBindings } from '../bindings/base/StoreBindings.js';\nimport type { AddConfigEnvironmentInit, ConfigurationBindings } from '../bindings/base/ConfigurationBindings.js';\nimport { PlatformBindings } from '../bindings/base/PlatformBindings.js';\nimport { SnackNotifications } from '../ui/notification/SnackNotifications.js';\n\nexport interface ApplicationInit {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n}\n\ninterface ApplicationBindings {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n [key: string]: PlatformBindings;\n}\n\n/**\n * A base class for pages build outside the LitElement. It uses `lit-html` \n * as the template renderer.\n * \n * The implementation (extending this class) should override the `pageTemplate()`\n * function that returns the `TemplateResult` from the `lit-html` library.\n * \n * To reflect the changed state call the `render()` function. The function schedules\n * a micro task (through `requestAnimationFrame`) to call the render function on the template.\n * \n * Use the `@reactive()` decorator from `src/lib/decorators.js` to mark a property as reactive,\n * meaning, when the property change it calls the `render()` function.\n */\nexport abstract class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget)) {\n @reactive() eventTarget: EventTarget = window;\n\n /** \n * True when the app should render mobile friendly view.\n */\n @reactive() isMobile = false;\n\n /** \n * The loading state information.\n */\n @reactive() loadingStatus = 'Initializing the application...';\n\n /**\n * A flag telling the application screen that the logic is initialized.\n * \n * The page can request different initialization logics. When the logic is\n * loaded the flag is set to true.\n */\n @reactive() initialized = false;\n\n /**\n * The page on the screen currently being rendered.\n */\n @reactive() page?: string;\n\n /**\n * The current user.\n * Call the `loadUser()` to populate this.\n */\n @reactive() user?: IUser;\n\n /**\n * True when the user meta is being loaded.\n */\n @reactive() protected loadingUser = false;\n \n @reactive() protected authenticated = false;\n\n /**\n * This is automatically set when initializing the store.\n * Basic information about the store.\n */\n protected storeInfo?: IBackendInfo;\n\n /**\n * Checks whether the store is in the single user mode.\n * It also returns true when the store info is not set (before the backend was initialized).\n */\n get isSingleUser(): boolean {\n const { storeInfo } = this;\n if (!storeInfo) {\n return true;\n }\n return storeInfo.mode === 'single-user';\n }\n\n protected pendingResolver?: (value: void | PromiseLike<void>) => void;\n\n /**\n * Detected system theme.\n */\n systemTheme: 'light' | 'dark' = 'light';\n\n /**\n * The theme to use as selected by the user.\n * Default to system default.\n */\n userTheme: ThemeType = 'default';\n\n /**\n * Application configuration broadcast channel.\n */\n configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);\n\n bindings: ApplicationBindings;\n\n /**\n * The store environment in use.\n * This is set after the `initializeStore()` was called.\n */\n env?: IConfigEnvironment;\n\n constructor(init: ApplicationInit) {\n super();\n this.bindings = {\n config: init.config,\n store: init.store,\n };\n window.onunhandledrejection = this.unhandledRejectionHandler.bind(this);\n this.initMediaQueries();\n this.initStoreChange();\n this.configBroadcast.addEventListener('message', this.handleConfigBroadcast.bind(this))\n }\n\n /**\n * Called once when the page is being initialized.\n */\n abstract initialize(): Promise<void>;\n\n /**\n * Initializes configuration that is relevant to all application windows.\n */\n async initializeConfig(): Promise<void> {\n const { config } = this.bindings;\n const theme = await config.local.get('theme') as ThemeType | undefined;\n if (theme) {\n this.userTheme = theme;\n }\n this.themeActiveCallback();\n }\n\n /**\n * Initializes media queries and observers.\n */\n initMediaQueries(): void {\n const mql = window.matchMedia('(max-width: 600px)');\n this.isMobile = mql.matches;\n mql.addEventListener('change', (e) => {\n this.isMobile = e.matches;\n });\n\n const dark = window.matchMedia('(prefers-color-scheme: dark)');\n if (dark.matches) {\n this.systemTheme = 'dark';\n }\n dark.addEventListener('change', (e) => {\n this.systemTheme = e.matches ? 'dark' : 'light';\n this.themeActiveCallback();\n });\n }\n\n protected themeActiveCallback(): void {\n const { systemTheme, userTheme } = this;\n let theme: 'light' | 'dark';\n if (userTheme === 'default') {\n theme = systemTheme;\n } else {\n theme = userTheme;\n }\n this.activateTheme(theme);\n }\n\n protected activateTheme(type: 'light' | 'dark'): void {\n const root = document.querySelector('html');\n if (!root) {\n return;\n }\n const { classList } = root;\n // clear all themes\n classList.forEach((value) => {\n if (value.startsWith('theme-')) {\n classList.remove(value);\n }\n });\n const name = `theme-${type}`;\n classList.add(name);\n }\n\n async isPlatformSupported(): Promise<boolean> {\n const result = await supportedPlatform();\n if (!result) {\n this.page = 'unsupported-platform';\n }\n return result;\n }\n\n initStoreChange(): void {\n window.addEventListener(EventTypes.Config.Environment.State.defaultChange, (e: Event) => {\n const event = e as CustomEvent;\n const id = event.detail.id as string;\n this.storeChanged(id);\n });\n }\n\n /**\n * Override in a child class to implement a logic that runs when the default \n * store change in the configuration.\n * \n * @param id The id of the activated environment. When missing it means there's no default environment.\n */\n abstract storeChanged(id?: string): Promise<void>;\n\n /**\n * Creates a modal dialog with the error details.\n * @param message The message to render\n */\n reportCriticalError(message: string): void {\n try {\n const dialog = document.createElement('dialog');\n const form = document.createElement('form');\n const title = document.createElement('h2');\n const content = document.createElement('div');\n const messageContainer = document.createElement('p');\n const buttons = document.createElement('div');\n const button = document.createElement('ui-button');\n dialog.classList.add('error-dialog');\n form.method = 'method';\n title.innerText = `An error ocurred`;\n messageContainer.classList.add('body-medium');\n messageContainer.textContent = message;\n content.appendChild(messageContainer);\n button.textContent = 'Dismiss';\n button.type = ButtonType.filled;\n button.value = 'submit';\n button.submit = true;\n buttons.classList.add('dialog-buttons');\n buttons.appendChild(button);\n form.appendChild(title);\n form.appendChild(content);\n form.appendChild(buttons);\n dialog.appendChild(form);\n document.body.appendChild(dialog);\n dialog.showModal();\n form.addEventListener('submit', (e: SubmitEvent) => {\n e.preventDefault();\n dialog.close();\n });\n dialog.addEventListener('close', () => {\n dialog.parentElement?.removeChild(dialog);\n });\n } catch (e) {\n /* eslint-disable-next-line no-console */ \n console.error(e);\n }\n }\n\n unhandledRejectionHandler(e: PromiseRejectionEvent): void {\n /* eslint-disable-next-line no-console */\n console.error(e);\n this.reportCriticalError(e.reason);\n }\n\n protected handleConfigBroadcast(e: MessageEvent): void {\n const event = e.data as ConfigBroadcast;\n const { path } = event;\n if (path === 'local.set') {\n this.handleLocalConfigUpdated(event.key as string, event.value as unknown);\n } else if (path === 'environment.setDefault') {\n this.handleDefaultEnvironmentSet(event.env as IConfigEnvironment);\n } else if (path === 'environment.add') {\n this.handleEnvironmentAdd(event.env as IConfigEnvironment, event.init as AddConfigEnvironmentInit);\n }\n }\n\n protected handleLocalConfigUpdated(key: string, value: unknown): void {\n if (key === 'theme') {\n this.userTheme = value as ThemeType;\n this.themeActiveCallback();\n }\n }\n\n protected handleDefaultEnvironmentSet(env: IConfigEnvironment): void {\n const { initialized, bindings } = this;\n this.env = env;\n bindings.store.global.set(env);\n this.resolvePending();\n if (initialized) {\n this.storeChanged(env.key);\n }\n }\n\n protected handleEnvironmentAdd(env: IConfigEnvironment, init: AddConfigEnvironmentInit = {}): void {\n if (!init.asDefault) {\n return;\n }\n this.handleDefaultEnvironmentSet(env);\n }\n\n /**\n * Called from the initialize store init flow when the user is not authenticated\n * and the auth screen is rendered.\n */\n protected async _authHandler(): Promise<void> {\n const { store } = this.bindings;\n await store.auth.authenticate({ updateEnvironment: true });\n this.authenticated = true;\n this.resolvePending();\n }\n\n protected handleOpenStoreConfig(): void {\n Events.Navigation.Store.config();\n }\n\n /**\n * Initializes the flow where an environment is required.\n * This checks for the default environment.\n * When it doesn't exists it asks the user to pick existing environment \n * or to create one.\n * When a default environment exists, it performs authentication\n * when necessary. \n * \n * Eventually it returns the HTTP store with an authenticated environment.\n * \n * @param defaultFlows When set to `true` is renders default pages for env selector \n * or when to authenticate. When false it throws errors instead. Default to `true`.\n */\n protected async initializeStore(defaultFlows = true): Promise<void> {\n const { store, config } = this.bindings;\n let env: IConfigEnvironment | undefined;\n try {\n env = await config.environment.read();\n } catch (e) { \n if (!defaultFlows) {\n throw e;\n }\n }\n if (!env || !env.location) {\n await this.enterEnvironmentMissingFlow();\n }\n if (!env || !env.location) {\n return;\n }\n this.env = env;\n await store.global.set(env);\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n } catch (e) {\n if (!defaultFlows) {\n throw e;\n }\n await this.enterStoreUnavailableFlow();\n }\n const authStatus = await store.auth.isAuthenticated();\n if (!authStatus) {\n if (!defaultFlows) {\n throw new Error(`Not authenticated.`);\n }\n await this.enterAuthenticationRequiredFlow();\n }\n this.authenticated = true;\n }\n\n async loadUser(): Promise<void> {\n this.loadingUser = true;\n try {\n this.user = await this.bindings.store.users.me();\n } catch (e) {\n CoreEvents.Telemetry.exception(`Loading user: ${(e as Error).message}`, undefined, this.eventTarget || window);\n } finally {\n this.loadingUser = false;\n }\n }\n\n private enterEnvironmentMissingFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'env-required';\n });\n }\n\n private enterAuthenticationRequiredFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'auth-required';\n });\n }\n \n\n /**\n * Enters into the flow where the application is unable to connect to the data store.\n * It asks user to retry or re-configure.\n * \n * Note, this is called from withing the `initializeStore()` method and this is expected to\n * eventually finish.\n */\n private enterStoreUnavailableFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'store-unavailable';\n });\n }\n\n protected async handleRetryStoreInfo(): Promise<void> {\n const { bindings, env } = this;\n const { store } = bindings;\n if (!env) {\n // this should not happen as we enter this flow after the env is set.\n return;\n }\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n this.resolvePending();\n } catch (_) {\n SnackNotifications.notify(`Unable to connect.`);\n }\n }\n\n private resolvePending(): void {\n const { pendingResolver } = this;\n if (pendingResolver) {\n this.pendingResolver = undefined;\n pendingResolver();\n }\n }\n\n /**\n * @returns A template for the page loader\n */\n loaderTemplate(): TemplateResult {\n return html`\n <div class=\"app-loader body-large\">\n <p class=\"message\">Preparing something spectacular</p>\n <p class=\"sub-message\">${this.loadingStatus}</p>\n </div>\n `;\n }\n\n override pageTemplate(): TemplateResult {\n const { initialized } = this;\n if (!initialized) {\n if (this.page) {\n return html`\n ${this.renderInitFlowPage()}\n `;\n }\n return this.loaderTemplate();\n }\n return html``;\n }\n\n protected headerTemplate(): TemplateResult {\n return html`\n <header>Welcome</header>\n `;\n }\n\n protected mainTemplate(): TemplateResult {\n return html`<main></main>`;\n }\n\n protected footerTemplate(): TemplateResult {\n return html`<footer>Credits: Pawel Uchida-Psztyc</footer>`;\n }\n\n protected navigationTemplate(): TemplateResult {\n return html`<nav></nav>`;\n }\n\n protected renderInitFlowPage(): TemplateResult {\n switch (this.page) {\n case 'auth-required': return this.renderAuthRequired();\n case 'env-required': return this.renderEnvRequired();\n case 'unsupported-platform': return this.renderPlatformNotSupported();\n case 'store-unavailable': return this.renderStoreUnavailable();\n default: return html`<p class=\"general-error\">Unknown state. Did you set the <i>initialized</i> flag?</p>`;\n }\n }\n\n /**\n * Renders a full page overlay with the authentication required message.\n */\n protected renderAuthRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Authentication required</h1>\n <p class=\"body-large\">You are not authenticated. To continue, please, authenticate your account.</p>\n <ui-button type=\"tonal\" @click=\"${this._authHandler}\">Authenticate</ui-button>\n </div>\n `;\n }\n\n protected renderEnvRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Environment configuration missing</h1>\n <p class=\"body-large\">\n The application is unable to determine which environment to use.\n Open the <b>store configuration</b> screen to configure the connection.\n </p>\n <ui-button type=\"tonal\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n `;\n }\n\n protected renderPlatformNotSupported(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unsupported platform</h1>\n <p class=\"body-large\">\n It looks like your browser does not support one of the crucial features needed to run\n this application. Accept our apologies, we work hard to support as many browsers as possible. \n </p>\n </div>\n `;\n }\n\n protected renderStoreUnavailable(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unable to connect</h1>\n <p class=\"body-large\">\n It looks like you or the data store are offline. The application is unable to continue\n without a connection to the backend.\n </p>\n <div class=\"actions\">\n <ui-button type=\"tonal\" @click=\"${this.handleRetryStoreInfo}\">Retry</ui-button>\n <ui-button type=\"outlined\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n </div>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ApplicationScreen.js","sourceRoot":"","sources":["../../src/pages/ApplicationScreen.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,2CAA2C;AAC3C,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAS,MAAM,IAAI,UAAU,EAAgB,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAmB,sBAAsB,EAAiC,MAAM,yBAAyB,CAAC;AACjH,OAAO,iBAAiB,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,2BAA2B,CAAC;AAInC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAyB9E;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,iBAAkB,SAAQ,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IA6CtF;;;OAGG;IACH,IAAI,YAAY;QACd,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,IAAI,CAAC;SACb;QACD,OAAO,SAAS,CAAC,IAAI,KAAK,aAAa,CAAC;IAC1C,CAAC;IA4BD,YAAY,IAAqB;QAC/B,KAAK,EAAE,CAAC;QAnFE,gBAAW,GAAgB,MAAM,CAAC;QAE9C;;WAEG;QACS,aAAQ,GAAG,KAAK,CAAC;QAE7B;;WAEG;QACS,kBAAa,GAAG,iCAAiC,CAAC;QAE9D;;;;;WAKG;QACS,gBAAW,GAAG,KAAK,CAAC;QAahC;;WAEG;QACmB,gBAAW,GAAG,KAAK,CAAC;QAEpB,kBAAa,GAAG,KAAK,CAAC;QAsB5C;;WAEG;QACH,gBAAW,GAAqB,OAAO,CAAC;QAExC;;;WAGG;QACH,cAAS,GAAc,SAAS,CAAC;QAEjC;;WAEG;QACH,oBAAe,GAAG,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAY7D,IAAI,CAAC,QAAQ,GAAG;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QACF,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACzF,CAAC;IAOD;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAA0B,CAAC;QACvE,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;SAC3B;QACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB;QAC3B,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACxC,IAAI,KAAuB,CAAC;QAC5B,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,KAAK,GAAG,WAAW,CAAC;SACrB;aAAM;YACL,KAAK,GAAG,SAAS,CAAC;SACnB;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAES,aAAa,CAAC,IAAsB;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC3B,mBAAmB;QACnB,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC9B,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,IAAI,EAAE,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;SACpC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe;QACb,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAQ,EAAE,EAAE;YACtF,MAAM,KAAK,GAAG,CAAgB,CAAC;YAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAY,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAUD;;;OAGG;IACH,mBAAmB,CAAC,OAAe;QACjC,IAAI;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;YACrC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9C,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC;YACvC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;YAC/B,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;YAChC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;YACxB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAc,EAAE,EAAE;gBACjD,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;YACV,yCAAyC;YACzC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClB;IACH,CAAC;IAED,yBAAyB,CAAC,CAAwB;QAChD,yCAAyC;QACzC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAES,qBAAqB,CAAC,CAAe;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAuB,CAAC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAa,EAAE,KAAK,CAAC,KAAgB,CAAC,CAAC;SAC5E;aAAM,IAAI,IAAI,KAAK,wBAAwB,EAAE;YAC5C,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,GAAyB,CAAC,CAAC;SACnE;aAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE;YACrC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAyB,EAAE,KAAK,CAAC,IAAgC,CAAC,CAAC;SACpG;IACH,CAAC;IAES,wBAAwB,CAAC,GAAW,EAAE,KAAc;QAC5D,IAAI,GAAG,KAAK,OAAO,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,KAAkB,CAAC;YACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;IACH,CAAC;IAES,2BAA2B,CAAC,GAAuB;QAC3D,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC5B;IACH,CAAC;IAES,oBAAoB,CAAC,GAAuB,EAAE,OAAiC,EAAE;QACzF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,YAAY;QAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAES,qBAAqB;QAC7B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,KAAK,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI;QACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,GAAmC,CAAC;QACxC,IAAI;YACF,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACvC;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,CAAC,CAAC;aACT;SACF;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,OAAO;SACR;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI;YACF,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SACtE;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,CAAC,CAAC;aACT;YACD,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACxC;QACD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACvC;YACD,MAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;SAC9C;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI;YACF,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;SAClD;QAAC,OAAO,CAAC,EAAE;YACV,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAkB,CAAW,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;SAChH;gBAAS;YACR,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B;IACH,CAAC;IAEO,2BAA2B;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,+BAA+B;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAGD;;;;;;OAMG;IACK,yBAAyB;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,oBAAoB;QAClC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE;YACR,qEAAqE;YACrE,OAAO;SACR;QACD,IAAI;YACF,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrE,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;QAAC,OAAO,CAAC,EAAE;YACV,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;SACjD;IACH,CAAC;IAEO,cAAc;QACpB,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,eAAe,EAAE,CAAC;SACnB;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAA;;;+BAGgB,IAAI,CAAC,aAAa;;KAE5C,CAAC;IACJ,CAAC;IAEQ,YAAY;QACnB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,OAAO,IAAI,CAAA;UACT,IAAI,CAAC,kBAAkB,EAAE;SAC1B,CAAC;aACH;YACD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;SAC9B;QACD,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAES,cAAc;QACtB,OAAO,IAAI,CAAA;;KAEV,CAAC;IACJ,CAAC;IAES,YAAY;QACpB,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;IAES,cAAc;QACtB,OAAO,IAAI,CAAA,+CAA+C,CAAC;IAC7D,CAAC;IAES,kBAAkB;QAC1B,OAAO,IAAI,CAAA,aAAa,CAAC;IAC3B,CAAC;IAES,kBAAkB;QAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,eAAe,CAAC,CAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACvD,KAAK,cAAc,CAAC,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrD,KAAK,sBAAsB,CAAC,CAAC,OAAO,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACtE,KAAK,mBAAmB,CAAC,CAAC,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC/D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA,sFAAsF,CAAC;SAC5G;IACH,CAAC;IAED;;OAEG;IACO,kBAAkB;QAC1B,OAAO,IAAI,CAAA;;;;wCAIyB,IAAI,CAAC,YAAY;;KAEpD,CAAC;IACJ,CAAC;IAES,iBAAiB;QACzB,OAAO,IAAI,CAAA;;;;;;;wCAOyB,IAAI,CAAC,qBAAqB;;KAE7D,CAAC;IACJ,CAAC;IAES,0BAA0B;QAClC,OAAO,IAAI,CAAA;;;;;;;;KAQV,CAAC;IACJ,CAAC;IAES,sBAAsB;QAC9B,OAAO,IAAI,CAAA;;;;;;;;0CAQ2B,IAAI,CAAC,oBAAoB;6CACtB,IAAI,CAAC,qBAAqB;;;KAGlE,CAAC;IACJ,CAAC;CACF;AArfa;IAAX,QAAQ,EAAE;sDAAmC;AAKlC;IAAX,QAAQ,EAAE;mDAAkB;AAKjB;IAAX,QAAQ,EAAE;wDAAmD;AAQlD;IAAX,QAAQ,EAAE;sDAAqB;AAKpB;IAAX,QAAQ,EAAE;+CAAe;AAMd;IAAX,QAAQ,EAAE;+CAAc;AAKb;IAAX,QAAQ,EAAE;sDAA+B;AAE9B;IAAX,QAAQ,EAAE;wDAAiC","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult } from 'lit';\nimport { IUser, Events as CoreEvents, IBackendInfo } from '@api-client/core/build/browser.js';\nimport { RenderableMixin } from '../mixins/RenderableMixin.js';\nimport { RouteMixin } from '../mixins/RouteMixin.js';\nimport { reactive } from '../lib/decorators.js';\nimport { Events } from '../events/Events.js';\nimport { EventTypes } from '../events/EventTypes.js';\nimport { ConfigBroadcast, ConfigBroadcastChannel, IConfigEnvironment, ThemeType } from '../lib/config/Config.js';\nimport supportedPlatform from '../lib/SupportedPlatform.js';\nimport { ButtonType } from '../ui/button/UiButton.js';\nimport '../define/ui/ui-button.js';\nimport { StoreBindings } from '../bindings/base/StoreBindings.js';\nimport type { AddConfigEnvironmentInit, ConfigurationBindings } from '../bindings/base/ConfigurationBindings.js';\nimport { PlatformBindings } from '../bindings/base/PlatformBindings.js';\nimport { SnackNotifications } from '../ui/notification/SnackNotifications.js';\n\nexport interface ApplicationInit {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n}\n\ninterface ApplicationBindings {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n [key: string]: PlatformBindings;\n}\n\n/**\n * A base class for pages build outside the LitElement. It uses `lit-html` \n * as the template renderer.\n * \n * The implementation (extending this class) should override the `pageTemplate()`\n * function that returns the `TemplateResult` from the `lit-html` library.\n * \n * To reflect the changed state call the `render()` function. The function schedules\n * a micro task (through `requestAnimationFrame`) to call the render function on the template.\n * \n * Use the `@reactive()` decorator from `src/lib/decorators.js` to mark a property as reactive,\n * meaning, when the property change it calls the `render()` function.\n */\nexport abstract class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget)) {\n @reactive() eventTarget: EventTarget = window;\n\n /** \n * True when the app should render mobile friendly view.\n */\n @reactive() isMobile = false;\n\n /** \n * The loading state information.\n */\n @reactive() loadingStatus = 'Initializing the application...';\n\n /**\n * A flag telling the application screen that the logic is initialized.\n * \n * The page can request different initialization logics. When the logic is\n * loaded the flag is set to true.\n */\n @reactive() initialized = false;\n\n /**\n * The page on the screen currently being rendered.\n */\n @reactive() page?: string;\n\n /**\n * The current user.\n * Call the `loadUser()` to populate this.\n */\n @reactive() user?: IUser;\n\n /**\n * True when the user meta is being loaded.\n */\n @reactive() protected loadingUser = false;\n \n @reactive() protected authenticated = false;\n\n /**\n * This is automatically set when initializing the store.\n * Basic information about the store.\n */\n protected storeInfo?: IBackendInfo;\n\n /**\n * Checks whether the store is in the single user mode.\n * It also returns true when the store info is not set (before the backend was initialized).\n */\n get isSingleUser(): boolean {\n const { storeInfo } = this;\n if (!storeInfo) {\n return true;\n }\n return storeInfo.mode === 'single-user';\n }\n\n protected pendingResolver?: (value: void | PromiseLike<void>) => void;\n\n /**\n * Detected system theme.\n */\n systemTheme: 'light' | 'dark' = 'light';\n\n /**\n * The theme to use as selected by the user.\n * Default to system default.\n */\n userTheme: ThemeType = 'default';\n\n /**\n * Application configuration broadcast channel.\n */\n configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);\n\n bindings: ApplicationBindings;\n\n /**\n * The store environment in use.\n * This is set after the `initializeStore()` was called.\n */\n env?: IConfigEnvironment;\n\n constructor(init: ApplicationInit) {\n super();\n this.bindings = {\n config: init.config,\n store: init.store,\n };\n window.onunhandledrejection = this.unhandledRejectionHandler.bind(this);\n this.initMediaQueries();\n this.initStoreChange();\n this.configBroadcast.addEventListener('message', this.handleConfigBroadcast.bind(this))\n }\n\n /**\n * Called once when the page is being initialized.\n */\n abstract initialize(): Promise<void>;\n\n /**\n * Initializes configuration that is relevant to all application windows.\n */\n async initializeConfig(): Promise<void> {\n const { config } = this.bindings;\n const theme = await config.local.get('theme') as ThemeType | undefined;\n if (theme) {\n this.userTheme = theme;\n }\n this.themeActiveCallback();\n }\n\n /**\n * Initializes media queries and observers.\n */\n initMediaQueries(): void {\n const mql = window.matchMedia('(max-width: 600px)');\n this.isMobile = mql.matches;\n mql.addEventListener('change', (e) => {\n this.isMobile = e.matches;\n });\n\n const dark = window.matchMedia('(prefers-color-scheme: dark)');\n if (dark.matches) {\n this.systemTheme = 'dark';\n }\n dark.addEventListener('change', (e) => {\n this.systemTheme = e.matches ? 'dark' : 'light';\n this.themeActiveCallback();\n });\n }\n\n protected themeActiveCallback(): void {\n const { systemTheme, userTheme } = this;\n let theme: 'light' | 'dark';\n if (userTheme === 'default') {\n theme = systemTheme;\n } else {\n theme = userTheme;\n }\n this.activateTheme(theme);\n }\n\n protected activateTheme(type: 'light' | 'dark'): void {\n const root = document.querySelector('html');\n if (!root) {\n return;\n }\n const { classList } = root;\n // clear all themes\n classList.forEach((value) => {\n if (value.startsWith('theme-')) {\n classList.remove(value);\n }\n });\n const name = `theme-${type}`;\n classList.add(name);\n }\n\n async isPlatformSupported(): Promise<boolean> {\n const result = await supportedPlatform();\n if (!result) {\n this.page = 'unsupported-platform';\n }\n return result;\n }\n\n initStoreChange(): void {\n window.addEventListener(EventTypes.Config.Environment.State.defaultChange, (e: Event) => {\n const event = e as CustomEvent;\n const id = event.detail.id as string;\n this.storeChanged(id);\n });\n }\n\n /**\n * Override in a child class to implement a logic that runs when the default \n * store change in the configuration.\n * \n * @param id The id of the activated environment. When missing it means there's no default environment.\n */\n abstract storeChanged(id?: string): Promise<void>;\n\n /**\n * Creates a modal dialog with the error details.\n * @param message The message to render\n */\n reportCriticalError(message: string): void {\n try {\n const dialog = document.createElement('dialog');\n const form = document.createElement('form');\n const title = document.createElement('h2');\n const content = document.createElement('div');\n const messageContainer = document.createElement('p');\n const buttons = document.createElement('div');\n const button = document.createElement('ui-button');\n dialog.classList.add('error-dialog');\n form.method = 'method';\n title.innerText = `An error ocurred`;\n messageContainer.classList.add('body-medium');\n messageContainer.textContent = message;\n content.appendChild(messageContainer);\n button.textContent = 'Dismiss';\n button.type = ButtonType.filled;\n button.value = 'submit';\n button.submit = true;\n buttons.classList.add('dialog-buttons');\n buttons.appendChild(button);\n form.appendChild(title);\n form.appendChild(content);\n form.appendChild(buttons);\n dialog.appendChild(form);\n document.body.appendChild(dialog);\n dialog.showModal();\n form.addEventListener('submit', (e: SubmitEvent) => {\n e.preventDefault();\n dialog.close();\n });\n dialog.addEventListener('close', () => {\n dialog.parentElement?.removeChild(dialog);\n });\n } catch (e) {\n /* eslint-disable-next-line no-console */ \n console.error(e);\n }\n }\n\n unhandledRejectionHandler(e: PromiseRejectionEvent): void {\n /* eslint-disable-next-line no-console */\n console.error(e);\n this.reportCriticalError(e.reason);\n }\n\n protected handleConfigBroadcast(e: MessageEvent): void {\n const event = e.data as ConfigBroadcast;\n const { path } = event;\n if (path === 'local.set') {\n this.handleLocalConfigUpdated(event.key as string, event.value as unknown);\n } else if (path === 'environment.setDefault') {\n this.handleDefaultEnvironmentSet(event.env as IConfigEnvironment);\n } else if (path === 'environment.add') {\n this.handleEnvironmentAdd(event.env as IConfigEnvironment, event.init as AddConfigEnvironmentInit);\n }\n }\n\n protected handleLocalConfigUpdated(key: string, value: unknown): void {\n if (key === 'theme') {\n this.userTheme = value as ThemeType;\n this.themeActiveCallback();\n }\n }\n\n protected handleDefaultEnvironmentSet(env: IConfigEnvironment): void {\n const { initialized, bindings } = this;\n this.env = env;\n bindings.store.global.set(env);\n this.resolvePending();\n if (initialized) {\n this.storeChanged(env.key);\n }\n }\n\n protected handleEnvironmentAdd(env: IConfigEnvironment, init: AddConfigEnvironmentInit = {}): void {\n if (!init.asDefault) {\n return;\n }\n this.handleDefaultEnvironmentSet(env);\n }\n\n /**\n * Called from the initialize store init flow when the user is not authenticated\n * and the auth screen is rendered.\n */\n protected async _authHandler(): Promise<void> {\n const { store } = this.bindings;\n await store.auth.authenticate({ updateEnvironment: true });\n this.authenticated = true;\n this.resolvePending();\n }\n\n protected handleOpenStoreConfig(): void {\n Events.Navigation.Store.config();\n }\n\n /**\n * Initializes the flow where an environment is required.\n * This checks for the default environment.\n * When it doesn't exists it asks the user to pick existing environment \n * or to create one.\n * When a default environment exists, it performs authentication\n * when necessary. \n * \n * Eventually it returns the HTTP store with an authenticated environment.\n * \n * @param defaultFlows When set to `true` is renders default pages for env selector \n * or when to authenticate. When false it throws errors instead. Default to `true`.\n */\n protected async initializeStore(defaultFlows = true): Promise<void> {\n const { store, config } = this.bindings;\n let env: IConfigEnvironment | undefined;\n try {\n env = await config.environment.read();\n } catch (e) { \n if (!defaultFlows) {\n throw e;\n }\n }\n if (!env || !env.location) {\n await this.enterEnvironmentMissingFlow();\n }\n if (!env || !env.location) {\n return;\n }\n this.env = env;\n await store.global.set(env);\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n } catch (e) {\n if (!defaultFlows) {\n throw e;\n }\n await this.enterStoreUnavailableFlow();\n }\n const authStatus = await store.auth.isAuthenticated();\n if (!authStatus) {\n if (!defaultFlows) {\n throw new Error(`Not authenticated.`);\n }\n await this.enterAuthenticationRequiredFlow();\n }\n this.authenticated = true;\n }\n\n async loadUser(): Promise<void> {\n this.loadingUser = true;\n try {\n this.user = await this.bindings.store.users.me();\n } catch (e) {\n CoreEvents.Telemetry.exception(`Loading user: ${(e as Error).message}`, undefined, this.eventTarget || window);\n } finally {\n this.loadingUser = false;\n }\n }\n\n private enterEnvironmentMissingFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'env-required';\n });\n }\n\n private enterAuthenticationRequiredFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'auth-required';\n });\n }\n \n\n /**\n * Enters into the flow where the application is unable to connect to the data store.\n * It asks user to retry or re-configure.\n * \n * Note, this is called from withing the `initializeStore()` method and this is expected to\n * eventually finish.\n */\n private enterStoreUnavailableFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'store-unavailable';\n });\n }\n\n protected async handleRetryStoreInfo(): Promise<void> {\n const { bindings, env } = this;\n const { store } = bindings;\n if (!env) {\n // this should not happen as we enter this flow after the env is set.\n return;\n }\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n this.resolvePending();\n } catch (_) {\n SnackNotifications.notify(`Unable to connect.`);\n }\n }\n\n private resolvePending(): void {\n const { pendingResolver } = this;\n if (pendingResolver) {\n this.pendingResolver = undefined;\n pendingResolver();\n }\n }\n\n /**\n * @returns A template for the page loader\n */\n loaderTemplate(): TemplateResult {\n return html`\n <div class=\"app-loader body-large\">\n <p class=\"message\">Preparing something spectacular</p>\n <p class=\"sub-message\">${this.loadingStatus}</p>\n </div>\n `;\n }\n\n override pageTemplate(): TemplateResult {\n const { initialized } = this;\n if (!initialized) {\n if (this.page) {\n return html`\n ${this.renderInitFlowPage()}\n `;\n }\n return this.loaderTemplate();\n }\n return html``;\n }\n\n protected headerTemplate(): TemplateResult {\n return html`\n <header>Welcome</header>\n `;\n }\n\n protected mainTemplate(): TemplateResult {\n return html`<main></main>`;\n }\n\n protected footerTemplate(): TemplateResult {\n return html`<footer>Credits: Pawel Uchida-Psztyc</footer>`;\n }\n\n protected navigationTemplate(): TemplateResult {\n return html`<nav></nav>`;\n }\n\n protected renderInitFlowPage(): TemplateResult {\n switch (this.page) {\n case 'auth-required': return this.renderAuthRequired();\n case 'env-required': return this.renderEnvRequired();\n case 'unsupported-platform': return this.renderPlatformNotSupported();\n case 'store-unavailable': return this.renderStoreUnavailable();\n default: return html`<p class=\"general-error\">Unknown state. Did you set the <i>initialized</i> flag?</p>`;\n }\n }\n\n /**\n * Renders a full page overlay with the authentication required message.\n */\n protected renderAuthRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Authentication required</h1>\n <p class=\"body-large\">You are not authenticated. To continue, please, authenticate your account.</p>\n <ui-button type=\"tonal\" @click=\"${this._authHandler}\">Authenticate</ui-button>\n </div>\n `;\n }\n\n protected renderEnvRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Environment configuration missing</h1>\n <p class=\"body-large\">\n The application is unable to determine which environment to use.\n Open the <b>store configuration</b> screen to configure the connection.\n </p>\n <ui-button type=\"tonal\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n `;\n }\n\n protected renderPlatformNotSupported(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unsupported platform</h1>\n <p class=\"body-large\">\n It looks like your browser does not support one of the crucial features needed to run\n this application. Accept our apologies, we work hard to support as many browsers as possible. \n </p>\n </div>\n `;\n }\n\n protected renderStoreUnavailable(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unable to connect</h1>\n <p class=\"body-large\">\n It looks like you or the data store are offline. The application is unable to continue\n without a connection to the backend.\n </p>\n <div class=\"actions\">\n <ui-button type=\"tonal\" @click=\"${this.handleRetryStoreInfo}\">Retry</ui-button>\n <ui-button type=\"outlined\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n </div>\n `;\n }\n}\n"]}
|
|
@@ -50,19 +50,6 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
50
50
|
const { spaces } = this;
|
|
51
51
|
return !!spaces && !!spaces.length;
|
|
52
52
|
}
|
|
53
|
-
/**
|
|
54
|
-
* @The list of user spaces.
|
|
55
|
-
*/
|
|
56
|
-
spaces = [];
|
|
57
|
-
/**
|
|
58
|
-
* The pagination cursor for workspaces.
|
|
59
|
-
* As long there's a cursor, there are more spaces to request.
|
|
60
|
-
*/
|
|
61
|
-
spacesCursor;
|
|
62
|
-
/**
|
|
63
|
-
* The currently selected space.
|
|
64
|
-
*/
|
|
65
|
-
selectedSpace;
|
|
66
53
|
/**
|
|
67
54
|
* The definition of the selected space.
|
|
68
55
|
*/
|
|
@@ -73,15 +60,19 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
73
60
|
}
|
|
74
61
|
return spaces.find(i => i.key === selectedSpace);
|
|
75
62
|
}
|
|
76
|
-
files = new FilesPage(this);
|
|
77
|
-
shared = new SharedPage(this);
|
|
78
|
-
trash = new TrashPage(this);
|
|
79
|
-
settings = new SettingsPage(this);
|
|
80
|
-
filesChannel = new BroadcastChannel(StoreBroadcast.files);
|
|
81
|
-
spacesChannel = new BroadcastChannel(StoreBroadcast.spaces);
|
|
82
|
-
trashChannel = new BroadcastChannel(StoreBroadcast.trash);
|
|
83
63
|
constructor(init) {
|
|
84
64
|
super(init);
|
|
65
|
+
/**
|
|
66
|
+
* @The list of user spaces.
|
|
67
|
+
*/
|
|
68
|
+
this.spaces = [];
|
|
69
|
+
this.files = new FilesPage(this);
|
|
70
|
+
this.shared = new SharedPage(this);
|
|
71
|
+
this.trash = new TrashPage(this);
|
|
72
|
+
this.settings = new SettingsPage(this);
|
|
73
|
+
this.filesChannel = new BroadcastChannel(StoreBroadcast.files);
|
|
74
|
+
this.spacesChannel = new BroadcastChannel(StoreBroadcast.spaces);
|
|
75
|
+
this.trashChannel = new BroadcastChannel(StoreBroadcast.trash);
|
|
85
76
|
this.bindings.idb = init.idb;
|
|
86
77
|
this.bindings.navigation = init.navigation;
|
|
87
78
|
this.bindings.files = init.files;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiClient.screen.js","sourceRoot":"","sources":["../../../src/pages/api-client/ApiClient.screen.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-cycle */\nimport { html, TemplateResult, CSSResult, nothing } from 'lit';\nimport { BroadcastCreatedEvent, BroadcastEvent, IFile, ISpace, uuidV4 } from '@api-client/core/build/browser.js';\nimport { ApplicationInit, ApplicationScreen } from '../ApplicationScreen.js';\nimport { IRoute, IRouteResult } from '../../mixins/RouteMixin.js';\nimport pageStyles from './ApiClient.styles.js';\nimport globalStyles from '../../styles/global-styles.js';\nimport typography from '../../styles/m3/typography.module.js';\nimport dialogStyles from '../../styles/m3/dialog.module.js';\nimport { navigate } from '../../lib/route.js';\nimport { reactive } from '../../lib/decorators.js';\nimport { DataTable } from '../../ui/table/DataTable.js';\nimport Input from '../../ui/input/Input.js';\nimport { FilesPage } from './pages/Files.page.js';\nimport { SharedPage } from './pages/Shared.page.js';\nimport { TrashPage } from './pages/Trash.page.js';\nimport { SettingsPage } from './pages/Settings.page.js';\nimport { HttpClientStoreBindings } from '../../bindings/base/HttpClientStoreBindings.js';\nimport { StoreBroadcast } from '../../http-client/store/StoreBroadcast.js';\nimport { NavigationBindings } from '../../bindings/base/NavigationBindings.js';\nimport { FileBindings } from '../../bindings/base/FileBindings.js';\nimport AppInfo from './AppInfo.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/app-navigation-item.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-icon-button.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-divider.js';\n\nexport interface PageInit extends ApplicationInit {\n idb: HttpClientStoreBindings;\n navigation: NavigationBindings;\n files: FileBindings;\n}\n\n/**\n * API Client is the entry point to the suite.\n * It renders the list of user files, allows to configure a connection to a store,\n * open user files in the corresponding application, or open\n * an independent application.\n */\nexport default class ApiClientScreen extends ApplicationScreen {\n static get routes(): IRoute[] {\n return [\n { pattern: '/files/(?<key>.*)', method: 'filesRoute', fallback: true, name: 'Files', title: 'Your files' },\n { pattern: '/shared', method: 'sharedRoute', name: 'Shared', title: 'Shared with you' },\n { pattern: '/shared/(?<key>.*)', method: 'sharedRoute', name: 'Shares', title: 'Shared with you' },\n { pattern: '/trash', method: 'trashRoute', name: 'Trash', title: 'Trash' },\n { pattern: '/settings', method: 'settingsRoute', name: 'Settings', title: 'Settings' },\n ];\n }\n\n static get styles(): CSSResult[] {\n return [globalStyles, pageStyles, typography, dialogStyles, DataTable.styles];\n }\n\n /**\n * Whether the current user has spaces defined in the store.\n * When not, it runs the start screen configuring workspaces.\n */\n get hasSpaces(): boolean {\n const { spaces } = this;\n return !!spaces && !!spaces.length;\n }\n\n /**\n * @The list of user spaces.\n */\n protected spaces: ISpace[] = [];\n\n /**\n * The pagination cursor for workspaces.\n * As long there's a cursor, there are more spaces to request.\n */\n protected spacesCursor?: string;\n\n /**\n * The currently selected space.\n */\n @reactive() selectedSpace?: string;\n\n /**\n * The definition of the selected space.\n */\n get currentSpace(): ISpace | undefined {\n const { spaces, selectedSpace } = this;\n if (!spaces || !selectedSpace) {\n return undefined;\n }\n return spaces.find(i => i.key === selectedSpace);\n }\n\n protected files = new FilesPage(this);\n\n protected shared = new SharedPage(this);\n\n protected trash = new TrashPage(this);\n\n protected settings = new SettingsPage(this);\n\n filesChannel = new BroadcastChannel(StoreBroadcast.files);\n\n spacesChannel = new BroadcastChannel(StoreBroadcast.spaces);\n\n trashChannel = new BroadcastChannel(StoreBroadcast.trash);\n\n constructor(init: PageInit) {\n super(init);\n this.bindings.idb = init.idb;\n this.bindings.navigation = init.navigation;\n this.bindings.files = init.files;\n }\n\n async initialize(): Promise<void> {\n if (!await this.isPlatformSupported()) {\n return;\n }\n await this.bindings.config.initialize();\n await this.initializeConfig();\n await this.bindings.navigation.initialize();\n await this.initializeStore();\n const key = await this.readSpaceKey();\n if (key) {\n this.bindings.store.space = key;\n }\n await this.bindings.idb.initialize();\n await this.bindings.store.initialize();\n await this.bindings.files.initialize();\n\n await this.setupWorkspace(key);\n\n await this.bindings.store.observeSpaces();\n if (key) {\n await this.bindings.store.observeFiles();\n await this.bindings.store.observeTrash();\n }\n await this.loadUser();\n this.filesChannel.addEventListener('message', this.fileMetaMessageHandler.bind(this));\n this.spacesChannel.addEventListener('message', this.spacesMessageHandler.bind(this));\n this.trashChannel.addEventListener('message', this.trashMessageHandler.bind(this));\n this.initializeRouting();\n this.initialized = true;\n }\n\n reset(): void {\n this.spaces = [];\n this.spacesCursor = undefined;\n this.files.resetList();\n this.shared.resetList();\n this.trash.resetList();\n }\n\n override async storeChanged(): Promise<void> {\n this.page = undefined;\n this.initialized = false;\n await this.bindings.store.closeEventsSocket();\n this.reset();\n this.bindings.store.space = '';\n await this.initializeStore();\n const spaceKey = await this.readLastSpaceKey();\n if (spaceKey) {\n this.bindings.store.space = spaceKey;\n }\n if (!this.authenticated) {\n return;\n }\n try {\n await this.setupWorkspace(spaceKey);\n await this.bindings.store.observeSpaces();\n if (spaceKey) {\n await this.bindings.store.observeFiles();\n await this.bindings.store.observeTrash();\n }\n this.files.refresh();\n this.initialized = true;\n } catch (_) {\n // ...\n }\n }\n\n protected async setupWorkspace(key?: string): Promise<void> {\n await this.readSpaces();\n this.selectWorkspace(key);\n }\n\n protected async readSpaceKey(): Promise<string | undefined> {\n const url = new URL(window.location.href);\n const key = url.searchParams.get('space');\n if (key) {\n return key;\n }\n return this.readLastSpaceKey();\n }\n\n protected async createLastSpaceStoreKey(): Promise<string | undefined> {\n try {\n const env = await this.bindings.store.global.get();\n return `http-client.latest.space.${env.key}`;\n } catch (_) {\n return undefined;\n }\n }\n\n protected async readLastSpaceKey(): Promise<string | undefined> {\n const key = await this.createLastSpaceStoreKey();\n if (!key) {\n return undefined;\n }\n const value = await this.bindings.config.local.get(key);\n return value as string || undefined;\n }\n\n protected async deleteLastSpaceKey(): Promise<void> {\n const key = await this.createLastSpaceStoreKey();\n if (!key) {\n return;\n }\n await this.bindings.config.local.delete(key);\n }\n\n protected async storeLastSpaceKey(spaceKey: string): Promise<void> {\n const key = await this.createLastSpaceStoreKey();\n if (!key) {\n return;\n }\n await this.bindings.config.local.set(key, spaceKey);\n }\n\n selectWorkspace(key?: string): void {\n const { spaces } = this;\n if (!spaces.length) {\n this.selectedSpace = key;\n this.render();\n return;\n }\n if (key) {\n // check whether the key is in the spaces.\n const has = this.spaces.find(i => i.key === key);\n if (has) {\n this.selectedSpace = key;\n } else {\n this.selectedSpace = this.spaces[0].key;\n }\n } else {\n this.selectedSpace = this.spaces[0].key;\n }\n\n this.bindings.store.space = this.selectedSpace;\n\n this.render();\n this.files.resetList();\n this.shared.resetList();\n this.trash.resetList();\n if (this.page === 'files') {\n this.files.readFiles();\n navigate('files'); // remove any folder info\n } else if (this.page === 'trash') {\n this.trash.readFiles();\n } else if (this.page === 'shared') {\n this.shared.readFiles();\n }\n this.storeLastSpaceKey(this.selectedSpace);\n }\n\n async resetStoreObservers(): Promise<void> {\n await this.bindings.store.unobserveFiles();\n await this.bindings.store.unobserveTrash();\n if (this.selectedSpace) {\n await this.bindings.store.observeFiles();\n await this.bindings.store.observeTrash();\n }\n }\n\n protected async readSpaces(): Promise<void> {\n const spaces = await this.bindings.store.spaces.list({ limit: 100 });\n const { items, cursor } = spaces;\n this.spaces = items;\n this.spacesCursor = cursor;\n }\n\n /**\n * A handler for the broadcast channel message which informs about changes to files meta.\n * The function distributes changes between pages\n */\n protected fileMetaMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n if (event.space === this.selectedSpace) {\n this.files.handleFileEvent(event);\n }\n this.shared.handleFileEvent(event);\n }\n\n protected trashMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n if (event.space !== this.selectedSpace) {\n return;\n }\n this.trash.handleFileEvent(event);\n }\n\n protected spacesMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n switch (event.operation) {\n case 'created': this.handleSpaceCreated((event as BroadcastCreatedEvent).data as ISpace); break;\n case 'deleted': this.handleSpaceDeleted(event.key as string); break;\n default:\n }\n }\n\n handleSpaceCreated(space: ISpace): void {\n if (!this.spaces) {\n this.spaces = [];\n }\n this.spaces.push(space);\n this.selectWorkspace(space.key);\n this.resetStoreObservers();\n this.render();\n }\n\n handleSpaceDeleted(key: string): void {\n if (!this.spaces) {\n this.spaces = [];\n }\n const index = this.spaces.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n this.spaces.splice(index, 1);\n this.render();\n if (this.selectedSpace === key) {\n this.deleteLastSpaceKey();\n }\n this.selectWorkspace();\n this.resetStoreObservers();\n }\n\n protected resetRoute(): void {\n this.page = undefined;\n }\n\n protected filesRoute(info: IRouteResult): void {\n this.resetRoute();\n this.page = 'files';\n const folder = info.params && info.params.key as string | undefined;\n const folderChanged = this.files.folder !== folder;\n if (folderChanged) {\n this.files.folder = folder;\n this.files.resetList();\n }\n if (!this.files.files.length || folderChanged) {\n this.files.readFiles();\n }\n }\n\n protected sharedRoute(info: IRouteResult): void {\n this.resetRoute();\n this.page = 'shared';\n const folder = info.params && info.params.key as string | undefined;\n const folderChanged = this.shared.folder !== folder;\n if (folderChanged) {\n this.shared.folder = folder;\n this.shared.resetList();\n }\n if (!this.shared.files.length || folderChanged) {\n this.shared.readFiles();\n }\n }\n\n protected trashRoute(): void {\n this.resetRoute();\n this.page = 'trash';\n if (!this.trash.files.length) {\n this.trash.readFiles();\n }\n }\n\n protected settingsRoute(): void {\n this.resetRoute();\n this.page = 'settings';\n }\n\n protected mainNavHandler(e: Event): void {\n const target = e.target as HTMLElement;\n const { page } = target.dataset;\n if (!page) {\n return;\n }\n navigate(page);\n }\n\n protected workspaceCreateFormHandler(e: SubmitEvent): void {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { value } = input;\n this.addWorkspace(value);\n }\n\n protected async addWorkspace(name: string): Promise<void> {\n await this.bindings.store.spaces.add(name);\n }\n\n protected async deleteSpace(key: string): Promise<void> {\n this.freezeApp();\n await this.bindings.store.spaces.delete(key);\n this.unfreezeApp();\n }\n\n protected workspaceSelectHandler(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const { key, action } = item.dataset;\n if (action === 'add') {\n this.openNewWorkspaceDialog();\n } else if (action === 'delete') {\n this.openDeleteWorkspaceDialog();\n } else if (key) {\n this.selectWorkspace(key);\n this.resetStoreObservers();\n }\n }\n\n openNewWorkspaceDialog(): void {\n this.openDialog('createWorkspaceDialog');\n }\n\n openDeleteWorkspaceDialog(): void {\n this.openDialog('deleteWorkspaceDialog');\n }\n\n cancelCreateWorkspaceDialog(): void {\n this.closeDialog('createWorkspaceDialog');\n }\n\n cancelDeleteWorkspaceDialog(): void {\n this.closeDialog('deleteWorkspaceDialog');\n }\n\n protected createWorkspaceHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addWorkspace(value);\n }\n\n protected async deleteWorkspaceHandler(): Promise<void> {\n this.cancelDeleteWorkspaceDialog();\n const { selectedSpace } = this;\n if (!selectedSpace) {\n return;\n }\n this.deleteSpace(selectedSpace);\n }\n\n closeDialog(id: string): void {\n const dialog = document.querySelector(`#${id}`) as HTMLDialogElement | null;\n if (!dialog) {\n return;\n }\n dialog.close();\n }\n\n openDialog(id: string, modal = true): void {\n const dialog = document.querySelector(`#${id}`) as HTMLDialogElement | null;\n if (!dialog) {\n return;\n }\n if (modal) {\n dialog.showModal();\n } else {\n dialog.show();\n }\n }\n\n freezeApp(): void {\n document.querySelector('#app')?.classList.add('inactive');\n }\n\n unfreezeApp(): void {\n document.querySelector('#app')?.classList.remove('inactive');\n }\n\n submitOnEnter(e: KeyboardEvent): void {\n // || (!e.ctrlKey && !e.metaKey)\n if (!['Enter', 'NumEnter'].includes(e.code)) {\n return;\n }\n const input = e.target as Input;\n const { form } = input;\n if (!form) {\n return;\n }\n const button = form.querySelector('[submit]') as HTMLElement | null;\n if (button) {\n button.click();\n } else {\n form.submit();\n }\n }\n\n async renameFile(file: IFile, name: string): Promise<void> {\n if (!name) {\n return;\n }\n await this.bindings.store.files.patch(file.key, {\n app: AppInfo.code,\n appVersion: AppInfo.version,\n id: uuidV4(),\n patch: [\n {\n op: 'replace',\n path: '/info/name',\n value: name,\n }\n ],\n });\n }\n\n override pageTemplate(): TemplateResult {\n const { initialized, hasSpaces } = this;\n if (!initialized) {\n return super.pageTemplate();\n }\n if (!hasSpaces) {\n return this.spacesSetupTemplate();\n }\n return html`\n ${this.navigationTemplate()}\n ${this.headerTemplate()}\n ${this.mainTemplate()}\n `;\n }\n\n protected override navigationTemplate(): TemplateResult {\n const { page, isSingleUser } = this;\n return html`\n <nav aria-label=\"Main\">\n <h1 class=\"title-small nav-title\">HTTP Client</h1>\n <ol class=\"nav-list\">\n <li>\n <app-navigation-item data-page=\"files\" .selected=${page === 'files'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"collectionsBookmark\" slot=\"icon\"></ui-icon>\n Files\n </app-navigation-item>\n </li>\n ${isSingleUser ? nothing : html`\n <li>\n <app-navigation-item data-page=\"shared\" .selected=${page === 'shared'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"folderShared\" slot=\"icon\"></ui-icon>\n Shared with me\n </app-navigation-item>\n </li>\n `}\n <li>\n <app-navigation-item data-page=\"trash\" .selected=${page === 'trash'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"deleteFile\" slot=\"icon\"></ui-icon>\n Trash\n </app-navigation-item>\n </li>\n <li>\n <app-navigation-item data-page=\"settings\" .selected=${page === 'settings'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"settings\" slot=\"icon\"></ui-icon>\n Settings\n </app-navigation-item>\n </li>\n </ol>\n </nav>\n `;\n }\n\n protected override headerTemplate(): TemplateResult {\n const space = this.currentSpace;\n if (!space) {\n // this should not happen since we render different view in this scenario.\n return html`<header></header>`;\n }\n return html`\n <header>\n <div class=\"search-box\">\n <ui-icon class=\"search-icon\" icon=\"search\"></ui-icon>\n <input type=\"text\" aria-label=\"Search\" placeholder=\"Search\"/>\n </div>\n ${this.renderWorkspaceSelector(space)}\n </header>\n `;\n }\n\n protected renderWorkspaceSelector(space: ISpace): TemplateResult {\n const { spaces } = this;\n return html`\n <ui-dropdown-list class=\"spaced-right workspace-dropdown\" horizontalAlign=\"right\" @select=\"${this.workspaceSelectHandler}\">\n <div class=\"workspace-selector\" role=\"button\">\n <div class=\"surface\">\n <div class=\"content\">\n <div class=\"body\">\n <span class=\"workspace-label label-small\">Workspace</span>\n <span class=\"workspace-selected body-large\">${space.info.name || 'Unnamed space'}</span>\n </div>\n <div class=\"icon\">\n <ui-icon icon=\"arrowDropDown\"></ui-icon>\n </div>\n </div>\n </div>\n </div>\n\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${spaces.map(s => html`<ui-list-item role=\"menuitem\" data-key=\"${s.key}\">${s.info.name}</ui-list-item>`)}\n <ui-divider role=\"presentation\"></ui-divider>\n <ui-list-item image=\"icon\" role=\"menuitem\" data-action=\"add\">\n <ui-icon icon=\"add\" slot=\"start\"></ui-icon>\n Add new\n </ui-list-item>\n <ui-list-item image=\"icon\" role=\"menuitem\" data-action=\"delete\">\n <ui-icon icon=\"deleteFile\" slot=\"start\"></ui-icon>\n Delete workspace\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected override mainTemplate(): TemplateResult {\n return html`\n <main class=\"body-medium\">\n <div class=\"content\">\n ${this.renderPage()}\n </div>\n </main>\n ${this.renderCreateWorkspaceDialog()}\n ${this.renderDeleteWorkspaceDialog()}\n `;\n }\n\n protected renderPage(): TemplateResult {\n const { page =\"files\" } = this;\n switch (page) {\n case 'files': return this.files.render();\n case 'shared': return this.shared.render();\n case 'trash': return this.trash.render();\n case 'settings': return this.settings.render();\n default: return this.render404();\n }\n }\n\n protected renderModelsPage(): TemplateResult {\n return html`\n <section aria-label=\"Data models\">\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Data Models</h2>\n <ui-button class=\"right\" type=\"outlined\">\n <ui-icon icon=\"add\" slot=\"icon\"></ui-icon>\n New\n </ui-button>\n <ui-icon-button><ui-icon icon=\"moreVert\"></ui-icon></ui-icon-button>\n </div>\n </section>`;\n }\n\n protected render404(): TemplateResult {\n return html`404`;\n }\n\n protected spacesSetupTemplate(): TemplateResult {\n return html`\n <section class=\"full-page-alert\">\n <h1 class=\"display-large\">Let's get you started</h1>\n <div class=\"workspace-dialog-info\">\n <p class=\"body-large\">\n The application uses <b>workspaces</b> to organize your work. You can switch context by changing selected workspace.\n Each workspace has an independent files list.\n </p>\n <form action=\"#\" @submit=\"${this.workspaceCreateFormHandler}\">\n <h2 class=\"title-medium\">Create your first workspace</h2>\n <div class=\"workspace-intro-form\">\n <ui-text-field class=\"input\" label=\"Workspace name\" name=\"name\" value=\"Default\" required invalidText=\"Workspace name is required\"></ui-text-field>\n <ui-button type=\"filled\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </div>\n </section>\n `;\n }\n\n protected renderCreateWorkspaceDialog(): TemplateResult {\n return html`\n <dialog id=\"createWorkspaceDialog\">\n <form method=\"dialog\" @submit=\"${this.createWorkspaceHandler}\">\n <h3>New Workspace</h3>\n <div>\n <p class=\"body-medium\">Enter name for the workspace</p>\n <ui-text-field class=\"input\" label=\"Workspace name\" name=\"name\" required invalidText=\"Workspace name is required\" @keydown=\"${this.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateWorkspaceDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderDeleteWorkspaceDialog(): TemplateResult {\n const { currentSpace } = this;\n const name = currentSpace && currentSpace.info.name || 'unnamed';\n return html`\n <dialog id=\"deleteWorkspaceDialog\" class=\"warning\">\n <h3>Delete Workspace?</h3>\n <div>\n <p class=\"body-medium\">\n This will permanently delete all workspace <b>${name}</b>.\n The following data will be lost forever:\n </p>\n <ui-divider></ui-divider>\n <ul>\n <li>Files (projects, data models</li>\n <li>Trashed files</li>\n </ul>\n <ui-divider></ui-divider>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelDeleteWorkspaceDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"delete\" @click=\"${this.deleteWorkspaceHandler}\">Delete</ui-button>\n </div>\n </dialog>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ApiClient.screen.js","sourceRoot":"","sources":["../../../src/pages/api-client/ApiClient.screen.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-cycle */\nimport { html, TemplateResult, CSSResult, nothing } from 'lit';\nimport { BroadcastCreatedEvent, BroadcastEvent, IFile, ISpace, uuidV4 } from '@api-client/core/build/browser.js';\nimport { ApplicationInit, ApplicationScreen } from '../ApplicationScreen.js';\nimport { IRoute, IRouteResult } from '../../mixins/RouteMixin.js';\nimport pageStyles from './ApiClient.styles.js';\nimport globalStyles from '../../styles/global-styles.js';\nimport typography from '../../styles/m3/typography.module.js';\nimport dialogStyles from '../../styles/m3/dialog.module.js';\nimport { navigate } from '../../lib/route.js';\nimport { reactive } from '../../lib/decorators.js';\nimport { DataTable } from '../../ui/table/DataTable.js';\nimport Input from '../../ui/input/Input.js';\nimport { FilesPage } from './pages/Files.page.js';\nimport { SharedPage } from './pages/Shared.page.js';\nimport { TrashPage } from './pages/Trash.page.js';\nimport { SettingsPage } from './pages/Settings.page.js';\nimport { HttpClientStoreBindings } from '../../bindings/base/HttpClientStoreBindings.js';\nimport { StoreBroadcast } from '../../http-client/store/StoreBroadcast.js';\nimport { NavigationBindings } from '../../bindings/base/NavigationBindings.js';\nimport { FileBindings } from '../../bindings/base/FileBindings.js';\nimport AppInfo from './AppInfo.js';\nimport '../../define/ui/ui-button.js';\nimport '../../define/app-navigation-item.js';\nimport '../../define/ui/ui-icon.js';\nimport '../../define/ui/ui-icon-button.js';\nimport '../../define/ui/ui-text-field.js';\nimport '../../define/ui/ui-dropdown-list.js';\nimport '../../define/ui/ui-divider.js';\n\nexport interface PageInit extends ApplicationInit {\n idb: HttpClientStoreBindings;\n navigation: NavigationBindings;\n files: FileBindings;\n}\n\n/**\n * API Client is the entry point to the suite.\n * It renders the list of user files, allows to configure a connection to a store,\n * open user files in the corresponding application, or open\n * an independent application.\n */\nexport default class ApiClientScreen extends ApplicationScreen {\n static get routes(): IRoute[] {\n return [\n { pattern: '/files/(?<key>.*)', method: 'filesRoute', fallback: true, name: 'Files', title: 'Your files' },\n { pattern: '/shared', method: 'sharedRoute', name: 'Shared', title: 'Shared with you' },\n { pattern: '/shared/(?<key>.*)', method: 'sharedRoute', name: 'Shares', title: 'Shared with you' },\n { pattern: '/trash', method: 'trashRoute', name: 'Trash', title: 'Trash' },\n { pattern: '/settings', method: 'settingsRoute', name: 'Settings', title: 'Settings' },\n ];\n }\n\n static get styles(): CSSResult[] {\n return [globalStyles, pageStyles, typography, dialogStyles, DataTable.styles];\n }\n\n /**\n * Whether the current user has spaces defined in the store.\n * When not, it runs the start screen configuring workspaces.\n */\n get hasSpaces(): boolean {\n const { spaces } = this;\n return !!spaces && !!spaces.length;\n }\n\n /**\n * @The list of user spaces.\n */\n protected spaces: ISpace[] = [];\n\n /**\n * The pagination cursor for workspaces.\n * As long there's a cursor, there are more spaces to request.\n */\n protected spacesCursor?: string;\n\n /**\n * The currently selected space.\n */\n @reactive() selectedSpace?: string;\n\n /**\n * The definition of the selected space.\n */\n get currentSpace(): ISpace | undefined {\n const { spaces, selectedSpace } = this;\n if (!spaces || !selectedSpace) {\n return undefined;\n }\n return spaces.find(i => i.key === selectedSpace);\n }\n\n protected files = new FilesPage(this);\n\n protected shared = new SharedPage(this);\n\n protected trash = new TrashPage(this);\n\n protected settings = new SettingsPage(this);\n\n filesChannel = new BroadcastChannel(StoreBroadcast.files);\n\n spacesChannel = new BroadcastChannel(StoreBroadcast.spaces);\n\n trashChannel = new BroadcastChannel(StoreBroadcast.trash);\n\n constructor(init: PageInit) {\n super(init);\n this.bindings.idb = init.idb;\n this.bindings.navigation = init.navigation;\n this.bindings.files = init.files;\n }\n\n async initialize(): Promise<void> {\n if (!await this.isPlatformSupported()) {\n return;\n }\n await this.bindings.config.initialize();\n await this.initializeConfig();\n await this.bindings.navigation.initialize();\n await this.initializeStore();\n const key = await this.readSpaceKey();\n if (key) {\n this.bindings.store.space = key;\n }\n await this.bindings.idb.initialize();\n await this.bindings.store.initialize();\n await this.bindings.files.initialize();\n\n await this.setupWorkspace(key);\n\n await this.bindings.store.observeSpaces();\n if (key) {\n await this.bindings.store.observeFiles();\n await this.bindings.store.observeTrash();\n }\n await this.loadUser();\n this.filesChannel.addEventListener('message', this.fileMetaMessageHandler.bind(this));\n this.spacesChannel.addEventListener('message', this.spacesMessageHandler.bind(this));\n this.trashChannel.addEventListener('message', this.trashMessageHandler.bind(this));\n this.initializeRouting();\n this.initialized = true;\n }\n\n reset(): void {\n this.spaces = [];\n this.spacesCursor = undefined;\n this.files.resetList();\n this.shared.resetList();\n this.trash.resetList();\n }\n\n override async storeChanged(): Promise<void> {\n this.page = undefined;\n this.initialized = false;\n await this.bindings.store.closeEventsSocket();\n this.reset();\n this.bindings.store.space = '';\n await this.initializeStore();\n const spaceKey = await this.readLastSpaceKey();\n if (spaceKey) {\n this.bindings.store.space = spaceKey;\n }\n if (!this.authenticated) {\n return;\n }\n try {\n await this.setupWorkspace(spaceKey);\n await this.bindings.store.observeSpaces();\n if (spaceKey) {\n await this.bindings.store.observeFiles();\n await this.bindings.store.observeTrash();\n }\n this.files.refresh();\n this.initialized = true;\n } catch (_) {\n // ...\n }\n }\n\n protected async setupWorkspace(key?: string): Promise<void> {\n await this.readSpaces();\n this.selectWorkspace(key);\n }\n\n protected async readSpaceKey(): Promise<string | undefined> {\n const url = new URL(window.location.href);\n const key = url.searchParams.get('space');\n if (key) {\n return key;\n }\n return this.readLastSpaceKey();\n }\n\n protected async createLastSpaceStoreKey(): Promise<string | undefined> {\n try {\n const env = await this.bindings.store.global.get();\n return `http-client.latest.space.${env.key}`;\n } catch (_) {\n return undefined;\n }\n }\n\n protected async readLastSpaceKey(): Promise<string | undefined> {\n const key = await this.createLastSpaceStoreKey();\n if (!key) {\n return undefined;\n }\n const value = await this.bindings.config.local.get(key);\n return value as string || undefined;\n }\n\n protected async deleteLastSpaceKey(): Promise<void> {\n const key = await this.createLastSpaceStoreKey();\n if (!key) {\n return;\n }\n await this.bindings.config.local.delete(key);\n }\n\n protected async storeLastSpaceKey(spaceKey: string): Promise<void> {\n const key = await this.createLastSpaceStoreKey();\n if (!key) {\n return;\n }\n await this.bindings.config.local.set(key, spaceKey);\n }\n\n selectWorkspace(key?: string): void {\n const { spaces } = this;\n if (!spaces.length) {\n this.selectedSpace = key;\n this.render();\n return;\n }\n if (key) {\n // check whether the key is in the spaces.\n const has = this.spaces.find(i => i.key === key);\n if (has) {\n this.selectedSpace = key;\n } else {\n this.selectedSpace = this.spaces[0].key;\n }\n } else {\n this.selectedSpace = this.spaces[0].key;\n }\n\n this.bindings.store.space = this.selectedSpace;\n\n this.render();\n this.files.resetList();\n this.shared.resetList();\n this.trash.resetList();\n if (this.page === 'files') {\n this.files.readFiles();\n navigate('files'); // remove any folder info\n } else if (this.page === 'trash') {\n this.trash.readFiles();\n } else if (this.page === 'shared') {\n this.shared.readFiles();\n }\n this.storeLastSpaceKey(this.selectedSpace);\n }\n\n async resetStoreObservers(): Promise<void> {\n await this.bindings.store.unobserveFiles();\n await this.bindings.store.unobserveTrash();\n if (this.selectedSpace) {\n await this.bindings.store.observeFiles();\n await this.bindings.store.observeTrash();\n }\n }\n\n protected async readSpaces(): Promise<void> {\n const spaces = await this.bindings.store.spaces.list({ limit: 100 });\n const { items, cursor } = spaces;\n this.spaces = items;\n this.spacesCursor = cursor;\n }\n\n /**\n * A handler for the broadcast channel message which informs about changes to files meta.\n * The function distributes changes between pages\n */\n protected fileMetaMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n if (event.space === this.selectedSpace) {\n this.files.handleFileEvent(event);\n }\n this.shared.handleFileEvent(event);\n }\n\n protected trashMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n if (event.space !== this.selectedSpace) {\n return;\n }\n this.trash.handleFileEvent(event);\n }\n\n protected spacesMessageHandler(e: MessageEvent): void {\n const event = e.data as BroadcastEvent;\n switch (event.operation) {\n case 'created': this.handleSpaceCreated((event as BroadcastCreatedEvent).data as ISpace); break;\n case 'deleted': this.handleSpaceDeleted(event.key as string); break;\n default:\n }\n }\n\n handleSpaceCreated(space: ISpace): void {\n if (!this.spaces) {\n this.spaces = [];\n }\n this.spaces.push(space);\n this.selectWorkspace(space.key);\n this.resetStoreObservers();\n this.render();\n }\n\n handleSpaceDeleted(key: string): void {\n if (!this.spaces) {\n this.spaces = [];\n }\n const index = this.spaces.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n this.spaces.splice(index, 1);\n this.render();\n if (this.selectedSpace === key) {\n this.deleteLastSpaceKey();\n }\n this.selectWorkspace();\n this.resetStoreObservers();\n }\n\n protected resetRoute(): void {\n this.page = undefined;\n }\n\n protected filesRoute(info: IRouteResult): void {\n this.resetRoute();\n this.page = 'files';\n const folder = info.params && info.params.key as string | undefined;\n const folderChanged = this.files.folder !== folder;\n if (folderChanged) {\n this.files.folder = folder;\n this.files.resetList();\n }\n if (!this.files.files.length || folderChanged) {\n this.files.readFiles();\n }\n }\n\n protected sharedRoute(info: IRouteResult): void {\n this.resetRoute();\n this.page = 'shared';\n const folder = info.params && info.params.key as string | undefined;\n const folderChanged = this.shared.folder !== folder;\n if (folderChanged) {\n this.shared.folder = folder;\n this.shared.resetList();\n }\n if (!this.shared.files.length || folderChanged) {\n this.shared.readFiles();\n }\n }\n\n protected trashRoute(): void {\n this.resetRoute();\n this.page = 'trash';\n if (!this.trash.files.length) {\n this.trash.readFiles();\n }\n }\n\n protected settingsRoute(): void {\n this.resetRoute();\n this.page = 'settings';\n }\n\n protected mainNavHandler(e: Event): void {\n const target = e.target as HTMLElement;\n const { page } = target.dataset;\n if (!page) {\n return;\n }\n navigate(page);\n }\n\n protected workspaceCreateFormHandler(e: SubmitEvent): void {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { value } = input;\n this.addWorkspace(value);\n }\n\n protected async addWorkspace(name: string): Promise<void> {\n await this.bindings.store.spaces.add(name);\n }\n\n protected async deleteSpace(key: string): Promise<void> {\n this.freezeApp();\n await this.bindings.store.spaces.delete(key);\n this.unfreezeApp();\n }\n\n protected workspaceSelectHandler(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const { key, action } = item.dataset;\n if (action === 'add') {\n this.openNewWorkspaceDialog();\n } else if (action === 'delete') {\n this.openDeleteWorkspaceDialog();\n } else if (key) {\n this.selectWorkspace(key);\n this.resetStoreObservers();\n }\n }\n\n openNewWorkspaceDialog(): void {\n this.openDialog('createWorkspaceDialog');\n }\n\n openDeleteWorkspaceDialog(): void {\n this.openDialog('deleteWorkspaceDialog');\n }\n\n cancelCreateWorkspaceDialog(): void {\n this.closeDialog('createWorkspaceDialog');\n }\n\n cancelDeleteWorkspaceDialog(): void {\n this.closeDialog('deleteWorkspaceDialog');\n }\n\n protected createWorkspaceHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addWorkspace(value);\n }\n\n protected async deleteWorkspaceHandler(): Promise<void> {\n this.cancelDeleteWorkspaceDialog();\n const { selectedSpace } = this;\n if (!selectedSpace) {\n return;\n }\n this.deleteSpace(selectedSpace);\n }\n\n closeDialog(id: string): void {\n const dialog = document.querySelector(`#${id}`) as HTMLDialogElement | null;\n if (!dialog) {\n return;\n }\n dialog.close();\n }\n\n openDialog(id: string, modal = true): void {\n const dialog = document.querySelector(`#${id}`) as HTMLDialogElement | null;\n if (!dialog) {\n return;\n }\n if (modal) {\n dialog.showModal();\n } else {\n dialog.show();\n }\n }\n\n freezeApp(): void {\n document.querySelector('#app')?.classList.add('inactive');\n }\n\n unfreezeApp(): void {\n document.querySelector('#app')?.classList.remove('inactive');\n }\n\n submitOnEnter(e: KeyboardEvent): void {\n // || (!e.ctrlKey && !e.metaKey)\n if (!['Enter', 'NumEnter'].includes(e.code)) {\n return;\n }\n const input = e.target as Input;\n const { form } = input;\n if (!form) {\n return;\n }\n const button = form.querySelector('[submit]') as HTMLElement | null;\n if (button) {\n button.click();\n } else {\n form.submit();\n }\n }\n\n async renameFile(file: IFile, name: string): Promise<void> {\n if (!name) {\n return;\n }\n await this.bindings.store.files.patch(file.key, {\n app: AppInfo.code,\n appVersion: AppInfo.version,\n id: uuidV4(),\n patch: [\n {\n op: 'replace',\n path: '/info/name',\n value: name,\n }\n ],\n });\n }\n\n override pageTemplate(): TemplateResult {\n const { initialized, hasSpaces } = this;\n if (!initialized) {\n return super.pageTemplate();\n }\n if (!hasSpaces) {\n return this.spacesSetupTemplate();\n }\n return html`\n ${this.navigationTemplate()}\n ${this.headerTemplate()}\n ${this.mainTemplate()}\n `;\n }\n\n protected override navigationTemplate(): TemplateResult {\n const { page, isSingleUser } = this;\n return html`\n <nav aria-label=\"Main\">\n <h1 class=\"title-small nav-title\">HTTP Client</h1>\n <ol class=\"nav-list\">\n <li>\n <app-navigation-item data-page=\"files\" .selected=${page === 'files'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"collectionsBookmark\" slot=\"icon\"></ui-icon>\n Files\n </app-navigation-item>\n </li>\n ${isSingleUser ? nothing : html`\n <li>\n <app-navigation-item data-page=\"shared\" .selected=${page === 'shared'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"folderShared\" slot=\"icon\"></ui-icon>\n Shared with me\n </app-navigation-item>\n </li>\n `}\n <li>\n <app-navigation-item data-page=\"trash\" .selected=${page === 'trash'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"deleteFile\" slot=\"icon\"></ui-icon>\n Trash\n </app-navigation-item>\n </li>\n <li>\n <app-navigation-item data-page=\"settings\" .selected=${page === 'settings'} @click=\"${this.mainNavHandler}\">\n <ui-icon icon=\"settings\" slot=\"icon\"></ui-icon>\n Settings\n </app-navigation-item>\n </li>\n </ol>\n </nav>\n `;\n }\n\n protected override headerTemplate(): TemplateResult {\n const space = this.currentSpace;\n if (!space) {\n // this should not happen since we render different view in this scenario.\n return html`<header></header>`;\n }\n return html`\n <header>\n <div class=\"search-box\">\n <ui-icon class=\"search-icon\" icon=\"search\"></ui-icon>\n <input type=\"text\" aria-label=\"Search\" placeholder=\"Search\"/>\n </div>\n ${this.renderWorkspaceSelector(space)}\n </header>\n `;\n }\n\n protected renderWorkspaceSelector(space: ISpace): TemplateResult {\n const { spaces } = this;\n return html`\n <ui-dropdown-list class=\"spaced-right workspace-dropdown\" horizontalAlign=\"right\" @select=\"${this.workspaceSelectHandler}\">\n <div class=\"workspace-selector\" role=\"button\">\n <div class=\"surface\">\n <div class=\"content\">\n <div class=\"body\">\n <span class=\"workspace-label label-small\">Workspace</span>\n <span class=\"workspace-selected body-large\">${space.info.name || 'Unnamed space'}</span>\n </div>\n <div class=\"icon\">\n <ui-icon icon=\"arrowDropDown\"></ui-icon>\n </div>\n </div>\n </div>\n </div>\n\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${spaces.map(s => html`<ui-list-item role=\"menuitem\" data-key=\"${s.key}\">${s.info.name}</ui-list-item>`)}\n <ui-divider role=\"presentation\"></ui-divider>\n <ui-list-item image=\"icon\" role=\"menuitem\" data-action=\"add\">\n <ui-icon icon=\"add\" slot=\"start\"></ui-icon>\n Add new\n </ui-list-item>\n <ui-list-item image=\"icon\" role=\"menuitem\" data-action=\"delete\">\n <ui-icon icon=\"deleteFile\" slot=\"start\"></ui-icon>\n Delete workspace\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected override mainTemplate(): TemplateResult {\n return html`\n <main class=\"body-medium\">\n <div class=\"content\">\n ${this.renderPage()}\n </div>\n </main>\n ${this.renderCreateWorkspaceDialog()}\n ${this.renderDeleteWorkspaceDialog()}\n `;\n }\n\n protected renderPage(): TemplateResult {\n const { page =\"files\" } = this;\n switch (page) {\n case 'files': return this.files.render();\n case 'shared': return this.shared.render();\n case 'trash': return this.trash.render();\n case 'settings': return this.settings.render();\n default: return this.render404();\n }\n }\n\n protected renderModelsPage(): TemplateResult {\n return html`\n <section aria-label=\"Data models\">\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Data Models</h2>\n <ui-button class=\"right\" type=\"outlined\">\n <ui-icon icon=\"add\" slot=\"icon\"></ui-icon>\n New\n </ui-button>\n <ui-icon-button><ui-icon icon=\"moreVert\"></ui-icon></ui-icon-button>\n </div>\n </section>`;\n }\n\n protected render404(): TemplateResult {\n return html`404`;\n }\n\n protected spacesSetupTemplate(): TemplateResult {\n return html`\n <section class=\"full-page-alert\">\n <h1 class=\"display-large\">Let's get you started</h1>\n <div class=\"workspace-dialog-info\">\n <p class=\"body-large\">\n The application uses <b>workspaces</b> to organize your work. You can switch context by changing selected workspace.\n Each workspace has an independent files list.\n </p>\n <form action=\"#\" @submit=\"${this.workspaceCreateFormHandler}\">\n <h2 class=\"title-medium\">Create your first workspace</h2>\n <div class=\"workspace-intro-form\">\n <ui-text-field class=\"input\" label=\"Workspace name\" name=\"name\" value=\"Default\" required invalidText=\"Workspace name is required\"></ui-text-field>\n <ui-button type=\"filled\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </div>\n </section>\n `;\n }\n\n protected renderCreateWorkspaceDialog(): TemplateResult {\n return html`\n <dialog id=\"createWorkspaceDialog\">\n <form method=\"dialog\" @submit=\"${this.createWorkspaceHandler}\">\n <h3>New Workspace</h3>\n <div>\n <p class=\"body-medium\">Enter name for the workspace</p>\n <ui-text-field class=\"input\" label=\"Workspace name\" name=\"name\" required invalidText=\"Workspace name is required\" @keydown=\"${this.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateWorkspaceDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderDeleteWorkspaceDialog(): TemplateResult {\n const { currentSpace } = this;\n const name = currentSpace && currentSpace.info.name || 'unnamed';\n return html`\n <dialog id=\"deleteWorkspaceDialog\" class=\"warning\">\n <h3>Delete Workspace?</h3>\n <div>\n <p class=\"body-medium\">\n This will permanently delete all workspace <b>${name}</b>.\n The following data will be lost forever:\n </p>\n <ui-divider></ui-divider>\n <ul>\n <li>Files (projects, data models</li>\n <li>Trashed files</li>\n </ul>\n <ui-divider></ui-divider>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelDeleteWorkspaceDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"delete\" @click=\"${this.deleteWorkspaceHandler}\">Delete</ui-button>\n </div>\n </dialog>\n `;\n }\n}\n"]}
|
|
@@ -21,14 +21,12 @@ export default class AuthenticateScreen extends ApplicationScreen {
|
|
|
21
21
|
static get styles() {
|
|
22
22
|
return [styles, globalStyles, typography, colors, dialog];
|
|
23
23
|
}
|
|
24
|
-
environmentError;
|
|
25
|
-
environment;
|
|
26
|
-
/**
|
|
27
|
-
* Whether the application is performing the store validation.
|
|
28
|
-
*/
|
|
29
|
-
authenticating = false;
|
|
30
24
|
constructor(init) {
|
|
31
25
|
super(init);
|
|
26
|
+
/**
|
|
27
|
+
* Whether the application is performing the store validation.
|
|
28
|
+
*/
|
|
29
|
+
this.authenticating = false;
|
|
32
30
|
}
|
|
33
31
|
async initialize() {
|
|
34
32
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Authenticate.screen.js","sourceRoot":"","sources":["../../../src/pages/api-client/Authenticate.screen.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAA6B,MAAM,KAAK,CAAC;AACtD,OAAO,EAAmB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAC9C,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,UAAU,MAAM,sCAAsC,CAAC;AAC9D,OAAO,MAAM,MAAM,kCAAkC,CAAC;AACtD,OAAO,MAAM,MAAM,kCAAkC,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,gCAAgC,CAAC;AACxC,OAAO,8BAA8B,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,iBAAiB;IACtD,KAAK,CAAC,YAAY;QACzB,MAAM;IACR,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"Authenticate.screen.js","sourceRoot":"","sources":["../../../src/pages/api-client/Authenticate.screen.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResult } from 'lit';\nimport { ApplicationInit, ApplicationScreen } from '../ApplicationScreen.js';\nimport { reactive } from '../../lib/decorators.js';\nimport styles from './Authenticate.styles.js';\nimport globalStyles from '../../styles/global-styles.js';\nimport typography from '../../styles/m3/typography.module.js';\nimport colors from '../../styles/m3/colors.module.js';\nimport dialog from '../../styles/m3/dialog.module.js';\nimport { IConfigEnvironment } from '../../lib/config/Config.js';\nimport { ISessionInitInfo } from '../../store/HttpStore.js';\nimport { EnvironmentsKey } from '../../bindings/base/ConfigurationBindings.js';\nimport '../../define/ui/ui-progress.js';\nimport '../../define/ui/ui-button.js';\n\n/**\n * When the user is redirected here it means that the user provided a configuration\n * that requires user authentication.\n */\nexport default class AuthenticateScreen extends ApplicationScreen {\n override async storeChanged(): Promise<void> {\n // ...\n }\n\n static get styles(): CSSResult[] {\n return [styles, globalStyles, typography, colors, dialog];\n }\n\n @reactive() environmentError?: string;\n\n environment?: IConfigEnvironment;\n\n /**\n * Whether the application is performing the store validation.\n */\n @reactive() authenticating = false;\n\n constructor(init: ApplicationInit) {\n super(init);\n }\n\n async initialize(): Promise<void> {\n try {\n await this.bindings.store.initialize();\n await this.bindings.store.initializeStore();\n await this.bindings.config.initialize();\n const env = await this.bindings.config.session.get(`${EnvironmentsKey}.creating`) as IConfigEnvironment;\n if (env) {\n this.environment = env;\n } else {\n this.environmentError = 'Environment information not found. Go back to the previous page.';\n }\n } catch (e) {\n this.environmentError = (e as Error).message;\n }\n }\n\n protected handleAuthenticate(): void {\n const { environment } = this;\n if (!environment) {\n this.environmentError = 'Environment information not found. Go back to the previous page.';\n return;\n }\n this.authenticate(environment);\n }\n\n protected handleBack(): void {\n window.history.back();\n }\n\n protected async authenticate(env: IConfigEnvironment): Promise<void> {\n this.authenticating = true;\n let info: ISessionInitInfo | undefined;\n try {\n await this.bindings.store.global.set(env);\n info = await this.bindings.store.auth.authenticate({ force: false });\n } finally {\n this.authenticating = false;\n }\n if (info) {\n await this.bindings.config.environment.add(env, { asDefault: true });\n await this.bindings.config.session.delete(`${EnvironmentsKey}.creating`);\n }\n }\n\n /**\n * This to be used by the child classes to render page template.\n * @returns Application page template\n */\n override pageTemplate(): TemplateResult {\n return html`\n <main class=\"config-init\">\n ${this.renderTitle()}\n ${this.renderIntroMessage()}\n ${this.environmentError ? this.initErrorTemplate() : this.contentTemplate()}\n </main>\n `;\n }\n\n initErrorTemplate(): TemplateResult {\n return html`\n <p class=\"general-error error on-error-text body-large\">${this.environmentError}</p>\n <div class=\"action\">\n <ui-button type=\"filled\" @click=\"${this.handleBack}\">Back</ui-button>\n </div>\n `;\n }\n\n contentTemplate(): TemplateResult {\n return html`\n ${this.actionTemplate()}\n ${this.infoTemplate()}\n ${this.progressTemplate()}\n `;\n }\n\n renderTitle(): TemplateResult {\n return html`<h1 class=\"display-large\">Store authentication</h1>`;\n }\n\n renderIntroMessage(): TemplateResult {\n return html`\n <div class=\"description body-medium\">\n <p id=\"authenticationMessage\">The network store requires authentication.</p>\n </div>\n `;\n }\n\n actionTemplate(): TemplateResult {\n return html`\n <div class=\"action\">\n <ui-button \n type=\"filled\"\n @click=\"${this.handleAuthenticate}\"\n >Authenticate</ui-button>\n </div>\n `;\n }\n\n infoTemplate(): TemplateResult {\n return html`\n <p class=\"description body-medium\" id=\"authenticationMessage\">This will open a new tab with the authentication options.</p>\n `;\n }\n\n progressTemplate(): TemplateResult | string {\n const { authenticating } = this;\n if (!authenticating) {\n return '';\n }\n return html`\n <ui-progress indeterminate></ui-progress>\n `;\n }\n}\n"]}
|