From a4069737f364bd7e1a85edd29d33fe0acb2d15df Mon Sep 17 00:00:00 2001 From: Ben Gazzard Date: Thu, 14 Dec 2023 17:35:30 +0000 Subject: [PATCH] fix: refactor the emui components to the shared package (#1959) ## Description: This PR refactors the `components` from the emui into the new `kurtosis-ui-components` package, additionally it makes use of `kurtosis-package-indexer-sdk` from https://github.com/kurtosis-tech/kurtosis-package-indexer/pull/81 for the package indexer types (types are used by the shared components, and the actual client definition is used by the app). ## Is this change user facing? NO ## References (if applicable): * https://www.notion.so/kurtosistech/2023-12-December-Frontend-Burndown-ad4ea71b05d843fe8efc97c2e61607b7 --- enclave-manager/web/package.json | 7 +- enclave-manager/web/packages/app/package.json | 14 +- .../web/packages/app/src/client/constants.ts | 2 +- .../client/enclaveManager/KurtosisClient.ts | 3 +- .../enclaveManager/KurtosisClientContext.tsx | 3 +- .../KurtosisPackageIndexerClient.ts | 6 +- .../KurtosisPackageIndexerClientContext.tsx | 2 +- .../api/kurtosis_package_indexer_connect.ts | 53 --- .../api/kurtosis_package_indexer_pb.ts | 445 ------------------ .../web/packages/app/src/emui/App.tsx | 3 +- .../web/packages/app/src/emui/Navbar.tsx | 2 +- .../packages/app/src/emui/catalog/Catalog.tsx | 20 +- .../app/src/emui/catalog/CatalogContext.tsx | 5 +- .../app/src/emui/catalog/CatalogRoutes.tsx | 4 +- .../components/KurtosisCatalogBreadcrumbs.tsx | 11 +- .../app/src/emui/catalog/package/Package.tsx | 27 +- .../packages/app/src/emui/catalog/storage.ts | 4 +- .../app/src/emui/enclaves/EnclaveList.tsx | 4 +- .../app/src/emui/enclaves/EnclaveRoutes.tsx | 4 +- .../app/src/emui/enclaves/EnclavesContext.tsx | 3 +- .../enclaves/components/CreateEnclave.tsx | 6 +- .../components/CreateEnclaveButton.tsx | 2 +- .../enclaves/components/EditEnclaveButton.tsx | 4 +- .../GotToEncalaveOverviewButton.tsx | 2 +- .../components/KurtosisEnclaveBreadcrumbs.tsx | 10 +- .../enclaves/components/PreloadPackage.tsx | 6 +- .../EnclaveConfigurationForm.tsx | 8 +- .../KurtosisArgumentFormControl.tsx | 3 +- .../KurtosisPackageArgumentInput.tsx | 2 +- .../inputs/DictArgumentInput.tsx | 6 +- .../inputs/IntegerArgumentInput.tsx | 2 +- .../inputs/JSONArgumentInput.tsx | 10 +- .../inputs/KurtosisArgumentTypeInput.tsx | 4 +- .../inputs/ListArgumentInput.tsx | 6 +- .../components/configuration/utils.ts | 2 +- .../modals/ConfigureEnclaveModal.tsx | 17 +- .../modals/ManualCreateEnclaveModal.tsx | 4 +- .../components/modals/PackageLoadingModal.tsx | 5 +- .../enclaves/components/modals}/constants.ts | 0 .../components/tables/EnclavesTable.tsx | 5 +- .../enclaves/components/tables/FilesTable.tsx | 3 +- .../enclaves/components/tables/PortsTable.tsx | 3 +- .../components/tables/ServicesTable.tsx | 3 +- .../app/src/emui/enclaves/components/utils.ts | 2 +- .../widgets/DeleteEnclavesButton.tsx | 2 +- .../widgets/DownloadFileArtifactButton.tsx | 2 +- .../widgets/EnclaveArtifactsSummary.tsx | 2 +- .../widgets/EnclaveServicesSummary.tsx | 2 +- .../components/widgets/ImageButton.tsx | 2 +- .../app/src/emui/enclaves/enclave/Enclave.tsx | 12 +- .../enclaves/enclave/EnclaveRouteContext.tsx | 3 +- .../enclaves/enclave/artifact/Artifact.tsx | 22 +- .../enclaves/enclave/logs/EnclaveLogs.tsx | 5 +- .../enclave/overview/EnclaveOverview.tsx | 11 +- .../emui/enclaves/enclave/service/Service.tsx | 13 +- .../enclave/service/logs/ServiceLogs.tsx | 4 +- .../service/overview/ServiceOverview.tsx | 11 +- .../packages/app/src/emui/enclaves/types.ts | 2 +- .../web/packages/components/package.json | 24 +- .../src}/AppLayout.tsx | 2 +- .../src}/CodeEditor.tsx | 2 +- .../src}/CopyButton.tsx | 2 +- .../src}/DataTable.tsx | 2 +- .../src}/DownloadButton.tsx | 3 +- .../src}/FeatureNotImplementedModal.tsx | 0 .../src}/FileDisplay.tsx | 0 .../src}/FileSize.tsx | 2 +- .../src}/FileTree.tsx | 2 +- .../src}/FormatButton.tsx | 0 .../src}/FormatDateTime.tsx | 2 +- .../src}/HoverLineTabList.tsx | 2 +- .../src}/KeyboardCommands.tsx | 0 .../src}/KurtosisAlert.tsx | 2 +- .../src}/KurtosisAlertModal.tsx | 0 .../src}/KurtosisBreadcrumbs.tsx | 2 +- .../src}/KurtosisMarkdown.tsx | 0 .../src}/KurtosisThemeProvider.tsx | 0 .../src}/Navigation.tsx | 0 .../src}/PackageSourceButton.tsx | 3 +- .../src}/PageTitle.tsx | 0 .../src}/PasteButton.tsx | 2 +- .../src}/TitledBox.tsx | 0 .../src}/TitledCard.tsx | 0 .../components => components/src}/Toasts.tsx | 0 .../src}/ValueCard.tsx | 2 +- .../src}/catalog/KurtosisPackageCard.tsx | 2 +- .../src}/catalog/KurtosisPackageCardGrid.tsx | 2 +- .../src}/catalog/SavedPackages.tsx | 2 +- .../packages/components/src/catalog/index.ts | 6 + .../src}/catalog/utils.ts | 2 +- .../widgets/RunKurtosisPackageButton.tsx | 4 +- .../widgets/SaveKurtosisPackageButton.tsx | 4 +- .../web/packages/components/src/constants.ts | 3 + .../web/packages/components/src/index.tsx | 31 +- .../src}/logs/LogLine.tsx | 2 +- .../src}/logs/LogViewer.tsx | 2 +- .../web/packages/components/src/logs/index.ts | 3 + .../src}/logs/types.ts | 0 .../src}/logs/utils.ts | 0 .../src}/theme/Fonts.tsx | 0 .../src}/theme/constants.ts | 2 - .../src}/theme/formsTheme.tsx | 0 .../src}/theme/tabsTheme.ts | 0 .../src}/theme/tagsTheme.ts | 0 .../src}/useKeyboardAction.ts | 2 +- .../{app => components}/src/utils/download.ts | 0 .../{app => components}/src/utils/index.ts | 4 + .../src/utils/packageUtils.ts | 0 .../{app => components}/src/utils/types.ts | 0 enclave-manager/web/yarn.lock | 7 + engine/server/webapp/asset-manifest.json | 6 +- engine/server/webapp/index.html | 2 +- .../server/webapp/static/js/main.7b2337fa.js | 3 - .../server/webapp/static/js/main.ff1c776d.js | 3 + ...CENSE.txt => main.ff1c776d.js.LICENSE.txt} | 0 ...n.7b2337fa.js.map => main.ff1c776d.js.map} | 2 +- 116 files changed, 259 insertions(+), 719 deletions(-) delete mode 100644 enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_connect.ts delete mode 100644 enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_pb.ts rename enclave-manager/web/packages/app/src/{components => emui/enclaves/components/modals}/constants.ts (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/AppLayout.tsx (98%) rename enclave-manager/web/packages/{app/src/components => components/src}/CodeEditor.tsx (98%) rename enclave-manager/web/packages/{app/src/components => components/src}/CopyButton.tsx (97%) rename enclave-manager/web/packages/{app/src/components => components/src}/DataTable.tsx (98%) rename enclave-manager/web/packages/{app/src/components => components/src}/DownloadButton.tsx (93%) rename enclave-manager/web/packages/{app/src/components => components/src}/FeatureNotImplementedModal.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/FileDisplay.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/FileSize.tsx (93%) rename enclave-manager/web/packages/{app/src/components => components/src}/FileTree.tsx (98%) rename enclave-manager/web/packages/{app/src/components => components/src}/FormatButton.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/FormatDateTime.tsx (96%) rename enclave-manager/web/packages/{app/src/components => components/src}/HoverLineTabList.tsx (96%) rename enclave-manager/web/packages/{app/src/components => components/src}/KeyboardCommands.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/KurtosisAlert.tsx (96%) rename enclave-manager/web/packages/{app/src/components => components/src}/KurtosisAlertModal.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/KurtosisBreadcrumbs.tsx (99%) rename enclave-manager/web/packages/{app/src/components => components/src}/KurtosisMarkdown.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/KurtosisThemeProvider.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/Navigation.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/PackageSourceButton.tsx (95%) rename enclave-manager/web/packages/{app/src/components => components/src}/PageTitle.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/PasteButton.tsx (97%) rename enclave-manager/web/packages/{app/src/components => components/src}/TitledBox.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/TitledCard.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/Toasts.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/ValueCard.tsx (96%) rename enclave-manager/web/packages/{app/src/components => components/src}/catalog/KurtosisPackageCard.tsx (96%) rename enclave-manager/web/packages/{app/src/components => components/src}/catalog/KurtosisPackageCardGrid.tsx (91%) rename enclave-manager/web/packages/{app/src/components => components/src}/catalog/SavedPackages.tsx (87%) create mode 100644 enclave-manager/web/packages/components/src/catalog/index.ts rename enclave-manager/web/packages/{app/src/components => components/src}/catalog/utils.ts (85%) rename enclave-manager/web/packages/{app/src/components => components/src}/catalog/widgets/RunKurtosisPackageButton.tsx (82%) rename enclave-manager/web/packages/{app/src/components => components/src}/catalog/widgets/SaveKurtosisPackageButton.tsx (93%) create mode 100644 enclave-manager/web/packages/components/src/constants.ts rename enclave-manager/web/packages/{app/src/components => components/src}/logs/LogLine.tsx (98%) rename enclave-manager/web/packages/{app/src/components => components/src}/logs/LogViewer.tsx (99%) create mode 100644 enclave-manager/web/packages/components/src/logs/index.ts rename enclave-manager/web/packages/{app/src/components => components/src}/logs/types.ts (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/logs/utils.ts (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/theme/Fonts.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/theme/constants.ts (85%) rename enclave-manager/web/packages/{app/src/components => components/src}/theme/formsTheme.tsx (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/theme/tabsTheme.ts (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/theme/tagsTheme.ts (100%) rename enclave-manager/web/packages/{app/src/components => components/src}/useKeyboardAction.ts (96%) rename enclave-manager/web/packages/{app => components}/src/utils/download.ts (100%) rename enclave-manager/web/packages/{app => components}/src/utils/index.ts (97%) rename enclave-manager/web/packages/{app => components}/src/utils/packageUtils.ts (100%) rename enclave-manager/web/packages/{app => components}/src/utils/types.ts (100%) delete mode 100644 engine/server/webapp/static/js/main.7b2337fa.js create mode 100644 engine/server/webapp/static/js/main.ff1c776d.js rename engine/server/webapp/static/js/{main.7b2337fa.js.LICENSE.txt => main.ff1c776d.js.LICENSE.txt} (100%) rename engine/server/webapp/static/js/{main.7b2337fa.js.map => main.ff1c776d.js.map} (67%) diff --git a/enclave-manager/web/package.json b/enclave-manager/web/package.json index a4179c1321..55d393f63c 100644 --- a/enclave-manager/web/package.json +++ b/enclave-manager/web/package.json @@ -7,11 +7,16 @@ "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "framer-motion": "^10.16.4", + "lodash": "^4.17.21", + "luxon": "^3.4.3", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-icons": "^4.11.0", + "true-myth": "^7.1.0" }, "devDependencies": { "@craco/craco": "^7.1.0", + "@types/luxon": "^3.3.3", "@types/node": "^16.7.13", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", diff --git a/enclave-manager/web/packages/app/package.json b/enclave-manager/web/packages/app/package.json index ccc4c69390..96376b7757 100644 --- a/enclave-manager/web/packages/app/package.json +++ b/enclave-manager/web/packages/app/package.json @@ -4,31 +4,19 @@ "private": true, "homepage": ".", "dependencies": { - "@monaco-editor/react": "^4.6.0", - "@tanstack/react-table": "^8.10.7", "ansi-to-html": "^0.7.2", "enclave-manager-sdk": "file:../../../api/typescript", "html-react-parser": "^4.2.2", "js-cookie": "^3.0.5", + "kurtosis-cloud-indexer-sdk": "^0.0.2", "kurtosis-ui-components": "0.0.1", - "lodash": "^4.17.21", - "luxon": "^3.4.3", "react-error-boundary": "^4.0.11", "react-hook-form": "^7.47.0", - "react-icons": "^4.11.0", - "react-markdown": "^9.0.0", - "react-router-dom": "^6.17.0", - "react-virtuoso": "^4.6.2", - "streamsaver": "^2.0.6", - "true-myth": "^7.1.0", "yaml": "^2.3.4" }, "devDependencies": { "@types/js-cookie": "^3.0.6", - "@types/luxon": "^3.3.3", - "@types/node": "^16.7.13", "@types/streamsaver": "^2.0.4", - "monaco-editor": "^0.44.0", "serve": "^14.2.1", "source-map-explorer": "^2.5.3" }, diff --git a/enclave-manager/web/packages/app/src/client/constants.ts b/enclave-manager/web/packages/app/src/client/constants.ts index 7523fe16b0..48b733f46c 100644 --- a/enclave-manager/web/packages/app/src/client/constants.ts +++ b/enclave-manager/web/packages/app/src/client/constants.ts @@ -1,4 +1,4 @@ -import { isDefined } from "../utils"; +import { isDefined } from "kurtosis-ui-components"; // Configurable: export const KURTOSIS_CLOUD_PROTOCOL = "https"; diff --git a/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClient.ts b/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClient.ts index 06adfec9a1..53f7c97b10 100644 --- a/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClient.ts +++ b/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClient.ts @@ -23,9 +23,8 @@ import { InspectFilesArtifactContentsRequest, RunStarlarkPackageRequest, } from "enclave-manager-sdk/build/kurtosis_enclave_manager_api_pb"; +import { assertDefined, asyncResult, isDefined, RemoveFunctions } from "kurtosis-ui-components"; import { EnclaveFullInfo } from "../../emui/enclaves/types"; -import { assertDefined, asyncResult, isDefined } from "../../utils"; -import { RemoveFunctions } from "../../utils/types"; export abstract class KurtosisClient { protected readonly client: PromiseClient; diff --git a/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClientContext.tsx b/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClientContext.tsx index 2a47925cd7..7ff0178a74 100644 --- a/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClientContext.tsx +++ b/enclave-manager/web/packages/app/src/client/enclaveManager/KurtosisClientContext.tsx @@ -1,8 +1,7 @@ import { Flex, Heading, Spinner } from "@chakra-ui/react"; import Cookies from "js-cookie"; +import { assertDefined, isDefined, KurtosisAlert, stringifyError } from "kurtosis-ui-components"; import { createContext, PropsWithChildren, useContext, useEffect, useMemo, useState } from "react"; -import { KurtosisAlert } from "../../components/KurtosisAlert"; -import { assertDefined, isDefined, stringifyError } from "../../utils"; import { KURTOSIS_CLOUD_EM_PAGE, KURTOSIS_CLOUD_EM_URL } from "../constants"; import { AuthenticatedKurtosisClient } from "./AuthenticatedKurtosisClient"; import { KurtosisClient } from "./KurtosisClient"; diff --git a/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClient.ts b/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClient.ts index e35c73efa0..6fe650f073 100644 --- a/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClient.ts +++ b/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClient.ts @@ -1,10 +1,8 @@ import { createPromiseClient, PromiseClient } from "@connectrpc/connect"; import { createConnectTransport } from "@connectrpc/connect-web"; -import { asyncResult } from "../../utils"; -import { parsePackageUrl } from "../../utils/packageUtils"; +import { KurtosisPackageIndexer, PackageRepository, ReadPackageRequest } from "kurtosis-cloud-indexer-sdk"; +import { asyncResult, parsePackageUrl } from "kurtosis-ui-components"; import { KURTOSIS_PACKAGE_INDEXER_URL } from "../constants"; -import { KurtosisPackageIndexer } from "./api/kurtosis_package_indexer_connect"; -import { PackageRepository, ReadPackageRequest } from "./api/kurtosis_package_indexer_pb"; export class KurtosisPackageIndexerClient { private client: PromiseClient; diff --git a/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClientContext.tsx b/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClientContext.tsx index c34099f5a3..fd168b6c68 100644 --- a/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClientContext.tsx +++ b/enclave-manager/web/packages/app/src/client/packageIndexer/KurtosisPackageIndexerClientContext.tsx @@ -1,5 +1,5 @@ +import { assertDefined } from "kurtosis-ui-components"; import { createContext, PropsWithChildren, useContext, useMemo } from "react"; -import { assertDefined } from "../../utils"; import { KurtosisPackageIndexerClient } from "./KurtosisPackageIndexerClient"; type KurtosisPackageIndexerClientContextState = { diff --git a/enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_connect.ts b/enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_connect.ts deleted file mode 100644 index e44e8f5a7a..0000000000 --- a/enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_connect.ts +++ /dev/null @@ -1,53 +0,0 @@ -// @generated by protoc-gen-connect-es v0.13.2 with parameter "target=ts" -// @generated from file kurtosis_package_indexer.proto (package kurtosis_package_indexer, syntax proto3) -/* eslint-disable */ -// @ts-nocheck - -import { Empty, MethodKind } from "@bufbuild/protobuf"; -import { GetPackagesResponse, ReadPackageRequest, ReadPackageResponse } from "./kurtosis_package_indexer_pb"; - -/** - * @generated from service kurtosis_package_indexer.KurtosisPackageIndexer - */ -export const KurtosisPackageIndexer = { - typeName: "kurtosis_package_indexer.KurtosisPackageIndexer", - methods: { - /** - * @generated from rpc kurtosis_package_indexer.KurtosisPackageIndexer.IsAvailable - */ - isAvailable: { - name: "IsAvailable", - I: Empty, - O: Empty, - kind: MethodKind.Unary, - }, - /** - * @generated from rpc kurtosis_package_indexer.KurtosisPackageIndexer.GetPackages - */ - getPackages: { - name: "GetPackages", - I: Empty, - O: GetPackagesResponse, - kind: MethodKind.Unary, - }, - /** - * @generated from rpc kurtosis_package_indexer.KurtosisPackageIndexer.Reindex - */ - reindex: { - name: "Reindex", - I: Empty, - O: Empty, - kind: MethodKind.Unary, - }, - /** - * @generated from rpc kurtosis_package_indexer.KurtosisPackageIndexer.ReadPackage - */ - readPackage: { - name: "ReadPackage", - I: ReadPackageRequest, - O: ReadPackageResponse, - kind: MethodKind.Unary, - }, - } -} as const; - diff --git a/enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_pb.ts b/enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_pb.ts deleted file mode 100644 index ed41c08f62..0000000000 --- a/enclave-manager/web/packages/app/src/client/packageIndexer/api/kurtosis_package_indexer_pb.ts +++ /dev/null @@ -1,445 +0,0 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" -// @generated from file kurtosis_package_indexer.proto (package kurtosis_package_indexer, syntax proto3) -/* eslint-disable */ -// @ts-nocheck - -import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3, protoInt64, Timestamp } from "@bufbuild/protobuf"; - -/** - * @generated from enum kurtosis_package_indexer.ArgumentValueType - */ -export enum ArgumentValueType { - /** - * @generated from enum value: BOOL = 0; - */ - BOOL = 0, - - /** - * @generated from enum value: STRING = 1; - */ - STRING = 1, - - /** - * @generated from enum value: INTEGER = 2; - */ - INTEGER = 2, - - /** - * @generated from enum value: DICT = 4; - */ - DICT = 4, - - /** - * @generated from enum value: JSON = 5; - */ - JSON = 5, - - /** - * @generated from enum value: LIST = 6; - */ - LIST = 6, -} -// Retrieve enum metadata with: proto3.getEnumType(ArgumentValueType) -proto3.util.setEnumType(ArgumentValueType, "kurtosis_package_indexer.ArgumentValueType", [ - { no: 0, name: "BOOL" }, - { no: 1, name: "STRING" }, - { no: 2, name: "INTEGER" }, - { no: 4, name: "DICT" }, - { no: 5, name: "JSON" }, - { no: 6, name: "LIST" }, -]); - -/** - * @generated from message kurtosis_package_indexer.ReadPackageRequest - */ -export class ReadPackageRequest extends Message { - /** - * @generated from field: kurtosis_package_indexer.PackageRepository repository_metadata = 1; - */ - repositoryMetadata?: PackageRepository; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "kurtosis_package_indexer.ReadPackageRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "repository_metadata", kind: "message", T: PackageRepository }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ReadPackageRequest { - return new ReadPackageRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ReadPackageRequest { - return new ReadPackageRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ReadPackageRequest { - return new ReadPackageRequest().fromJsonString(jsonString, options); - } - - static equals(a: ReadPackageRequest | PlainMessage | undefined, b: ReadPackageRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(ReadPackageRequest, a, b); - } -} - -/** - * @generated from message kurtosis_package_indexer.ReadPackageResponse - */ -export class ReadPackageResponse extends Message { - /** - * @generated from field: optional kurtosis_package_indexer.KurtosisPackage package = 1; - */ - package?: KurtosisPackage; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "kurtosis_package_indexer.ReadPackageResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "package", kind: "message", T: KurtosisPackage, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ReadPackageResponse { - return new ReadPackageResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ReadPackageResponse { - return new ReadPackageResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ReadPackageResponse { - return new ReadPackageResponse().fromJsonString(jsonString, options); - } - - static equals(a: ReadPackageResponse | PlainMessage | undefined, b: ReadPackageResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(ReadPackageResponse, a, b); - } -} - -/** - * @generated from message kurtosis_package_indexer.GetPackagesResponse - */ -export class GetPackagesResponse extends Message { - /** - * @generated from field: repeated kurtosis_package_indexer.KurtosisPackage packages = 1; - */ - packages: KurtosisPackage[] = []; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "kurtosis_package_indexer.GetPackagesResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "packages", kind: "message", T: KurtosisPackage, repeated: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): GetPackagesResponse { - return new GetPackagesResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): GetPackagesResponse { - return new GetPackagesResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): GetPackagesResponse { - return new GetPackagesResponse().fromJsonString(jsonString, options); - } - - static equals(a: GetPackagesResponse | PlainMessage | undefined, b: GetPackagesResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(GetPackagesResponse, a, b); - } -} - -/** - * @generated from message kurtosis_package_indexer.KurtosisPackage - */ -export class KurtosisPackage extends Message { - /** - * @generated from field: string name = 1; - */ - name = ""; - - /** - * @generated from field: repeated kurtosis_package_indexer.PackageArg args = 2; - */ - args: PackageArg[] = []; - - /** - * @generated from field: uint64 stars = 3; - */ - stars = protoInt64.zero; - - /** - * @generated from field: string description = 4; - */ - description = ""; - - /** - * deprecated: use a combination of repository_url and root_path instead - * - * @generated from field: optional string url = 5; - */ - url?: string; - - /** - * @generated from field: string entrypoint_description = 6; - */ - entrypointDescription = ""; - - /** - * @generated from field: string returns_description = 7; - */ - returnsDescription = ""; - - /** - * @generated from field: kurtosis_package_indexer.PackageRepository repository_metadata = 8; - */ - repositoryMetadata?: PackageRepository; - - /** - * @generated from field: string parsing_result = 9; - */ - parsingResult = ""; - - /** - * @generated from field: google.protobuf.Timestamp parsing_time = 10; - */ - parsingTime?: Timestamp; - - /** - * @generated from field: string version = 11; - */ - version = ""; - - /** - * @generated from field: string icon_url = 12; - */ - iconUrl = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "kurtosis_package_indexer.KurtosisPackage"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "args", kind: "message", T: PackageArg, repeated: true }, - { no: 3, name: "stars", kind: "scalar", T: 4 /* ScalarType.UINT64 */ }, - { no: 4, name: "description", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 5, name: "url", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, - { no: 6, name: "entrypoint_description", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 7, name: "returns_description", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 8, name: "repository_metadata", kind: "message", T: PackageRepository }, - { no: 9, name: "parsing_result", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 10, name: "parsing_time", kind: "message", T: Timestamp }, - { no: 11, name: "version", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 12, name: "icon_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): KurtosisPackage { - return new KurtosisPackage().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): KurtosisPackage { - return new KurtosisPackage().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): KurtosisPackage { - return new KurtosisPackage().fromJsonString(jsonString, options); - } - - static equals(a: KurtosisPackage | PlainMessage | undefined, b: KurtosisPackage | PlainMessage | undefined): boolean { - return proto3.util.equals(KurtosisPackage, a, b); - } -} - -/** - * @generated from message kurtosis_package_indexer.PackageArg - */ -export class PackageArg extends Message { - /** - * @generated from field: string name = 1; - */ - name = ""; - - /** - * @generated from field: bool is_required = 2; - */ - isRequired = false; - - /** - * @generated from field: string description = 4; - */ - description = ""; - - /** - * @generated from field: kurtosis_package_indexer.PackageArgumentType typeV2 = 5; - */ - typeV2?: PackageArgumentType; - - /** - * @generated from field: optional string defaultValue = 6; - */ - defaultValue?: string; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "kurtosis_package_indexer.PackageArg"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "is_required", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 4, name: "description", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 5, name: "typeV2", kind: "message", T: PackageArgumentType }, - { no: 6, name: "defaultValue", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): PackageArg { - return new PackageArg().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): PackageArg { - return new PackageArg().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): PackageArg { - return new PackageArg().fromJsonString(jsonString, options); - } - - static equals(a: PackageArg | PlainMessage | undefined, b: PackageArg | PlainMessage | undefined): boolean { - return proto3.util.equals(PackageArg, a, b); - } -} - -/** - * @generated from message kurtosis_package_indexer.PackageArgumentType - */ -export class PackageArgumentType extends Message { - /** - * @generated from field: kurtosis_package_indexer.ArgumentValueType top_level_type = 1; - */ - topLevelType = ArgumentValueType.BOOL; - - /** - * @generated from field: optional kurtosis_package_indexer.ArgumentValueType inner_type_1 = 2; - */ - innerType1?: ArgumentValueType; - - /** - * @generated from field: optional kurtosis_package_indexer.ArgumentValueType inner_type_2 = 3; - */ - innerType2?: ArgumentValueType; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "kurtosis_package_indexer.PackageArgumentType"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "top_level_type", kind: "enum", T: proto3.getEnumType(ArgumentValueType) }, - { no: 2, name: "inner_type_1", kind: "enum", T: proto3.getEnumType(ArgumentValueType), opt: true }, - { no: 3, name: "inner_type_2", kind: "enum", T: proto3.getEnumType(ArgumentValueType), opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): PackageArgumentType { - return new PackageArgumentType().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): PackageArgumentType { - return new PackageArgumentType().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): PackageArgumentType { - return new PackageArgumentType().fromJsonString(jsonString, options); - } - - static equals(a: PackageArgumentType | PlainMessage | undefined, b: PackageArgumentType | PlainMessage | undefined): boolean { - return proto3.util.equals(PackageArgumentType, a, b); - } -} - -/** - * @generated from message kurtosis_package_indexer.PackageRepository - */ -export class PackageRepository extends Message { - /** - * @generated from field: string base_url = 1; - */ - baseUrl = ""; - - /** - * @generated from field: string owner = 2; - */ - owner = ""; - - /** - * @generated from field: string name = 3; - */ - name = ""; - - /** - * @generated from field: string root_path = 4; - */ - rootPath = ""; - - /** - * @generated from field: google.protobuf.Timestamp last_commit_time = 5; - */ - lastCommitTime?: Timestamp; - - /** - * @generated from field: string default_branch = 6; - */ - defaultBranch = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "kurtosis_package_indexer.PackageRepository"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "base_url", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "owner", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 3, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 4, name: "root_path", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 5, name: "last_commit_time", kind: "message", T: Timestamp }, - { no: 6, name: "default_branch", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): PackageRepository { - return new PackageRepository().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): PackageRepository { - return new PackageRepository().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): PackageRepository { - return new PackageRepository().fromJsonString(jsonString, options); - } - - static equals(a: PackageRepository | PlainMessage | undefined, b: PackageRepository | PlainMessage | undefined): boolean { - return proto3.util.equals(PackageRepository, a, b); - } -} - diff --git a/enclave-manager/web/packages/app/src/emui/App.tsx b/enclave-manager/web/packages/app/src/emui/App.tsx index cb4d5ce107..ad7979afc8 100644 --- a/enclave-manager/web/packages/app/src/emui/App.tsx +++ b/enclave-manager/web/packages/app/src/emui/App.tsx @@ -1,9 +1,8 @@ +import { AppLayout, KurtosisThemeProvider } from "kurtosis-ui-components"; import { useMemo } from "react"; import { createBrowserRouter, Outlet, RouterProvider } from "react-router-dom"; import { KurtosisClientProvider, useKurtosisClient } from "../client/enclaveManager/KurtosisClientContext"; import { KurtosisPackageIndexerProvider } from "../client/packageIndexer/KurtosisPackageIndexerClientContext"; -import { AppLayout } from "../components/AppLayout"; -import { KurtosisThemeProvider } from "../components/KurtosisThemeProvider"; import { CatalogContextProvider } from "./catalog/CatalogContext"; import { catalogRoutes } from "./catalog/CatalogRoutes"; import { CreateEnclave } from "./enclaves/components/CreateEnclave"; diff --git a/enclave-manager/web/packages/app/src/emui/Navbar.tsx b/enclave-manager/web/packages/app/src/emui/Navbar.tsx index 8f6907773c..409801a081 100644 --- a/enclave-manager/web/packages/app/src/emui/Navbar.tsx +++ b/enclave-manager/web/packages/app/src/emui/Navbar.tsx @@ -1,9 +1,9 @@ +import { NavButton, Navigation } from "kurtosis-ui-components"; import { FiHome, FiPackage } from "react-icons/fi"; import { PiLinkSimpleBold } from "react-icons/pi"; import { Link, useLocation } from "react-router-dom"; import { KURTOSIS_CLOUD_CONNECT_URL } from "../client/constants"; import { useKurtosisClient } from "../client/enclaveManager/KurtosisClientContext"; -import { NavButton, Navigation } from "../components/Navigation"; export const Navbar = () => { const location = useLocation(); diff --git a/enclave-manager/web/packages/app/src/emui/catalog/Catalog.tsx b/enclave-manager/web/packages/app/src/emui/catalog/Catalog.tsx index 5ffedab079..efab70f957 100644 --- a/enclave-manager/web/packages/app/src/emui/catalog/Catalog.tsx +++ b/enclave-manager/web/packages/app/src/emui/catalog/Catalog.tsx @@ -14,18 +14,20 @@ import { InputRightElement, Text, } from "@chakra-ui/react"; +import { GetPackagesResponse, KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { + AppPageLayout, + FindCommand, + isDefined, + KurtosisAlert, + KurtosisPackageCardGrid, + PageTitle, + useKeyboardAction, + useSavedPackages, +} from "kurtosis-ui-components"; import { useMemo, useRef, useState } from "react"; import { FiSearch } from "react-icons/fi"; import { MdBookmarkAdded } from "react-icons/md"; -import { GetPackagesResponse, KurtosisPackage } from "../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { AppPageLayout } from "../../components/AppLayout"; -import { KurtosisPackageCardGrid } from "../../components/catalog/KurtosisPackageCardGrid"; -import { useSavedPackages } from "../../components/catalog/SavedPackages"; -import { FindCommand } from "../../components/KeyboardCommands"; -import { KurtosisAlert } from "../../components/KurtosisAlert"; -import { PageTitle } from "../../components/PageTitle"; -import { useKeyboardAction } from "../../components/useKeyboardAction"; -import { isDefined } from "../../utils"; import { ConfigureEnclaveModal } from "../enclaves/components/modals/ConfigureEnclaveModal"; import { EnclavesContextProvider } from "../enclaves/EnclavesContext"; import { useCatalogContext } from "./CatalogContext"; diff --git a/enclave-manager/web/packages/app/src/emui/catalog/CatalogContext.tsx b/enclave-manager/web/packages/app/src/emui/catalog/CatalogContext.tsx index 47d96286a5..2e2a7b253e 100644 --- a/enclave-manager/web/packages/app/src/emui/catalog/CatalogContext.tsx +++ b/enclave-manager/web/packages/app/src/emui/catalog/CatalogContext.tsx @@ -1,10 +1,9 @@ import { Flex, Heading, Spinner } from "@chakra-ui/react"; +import { GetPackagesResponse, KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { isDefined, SavedPackagesProvider } from "kurtosis-ui-components"; import { createContext, PropsWithChildren, useCallback, useContext, useEffect, useState } from "react"; import { Result } from "true-myth"; -import { GetPackagesResponse, KurtosisPackage } from "../../client/packageIndexer/api/kurtosis_package_indexer_pb"; import { useKurtosisPackageIndexerClient } from "../../client/packageIndexer/KurtosisPackageIndexerClientContext"; -import { SavedPackagesProvider } from "../../components/catalog/SavedPackages"; -import { isDefined } from "../../utils"; import { loadSavedPackageNames, storeSavedPackages } from "./storage"; export type CatalogState = { diff --git a/enclave-manager/web/packages/app/src/emui/catalog/CatalogRoutes.tsx b/enclave-manager/web/packages/app/src/emui/catalog/CatalogRoutes.tsx index 704bb5a896..7a4ed1bd74 100644 --- a/enclave-manager/web/packages/app/src/emui/catalog/CatalogRoutes.tsx +++ b/enclave-manager/web/packages/app/src/emui/catalog/CatalogRoutes.tsx @@ -1,7 +1,5 @@ +import { readablePackageName, registerBreadcrumbHandler, RemoveFunctions } from "kurtosis-ui-components"; import { Params } from "react-router-dom"; -import { readablePackageName } from "../../components/catalog/utils"; -import { registerBreadcrumbHandler } from "../../components/KurtosisBreadcrumbs"; -import { RemoveFunctions } from "../../utils/types"; import { KurtosisCatalogRouteObject } from "../types"; import { Catalog } from "./Catalog"; import { CatalogState } from "./CatalogContext"; diff --git a/enclave-manager/web/packages/app/src/emui/catalog/components/KurtosisCatalogBreadcrumbs.tsx b/enclave-manager/web/packages/app/src/emui/catalog/components/KurtosisCatalogBreadcrumbs.tsx index df10adb2ad..6e141a56cc 100644 --- a/enclave-manager/web/packages/app/src/emui/catalog/components/KurtosisCatalogBreadcrumbs.tsx +++ b/enclave-manager/web/packages/app/src/emui/catalog/components/KurtosisCatalogBreadcrumbs.tsx @@ -1,12 +1,13 @@ -import { useMemo } from "react"; -import { Params, UIMatch } from "react-router-dom"; import { + isDefined, KurtosisBreadcrumb, KurtosisBreadcrumbsHandle, KurtosisBreadcrumbsImpl, -} from "../../../components/KurtosisBreadcrumbs"; -import { isDefined } from "../../../utils"; -import { RemoveFunctions } from "../../../utils/types"; + RemoveFunctions, +} from "kurtosis-ui-components"; +import { useMemo } from "react"; +import { Params, UIMatch } from "react-router-dom"; + import { CatalogState, useCatalogContext } from "../CatalogContext"; export type KurtosisCatalogBreadcrumbsHandle = KurtosisBreadcrumbsHandle<"catalogHandle"> & { diff --git a/enclave-manager/web/packages/app/src/emui/catalog/package/Package.tsx b/enclave-manager/web/packages/app/src/emui/catalog/package/Package.tsx index 9706f0389d..053ebca68b 100644 --- a/enclave-manager/web/packages/app/src/emui/catalog/package/Package.tsx +++ b/enclave-manager/web/packages/app/src/emui/catalog/package/Package.tsx @@ -4,18 +4,21 @@ import { useState } from "react"; import { IoStar } from "react-icons/io5"; import { useParams } from "react-router-dom"; import { useKurtosisClient } from "../../../client/enclaveManager/KurtosisClientContext"; -import { KurtosisPackage } from "../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { AppPageLayout } from "../../../components/AppLayout"; -import { readablePackageName } from "../../../components/catalog/utils"; -import { RunKurtosisPackageButton } from "../../../components/catalog/widgets/RunKurtosisPackageButton"; -import { SaveKurtosisPackageButton } from "../../../components/catalog/widgets/SaveKurtosisPackageButton"; -import { CopyButton } from "../../../components/CopyButton"; -import { FormatDateTime } from "../../../components/FormatDateTime"; -import { KurtosisAlert } from "../../../components/KurtosisAlert"; -import { KurtosisMarkdown } from "../../../components/KurtosisMarkdown"; -import { PackageSourceButton } from "../../../components/PackageSourceButton"; -import { TitledCard } from "../../../components/TitledCard"; -import { isDefined } from "../../../utils"; + +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { + AppPageLayout, + CopyButton, + FormatDateTime, + isDefined, + KurtosisAlert, + KurtosisMarkdown, + PackageSourceButton, + readablePackageName, + RunKurtosisPackageButton, + SaveKurtosisPackageButton, + TitledCard, +} from "kurtosis-ui-components"; import { ConfigureEnclaveModal } from "../../enclaves/components/modals/ConfigureEnclaveModal"; import { EnclavesContextProvider } from "../../enclaves/EnclavesContext"; import { useKurtosisPackage } from "../CatalogContext"; diff --git a/enclave-manager/web/packages/app/src/emui/catalog/storage.ts b/enclave-manager/web/packages/app/src/emui/catalog/storage.ts index c764a42b11..988b02e552 100644 --- a/enclave-manager/web/packages/app/src/emui/catalog/storage.ts +++ b/enclave-manager/web/packages/app/src/emui/catalog/storage.ts @@ -1,5 +1,5 @@ -import { KurtosisPackage } from "../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { isDefined, stringifyError } from "../../utils"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { isDefined, stringifyError } from "kurtosis-ui-components"; const SAVED_PACKAGES_LOCAL_STORAGE_KEY = "kurtosis-saved-packages"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveList.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveList.tsx index 878abab5ff..cb40280da4 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveList.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveList.tsx @@ -1,8 +1,6 @@ import { Button, ButtonGroup, Flex } from "@chakra-ui/react"; +import { AppPageLayout, KurtosisAlert, PageTitle } from "kurtosis-ui-components"; import { useEffect, useMemo, useState } from "react"; -import { AppPageLayout } from "../../components/AppLayout"; -import { KurtosisAlert } from "../../components/KurtosisAlert"; -import { PageTitle } from "../../components/PageTitle"; import { CreateEnclaveButton } from "./components/CreateEnclaveButton"; import { EnclavesTable } from "./components/tables/EnclavesTable"; import { DeleteEnclavesButton } from "./components/widgets/DeleteEnclavesButton"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveRoutes.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveRoutes.tsx index 839ad8e8cb..384daf0e70 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveRoutes.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/EnclaveRoutes.tsx @@ -1,10 +1,8 @@ import { Icon } from "@chakra-ui/react"; import { FilesArtifactNameAndUuid, ServiceInfo } from "enclave-manager-sdk/build/api_container_service_pb"; +import { isDefined, registerBreadcrumbHandler, RemoveFunctions } from "kurtosis-ui-components"; import { FiPlus } from "react-icons/fi"; import { Outlet, Params } from "react-router-dom"; -import { registerBreadcrumbHandler } from "../../components/KurtosisBreadcrumbs"; -import { isDefined } from "../../utils"; -import { RemoveFunctions } from "../../utils/types"; import { KurtosisEnclavesRouteObject } from "../types"; import { GoToEnclaveOverviewButton } from "./components/GotToEncalaveOverviewButton"; import { KurtosisEnclavesBreadcrumbs } from "./components/KurtosisEnclaveBreadcrumbs"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/EnclavesContext.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/EnclavesContext.tsx index da01d34509..0e91aac480 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/EnclavesContext.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/EnclavesContext.tsx @@ -7,6 +7,7 @@ import { StarlarkRunResponseLine, } from "enclave-manager-sdk/build/api_container_service_pb"; import { CreateEnclaveResponse, EnclaveInfo } from "enclave-manager-sdk/build/engine_service_pb"; +import { assertDefined, isDefined, RemoveFunctions } from "kurtosis-ui-components"; import { createContext, PropsWithChildren, @@ -19,8 +20,6 @@ import { } from "react"; import { Result } from "true-myth"; import { useKurtosisClient } from "../../client/enclaveManager/KurtosisClientContext"; -import { assertDefined, isDefined } from "../../utils"; -import { RemoveFunctions } from "../../utils/types"; import { EnclaveFullInfo } from "./types"; export type EnclavesState = { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclave.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclave.tsx index e711773dfc..4895b0b799 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclave.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclave.tsx @@ -1,9 +1,9 @@ +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { isDefined } from "kurtosis-ui-components"; import { useCallback, useEffect, useState } from "react"; import { useLocation, useNavigate } from "react-router-dom"; -import { KurtosisPackage } from "../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { KURTOSIS_CREATE_ENCLAVE_URL_ARG } from "../../../components/constants"; -import { isDefined } from "../../../utils"; import { ConfigureEnclaveModal } from "./modals/ConfigureEnclaveModal"; +import { KURTOSIS_CREATE_ENCLAVE_URL_ARG } from "./modals/constants"; import { ManualCreateEnclaveModal } from "./modals/ManualCreateEnclaveModal"; import { PreloadPackage } from "./PreloadPackage"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclaveButton.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclaveButton.tsx index 311fae46e3..7a295748da 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclaveButton.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/CreateEnclaveButton.tsx @@ -1,7 +1,7 @@ import { Button, Menu, MenuButton, Tooltip } from "@chakra-ui/react"; import { FiPlus } from "react-icons/fi"; import { useNavigate } from "react-router-dom"; -import { KURTOSIS_CREATE_ENCLAVE_URL_ARG } from "../../../components/constants"; +import { KURTOSIS_CREATE_ENCLAVE_URL_ARG } from "./modals/constants"; export const CreateEnclaveButton = () => { const navigate = useNavigate(); diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/EditEnclaveButton.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/EditEnclaveButton.tsx index ea18f5eff8..01fe583ec8 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/EditEnclaveButton.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/EditEnclaveButton.tsx @@ -1,8 +1,8 @@ import { Button, ButtonProps, Tooltip } from "@chakra-ui/react"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { isDefined } from "kurtosis-ui-components"; import { useState } from "react"; import { FiEdit2 } from "react-icons/fi"; -import { KurtosisPackage } from "../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { isDefined } from "../../../utils"; import { EnclaveFullInfo } from "../types"; import { ConfigureEnclaveModal } from "./modals/ConfigureEnclaveModal"; import { PackageLoadingModal } from "./modals/PackageLoadingModal"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/GotToEncalaveOverviewButton.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/GotToEncalaveOverviewButton.tsx index 01be749103..15f7ccba2c 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/GotToEncalaveOverviewButton.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/GotToEncalaveOverviewButton.tsx @@ -1,7 +1,7 @@ import { Button } from "@chakra-ui/react"; +import { isDefined } from "kurtosis-ui-components"; import { IoExitOutline } from "react-icons/io5"; import { Link } from "react-router-dom"; -import { isDefined } from "../../../utils"; type GotToEncalaveOverviewButtonProps = { enclaveUUID?: string; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/KurtosisEnclaveBreadcrumbs.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/KurtosisEnclaveBreadcrumbs.tsx index f2663fed8e..ba3ccc4ce1 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/KurtosisEnclaveBreadcrumbs.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/KurtosisEnclaveBreadcrumbs.tsx @@ -1,12 +1,12 @@ -import { ReactElement, useMemo } from "react"; -import { Params, UIMatch } from "react-router-dom"; import { + isDefined, KurtosisBreadcrumb, KurtosisBreadcrumbsHandle, KurtosisBreadcrumbsImpl, -} from "../../../components/KurtosisBreadcrumbs"; -import { isDefined } from "../../../utils"; -import { RemoveFunctions } from "../../../utils/types"; + RemoveFunctions, +} from "kurtosis-ui-components"; +import { ReactElement, useMemo } from "react"; +import { Params, UIMatch } from "react-router-dom"; import { EnclavesState, useEnclavesContext } from "../EnclavesContext"; export type KurtosisEnclavesBreadcrumbsHandle = KurtosisBreadcrumbsHandle<"enclavesHandle"> & { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/PreloadPackage.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/PreloadPackage.tsx index 84ae407b49..153fb12716 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/PreloadPackage.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/PreloadPackage.tsx @@ -1,7 +1,7 @@ +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { isDefined } from "kurtosis-ui-components"; import { useSearchParams } from "react-router-dom"; -import { KurtosisPackage } from "../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { KURTOSIS_PACKAGE_ID_URL_ARG } from "../../../components/constants"; -import { isDefined } from "../../../utils"; +import { KURTOSIS_PACKAGE_ID_URL_ARG } from "./modals/constants"; import { PackageLoadingModal } from "./modals/PackageLoadingModal"; type PreloadEnclaveProps = { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/EnclaveConfigurationForm.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/EnclaveConfigurationForm.tsx index d559a597bc..5be8272101 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/EnclaveConfigurationForm.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/EnclaveConfigurationForm.tsx @@ -1,12 +1,8 @@ +import { ArgumentValueType, KurtosisPackage, PackageArg } from "kurtosis-cloud-indexer-sdk"; +import { isDefined, isStringTrue } from "kurtosis-ui-components"; import { CSSProperties, forwardRef, PropsWithChildren, useImperativeHandle } from "react"; import { FormProvider, SubmitHandler, useForm, useFormContext } from "react-hook-form"; import YAML from "yaml"; -import { - ArgumentValueType, - KurtosisPackage, - PackageArg, -} from "../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { isDefined, isStringTrue } from "../../../../utils"; import { ConfigureEnclaveForm } from "./types"; type EnclaveConfigurationFormProps = PropsWithChildren<{ diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisArgumentFormControl.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisArgumentFormControl.tsx index e2a07307d9..787aa1f770 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisArgumentFormControl.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisArgumentFormControl.tsx @@ -1,8 +1,7 @@ import { Badge, Flex, FormControl, FormErrorMessage, FormHelperText, FormLabel } from "@chakra-ui/react"; +import { isDefined, KurtosisMarkdown } from "kurtosis-ui-components"; import { PropsWithChildren } from "react"; import { FieldError, FieldPath } from "react-hook-form"; -import { KurtosisMarkdown } from "../../../../components/KurtosisMarkdown"; -import { isDefined } from "../../../../utils"; import { useEnclaveConfigurationFormContext } from "./EnclaveConfigurationForm"; import { ConfigureEnclaveForm } from "./types"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisPackageArgumentInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisPackageArgumentInput.tsx index 394c1cedcf..8694d79ec9 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisPackageArgumentInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/KurtosisPackageArgumentInput.tsx @@ -1,4 +1,4 @@ -import { PackageArg } from "../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; +import { PackageArg } from "kurtosis-cloud-indexer-sdk"; import { KurtosisArgumentTypeInput } from "./inputs/KurtosisArgumentTypeInput"; import { KurtosisArgumentFormControl } from "./KurtosisArgumentFormControl"; import { argToTypeString } from "./utils"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/DictArgumentInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/DictArgumentInput.tsx index a3406d69b4..b29b8a1c8a 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/DictArgumentInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/DictArgumentInput.tsx @@ -1,11 +1,9 @@ import { Button, ButtonGroup, Flex, useToast } from "@chakra-ui/react"; -import { ArgumentValueType } from "../../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; +import { ArgumentValueType } from "kurtosis-cloud-indexer-sdk"; +import { CopyButton, PasteButton, stringifyError } from "kurtosis-ui-components"; import { useFieldArray, useFormContext } from "react-hook-form"; import { FiDelete, FiPlus } from "react-icons/fi"; -import { CopyButton } from "../../../../../components/CopyButton"; -import { PasteButton } from "../../../../../components/PasteButton"; -import { stringifyError } from "../../../../../utils"; import { KurtosisArgumentSubtypeFormControl } from "../KurtosisArgumentFormControl"; import { ConfigureEnclaveForm } from "../types"; import { KurtosisArgumentTypeInput, KurtosisArgumentTypeInputImplProps } from "./KurtosisArgumentTypeInput"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/IntegerArgumentInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/IntegerArgumentInput.tsx index 50533ba4fd..331d35536a 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/IntegerArgumentInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/IntegerArgumentInput.tsx @@ -1,5 +1,5 @@ import { Input } from "@chakra-ui/react"; -import { isDefined } from "../../../../../utils"; +import { isDefined } from "kurtosis-ui-components"; import { useEnclaveConfigurationFormContext } from "../EnclaveConfigurationForm"; import { KurtosisArgumentTypeInputImplProps } from "./KurtosisArgumentTypeInput"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/JSONArgumentInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/JSONArgumentInput.tsx index 90dba6de2b..89be5d1dd3 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/JSONArgumentInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/JSONArgumentInput.tsx @@ -1,13 +1,17 @@ import { Button, ButtonGroup, Flex } from "@chakra-ui/react"; +import { + CodeEditor, + CodeEditorImperativeAttributes, + FormatButton, + isDefined, + stringifyError, +} from "kurtosis-ui-components"; import { useEffect, useMemo, useRef, useState } from "react"; import { Controller } from "react-hook-form"; import { FieldPath, FieldValues } from "react-hook-form/dist/types"; import { ControllerRenderProps } from "react-hook-form/dist/types/controller"; import { FiCode } from "react-icons/fi"; import YAML from "yaml"; -import { CodeEditor, CodeEditorImperativeAttributes } from "../../../../../components/CodeEditor"; -import { FormatButton } from "../../../../../components/FormatButton"; -import { isDefined, stringifyError } from "../../../../../utils"; import { KurtosisArgumentTypeInputImplProps } from "./KurtosisArgumentTypeInput"; export const JSONArgumentInput = (props: KurtosisArgumentTypeInputImplProps) => { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/KurtosisArgumentTypeInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/KurtosisArgumentTypeInput.tsx index 6ba4d35ac7..cda736a1de 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/KurtosisArgumentTypeInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/KurtosisArgumentTypeInput.tsx @@ -1,7 +1,7 @@ import * as CSS from "csstype"; +import { ArgumentValueType } from "kurtosis-cloud-indexer-sdk"; +import { assertDefined } from "kurtosis-ui-components"; import { FieldPath } from "react-hook-form"; -import { ArgumentValueType } from "../../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { assertDefined } from "../../../../../utils"; import { ConfigureEnclaveForm } from "../types"; import { BooleanArgumentInput } from "./BooleanArgumentInput"; import { DictArgumentInput } from "./DictArgumentInput"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/ListArgumentInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/ListArgumentInput.tsx index 7c75963879..5414943e1b 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/ListArgumentInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/inputs/ListArgumentInput.tsx @@ -1,11 +1,9 @@ import { Button, ButtonGroup, Flex, useToast } from "@chakra-ui/react"; -import { ArgumentValueType } from "../../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; +import { ArgumentValueType } from "kurtosis-cloud-indexer-sdk"; +import { CopyButton, PasteButton, stringifyError } from "kurtosis-ui-components"; import { useFieldArray, useFormContext } from "react-hook-form"; import { FiDelete, FiPlus } from "react-icons/fi"; -import { CopyButton } from "../../../../../components/CopyButton"; -import { PasteButton } from "../../../../../components/PasteButton"; -import { stringifyError } from "../../../../../utils"; import { KurtosisArgumentSubtypeFormControl } from "../KurtosisArgumentFormControl"; import { ConfigureEnclaveForm } from "../types"; import { KurtosisArgumentTypeInput, KurtosisArgumentTypeInputImplProps } from "./KurtosisArgumentTypeInput"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/utils.ts b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/utils.ts index 6fb3b7571f..7e6706ddc7 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/utils.ts +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/configuration/utils.ts @@ -1,4 +1,4 @@ -import { ArgumentValueType, PackageArg } from "../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; +import { ArgumentValueType, PackageArg } from "kurtosis-cloud-indexer-sdk"; export function argTypeToString(argType?: ArgumentValueType) { switch (argType) { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ConfigureEnclaveModal.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ConfigureEnclaveModal.tsx index bb5c2259f2..b5ebe9d497 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ConfigureEnclaveModal.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ConfigureEnclaveModal.tsx @@ -14,17 +14,21 @@ import { useToast, } from "@chakra-ui/react"; import { EnclaveMode } from "enclave-manager-sdk/build/engine_service_pb"; +import { ArgumentValueType, KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { + assertDefined, + CopyButton, + isDefined, + KurtosisAlert, + KurtosisAlertError, + PackageSourceButton, + stringifyError, +} from "kurtosis-ui-components"; import { useMemo, useRef, useState } from "react"; import { ErrorBoundary } from "react-error-boundary"; import { SubmitHandler } from "react-hook-form"; import { useNavigate } from "react-router-dom"; import { useKurtosisClient } from "../../../../client/enclaveManager/KurtosisClientContext"; -import { ArgumentValueType, KurtosisPackage } from "../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { KURTOSIS_PACKAGE_ID_URL_ARG, KURTOSIS_PACKAGE_PARAMS_URL_ARG } from "../../../../components/constants"; -import { CopyButton } from "../../../../components/CopyButton"; -import { KurtosisAlert, KurtosisAlertError } from "../../../../components/KurtosisAlert"; -import { PackageSourceButton } from "../../../../components/PackageSourceButton"; -import { assertDefined, isDefined, stringifyError } from "../../../../utils"; import { useEnclavesContext } from "../../EnclavesContext"; import { EnclaveFullInfo } from "../../types"; import { @@ -37,6 +41,7 @@ import { KurtosisArgumentFormControl } from "../configuration/KurtosisArgumentFo import { KurtosisPackageArgumentInput } from "../configuration/KurtosisPackageArgumentInput"; import { ConfigureEnclaveForm } from "../configuration/types"; import { allowedEnclaveNamePattern, isEnclaveNameAllowed } from "../utils"; +import { KURTOSIS_PACKAGE_ID_URL_ARG, KURTOSIS_PACKAGE_PARAMS_URL_ARG } from "./constants"; type ConfigureEnclaveModalProps = { isOpen: boolean; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ManualCreateEnclaveModal.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ManualCreateEnclaveModal.tsx index f08790e129..f5d0602c13 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ManualCreateEnclaveModal.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/ManualCreateEnclaveModal.tsx @@ -15,12 +15,12 @@ import { ModalHeader, ModalOverlay, } from "@chakra-ui/react"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { isDefined } from "kurtosis-ui-components"; import { useState } from "react"; import { SubmitHandler, useForm } from "react-hook-form"; import { IoLogoGithub } from "react-icons/io"; -import { KurtosisPackage } from "../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; import { useKurtosisPackageIndexerClient } from "../../../../client/packageIndexer/KurtosisPackageIndexerClientContext"; -import { isDefined } from "../../../../utils"; type ManualCreateEnclaveForm = { url: string; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/PackageLoadingModal.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/PackageLoadingModal.tsx index e0aca5d86e..dab842c514 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/PackageLoadingModal.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/PackageLoadingModal.tsx @@ -11,11 +11,10 @@ import { Spinner, Text, } from "@chakra-ui/react"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; +import { isDefined, KurtosisAlert } from "kurtosis-ui-components"; import { useEffect, useState } from "react"; -import { KurtosisPackage } from "../../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; import { useKurtosisPackageIndexerClient } from "../../../../client/packageIndexer/KurtosisPackageIndexerClientContext"; -import { KurtosisAlert } from "../../../../components/KurtosisAlert"; -import { isDefined } from "../../../../utils"; export type PackageLoadingModalProps = { packageId: string; diff --git a/enclave-manager/web/packages/app/src/components/constants.ts b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/constants.ts similarity index 100% rename from enclave-manager/web/packages/app/src/components/constants.ts rename to enclave-manager/web/packages/app/src/emui/enclaves/components/modals/constants.ts diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/EnclavesTable.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/EnclavesTable.tsx index a6311988a5..1c74d04271 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/EnclavesTable.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/EnclavesTable.tsx @@ -2,13 +2,10 @@ import { Button, Checkbox, Text } from "@chakra-ui/react"; import { ColumnDef, createColumnHelper } from "@tanstack/react-table"; import { FilesArtifactNameAndUuid, ServiceInfo } from "enclave-manager-sdk/build/api_container_service_pb"; import { EnclaveContainersStatus } from "enclave-manager-sdk/build/engine_service_pb"; +import { DataTable, FormatDateTime, isDefined, PackageSourceButton } from "kurtosis-ui-components"; import { DateTime } from "luxon"; import { useMemo } from "react"; import { Link } from "react-router-dom"; -import { DataTable } from "../../../../components/DataTable"; -import { FormatDateTime } from "../../../../components/FormatDateTime"; -import { PackageSourceButton } from "../../../../components/PackageSourceButton"; -import { isDefined } from "../../../../utils"; import { EnclaveFullInfo } from "../../types"; import { EnclaveArtifactsSummary } from "../widgets/EnclaveArtifactsSummary"; import { EnclaveServicesSummary } from "../widgets/EnclaveServicesSummary"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/FilesTable.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/FilesTable.tsx index 9d7005bf82..f74319ba9a 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/FilesTable.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/FilesTable.tsx @@ -4,10 +4,9 @@ import { FilesArtifactNameAndUuid, ListFilesArtifactNamesAndUuidsResponse, } from "enclave-manager-sdk/build/api_container_service_pb"; +import { DataTable, RemoveFunctions } from "kurtosis-ui-components"; import { useMemo } from "react"; import { Link } from "react-router-dom"; -import { DataTable } from "../../../../components/DataTable"; -import { RemoveFunctions } from "../../../../utils/types"; import { EnclaveFullInfo } from "../../types"; import { DownloadFileArtifactButton } from "../widgets/DownloadFileArtifactButton"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/PortsTable.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/PortsTable.tsx index 15cd88eabe..dd0bcebd7c 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/PortsTable.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/PortsTable.tsx @@ -2,10 +2,9 @@ import { ExternalLinkIcon } from "@chakra-ui/icons"; import { Flex, Link, Text } from "@chakra-ui/react"; import { ColumnDef, createColumnHelper } from "@tanstack/react-table"; import { Port } from "enclave-manager-sdk/build/api_container_service_pb"; +import { DataTable, isDefined } from "kurtosis-ui-components"; import { useMemo } from "react"; import { KURTOSIS_CLOUD_HOST, KURTOSIS_CLOUD_PROTOCOL } from "../../../../client/constants"; -import { DataTable } from "../../../../components/DataTable"; -import { isDefined } from "../../../../utils"; import { transportProtocolToString } from "../utils"; type PortsTableRow = { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/ServicesTable.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/ServicesTable.tsx index 3f3b3aa69a..2c41761624 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/ServicesTable.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/tables/ServicesTable.tsx @@ -6,10 +6,9 @@ import { ServiceInfo, ServiceStatus, } from "enclave-manager-sdk/build/api_container_service_pb"; +import { DataTable, RemoveFunctions } from "kurtosis-ui-components"; import { useMemo } from "react"; import { Link } from "react-router-dom"; -import { DataTable } from "../../../../components/DataTable"; -import { RemoveFunctions } from "../../../../utils/types"; import { ImageButton } from "../widgets/ImageButton"; import { PortsSummary } from "../widgets/PortsSummary"; import { ServiceStatusTag } from "../widgets/ServiceStatus"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/utils.ts b/enclave-manager/web/packages/app/src/emui/enclaves/components/utils.ts index 72f099a45a..c9b8ea52b4 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/utils.ts +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/utils.ts @@ -1,5 +1,5 @@ import { Port_TransportProtocol } from "enclave-manager-sdk/build/api_container_service_pb"; -import { isDefined } from "../../../utils"; +import { isDefined } from "kurtosis-ui-components"; export function transportProtocolToString(protocol: Port_TransportProtocol) { switch (protocol) { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DeleteEnclavesButton.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DeleteEnclavesButton.tsx index b8068b10c6..329b162270 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DeleteEnclavesButton.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DeleteEnclavesButton.tsx @@ -1,8 +1,8 @@ import { Button, ButtonProps, Tooltip } from "@chakra-ui/react"; +import { KurtosisAlertModal } from "kurtosis-ui-components"; import { useState } from "react"; import { FiTrash2 } from "react-icons/fi"; import { useNavigate } from "react-router-dom"; -import { KurtosisAlertModal } from "../../../../components/KurtosisAlertModal"; import { useEnclavesContext } from "../../EnclavesContext"; import { EnclaveFullInfo } from "../../types"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DownloadFileArtifactButton.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DownloadFileArtifactButton.tsx index 4c207f9721..d913238448 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DownloadFileArtifactButton.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/DownloadFileArtifactButton.tsx @@ -1,8 +1,8 @@ import { FilesArtifactNameAndUuid } from "enclave-manager-sdk/build/api_container_service_pb"; +import { DownloadButton } from "kurtosis-ui-components"; import { useState } from "react"; import streamsaver from "streamsaver"; import { useKurtosisClient } from "../../../../client/enclaveManager/KurtosisClientContext"; -import { DownloadButton } from "../../../../components/DownloadButton"; import { EnclaveFullInfo } from "../../types"; type DownloadFileButtonProps = { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveArtifactsSummary.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveArtifactsSummary.tsx index 1790ecee60..ef0a9171f0 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveArtifactsSummary.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveArtifactsSummary.tsx @@ -1,6 +1,6 @@ import { Tag, Text } from "@chakra-ui/react"; import { FilesArtifactNameAndUuid } from "enclave-manager-sdk/build/api_container_service_pb"; -import { isDefined } from "../../../../utils"; +import { isDefined } from "kurtosis-ui-components"; type EnclaveArtifactsSummaryProps = { artifacts: FilesArtifactNameAndUuid[] | null; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveServicesSummary.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveServicesSummary.tsx index 23ceea55c4..5caa9f7f14 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveServicesSummary.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/EnclaveServicesSummary.tsx @@ -1,6 +1,6 @@ import { Flex, Spinner, Tag, TagProps, Tooltip } from "@chakra-ui/react"; import { ServiceInfo, ServiceStatus } from "enclave-manager-sdk/build/api_container_service_pb"; -import { isDefined } from "../../../../utils"; +import { isDefined } from "kurtosis-ui-components"; type ServicesSummaryProps = { services: "loading" | ServiceInfo[] | null; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/ImageButton.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/ImageButton.tsx index 129f92ac4d..9736b50618 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/ImageButton.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/ImageButton.tsx @@ -1,7 +1,7 @@ import { Button, Icon, Text } from "@chakra-ui/react"; +import { isDefined } from "kurtosis-ui-components"; import { useMemo } from "react"; import { IoLogoDocker } from "react-icons/io5"; -import { isDefined } from "../../../../utils"; function getUrlForImage(image: string): string | null { const [imageName] = image.split(":"); diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx index e510271bb3..5c88717b31 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx @@ -1,12 +1,14 @@ import { Flex, TabPanel, TabPanels, Tabs } from "@chakra-ui/react"; import { useNavigate, useParams } from "react-router-dom"; +import { + AppPageLayout, + FeatureNotImplementedModal, + HoverLineTabList, + KurtosisAlert, + PageTitle, +} from "kurtosis-ui-components"; import { FunctionComponent, useState } from "react"; -import { AppPageLayout } from "../../../components/AppLayout"; -import { FeatureNotImplementedModal } from "../../../components/FeatureNotImplementedModal"; -import { HoverLineTabList } from "../../../components/HoverLineTabList"; -import { KurtosisAlert } from "../../../components/KurtosisAlert"; -import { PageTitle } from "../../../components/PageTitle"; import { EditEnclaveButton } from "../components/EditEnclaveButton"; import { DeleteEnclavesButton } from "../components/widgets/DeleteEnclavesButton"; import { useFullEnclave } from "../EnclavesContext"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/EnclaveRouteContext.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/EnclaveRouteContext.tsx index 857c4e3139..718101adf8 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/EnclaveRouteContext.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/EnclaveRouteContext.tsx @@ -1,7 +1,6 @@ +import { AppPageLayout, KurtosisAlert } from "kurtosis-ui-components"; import { createContext, PropsWithChildren, useContext } from "react"; import { useParams } from "react-router-dom"; -import { AppPageLayout } from "../../../components/AppLayout"; -import { KurtosisAlert } from "../../../components/KurtosisAlert"; import { useFullEnclave } from "../EnclavesContext"; import { EnclaveFullInfo } from "../types"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/artifact/Artifact.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/artifact/Artifact.tsx index e236c53d60..716eea61be 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/artifact/Artifact.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/artifact/Artifact.tsx @@ -1,18 +1,22 @@ import { ButtonGroup, Flex, Spinner } from "@chakra-ui/react"; import { InspectFilesArtifactContentsResponse } from "enclave-manager-sdk/build/api_container_service_pb"; +import { + AppPageLayout, + CodeEditor, + CodeEditorImperativeAttributes, + CopyButton, + DownloadButton, + FileTree, + FileTreeNode, + FormatButton, + isDefined, + KurtosisAlert, + TitledCard, +} from "kurtosis-ui-components"; import { useEffect, useMemo, useRef, useState } from "react"; import { useParams } from "react-router-dom"; import { Result } from "true-myth"; import { useKurtosisClient } from "../../../../client/enclaveManager/KurtosisClientContext"; -import { AppPageLayout } from "../../../../components/AppLayout"; -import { CodeEditor, CodeEditorImperativeAttributes } from "../../../../components/CodeEditor"; -import { CopyButton } from "../../../../components/CopyButton"; -import { DownloadButton } from "../../../../components/DownloadButton"; -import { FileTree, FileTreeNode } from "../../../../components/FileTree"; -import { FormatButton } from "../../../../components/FormatButton"; -import { KurtosisAlert } from "../../../../components/KurtosisAlert"; -import { TitledCard } from "../../../../components/TitledCard"; -import { isDefined } from "../../../../utils"; import { useFullEnclave } from "../../EnclavesContext"; import { EnclaveFullInfo } from "../../types"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/logs/EnclaveLogs.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/logs/EnclaveLogs.tsx index eb460a948f..a7670dd6b6 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/logs/EnclaveLogs.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/logs/EnclaveLogs.tsx @@ -1,12 +1,9 @@ import { ButtonGroup, CircularProgress, Flex, Icon, Tag } from "@chakra-ui/react"; import { StarlarkRunResponseLine } from "enclave-manager-sdk/build/api_container_service_pb"; +import { AppPageLayout, isAsyncIterable, LogLineMessage, LogViewer, stringifyError } from "kurtosis-ui-components"; import { useEffect, useState } from "react"; import { FiCheck, FiX } from "react-icons/fi"; import { Location, useLocation, useNavigate } from "react-router-dom"; -import { AppPageLayout } from "../../../../components/AppLayout"; -import { LogViewer } from "../../../../components/logs/LogViewer"; -import { LogLineMessage } from "../../../../components/logs/types"; -import { isAsyncIterable, stringifyError } from "../../../../utils"; import { EditEnclaveButton } from "../../components/EditEnclaveButton"; import { DeleteEnclavesButton } from "../../components/widgets/DeleteEnclavesButton"; import { useEnclavesContext } from "../../EnclavesContext"; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/overview/EnclaveOverview.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/overview/EnclaveOverview.tsx index 6ce44f0049..0b98ceb740 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/overview/EnclaveOverview.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/overview/EnclaveOverview.tsx @@ -1,11 +1,6 @@ import { Flex, Grid, GridItem, Spinner } from "@chakra-ui/react"; +import { FormatDateTime, isDefined, KurtosisAlert, TitledBox, ValueCard } from "kurtosis-ui-components"; import { DateTime } from "luxon"; -import { FormatDateTime } from "../../../../components/FormatDateTime"; -import { KurtosisAlert } from "../../../../components/KurtosisAlert"; -import { FLEX_STANDARD_GAP } from "../../../../components/theme/constants"; -import { TitledBox } from "../../../../components/TitledBox"; -import { ValueCard } from "../../../../components/ValueCard"; -import { isDefined } from "../../../../utils"; import { FilesTable } from "../../components/tables/FilesTable"; import { ServicesTable } from "../../components/tables/ServicesTable"; import { EnclaveStatus } from "../../components/widgets/EnclaveStatus"; @@ -21,8 +16,8 @@ export const EnclaveOverview = ({ enclave }: EnclaveOverviewProps) => { : null; return ( - - + + diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/Service.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/Service.tsx index 76fb48f0cc..94754498a5 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/Service.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/Service.tsx @@ -1,19 +1,18 @@ import { Flex, Spinner, TabPanel, TabPanels, Tabs } from "@chakra-ui/react"; import { ServiceInfo } from "enclave-manager-sdk/build/api_container_service_pb"; +import Cookies from "js-cookie"; +import { AppPageLayout, HoverLineTabList, isDefined, KurtosisAlert, PageTitle } from "kurtosis-ui-components"; import { FunctionComponent } from "react"; import { useNavigate, useParams } from "react-router-dom"; -import { AppPageLayout } from "../../../../components/AppLayout"; -import { HoverLineTabList } from "../../../../components/HoverLineTabList"; -import { KurtosisAlert } from "../../../../components/KurtosisAlert"; -import { PageTitle } from "../../../../components/PageTitle"; -import { isDefined } from "../../../../utils"; import { EnclaveFullInfo } from "../../types"; import { useEnclaveFromParams } from "../EnclaveRouteContext"; import { ServiceLogs } from "./logs/ServiceLogs"; import { ServiceOverview } from "./overview/ServiceOverview"; -import Cookies from "js-cookie"; -const tabs: { path: string; element: FunctionComponent<{ enclave: EnclaveFullInfo; service: ServiceInfo; instanceUUID: string }> }[] = [ +const tabs: { + path: string; + element: FunctionComponent<{ enclave: EnclaveFullInfo; service: ServiceInfo; instanceUUID: string }>; +}[] = [ { path: "overview", element: ServiceOverview }, { path: "logs", element: ServiceLogs }, ]; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/logs/ServiceLogs.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/logs/ServiceLogs.tsx index d3ded64819..f378dda065 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/logs/ServiceLogs.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/logs/ServiceLogs.tsx @@ -1,11 +1,9 @@ import { Timestamp } from "@bufbuild/protobuf"; import { ServiceInfo } from "enclave-manager-sdk/build/api_container_service_pb"; +import { assertDefined, isDefined, LogLineMessage, LogViewer, stringifyError } from "kurtosis-ui-components"; import { DateTime } from "luxon"; import { useCallback, useEffect, useState } from "react"; import { useKurtosisClient } from "../../../../../client/enclaveManager/KurtosisClientContext"; -import { LogViewer } from "../../../../../components/logs/LogViewer"; -import { LogLineMessage } from "../../../../../components/logs/types"; -import { assertDefined, isDefined, stringifyError } from "../../../../../utils"; import { EnclaveFullInfo } from "../../../types"; const serviceLogLineToLogLineMessage = (lines: string[], timestamp?: Timestamp): LogLineMessage[] => { diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/overview/ServiceOverview.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/overview/ServiceOverview.tsx index c866b825e0..def1de9fd9 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/overview/ServiceOverview.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/service/overview/ServiceOverview.tsx @@ -1,13 +1,8 @@ import { Flex, Grid, GridItem, Icon, Text } from "@chakra-ui/react"; import { Container, ServiceInfo } from "enclave-manager-sdk/build/api_container_service_pb"; +import { FileDisplay, isDefined, KurtosisAlert, TitledBox, ValueCard } from "kurtosis-ui-components"; import { useMemo } from "react"; import { IoLogoDocker } from "react-icons/io5"; -import { FileDisplay } from "../../../../../components/FileDisplay"; -import { KurtosisAlert } from "../../../../../components/KurtosisAlert"; -import { FLEX_STANDARD_GAP } from "../../../../../components/theme/constants"; -import { TitledBox } from "../../../../../components/TitledBox"; -import { ValueCard } from "../../../../../components/ValueCard"; -import { isDefined } from "../../../../../utils"; import { PortsTable } from "../../../components/tables/PortsTable"; import { ServiceStatusTag } from "../../../components/widgets/ServiceStatus"; import { EnclaveFullInfo } from "../../../types"; @@ -20,8 +15,8 @@ type ServiceOverviewProps = { export const ServiceOverview = ({ service, enclave, instanceUUID }: ServiceOverviewProps) => { return ( - - + + diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/types.ts b/enclave-manager/web/packages/app/src/emui/enclaves/types.ts index 3e4ac9d5cc..726fd0f741 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/types.ts +++ b/enclave-manager/web/packages/app/src/emui/enclaves/types.ts @@ -4,8 +4,8 @@ import { ListFilesArtifactNamesAndUuidsResponse, } from "enclave-manager-sdk/build/api_container_service_pb"; import { EnclaveInfo } from "enclave-manager-sdk/build/engine_service_pb"; +import { RemoveFunctions } from "kurtosis-ui-components"; import { Result } from "true-myth"; -import { RemoveFunctions } from "../../utils/types"; export type EnclaveFullInfo = RemoveFunctions & { starlarkRun?: Result, string>; diff --git a/enclave-manager/web/packages/components/package.json b/enclave-manager/web/packages/components/package.json index 254a16bac2..a3c930a261 100644 --- a/enclave-manager/web/packages/components/package.json +++ b/enclave-manager/web/packages/components/package.json @@ -28,6 +28,28 @@ "react-app/jest" ] }, + "dependencies": { + "@monaco-editor/react": "^4.6.0", + "@tanstack/react-table": "^8.10.7", + "kurtosis-cloud-indexer-sdk": "^0.0.2", + "react-error-boundary": "^4.0.11", + "react-markdown": "^9.0.0", + "react-router-dom": "^6.17.0", + "react-virtuoso": "^4.6.2", + "streamsaver": "^2.0.6", + "yaml": "^2.3.4" + }, + "peerDependencies": { + "react": ">=16 || >=17 || >= 18", + "react-dom": ">=16 || >=17 || >= 18", + "@chakra-ui/icons": ">=2 && < 3", + "@chakra-ui/react": ">=2.8 && <3", + "true-myth": ">=7 && < 8", + "luxon": ">=3 && <4" + }, + "devDependencies": { + "monaco-editor": "^0.44.0" + }, "browserslist": { "production": [ ">0.2%", @@ -40,4 +62,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} diff --git a/enclave-manager/web/packages/app/src/components/AppLayout.tsx b/enclave-manager/web/packages/components/src/AppLayout.tsx similarity index 98% rename from enclave-manager/web/packages/app/src/components/AppLayout.tsx rename to enclave-manager/web/packages/components/src/AppLayout.tsx index 5ea412c3ac..c45cd9d96b 100644 --- a/enclave-manager/web/packages/app/src/components/AppLayout.tsx +++ b/enclave-manager/web/packages/components/src/AppLayout.tsx @@ -1,6 +1,5 @@ import { Box, Flex } from "@chakra-ui/react"; import { createContext, PropsWithChildren, ReactElement, useContext } from "react"; -import { isDefined } from "../utils"; import { KurtosisBreadcrumbs } from "./KurtosisBreadcrumbs"; import { MAIN_APP_BOTTOM_PADDING, @@ -10,6 +9,7 @@ import { MAIN_APP_RIGHT_PADDING, MAIN_APP_TOP_PADDING, } from "./theme/constants"; +import { isDefined } from "./utils"; type AppLayoutContextState = { hasNavbar: boolean; diff --git a/enclave-manager/web/packages/app/src/components/CodeEditor.tsx b/enclave-manager/web/packages/components/src/CodeEditor.tsx similarity index 98% rename from enclave-manager/web/packages/app/src/components/CodeEditor.tsx rename to enclave-manager/web/packages/components/src/CodeEditor.tsx index f56ed195fa..1b234d3575 100644 --- a/enclave-manager/web/packages/app/src/components/CodeEditor.tsx +++ b/enclave-manager/web/packages/components/src/CodeEditor.tsx @@ -3,7 +3,7 @@ import { Editor, Monaco, OnChange, OnMount } from "@monaco-editor/react"; import { type editor as monacoEditor } from "monaco-editor"; import { forwardRef, useCallback, useEffect, useImperativeHandle, useState } from "react"; import YAML from "yaml"; -import { assertDefined, isDefined, stringifyError } from "../utils"; +import { assertDefined, isDefined, stringifyError } from "./utils"; const MONACO_READ_ONLY_CHANGE_EVENT_ID = 89; diff --git a/enclave-manager/web/packages/app/src/components/CopyButton.tsx b/enclave-manager/web/packages/components/src/CopyButton.tsx similarity index 97% rename from enclave-manager/web/packages/app/src/components/CopyButton.tsx rename to enclave-manager/web/packages/components/src/CopyButton.tsx index 5c357c2867..ec9b688c5d 100644 --- a/enclave-manager/web/packages/app/src/components/CopyButton.tsx +++ b/enclave-manager/web/packages/components/src/CopyButton.tsx @@ -1,7 +1,7 @@ import { Button, ButtonProps, IconButton, IconButtonProps, useToast } from "@chakra-ui/react"; import { FiCopy } from "react-icons/fi"; -import { isDefined } from "../utils"; import { SuccessToast } from "./Toasts"; +import { isDefined } from "./utils"; type CopyButtonProps = (IsIconButton extends true ? IconButtonProps : ButtonProps) & { valueToCopy?: (() => string) | string | null; diff --git a/enclave-manager/web/packages/app/src/components/DataTable.tsx b/enclave-manager/web/packages/components/src/DataTable.tsx similarity index 98% rename from enclave-manager/web/packages/app/src/components/DataTable.tsx rename to enclave-manager/web/packages/components/src/DataTable.tsx index 3482d43233..9e3973e76b 100644 --- a/enclave-manager/web/packages/app/src/components/DataTable.tsx +++ b/enclave-manager/web/packages/components/src/DataTable.tsx @@ -13,7 +13,7 @@ import { type RowSelectionState } from "@tanstack/table-core/src/features/RowSel import { type OnChangeFn } from "@tanstack/table-core/src/types"; import { useState } from "react"; import { BiDownArrowAlt, BiUpArrowAlt } from "react-icons/bi"; -import { assertDefined, isDefined } from "../utils"; +import { assertDefined, isDefined } from "./utils"; declare module "@tanstack/table-core" { // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/enclave-manager/web/packages/app/src/components/DownloadButton.tsx b/enclave-manager/web/packages/components/src/DownloadButton.tsx similarity index 93% rename from enclave-manager/web/packages/app/src/components/DownloadButton.tsx rename to enclave-manager/web/packages/components/src/DownloadButton.tsx index 8aca82f5d1..2feb2522da 100644 --- a/enclave-manager/web/packages/app/src/components/DownloadButton.tsx +++ b/enclave-manager/web/packages/components/src/DownloadButton.tsx @@ -1,8 +1,7 @@ import { Button, ButtonProps, IconButton, IconButtonProps } from "@chakra-ui/react"; import { FiDownload } from "react-icons/fi"; import streamsaver from "streamsaver"; -import { isAsyncIterable, isDefined, stripAnsi } from "../utils"; -import { saveTextAsFile } from "../utils/download"; +import { isAsyncIterable, isDefined, saveTextAsFile, stripAnsi } from "./utils"; type DownloadButtonProps = (IsIconButton extends true ? IconButtonProps : ButtonProps) & { valueToDownload?: (() => string) | (() => AsyncIterable) | string | null; diff --git a/enclave-manager/web/packages/app/src/components/FeatureNotImplementedModal.tsx b/enclave-manager/web/packages/components/src/FeatureNotImplementedModal.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/FeatureNotImplementedModal.tsx rename to enclave-manager/web/packages/components/src/FeatureNotImplementedModal.tsx diff --git a/enclave-manager/web/packages/app/src/components/FileDisplay.tsx b/enclave-manager/web/packages/components/src/FileDisplay.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/FileDisplay.tsx rename to enclave-manager/web/packages/components/src/FileDisplay.tsx diff --git a/enclave-manager/web/packages/app/src/components/FileSize.tsx b/enclave-manager/web/packages/components/src/FileSize.tsx similarity index 93% rename from enclave-manager/web/packages/app/src/components/FileSize.tsx rename to enclave-manager/web/packages/components/src/FileSize.tsx index e5d1e54e16..27d1f5857c 100644 --- a/enclave-manager/web/packages/app/src/components/FileSize.tsx +++ b/enclave-manager/web/packages/components/src/FileSize.tsx @@ -1,5 +1,5 @@ import { Text, TextProps } from "@chakra-ui/react"; -import { isDefined } from "../utils"; +import { isDefined } from "./utils"; type FileSizeProps = TextProps & { fileSize?: bigint; diff --git a/enclave-manager/web/packages/app/src/components/FileTree.tsx b/enclave-manager/web/packages/components/src/FileTree.tsx similarity index 98% rename from enclave-manager/web/packages/app/src/components/FileTree.tsx rename to enclave-manager/web/packages/components/src/FileTree.tsx index 4c002904d5..c67ea182ac 100644 --- a/enclave-manager/web/packages/app/src/components/FileTree.tsx +++ b/enclave-manager/web/packages/components/src/FileTree.tsx @@ -1,8 +1,8 @@ import { Button, Flex, Text } from "@chakra-ui/react"; import React, { useCallback, useMemo, useState } from "react"; import { AiFillFile, AiFillFolder, AiFillFolderOpen } from "react-icons/ai"; -import { isDefined } from "../utils"; import { FileSize } from "./FileSize"; +import { isDefined } from "./utils"; /** * This file tree component recursively renders itself to present a file tree. diff --git a/enclave-manager/web/packages/app/src/components/FormatButton.tsx b/enclave-manager/web/packages/components/src/FormatButton.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/FormatButton.tsx rename to enclave-manager/web/packages/components/src/FormatButton.tsx diff --git a/enclave-manager/web/packages/app/src/components/FormatDateTime.tsx b/enclave-manager/web/packages/components/src/FormatDateTime.tsx similarity index 96% rename from enclave-manager/web/packages/app/src/components/FormatDateTime.tsx rename to enclave-manager/web/packages/components/src/FormatDateTime.tsx index c1e3b8c1b1..3870481549 100644 --- a/enclave-manager/web/packages/app/src/components/FormatDateTime.tsx +++ b/enclave-manager/web/packages/components/src/FormatDateTime.tsx @@ -1,7 +1,7 @@ import { Text, TextProps, Tooltip } from "@chakra-ui/react"; import { DateTime } from "luxon"; import { useEffect, useState } from "react"; -import { isDefined } from "../utils"; +import { isDefined } from "./utils"; type FormatDateTimeProps = TextProps & { dateTime: DateTime | null; diff --git a/enclave-manager/web/packages/app/src/components/HoverLineTabList.tsx b/enclave-manager/web/packages/components/src/HoverLineTabList.tsx similarity index 96% rename from enclave-manager/web/packages/app/src/components/HoverLineTabList.tsx rename to enclave-manager/web/packages/components/src/HoverLineTabList.tsx index 703b34472f..b9c01d5bef 100644 --- a/enclave-manager/web/packages/app/src/components/HoverLineTabList.tsx +++ b/enclave-manager/web/packages/components/src/HoverLineTabList.tsx @@ -1,6 +1,6 @@ import { Tab, TabList } from "@chakra-ui/react"; import { useState } from "react"; -import { isDefined } from "../utils"; +import { isDefined } from "./utils"; type HoverLineTabListProps = { tabs: string[]; diff --git a/enclave-manager/web/packages/app/src/components/KeyboardCommands.tsx b/enclave-manager/web/packages/components/src/KeyboardCommands.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/KeyboardCommands.tsx rename to enclave-manager/web/packages/components/src/KeyboardCommands.tsx diff --git a/enclave-manager/web/packages/app/src/components/KurtosisAlert.tsx b/enclave-manager/web/packages/components/src/KurtosisAlert.tsx similarity index 96% rename from enclave-manager/web/packages/app/src/components/KurtosisAlert.tsx rename to enclave-manager/web/packages/components/src/KurtosisAlert.tsx index b9b091535e..2e62168ff8 100644 --- a/enclave-manager/web/packages/app/src/components/KurtosisAlert.tsx +++ b/enclave-manager/web/packages/components/src/KurtosisAlert.tsx @@ -13,7 +13,7 @@ import { Flex, } from "@chakra-ui/react"; import { FallbackProps } from "react-error-boundary"; -import { isDefined, stringifyError } from "../utils"; +import { isDefined, stringifyError } from "./utils"; type KurtosisAlertProps = AlertProps & { message: string; diff --git a/enclave-manager/web/packages/app/src/components/KurtosisAlertModal.tsx b/enclave-manager/web/packages/components/src/KurtosisAlertModal.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/KurtosisAlertModal.tsx rename to enclave-manager/web/packages/components/src/KurtosisAlertModal.tsx diff --git a/enclave-manager/web/packages/app/src/components/KurtosisBreadcrumbs.tsx b/enclave-manager/web/packages/components/src/KurtosisBreadcrumbs.tsx similarity index 99% rename from enclave-manager/web/packages/app/src/components/KurtosisBreadcrumbs.tsx rename to enclave-manager/web/packages/components/src/KurtosisBreadcrumbs.tsx index 520dad65f8..b0cd1fa80e 100644 --- a/enclave-manager/web/packages/app/src/components/KurtosisBreadcrumbs.tsx +++ b/enclave-manager/web/packages/components/src/KurtosisBreadcrumbs.tsx @@ -16,8 +16,8 @@ import { import { ReactElement } from "react"; import { BsCaretDownFill } from "react-icons/bs"; import { Link, UIMatch, useMatches } from "react-router-dom"; -import { isDefined } from "../utils"; import { BREADCRUMBS_HEIGHT } from "./theme/constants"; +import { isDefined } from "./utils"; export type KurtosisBreadcrumbsHandle = { type: T; diff --git a/enclave-manager/web/packages/app/src/components/KurtosisMarkdown.tsx b/enclave-manager/web/packages/components/src/KurtosisMarkdown.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/KurtosisMarkdown.tsx rename to enclave-manager/web/packages/components/src/KurtosisMarkdown.tsx diff --git a/enclave-manager/web/packages/app/src/components/KurtosisThemeProvider.tsx b/enclave-manager/web/packages/components/src/KurtosisThemeProvider.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/KurtosisThemeProvider.tsx rename to enclave-manager/web/packages/components/src/KurtosisThemeProvider.tsx diff --git a/enclave-manager/web/packages/app/src/components/Navigation.tsx b/enclave-manager/web/packages/components/src/Navigation.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/Navigation.tsx rename to enclave-manager/web/packages/components/src/Navigation.tsx diff --git a/enclave-manager/web/packages/app/src/components/PackageSourceButton.tsx b/enclave-manager/web/packages/components/src/PackageSourceButton.tsx similarity index 95% rename from enclave-manager/web/packages/app/src/components/PackageSourceButton.tsx rename to enclave-manager/web/packages/components/src/PackageSourceButton.tsx index 0e7a9ce187..b548fea041 100644 --- a/enclave-manager/web/packages/app/src/components/PackageSourceButton.tsx +++ b/enclave-manager/web/packages/components/src/PackageSourceButton.tsx @@ -1,8 +1,7 @@ import { Button, ButtonGroup, ButtonProps, Icon, Link, Spinner, Tag, Tooltip } from "@chakra-ui/react"; import { PropsWithChildren } from "react"; import { IoLogoGithub } from "react-icons/io"; -import { isDefined, wrapResult } from "../utils"; -import { parsePackageUrl } from "../utils/packageUtils"; +import { isDefined, parsePackageUrl, wrapResult } from "./utils"; type EnclaveSourceProps = PropsWithChildren< ButtonProps & { diff --git a/enclave-manager/web/packages/app/src/components/PageTitle.tsx b/enclave-manager/web/packages/components/src/PageTitle.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/PageTitle.tsx rename to enclave-manager/web/packages/components/src/PageTitle.tsx diff --git a/enclave-manager/web/packages/app/src/components/PasteButton.tsx b/enclave-manager/web/packages/components/src/PasteButton.tsx similarity index 97% rename from enclave-manager/web/packages/app/src/components/PasteButton.tsx rename to enclave-manager/web/packages/components/src/PasteButton.tsx index e77ddae0f9..32684bc161 100644 --- a/enclave-manager/web/packages/app/src/components/PasteButton.tsx +++ b/enclave-manager/web/packages/components/src/PasteButton.tsx @@ -1,7 +1,7 @@ import { Button, ButtonProps, IconButton, IconButtonProps } from "@chakra-ui/react"; import { useState } from "react"; import { FiClipboard } from "react-icons/fi"; -import { isDefined } from "../utils"; +import { isDefined } from "./utils"; type PasteButtonProps = (IsIconButton extends true ? IconButtonProps : ButtonProps) & { onValuePasted: (value: string) => void; diff --git a/enclave-manager/web/packages/app/src/components/TitledBox.tsx b/enclave-manager/web/packages/components/src/TitledBox.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/TitledBox.tsx rename to enclave-manager/web/packages/components/src/TitledBox.tsx diff --git a/enclave-manager/web/packages/app/src/components/TitledCard.tsx b/enclave-manager/web/packages/components/src/TitledCard.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/TitledCard.tsx rename to enclave-manager/web/packages/components/src/TitledCard.tsx diff --git a/enclave-manager/web/packages/app/src/components/Toasts.tsx b/enclave-manager/web/packages/components/src/Toasts.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/Toasts.tsx rename to enclave-manager/web/packages/components/src/Toasts.tsx diff --git a/enclave-manager/web/packages/app/src/components/ValueCard.tsx b/enclave-manager/web/packages/components/src/ValueCard.tsx similarity index 96% rename from enclave-manager/web/packages/app/src/components/ValueCard.tsx rename to enclave-manager/web/packages/components/src/ValueCard.tsx index 539f4f0e8e..df9f864da5 100644 --- a/enclave-manager/web/packages/app/src/components/ValueCard.tsx +++ b/enclave-manager/web/packages/components/src/ValueCard.tsx @@ -1,7 +1,7 @@ import { Card, CardBody, CardHeader, Text } from "@chakra-ui/react"; import { ReactElement } from "react"; -import { isDefined } from "../utils"; import { CopyButton } from "./CopyButton"; +import { isDefined } from "./utils"; type ValueCardProps = { title: string; diff --git a/enclave-manager/web/packages/app/src/components/catalog/KurtosisPackageCard.tsx b/enclave-manager/web/packages/components/src/catalog/KurtosisPackageCard.tsx similarity index 96% rename from enclave-manager/web/packages/app/src/components/catalog/KurtosisPackageCard.tsx rename to enclave-manager/web/packages/components/src/catalog/KurtosisPackageCard.tsx index f1ad31b46a..9e3d3b194d 100644 --- a/enclave-manager/web/packages/app/src/components/catalog/KurtosisPackageCard.tsx +++ b/enclave-manager/web/packages/components/src/catalog/KurtosisPackageCard.tsx @@ -1,7 +1,7 @@ import { Box, Flex, Icon, Image, Text } from "@chakra-ui/react"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; import { IoStar } from "react-icons/io5"; import { Link, useHref } from "react-router-dom"; -import { KurtosisPackage } from "../../client/packageIndexer/api/kurtosis_package_indexer_pb"; import { readablePackageName } from "./utils"; import { RunKurtosisPackageButton } from "./widgets/RunKurtosisPackageButton"; import { SaveKurtosisPackageButton } from "./widgets/SaveKurtosisPackageButton"; diff --git a/enclave-manager/web/packages/app/src/components/catalog/KurtosisPackageCardGrid.tsx b/enclave-manager/web/packages/components/src/catalog/KurtosisPackageCardGrid.tsx similarity index 91% rename from enclave-manager/web/packages/app/src/components/catalog/KurtosisPackageCardGrid.tsx rename to enclave-manager/web/packages/components/src/catalog/KurtosisPackageCardGrid.tsx index e6a62b3e7d..9d9a08afe5 100644 --- a/enclave-manager/web/packages/app/src/components/catalog/KurtosisPackageCardGrid.tsx +++ b/enclave-manager/web/packages/components/src/catalog/KurtosisPackageCardGrid.tsx @@ -1,6 +1,6 @@ import { Grid, GridItem } from "@chakra-ui/react"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; import { memo } from "react"; -import { KurtosisPackage } from "../../client/packageIndexer/api/kurtosis_package_indexer_pb"; import { KurtosisPackageCard } from "./KurtosisPackageCard"; type KurtosisPackageCardGridProps = { diff --git a/enclave-manager/web/packages/app/src/components/catalog/SavedPackages.tsx b/enclave-manager/web/packages/components/src/catalog/SavedPackages.tsx similarity index 87% rename from enclave-manager/web/packages/app/src/components/catalog/SavedPackages.tsx rename to enclave-manager/web/packages/components/src/catalog/SavedPackages.tsx index 07dcad79b0..68d5394dfa 100644 --- a/enclave-manager/web/packages/app/src/components/catalog/SavedPackages.tsx +++ b/enclave-manager/web/packages/components/src/catalog/SavedPackages.tsx @@ -1,5 +1,5 @@ +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; import { createContext, PropsWithChildren, useContext } from "react"; -import { KurtosisPackage } from "../../client/packageIndexer/api/kurtosis_package_indexer_pb"; type SavedPackagesState = { savedPackages: KurtosisPackage[]; diff --git a/enclave-manager/web/packages/components/src/catalog/index.ts b/enclave-manager/web/packages/components/src/catalog/index.ts new file mode 100644 index 0000000000..a0c3b4d2f9 --- /dev/null +++ b/enclave-manager/web/packages/components/src/catalog/index.ts @@ -0,0 +1,6 @@ +export * from "./KurtosisPackageCard"; +export * from "./KurtosisPackageCardGrid"; +export * from "./SavedPackages"; +export * from "./utils"; +export * from "./widgets/RunKurtosisPackageButton"; +export * from "./widgets/SaveKurtosisPackageButton"; diff --git a/enclave-manager/web/packages/app/src/components/catalog/utils.ts b/enclave-manager/web/packages/components/src/catalog/utils.ts similarity index 85% rename from enclave-manager/web/packages/app/src/components/catalog/utils.ts rename to enclave-manager/web/packages/components/src/catalog/utils.ts index 8f47e76c7e..af0b1f8b5b 100644 --- a/enclave-manager/web/packages/app/src/components/catalog/utils.ts +++ b/enclave-manager/web/packages/components/src/catalog/utils.ts @@ -1,4 +1,4 @@ -import { capitalize } from "../../utils"; +import { capitalize } from "../utils"; export function readablePackageName(packageName: string): string { const parts = packageName.replaceAll("-", " ").split("/"); diff --git a/enclave-manager/web/packages/app/src/components/catalog/widgets/RunKurtosisPackageButton.tsx b/enclave-manager/web/packages/components/src/catalog/widgets/RunKurtosisPackageButton.tsx similarity index 82% rename from enclave-manager/web/packages/app/src/components/catalog/widgets/RunKurtosisPackageButton.tsx rename to enclave-manager/web/packages/components/src/catalog/widgets/RunKurtosisPackageButton.tsx index 1cb5dc1b31..b674ce6ab1 100644 --- a/enclave-manager/web/packages/app/src/components/catalog/widgets/RunKurtosisPackageButton.tsx +++ b/enclave-manager/web/packages/components/src/catalog/widgets/RunKurtosisPackageButton.tsx @@ -1,7 +1,7 @@ import { Button, ButtonProps } from "@chakra-ui/react"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; import { FiPlay } from "react-icons/fi"; -import { KurtosisPackage } from "../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { isDefined } from "../../../utils"; +import { isDefined } from "../../utils"; type RunKurtosisPackageButtonProps = ButtonProps & { kurtosisPackage: KurtosisPackage; diff --git a/enclave-manager/web/packages/app/src/components/catalog/widgets/SaveKurtosisPackageButton.tsx b/enclave-manager/web/packages/components/src/catalog/widgets/SaveKurtosisPackageButton.tsx similarity index 93% rename from enclave-manager/web/packages/app/src/components/catalog/widgets/SaveKurtosisPackageButton.tsx rename to enclave-manager/web/packages/components/src/catalog/widgets/SaveKurtosisPackageButton.tsx index b37335d23a..1156e164c4 100644 --- a/enclave-manager/web/packages/app/src/components/catalog/widgets/SaveKurtosisPackageButton.tsx +++ b/enclave-manager/web/packages/components/src/catalog/widgets/SaveKurtosisPackageButton.tsx @@ -1,8 +1,8 @@ import { Button, ButtonProps } from "@chakra-ui/react"; +import { KurtosisPackage } from "kurtosis-cloud-indexer-sdk"; import React, { memo, MouseEventHandler, useCallback, useMemo } from "react"; import { MdBookmarkAdd } from "react-icons/md"; -import { KurtosisPackage } from "../../../client/packageIndexer/api/kurtosis_package_indexer_pb"; -import { isDefined } from "../../../utils"; +import { isDefined } from "../../utils"; import { useSavedPackages } from "../SavedPackages"; type SaveKurtosisPackageButtonProps = ButtonProps & { diff --git a/enclave-manager/web/packages/components/src/constants.ts b/enclave-manager/web/packages/components/src/constants.ts new file mode 100644 index 0000000000..24c20621ee --- /dev/null +++ b/enclave-manager/web/packages/components/src/constants.ts @@ -0,0 +1,3 @@ +export const KURTOSIS_PACKAGE_PARAMS_URL_ARG = "package-args"; +export const KURTOSIS_PACKAGE_ID_URL_ARG = "package-id"; +export const KURTOSIS_CREATE_ENCLAVE_URL_ARG = "create-enclave"; diff --git a/enclave-manager/web/packages/components/src/index.tsx b/enclave-manager/web/packages/components/src/index.tsx index df29022cab..16cba39aa3 100644 --- a/enclave-manager/web/packages/components/src/index.tsx +++ b/enclave-manager/web/packages/components/src/index.tsx @@ -1 +1,30 @@ -export const hello = () => console.log("Hello Kurtosis"); +export * from "./AppLayout"; +export * from "./catalog"; +export * from "./CodeEditor"; +export * from "./CopyButton"; +export * from "./DataTable"; +export * from "./DownloadButton"; +export * from "./FeatureNotImplementedModal"; +export * from "./FileDisplay"; +export * from "./FileSize"; +export * from "./FileTree"; +export * from "./FormatButton"; +export * from "./FormatDateTime"; +export * from "./HoverLineTabList"; +export * from "./KeyboardCommands"; +export * from "./KurtosisAlert"; +export * from "./KurtosisAlertModal"; +export * from "./KurtosisBreadcrumbs"; +export * from "./KurtosisMarkdown"; +export * from "./KurtosisThemeProvider"; +export * from "./logs"; +export * from "./Navigation"; +export * from "./PackageSourceButton"; +export * from "./PageTitle"; +export * from "./PasteButton"; +export * from "./TitledBox"; +export * from "./TitledCard"; +export * from "./Toasts"; +export * from "./useKeyboardAction"; +export * from "./utils"; +export * from "./ValueCard"; diff --git a/enclave-manager/web/packages/app/src/components/logs/LogLine.tsx b/enclave-manager/web/packages/components/src/logs/LogLine.tsx similarity index 98% rename from enclave-manager/web/packages/app/src/components/logs/LogLine.tsx rename to enclave-manager/web/packages/components/src/logs/LogLine.tsx index b0a923857b..74c2c368d8 100644 --- a/enclave-manager/web/packages/app/src/components/logs/LogLine.tsx +++ b/enclave-manager/web/packages/components/src/logs/LogLine.tsx @@ -3,7 +3,7 @@ import { Box, Flex } from "@chakra-ui/react"; import Convert from "ansi-to-html"; import parse from "html-react-parser"; import { ReactElement } from "react"; -import { hasAnsi, isDefined } from "../../utils"; +import { hasAnsi, isDefined } from "../utils"; import { LogLineMessage, LogStatus } from "./types"; import { normalizeLogText } from "./utils"; diff --git a/enclave-manager/web/packages/app/src/components/logs/LogViewer.tsx b/enclave-manager/web/packages/components/src/logs/LogViewer.tsx similarity index 99% rename from enclave-manager/web/packages/app/src/components/logs/LogViewer.tsx rename to enclave-manager/web/packages/components/src/logs/LogViewer.tsx index 85d141a98e..d94ba03406 100644 --- a/enclave-manager/web/packages/app/src/components/logs/LogViewer.tsx +++ b/enclave-manager/web/packages/components/src/logs/LogViewer.tsx @@ -24,11 +24,11 @@ import { ChangeEvent, MutableRefObject, ReactElement, useCallback, useEffect, us import { FiSearch } from "react-icons/fi"; import { MdArrowBackIosNew, MdArrowForwardIos } from "react-icons/md"; import { Virtuoso, VirtuosoHandle } from "react-virtuoso"; -import { isDefined, isNotEmpty, stringifyError, stripAnsi } from "../../utils"; import { CopyButton } from "../CopyButton"; import { DownloadButton } from "../DownloadButton"; import { FindCommand } from "../KeyboardCommands"; import { useKeyboardAction } from "../useKeyboardAction"; +import { isDefined, isNotEmpty, stringifyError, stripAnsi } from "../utils"; import { LogLine } from "./LogLine"; import { LogLineMessage } from "./types"; import { normalizeLogText } from "./utils"; diff --git a/enclave-manager/web/packages/components/src/logs/index.ts b/enclave-manager/web/packages/components/src/logs/index.ts new file mode 100644 index 0000000000..1554cb9561 --- /dev/null +++ b/enclave-manager/web/packages/components/src/logs/index.ts @@ -0,0 +1,3 @@ +export * from "./LogViewer"; +export * from "./types"; +export * from "./utils"; diff --git a/enclave-manager/web/packages/app/src/components/logs/types.ts b/enclave-manager/web/packages/components/src/logs/types.ts similarity index 100% rename from enclave-manager/web/packages/app/src/components/logs/types.ts rename to enclave-manager/web/packages/components/src/logs/types.ts diff --git a/enclave-manager/web/packages/app/src/components/logs/utils.ts b/enclave-manager/web/packages/components/src/logs/utils.ts similarity index 100% rename from enclave-manager/web/packages/app/src/components/logs/utils.ts rename to enclave-manager/web/packages/components/src/logs/utils.ts diff --git a/enclave-manager/web/packages/app/src/components/theme/Fonts.tsx b/enclave-manager/web/packages/components/src/theme/Fonts.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/theme/Fonts.tsx rename to enclave-manager/web/packages/components/src/theme/Fonts.tsx diff --git a/enclave-manager/web/packages/app/src/components/theme/constants.ts b/enclave-manager/web/packages/components/src/theme/constants.ts similarity index 85% rename from enclave-manager/web/packages/app/src/components/theme/constants.ts rename to enclave-manager/web/packages/components/src/theme/constants.ts index 900e90458e..f3ac7c1528 100644 --- a/enclave-manager/web/packages/app/src/components/theme/constants.ts +++ b/enclave-manager/web/packages/components/src/theme/constants.ts @@ -9,5 +9,3 @@ export const MAIN_APP_LEFT_PADDING_WITHOUT_NAV = "40px"; export const MAIN_APP_RIGHT_PADDING = "40px"; export const MAIN_APP_MAX_WIDTH: CSS.Property.MaxWidth | number = "1440px"; - -export const FLEX_STANDARD_GAP: CSS.Property.Gap | number = "32px"; diff --git a/enclave-manager/web/packages/app/src/components/theme/formsTheme.tsx b/enclave-manager/web/packages/components/src/theme/formsTheme.tsx similarity index 100% rename from enclave-manager/web/packages/app/src/components/theme/formsTheme.tsx rename to enclave-manager/web/packages/components/src/theme/formsTheme.tsx diff --git a/enclave-manager/web/packages/app/src/components/theme/tabsTheme.ts b/enclave-manager/web/packages/components/src/theme/tabsTheme.ts similarity index 100% rename from enclave-manager/web/packages/app/src/components/theme/tabsTheme.ts rename to enclave-manager/web/packages/components/src/theme/tabsTheme.ts diff --git a/enclave-manager/web/packages/app/src/components/theme/tagsTheme.ts b/enclave-manager/web/packages/components/src/theme/tagsTheme.ts similarity index 100% rename from enclave-manager/web/packages/app/src/components/theme/tagsTheme.ts rename to enclave-manager/web/packages/components/src/theme/tagsTheme.ts diff --git a/enclave-manager/web/packages/app/src/components/useKeyboardAction.ts b/enclave-manager/web/packages/components/src/useKeyboardAction.ts similarity index 96% rename from enclave-manager/web/packages/app/src/components/useKeyboardAction.ts rename to enclave-manager/web/packages/components/src/useKeyboardAction.ts index ed5362be63..0aa0c68bd9 100644 --- a/enclave-manager/web/packages/app/src/components/useKeyboardAction.ts +++ b/enclave-manager/web/packages/components/src/useKeyboardAction.ts @@ -1,5 +1,5 @@ import { useEffect } from "react"; -import { isDefined } from "../utils"; +import { isDefined } from "./utils"; export type KeyboardActions = "escape" | "find" | "omniFind" | "enter" | "shift-enter"; diff --git a/enclave-manager/web/packages/app/src/utils/download.ts b/enclave-manager/web/packages/components/src/utils/download.ts similarity index 100% rename from enclave-manager/web/packages/app/src/utils/download.ts rename to enclave-manager/web/packages/components/src/utils/download.ts diff --git a/enclave-manager/web/packages/app/src/utils/index.ts b/enclave-manager/web/packages/components/src/utils/index.ts similarity index 97% rename from enclave-manager/web/packages/app/src/utils/index.ts rename to enclave-manager/web/packages/components/src/utils/index.ts index f7bd8762aa..23c53075eb 100644 --- a/enclave-manager/web/packages/app/src/utils/index.ts +++ b/enclave-manager/web/packages/components/src/utils/index.ts @@ -1,5 +1,9 @@ import { Result } from "true-myth"; +export * from "./download"; +export * from "./packageUtils"; +export * from "./types"; + export function isDefined(it: T | null | undefined): it is T { return it !== null && it !== undefined; } diff --git a/enclave-manager/web/packages/app/src/utils/packageUtils.ts b/enclave-manager/web/packages/components/src/utils/packageUtils.ts similarity index 100% rename from enclave-manager/web/packages/app/src/utils/packageUtils.ts rename to enclave-manager/web/packages/components/src/utils/packageUtils.ts diff --git a/enclave-manager/web/packages/app/src/utils/types.ts b/enclave-manager/web/packages/components/src/utils/types.ts similarity index 100% rename from enclave-manager/web/packages/app/src/utils/types.ts rename to enclave-manager/web/packages/components/src/utils/types.ts diff --git a/enclave-manager/web/yarn.lock b/enclave-manager/web/yarn.lock index 8a5e10233f..8b49167f3a 100644 --- a/enclave-manager/web/yarn.lock +++ b/enclave-manager/web/yarn.lock @@ -9560,6 +9560,13 @@ klona@^2.0.4, klona@^2.0.5: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== +kurtosis-cloud-indexer-sdk@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/kurtosis-cloud-indexer-sdk/-/kurtosis-cloud-indexer-sdk-0.0.2.tgz#fabb56919d2ae8beab1071ac2f5563220294aef5" + integrity sha512-XyNsPySPi3crXeplvKaMf17l4DBzXH85quHxETj0++Sv9kCK688Iu7cY4p96FCCO07GFKlfm4FMdO87VccNmyA== + dependencies: + "@bufbuild/protobuf" "^1.3.3" + language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" diff --git a/engine/server/webapp/asset-manifest.json b/engine/server/webapp/asset-manifest.json index f8a0ddaa86..e54b20bc33 100644 --- a/engine/server/webapp/asset-manifest.json +++ b/engine/server/webapp/asset-manifest.json @@ -1,10 +1,10 @@ { "files": { - "main.js": "./static/js/main.7b2337fa.js", + "main.js": "./static/js/main.ff1c776d.js", "index.html": "./index.html", - "main.7b2337fa.js.map": "./static/js/main.7b2337fa.js.map" + "main.ff1c776d.js.map": "./static/js/main.ff1c776d.js.map" }, "entrypoints": [ - "static/js/main.7b2337fa.js" + "static/js/main.ff1c776d.js" ] } \ No newline at end of file diff --git a/engine/server/webapp/index.html b/engine/server/webapp/index.html index e4589c6752..69ec751f89 100644 --- a/engine/server/webapp/index.html +++ b/engine/server/webapp/index.html @@ -1 +1 @@ -Kurtosis Enclave Manager
\ No newline at end of file +Kurtosis Enclave Manager
\ No newline at end of file diff --git a/engine/server/webapp/static/js/main.7b2337fa.js b/engine/server/webapp/static/js/main.7b2337fa.js deleted file mode 100644 index 9781771bc1..0000000000 --- a/engine/server/webapp/static/js/main.7b2337fa.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see main.7b2337fa.js.LICENSE.txt */ -(()=>{var e={3900:(e,t,n)=>{"use strict";function r(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){l=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw a}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?40*e+55:0,s=t>0?40*t+55:0,c=n>0?40*n+55:0;r[i]=function(e){var t,n=[],r=o(e);try{for(r.s();!(t=r.n()).done;){var i=t.value;n.push(l(i))}}catch(a){r.e(a)}finally{r.f()}return"#"+n.join("")}([a,s,c])}(t,n,r,e)}))}))})),d(0,23).forEach((function(t){var n=t+232,r=l(10*t+8);e[n]="#"+r+r+r})),e}()};function l(e){for(var t=e.toString(16);t.length<2;)t="0"+t;return t}function c(e,t,n,r){var o;return"text"===t?o=function(e,t){if(t.escapeXML)return a.encodeXML(e);return e}(n,r):"display"===t?o=function(e,t,n){t=parseInt(t,10);var r,o={"-1":function(){return"
"},0:function(){return e.length&&u(e)},1:function(){return p(e,"b")},3:function(){return p(e,"i")},4:function(){return p(e,"u")},8:function(){return h(e,"display:none")},9:function(){return p(e,"strike")},22:function(){return h(e,"font-weight:normal;text-decoration:none;font-style:normal")},23:function(){return v(e,"i")},24:function(){return v(e,"u")},39:function(){return m(e,n.fg)},49:function(){return g(e,n.bg)},53:function(){return h(e,"text-decoration:overline")}};o[t]?r=o[t]():4"})).join("")}function d(e,t){for(var n=[],r=e;r<=t;r++)n.push(r);return n}function f(e){var t=null;return 0===(e=parseInt(e,10))?t="all":1===e?t="bold":2")}function h(e,t){return p(e,"span",t)}function m(e,t){return p(e,"span","color:"+t)}function g(e,t){return p(e,"span","background-color:"+t)}function v(e,t){var n;if(e.slice(-1)[0]===t&&(n=e.pop()),n)return""}var y=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),(t=t||{}).colors&&(t.colors=Object.assign({},s.colors,t.colors)),this.options=Object.assign({},s,t),this.stack=[],this.stickyStack=[]}var t,n,i;return t=e,(n=[{key:"toHtml",value:function(e){var t=this;e="string"===typeof e?[e]:e;var n=this.stack,r=this.options,i=[];return this.stickyStack.forEach((function(e){var t=c(n,e.token,e.data,r);t&&i.push(t)})),function(e,t,n){var r=!1;function i(){return""}function a(e){return t.newline?n("display",-1):n("text",e),""}var s=[{pattern:/^\x08+/,sub:i},{pattern:/^\x1b\[[012]?K/,sub:i},{pattern:/^\x1b\[\(B/,sub:i},{pattern:/^\x1b\[[34]8;2;\d+;\d+;\d+m/,sub:function(e){return n("rgb",e),""}},{pattern:/^\x1b\[38;5;(\d+)m/,sub:function(e,t){return n("xterm256Foreground",t),""}},{pattern:/^\x1b\[48;5;(\d+)m/,sub:function(e,t){return n("xterm256Background",t),""}},{pattern:/^\n/,sub:a},{pattern:/^\r+\n/,sub:a},{pattern:/^\r/,sub:a},{pattern:/^\x1b\[((?:\d{1,3};?)+|)m/,sub:function(e,t){r=!0,0===t.trim().length&&(t="0");var i,a=o(t=t.trimRight(";").split(";"));try{for(a.s();!(i=a.n()).done;){var s=i.value;n("display",s)}}catch(l){a.e(l)}finally{a.f()}return""}},{pattern:/^\x1b\[\d?J/,sub:i},{pattern:/^\x1b\[\d{0,3};\d{0,3}f/,sub:i},{pattern:/^\x1b\[?[\d;]{0,3}/,sub:i},{pattern:/^(([^\x1b\x08\r\n])+)/,sub:function(e){return n("text",e),""}}];function l(t,n){n>3&&r||(r=!1,e=e.replace(t.pattern,t.sub))}var c=[],u=e.length;e:for(;u>0;){for(var d=0,f=0,p=s.length;f{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.Doctype=t.CDATA=t.Tag=t.Style=t.Script=t.Comment=t.Directive=t.Text=t.Root=t.isTag=t.ElementType=void 0,function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"}(n=t.ElementType||(t.ElementType={})),t.isTag=function(e){return e.type===n.Tag||e.type===n.Script||e.type===n.Style},t.Root=n.Root,t.Text=n.Text,t.Directive=n.Directive,t.Comment=n.Comment,t.Script=n.Script,t.Style=n.Style,t.Tag=n.Tag,t.CDATA=n.CDATA,t.Doctype=n.Doctype},7422:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.DomHandler=void 0;var i=n(7995),a=n(9671);o(n(9671),t);var s={withStartIndices:!1,withEndIndices:!1,xmlMode:!1},l=function(){function e(e,t,n){this.dom=[],this.root=new a.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,"function"===typeof t&&(n=t,t=s),"object"===typeof e&&(t=e,e=void 0),this.callback=null!==e&&void 0!==e?e:null,this.options=null!==t&&void 0!==t?t:s,this.elementCB=null!==n&&void 0!==n?n:null}return e.prototype.onparserinit=function(e){this.parser=e},e.prototype.onreset=function(){this.dom=[],this.root=new a.Document(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null},e.prototype.onend=function(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))},e.prototype.onerror=function(e){this.handleCallback(e)},e.prototype.onclosetag=function(){this.lastNode=null;var e=this.tagStack.pop();this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(e)},e.prototype.onopentag=function(e,t){var n=this.options.xmlMode?i.ElementType.Tag:void 0,r=new a.Element(e,t,void 0,n);this.addNode(r),this.tagStack.push(r)},e.prototype.ontext=function(e){var t=this.lastNode;if(t&&t.type===i.ElementType.Text)t.data+=e,this.options.withEndIndices&&(t.endIndex=this.parser.endIndex);else{var n=new a.Text(e);this.addNode(n),this.lastNode=n}},e.prototype.oncomment=function(e){if(this.lastNode&&this.lastNode.type===i.ElementType.Comment)this.lastNode.data+=e;else{var t=new a.Comment(e);this.addNode(t),this.lastNode=t}},e.prototype.oncommentend=function(){this.lastNode=null},e.prototype.oncdatastart=function(){var e=new a.Text(""),t=new a.CDATA([e]);this.addNode(t),e.parent=t,this.lastNode=e},e.prototype.oncdataend=function(){this.lastNode=null},e.prototype.onprocessinginstruction=function(e,t){var n=new a.ProcessingInstruction(e,t);this.addNode(n)},e.prototype.handleCallback=function(e){if("function"===typeof this.callback)this.callback(e,this.dom);else if(e)throw e},e.prototype.addNode=function(e){var t=this.tagStack[this.tagStack.length-1],n=t.children[t.children.length-1];this.options.withStartIndices&&(e.startIndex=this.parser.startIndex),this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),t.children.push(e),n&&(e.prev=n,n.next=e),e.parent=t,this.lastNode=null},e}();t.DomHandler=l,t.default=l},9671:function(e,t,n){"use strict";var r=this&&this.__extends||function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};return function(t,n){if("function"!==typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0?this.children[this.children.length-1]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.children},set:function(e){this.children=e},enumerable:!1,configurable:!0}),t}(a);t.NodeWithChildren=d;var f=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=i.ElementType.CDATA,t}return r(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 4},enumerable:!1,configurable:!0}),t}(d);t.CDATA=f;var p=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=i.ElementType.Root,t}return r(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 9},enumerable:!1,configurable:!0}),t}(d);t.Document=p;var h=function(e){function t(t,n,r,o){void 0===r&&(r=[]),void 0===o&&(o="script"===t?i.ElementType.Script:"style"===t?i.ElementType.Style:i.ElementType.Tag);var a=e.call(this,r)||this;return a.name=t,a.attribs=n,a.type=o,a}return r(t,e),Object.defineProperty(t.prototype,"nodeType",{get:function(){return 1},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"tagName",{get:function(){return this.name},set:function(e){this.name=e},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributes",{get:function(){var e=this;return Object.keys(this.attribs).map((function(t){var n,r;return{name:t,value:e.attribs[t],namespace:null===(n=e["x-attribsNamespace"])||void 0===n?void 0:n[t],prefix:null===(r=e["x-attribsPrefix"])||void 0===r?void 0:r[t]}}))},enumerable:!1,configurable:!0}),t}(d);function m(e){return(0,i.isTag)(e)}function g(e){return e.type===i.ElementType.CDATA}function v(e){return e.type===i.ElementType.Text}function y(e){return e.type===i.ElementType.Comment}function b(e){return e.type===i.ElementType.Directive}function w(e){return e.type===i.ElementType.Root}function x(e,t){var n;if(void 0===t&&(t=!1),v(e))n=new l(e.data);else if(y(e))n=new c(e.data);else if(m(e)){var r=t?k(e.children):[],i=new h(e.name,o({},e.attribs),r);r.forEach((function(e){return e.parent=i})),null!=e.namespace&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]=o({},e["x-attribsNamespace"])),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]=o({},e["x-attribsPrefix"])),n=i}else if(g(e)){r=t?k(e.children):[];var a=new f(r);r.forEach((function(e){return e.parent=a})),n=a}else if(w(e)){r=t?k(e.children):[];var s=new p(r);r.forEach((function(e){return e.parent=s})),e["x-mode"]&&(s["x-mode"]=e["x-mode"]),n=s}else{if(!b(e))throw new Error("Not implemented yet: ".concat(e.type));var d=new u(e.name,e.data);null!=e["x-name"]&&(d["x-name"]=e["x-name"],d["x-publicId"]=e["x-publicId"],d["x-systemId"]=e["x-systemId"]),n=d}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function k(e){for(var t=e.map((function(e){return x(e,!0)})),n=1;n{"use strict";n.r(t),n.d(t,{Connect:()=>a,ConnectServicesArgs:()=>$,ConnectServicesResponse:()=>X,Container:()=>d,Container_Status:()=>f,DataChunkMetadata:()=>M,DownloadFilesArtifactArgs:()=>z,ExecCommandArgs:()=>j,ExecCommandResponse:()=>R,FileArtifactContentsFileDescription:()=>K,FilesArtifactNameAndUuid:()=>W,GetExistingAndHistoricalServiceIdentifiersResponse:()=>P,GetServicesArgs:()=>N,GetServicesResponse:()=>O,GetStarlarkRunResponse:()=>Z,ImageDownloadMode:()=>i,InspectFilesArtifactContentsRequest:()=>G,InspectFilesArtifactContentsResponse:()=>Y,KurtosisFeatureFlag:()=>s,ListFilesArtifactNamesAndUuidsResponse:()=>J,Port:()=>c,Port_TransportProtocol:()=>u,RestartPolicy:()=>l,RunStarlarkPackageArgs:()=>m,RunStarlarkScriptArgs:()=>h,ServiceIdentifiers:()=>A,ServiceInfo:()=>p,ServiceStatus:()=>o,StarlarkError:()=>S,StarlarkExecutionError:()=>_,StarlarkInfo:()=>v,StarlarkInstruction:()=>b,StarlarkInstructionArg:()=>x,StarlarkInstructionPosition:()=>k,StarlarkInstructionResult:()=>w,StarlarkInterpretationError:()=>E,StarlarkRunFinishedEvent:()=>I,StarlarkRunProgress:()=>C,StarlarkRunResponseLine:()=>g,StarlarkValidationError:()=>T,StarlarkWarning:()=>y,StoreFilesArtifactFromServiceArgs:()=>q,StoreFilesArtifactFromServiceResponse:()=>H,StoreWebFilesArtifactArgs:()=>U,StoreWebFilesArtifactResponse:()=>V,StreamedDataChunk:()=>F,UploadFilesArtifactResponse:()=>B,WaitForHttpGetEndpointAvailabilityArgs:()=>D,WaitForHttpPostEndpointAvailabilityArgs:()=>L});var r=n(9699);const o=r.w.makeEnum("api_container_api.ServiceStatus",[{no:0,name:"STOPPED"},{no:1,name:"RUNNING"},{no:2,name:"UNKNOWN"}]),i=r.w.makeEnum("api_container_api.ImageDownloadMode",[{no:0,name:"always"},{no:1,name:"missing"}]),a=r.w.makeEnum("api_container_api.Connect",[{no:0,name:"CONNECT"},{no:1,name:"NO_CONNECT"}]),s=r.w.makeEnum("api_container_api.KurtosisFeatureFlag",[{no:0,name:"NO_INSTRUCTIONS_CACHING"}]),l=r.w.makeEnum("api_container_api.RestartPolicy",[{no:0,name:"NEVER"},{no:1,name:"ALWAYS"}]),c=r.w.makeMessageType("api_container_api.Port",(()=>[{no:1,name:"number",kind:"scalar",T:13},{no:2,name:"transport_protocol",kind:"enum",T:r.w.getEnumType(u)},{no:3,name:"maybe_application_protocol",kind:"scalar",T:9},{no:4,name:"maybe_wait_timeout",kind:"scalar",T:9}])),u=r.w.makeEnum("api_container_api.Port.TransportProtocol",[{no:0,name:"TCP"},{no:1,name:"SCTP"},{no:2,name:"UDP"}]),d=r.w.makeMessageType("api_container_api.Container",(()=>[{no:1,name:"status",kind:"enum",T:r.w.getEnumType(f)},{no:2,name:"image_name",kind:"scalar",T:9},{no:3,name:"entrypoint_args",kind:"scalar",T:9,repeated:!0},{no:4,name:"cmd_args",kind:"scalar",T:9,repeated:!0},{no:5,name:"env_vars",kind:"map",K:9,V:{kind:"scalar",T:9}}])),f=r.w.makeEnum("api_container_api.Container.Status",[{no:0,name:"STOPPED"},{no:1,name:"RUNNING"},{no:2,name:"UNKNOWN"}]),p=r.w.makeMessageType("api_container_api.ServiceInfo",(()=>[{no:1,name:"service_uuid",kind:"scalar",T:9},{no:2,name:"private_ip_addr",kind:"scalar",T:9},{no:3,name:"private_ports",kind:"map",K:9,V:{kind:"message",T:c}},{no:4,name:"maybe_public_ip_addr",kind:"scalar",T:9},{no:5,name:"maybe_public_ports",kind:"map",K:9,V:{kind:"message",T:c}},{no:6,name:"name",kind:"scalar",T:9},{no:7,name:"shortened_uuid",kind:"scalar",T:9},{no:8,name:"service_status",kind:"enum",T:r.w.getEnumType(o)},{no:9,name:"container",kind:"message",T:d}])),h=r.w.makeMessageType("api_container_api.RunStarlarkScriptArgs",(()=>[{no:1,name:"serialized_script",kind:"scalar",T:9},{no:2,name:"serialized_params",kind:"scalar",T:9,opt:!0},{no:3,name:"dry_run",kind:"scalar",T:8,opt:!0},{no:4,name:"parallelism",kind:"scalar",T:5,opt:!0},{no:5,name:"main_function_name",kind:"scalar",T:9,opt:!0},{no:6,name:"experimental_features",kind:"enum",T:r.w.getEnumType(s),repeated:!0},{no:7,name:"cloud_instance_id",kind:"scalar",T:9,opt:!0},{no:8,name:"cloud_user_id",kind:"scalar",T:9,opt:!0},{no:9,name:"image_download_mode",kind:"enum",T:r.w.getEnumType(i),opt:!0}])),m=r.w.makeMessageType("api_container_api.RunStarlarkPackageArgs",(()=>[{no:1,name:"package_id",kind:"scalar",T:9},{no:3,name:"local",kind:"scalar",T:12,oneof:"starlark_package_content"},{no:4,name:"remote",kind:"scalar",T:8,oneof:"starlark_package_content"},{no:5,name:"serialized_params",kind:"scalar",T:9,opt:!0},{no:6,name:"dry_run",kind:"scalar",T:8,opt:!0},{no:7,name:"parallelism",kind:"scalar",T:5,opt:!0},{no:8,name:"clone_package",kind:"scalar",T:8,opt:!0},{no:9,name:"relative_path_to_main_file",kind:"scalar",T:9,opt:!0},{no:10,name:"main_function_name",kind:"scalar",T:9,opt:!0},{no:11,name:"experimental_features",kind:"enum",T:r.w.getEnumType(s),repeated:!0},{no:12,name:"cloud_instance_id",kind:"scalar",T:9,opt:!0},{no:13,name:"cloud_user_id",kind:"scalar",T:9,opt:!0},{no:14,name:"image_download_mode",kind:"enum",T:r.w.getEnumType(i),opt:!0}])),g=r.w.makeMessageType("api_container_api.StarlarkRunResponseLine",(()=>[{no:1,name:"instruction",kind:"message",T:b,oneof:"run_response_line"},{no:2,name:"error",kind:"message",T:S,oneof:"run_response_line"},{no:3,name:"progress_info",kind:"message",T:C,oneof:"run_response_line"},{no:4,name:"instruction_result",kind:"message",T:w,oneof:"run_response_line"},{no:5,name:"run_finished_event",kind:"message",T:I,oneof:"run_response_line"},{no:6,name:"warning",kind:"message",T:y,oneof:"run_response_line"},{no:7,name:"info",kind:"message",T:v,oneof:"run_response_line"}])),v=r.w.makeMessageType("api_container_api.StarlarkInfo",(()=>[{no:1,name:"info_message",kind:"scalar",T:9}])),y=r.w.makeMessageType("api_container_api.StarlarkWarning",(()=>[{no:1,name:"warning_message",kind:"scalar",T:9}])),b=r.w.makeMessageType("api_container_api.StarlarkInstruction",(()=>[{no:1,name:"position",kind:"message",T:k},{no:2,name:"instruction_name",kind:"scalar",T:9},{no:3,name:"arguments",kind:"message",T:x,repeated:!0},{no:4,name:"executable_instruction",kind:"scalar",T:9},{no:5,name:"is_skipped",kind:"scalar",T:8}])),w=r.w.makeMessageType("api_container_api.StarlarkInstructionResult",(()=>[{no:1,name:"serialized_instruction_result",kind:"scalar",T:9}])),x=r.w.makeMessageType("api_container_api.StarlarkInstructionArg",(()=>[{no:1,name:"serialized_arg_value",kind:"scalar",T:9},{no:2,name:"arg_name",kind:"scalar",T:9,opt:!0},{no:3,name:"is_representative",kind:"scalar",T:8}])),k=r.w.makeMessageType("api_container_api.StarlarkInstructionPosition",(()=>[{no:1,name:"filename",kind:"scalar",T:9},{no:2,name:"line",kind:"scalar",T:5},{no:3,name:"column",kind:"scalar",T:5}])),S=r.w.makeMessageType("api_container_api.StarlarkError",(()=>[{no:1,name:"interpretation_error",kind:"message",T:E,oneof:"error"},{no:2,name:"validation_error",kind:"message",T:T,oneof:"error"},{no:3,name:"execution_error",kind:"message",T:_,oneof:"error"}])),E=r.w.makeMessageType("api_container_api.StarlarkInterpretationError",(()=>[{no:1,name:"error_message",kind:"scalar",T:9}])),T=r.w.makeMessageType("api_container_api.StarlarkValidationError",(()=>[{no:1,name:"error_message",kind:"scalar",T:9}])),_=r.w.makeMessageType("api_container_api.StarlarkExecutionError",(()=>[{no:1,name:"error_message",kind:"scalar",T:9}])),C=r.w.makeMessageType("api_container_api.StarlarkRunProgress",(()=>[{no:1,name:"current_step_info",kind:"scalar",T:9,repeated:!0},{no:2,name:"total_steps",kind:"scalar",T:13},{no:3,name:"current_step_number",kind:"scalar",T:13}])),I=r.w.makeMessageType("api_container_api.StarlarkRunFinishedEvent",(()=>[{no:1,name:"is_run_successful",kind:"scalar",T:8},{no:2,name:"serialized_output",kind:"scalar",T:9,opt:!0}])),N=r.w.makeMessageType("api_container_api.GetServicesArgs",(()=>[{no:1,name:"service_identifiers",kind:"map",K:9,V:{kind:"scalar",T:8}}])),O=r.w.makeMessageType("api_container_api.GetServicesResponse",(()=>[{no:1,name:"service_info",kind:"map",K:9,V:{kind:"message",T:p}}])),A=r.w.makeMessageType("api_container_api.ServiceIdentifiers",(()=>[{no:1,name:"service_uuid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"shortened_uuid",kind:"scalar",T:9}])),P=r.w.makeMessageType("api_container_api.GetExistingAndHistoricalServiceIdentifiersResponse",(()=>[{no:1,name:"allIdentifiers",kind:"message",T:A,repeated:!0}])),j=r.w.makeMessageType("api_container_api.ExecCommandArgs",(()=>[{no:1,name:"service_identifier",kind:"scalar",T:9},{no:2,name:"command_args",kind:"scalar",T:9,repeated:!0}])),R=r.w.makeMessageType("api_container_api.ExecCommandResponse",(()=>[{no:1,name:"exit_code",kind:"scalar",T:5},{no:2,name:"log_output",kind:"scalar",T:9}])),D=r.w.makeMessageType("api_container_api.WaitForHttpGetEndpointAvailabilityArgs",(()=>[{no:1,name:"service_identifier",kind:"scalar",T:9},{no:2,name:"port",kind:"scalar",T:13},{no:3,name:"path",kind:"scalar",T:9,opt:!0},{no:4,name:"initial_delay_milliseconds",kind:"scalar",T:13,opt:!0},{no:5,name:"retries",kind:"scalar",T:13,opt:!0},{no:6,name:"retries_delay_milliseconds",kind:"scalar",T:13,opt:!0},{no:7,name:"body_text",kind:"scalar",T:9,opt:!0}])),L=r.w.makeMessageType("api_container_api.WaitForHttpPostEndpointAvailabilityArgs",(()=>[{no:1,name:"service_identifier",kind:"scalar",T:9},{no:2,name:"port",kind:"scalar",T:13},{no:3,name:"path",kind:"scalar",T:9,opt:!0},{no:4,name:"request_body",kind:"scalar",T:9,opt:!0},{no:5,name:"initial_delay_milliseconds",kind:"scalar",T:13,opt:!0},{no:6,name:"retries",kind:"scalar",T:13,opt:!0},{no:7,name:"retries_delay_milliseconds",kind:"scalar",T:13,opt:!0},{no:8,name:"body_text",kind:"scalar",T:9,opt:!0}])),F=r.w.makeMessageType("api_container_api.StreamedDataChunk",(()=>[{no:1,name:"data",kind:"scalar",T:12},{no:2,name:"previous_chunk_hash",kind:"scalar",T:9},{no:3,name:"metadata",kind:"message",T:M}])),M=r.w.makeMessageType("api_container_api.DataChunkMetadata",(()=>[{no:1,name:"name",kind:"scalar",T:9}])),B=r.w.makeMessageType("api_container_api.UploadFilesArtifactResponse",(()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9}])),z=r.w.makeMessageType("api_container_api.DownloadFilesArtifactArgs",(()=>[{no:1,name:"identifier",kind:"scalar",T:9}])),U=r.w.makeMessageType("api_container_api.StoreWebFilesArtifactArgs",(()=>[{no:1,name:"url",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9}])),V=r.w.makeMessageType("api_container_api.StoreWebFilesArtifactResponse",(()=>[{no:1,name:"uuid",kind:"scalar",T:9}])),q=r.w.makeMessageType("api_container_api.StoreFilesArtifactFromServiceArgs",(()=>[{no:1,name:"service_identifier",kind:"scalar",T:9},{no:2,name:"source_path",kind:"scalar",T:9},{no:3,name:"name",kind:"scalar",T:9}])),H=r.w.makeMessageType("api_container_api.StoreFilesArtifactFromServiceResponse",(()=>[{no:1,name:"uuid",kind:"scalar",T:9}])),W=r.w.makeMessageType("api_container_api.FilesArtifactNameAndUuid",(()=>[{no:1,name:"fileName",kind:"scalar",T:9},{no:2,name:"fileUuid",kind:"scalar",T:9}])),J=r.w.makeMessageType("api_container_api.ListFilesArtifactNamesAndUuidsResponse",(()=>[{no:1,name:"file_names_and_uuids",kind:"message",T:W,repeated:!0}])),G=r.w.makeMessageType("api_container_api.InspectFilesArtifactContentsRequest",(()=>[{no:1,name:"file_names_and_uuid",kind:"message",T:W}])),Y=r.w.makeMessageType("api_container_api.InspectFilesArtifactContentsResponse",(()=>[{no:1,name:"file_descriptions",kind:"message",T:K,repeated:!0}])),K=r.w.makeMessageType("api_container_api.FileArtifactContentsFileDescription",(()=>[{no:1,name:"path",kind:"scalar",T:9},{no:2,name:"size",kind:"scalar",T:4},{no:3,name:"text_preview",kind:"scalar",T:9,opt:!0}])),$=r.w.makeMessageType("api_container_api.ConnectServicesArgs",(()=>[{no:1,name:"connect",kind:"enum",T:r.w.getEnumType(a)}])),X=r.w.makeMessageType("api_container_api.ConnectServicesResponse",[]),Z=r.w.makeMessageType("api_container_api.GetStarlarkRunResponse",(()=>[{no:1,name:"package_id",kind:"scalar",T:9},{no:2,name:"serialized_script",kind:"scalar",T:9},{no:3,name:"serialized_params",kind:"scalar",T:9},{no:4,name:"parallelism",kind:"scalar",T:5},{no:5,name:"relative_path_to_main_file",kind:"scalar",T:9},{no:6,name:"main_function_name",kind:"scalar",T:9},{no:7,name:"experimental_features",kind:"enum",T:r.w.getEnumType(s),repeated:!0},{no:8,name:"restart_policy",kind:"enum",T:r.w.getEnumType(l)}]))},2933:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CleanArgs:()=>w,CleanResponse:()=>k,CreateEnclaveArgs:()=>u,CreateEnclaveResponse:()=>d,DestroyEnclaveArgs:()=>b,EnclaveAPIContainerHostMachineInfo:()=>p,EnclaveAPIContainerInfo:()=>f,EnclaveAPIContainerStatus:()=>s,EnclaveContainersStatus:()=>a,EnclaveIdentifiers:()=>g,EnclaveInfo:()=>h,EnclaveMode:()=>i,EnclaveNameAndUuid:()=>x,GetEnclavesResponse:()=>m,GetEngineInfoResponse:()=>c,GetExistingAndHistoricalEnclaveIdentifiersResponse:()=>v,GetServiceLogsArgs:()=>S,GetServiceLogsResponse:()=>E,LogLine:()=>T,LogLineFilter:()=>_,LogLineOperator:()=>l,StopEnclaveArgs:()=>y});var r=n(9699),o=n(533);const i=r.w.makeEnum("engine_api.EnclaveMode",[{no:0,name:"TEST"},{no:1,name:"PRODUCTION"}]),a=r.w.makeEnum("engine_api.EnclaveContainersStatus",[{no:0,name:"EnclaveContainersStatus_EMPTY"},{no:1,name:"EnclaveContainersStatus_RUNNING"},{no:2,name:"EnclaveContainersStatus_STOPPED"}]),s=r.w.makeEnum("engine_api.EnclaveAPIContainerStatus",[{no:0,name:"EnclaveAPIContainerStatus_NONEXISTENT"},{no:1,name:"EnclaveAPIContainerStatus_RUNNING"},{no:2,name:"EnclaveAPIContainerStatus_STOPPED"}]),l=r.w.makeEnum("engine_api.LogLineOperator",[{no:0,name:"LogLineOperator_DOES_CONTAIN_TEXT"},{no:1,name:"LogLineOperator_DOES_NOT_CONTAIN_TEXT"},{no:2,name:"LogLineOperator_DOES_CONTAIN_MATCH_REGEX"},{no:3,name:"LogLineOperator_DOES_NOT_CONTAIN_MATCH_REGEX"}]),c=r.w.makeMessageType("engine_api.GetEngineInfoResponse",(()=>[{no:1,name:"engine_version",kind:"scalar",T:9}])),u=r.w.makeMessageType("engine_api.CreateEnclaveArgs",(()=>[{no:1,name:"enclave_name",kind:"scalar",T:9,opt:!0},{no:2,name:"api_container_version_tag",kind:"scalar",T:9,opt:!0},{no:3,name:"api_container_log_level",kind:"scalar",T:9,opt:!0},{no:4,name:"mode",kind:"enum",T:r.w.getEnumType(i),opt:!0}])),d=r.w.makeMessageType("engine_api.CreateEnclaveResponse",(()=>[{no:1,name:"enclave_info",kind:"message",T:h}])),f=r.w.makeMessageType("engine_api.EnclaveAPIContainerInfo",(()=>[{no:1,name:"container_id",kind:"scalar",T:9},{no:2,name:"ip_inside_enclave",kind:"scalar",T:9},{no:3,name:"grpc_port_inside_enclave",kind:"scalar",T:13},{no:6,name:"bridge_ip_address",kind:"scalar",T:9}])),p=r.w.makeMessageType("engine_api.EnclaveAPIContainerHostMachineInfo",(()=>[{no:4,name:"ip_on_host_machine",kind:"scalar",T:9},{no:5,name:"grpc_port_on_host_machine",kind:"scalar",T:13}])),h=r.w.makeMessageType("engine_api.EnclaveInfo",(()=>[{no:1,name:"enclave_uuid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"shortened_uuid",kind:"scalar",T:9},{no:4,name:"containers_status",kind:"enum",T:r.w.getEnumType(a)},{no:5,name:"api_container_status",kind:"enum",T:r.w.getEnumType(s)},{no:6,name:"api_container_info",kind:"message",T:f},{no:7,name:"api_container_host_machine_info",kind:"message",T:p},{no:8,name:"creation_time",kind:"message",T:o.E},{no:9,name:"mode",kind:"enum",T:r.w.getEnumType(i)}])),m=r.w.makeMessageType("engine_api.GetEnclavesResponse",(()=>[{no:1,name:"enclave_info",kind:"map",K:9,V:{kind:"message",T:h}}])),g=r.w.makeMessageType("engine_api.EnclaveIdentifiers",(()=>[{no:1,name:"enclave_uuid",kind:"scalar",T:9},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"shortened_uuid",kind:"scalar",T:9}])),v=r.w.makeMessageType("engine_api.GetExistingAndHistoricalEnclaveIdentifiersResponse",(()=>[{no:1,name:"allIdentifiers",kind:"message",T:g,repeated:!0}])),y=r.w.makeMessageType("engine_api.StopEnclaveArgs",(()=>[{no:1,name:"enclave_identifier",kind:"scalar",T:9}])),b=r.w.makeMessageType("engine_api.DestroyEnclaveArgs",(()=>[{no:1,name:"enclave_identifier",kind:"scalar",T:9}])),w=r.w.makeMessageType("engine_api.CleanArgs",(()=>[{no:1,name:"should_clean_all",kind:"scalar",T:8,opt:!0}])),x=r.w.makeMessageType("engine_api.EnclaveNameAndUuid",(()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"uuid",kind:"scalar",T:9}])),k=r.w.makeMessageType("engine_api.CleanResponse",(()=>[{no:1,name:"removed_enclave_name_and_uuids",kind:"message",T:x,repeated:!0}])),S=r.w.makeMessageType("engine_api.GetServiceLogsArgs",(()=>[{no:1,name:"enclave_identifier",kind:"scalar",T:9},{no:2,name:"service_uuid_set",kind:"map",K:9,V:{kind:"scalar",T:8}},{no:3,name:"follow_logs",kind:"scalar",T:8,opt:!0},{no:4,name:"conjunctive_filters",kind:"message",T:_,repeated:!0},{no:5,name:"return_all_logs",kind:"scalar",T:8,opt:!0},{no:6,name:"num_log_lines",kind:"scalar",T:13,opt:!0}])),E=r.w.makeMessageType("engine_api.GetServiceLogsResponse",(()=>[{no:1,name:"service_logs_by_service_uuid",kind:"map",K:9,V:{kind:"message",T:T}},{no:2,name:"not_found_service_uuid_set",kind:"map",K:9,V:{kind:"scalar",T:8}}])),T=r.w.makeMessageType("engine_api.LogLine",(()=>[{no:1,name:"line",kind:"scalar",T:9,repeated:!0},{no:2,name:"timestamp",kind:"message",T:o.E}])),_=r.w.makeMessageType("engine_api.LogLineFilter",(()=>[{no:1,name:"operator",kind:"enum",T:r.w.getEnumType(l)},{no:2,name:"text_pattern",kind:"scalar",T:9}]))},4483:(e,t,n)=>{"use strict";t.q=void 0;const r=n(1278),o=n(6611),i=n(2933),a=n(8711);t.q={typeName:"kurtosis_enclave_manager.KurtosisEnclaveManagerServer",methods:{check:{name:"Check",I:r.HealthCheckRequest,O:r.HealthCheckResponse,kind:o.MethodKind.Unary},getEnclaves:{name:"GetEnclaves",I:o.Empty,O:i.GetEnclavesResponse,kind:o.MethodKind.Unary},getServices:{name:"GetServices",I:r.GetServicesRequest,O:a.GetServicesResponse,kind:o.MethodKind.Unary},getServiceLogs:{name:"GetServiceLogs",I:i.GetServiceLogsArgs,O:i.GetServiceLogsResponse,kind:o.MethodKind.ServerStreaming},listFilesArtifactNamesAndUuids:{name:"ListFilesArtifactNamesAndUuids",I:r.GetListFilesArtifactNamesAndUuidsRequest,O:a.ListFilesArtifactNamesAndUuidsResponse,kind:o.MethodKind.Unary},runStarlarkPackage:{name:"RunStarlarkPackage",I:r.RunStarlarkPackageRequest,O:a.StarlarkRunResponseLine,kind:o.MethodKind.ServerStreaming},createEnclave:{name:"CreateEnclave",I:i.CreateEnclaveArgs,O:i.CreateEnclaveResponse,kind:o.MethodKind.Unary},inspectFilesArtifactContents:{name:"InspectFilesArtifactContents",I:r.InspectFilesArtifactContentsRequest,O:a.InspectFilesArtifactContentsResponse,kind:o.MethodKind.Unary},downloadFilesArtifact:{name:"DownloadFilesArtifact",I:r.DownloadFilesArtifactRequest,O:a.StreamedDataChunk,kind:o.MethodKind.ServerStreaming},destroyEnclave:{name:"DestroyEnclave",I:i.DestroyEnclaveArgs,O:o.Empty,kind:o.MethodKind.Unary},getStarlarkRun:{name:"GetStarlarkRun",I:r.GetStarlarkRunRequest,O:a.GetStarlarkRunResponse,kind:o.MethodKind.Unary}}}},1278:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GetStarlarkRunRequest=t.DownloadFilesArtifactRequest=t.InspectFilesArtifactContentsRequest=t.RunStarlarkPackageRequest=t.GetListFilesArtifactNamesAndUuidsRequest=t.GetServicesRequest=t.HealthCheckResponse_ServingStatus=t.HealthCheckResponse=t.HealthCheckRequest=void 0;const r=n(6611),o=n(8711);class i extends r.Message{constructor(e){super(),this.service="",r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new i).fromBinary(e,t)}static fromJson(e,t){return(new i).fromJson(e,t)}static fromJsonString(e,t){return(new i).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(i,e,t)}}t.HealthCheckRequest=i,i.runtime=r.proto3,i.typeName="kurtosis_enclave_manager.HealthCheckRequest",i.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"service",kind:"scalar",T:9}]));class a extends r.Message{constructor(e){super(),this.status=s.UNKNOWN,r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new a).fromBinary(e,t)}static fromJson(e,t){return(new a).fromJson(e,t)}static fromJsonString(e,t){return(new a).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(a,e,t)}}var s;t.HealthCheckResponse=a,a.runtime=r.proto3,a.typeName="kurtosis_enclave_manager.HealthCheckResponse",a.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"status",kind:"enum",T:r.proto3.getEnumType(s)}])),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.SERVING=1]="SERVING",e[e.NOT_SERVING=2]="NOT_SERVING",e[e.SERVICE_UNKNOWN=3]="SERVICE_UNKNOWN"}(s=t.HealthCheckResponse_ServingStatus||(t.HealthCheckResponse_ServingStatus={})),r.proto3.util.setEnumType(s,"kurtosis_enclave_manager.HealthCheckResponse.ServingStatus",[{no:0,name:"UNKNOWN"},{no:1,name:"SERVING"},{no:2,name:"NOT_SERVING"},{no:3,name:"SERVICE_UNKNOWN"}]);class l extends r.Message{constructor(e){super(),this.apicIpAddress="",this.apicPort=0,r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new l).fromBinary(e,t)}static fromJson(e,t){return(new l).fromJson(e,t)}static fromJsonString(e,t){return(new l).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(l,e,t)}}t.GetServicesRequest=l,l.runtime=r.proto3,l.typeName="kurtosis_enclave_manager.GetServicesRequest",l.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"apic_ip_address",kind:"scalar",T:9},{no:2,name:"apic_port",kind:"scalar",T:5}]));class c extends r.Message{constructor(e){super(),this.apicIpAddress="",this.apicPort=0,r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new c).fromBinary(e,t)}static fromJson(e,t){return(new c).fromJson(e,t)}static fromJsonString(e,t){return(new c).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(c,e,t)}}t.GetListFilesArtifactNamesAndUuidsRequest=c,c.runtime=r.proto3,c.typeName="kurtosis_enclave_manager.GetListFilesArtifactNamesAndUuidsRequest",c.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"apic_ip_address",kind:"scalar",T:9},{no:2,name:"apic_port",kind:"scalar",T:5}]));class u extends r.Message{constructor(e){super(),this.apicIpAddress="",this.apicPort=0,r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new u).fromBinary(e,t)}static fromJson(e,t){return(new u).fromJson(e,t)}static fromJsonString(e,t){return(new u).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(u,e,t)}}t.RunStarlarkPackageRequest=u,u.runtime=r.proto3,u.typeName="kurtosis_enclave_manager.RunStarlarkPackageRequest",u.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"apic_ip_address",kind:"scalar",T:9},{no:2,name:"apic_port",kind:"scalar",T:5},{no:3,name:"RunStarlarkPackageArgs",kind:"message",T:o.RunStarlarkPackageArgs}]));class d extends r.Message{constructor(e){super(),this.apicIpAddress="",this.apicPort=0,r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new d).fromBinary(e,t)}static fromJson(e,t){return(new d).fromJson(e,t)}static fromJsonString(e,t){return(new d).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(d,e,t)}}t.InspectFilesArtifactContentsRequest=d,d.runtime=r.proto3,d.typeName="kurtosis_enclave_manager.InspectFilesArtifactContentsRequest",d.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"apic_ip_address",kind:"scalar",T:9},{no:2,name:"apic_port",kind:"scalar",T:5},{no:3,name:"file_names_and_uuid",kind:"message",T:o.FilesArtifactNameAndUuid}]));class f extends r.Message{constructor(e){super(),this.apicIpAddress="",this.apicPort=0,r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new f).fromBinary(e,t)}static fromJson(e,t){return(new f).fromJson(e,t)}static fromJsonString(e,t){return(new f).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(f,e,t)}}t.DownloadFilesArtifactRequest=f,f.runtime=r.proto3,f.typeName="kurtosis_enclave_manager.DownloadFilesArtifactRequest",f.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"apic_ip_address",kind:"scalar",T:9},{no:2,name:"apic_port",kind:"scalar",T:5},{no:3,name:"download_files_artifacts_args",kind:"message",T:o.DownloadFilesArtifactArgs}]));class p extends r.Message{constructor(e){super(),this.apicIpAddress="",this.apicPort=0,r.proto3.util.initPartial(e,this)}static fromBinary(e,t){return(new p).fromBinary(e,t)}static fromJson(e,t){return(new p).fromJson(e,t)}static fromJsonString(e,t){return(new p).fromJsonString(e,t)}static equals(e,t){return r.proto3.util.equals(p,e,t)}}t.GetStarlarkRunRequest=p,p.runtime=r.proto3,p.typeName="kurtosis_enclave_manager.GetStarlarkRunRequest",p.fields=r.proto3.util.newFieldList((()=>[{no:1,name:"apic_ip_address",kind:"scalar",T:9},{no:2,name:"apic_port",kind:"scalar",T:5}]))},2099:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decodeHTML=t.decodeHTMLStrict=t.decodeXML=void 0;var o=r(n(2059)),i=r(n(2184)),a=r(n(1542)),s=r(n(7190)),l=/&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;function c(e){var t=d(e);return function(e){return String(e).replace(l,t)}}t.decodeXML=c(a.default),t.decodeHTMLStrict=c(o.default);var u=function(e,t){return e65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e)};t.default=function(e){return e>=55296&&e<=57343||e>1114111?"\ufffd":(e in o.default&&(e=o.default[e]),i(e))}},3742:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=void 0;var o=u(r(n(1542)).default),i=d(o);t.encodeXML=g(o);var a,s,l=u(r(n(2059)).default),c=d(l);function u(e){return Object.keys(e).sort().reduce((function(t,n){return t[e[n]]="&"+n+";",t}),{})}function d(e){for(var t=[],n=[],r=0,o=Object.keys(e);r1?p(e):e.charCodeAt(0)).toString(16).toUpperCase()+";"}var m=new RegExp(i.source+"|"+f.source,"g");function g(e){return function(t){return t.replace(m,(function(t){return e[t]||h(t)}))}}t.escape=function(e){return e.replace(m,h)},t.escapeUTF8=function(e){return e.replace(i,h)}},1672:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXMLStrict=t.decodeHTML5Strict=t.decodeHTML4Strict=t.decodeHTML5=t.decodeHTML4=t.decodeHTMLStrict=t.decodeHTML=t.decodeXML=t.encodeHTML5=t.encodeHTML4=t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=t.encode=t.decodeStrict=t.decode=void 0;var r=n(2099),o=n(3742);t.decode=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTML)(e)},t.decodeStrict=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTMLStrict)(e)},t.encode=function(e,t){return(!t||t<=0?o.encodeXML:o.encodeHTML)(e)};var i=n(3742);Object.defineProperty(t,"encodeXML",{enumerable:!0,get:function(){return i.encodeXML}}),Object.defineProperty(t,"encodeHTML",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(t,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return i.encodeNonAsciiHTML}}),Object.defineProperty(t,"escape",{enumerable:!0,get:function(){return i.escape}}),Object.defineProperty(t,"escapeUTF8",{enumerable:!0,get:function(){return i.escapeUTF8}}),Object.defineProperty(t,"encodeHTML4",{enumerable:!0,get:function(){return i.encodeHTML}}),Object.defineProperty(t,"encodeHTML5",{enumerable:!0,get:function(){return i.encodeHTML}});var a=n(2099);Object.defineProperty(t,"decodeXML",{enumerable:!0,get:function(){return a.decodeXML}}),Object.defineProperty(t,"decodeHTML",{enumerable:!0,get:function(){return a.decodeHTML}}),Object.defineProperty(t,"decodeHTMLStrict",{enumerable:!0,get:function(){return a.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML4",{enumerable:!0,get:function(){return a.decodeHTML}}),Object.defineProperty(t,"decodeHTML5",{enumerable:!0,get:function(){return a.decodeHTML}}),Object.defineProperty(t,"decodeHTML4Strict",{enumerable:!0,get:function(){return a.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML5Strict",{enumerable:!0,get:function(){return a.decodeHTMLStrict}}),Object.defineProperty(t,"decodeXMLStrict",{enumerable:!0,get:function(){return a.decodeXML}})},253:e=>{"use strict";var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=function(e){return"function"===typeof Array.isArray?Array.isArray(e):"[object Array]"===n.call(e)},a=function(e){if(!e||"[object Object]"!==n.call(e))return!1;var r,o=t.call(e,"constructor"),i=e.constructor&&e.constructor.prototype&&t.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!o&&!i)return!1;for(r in e);return"undefined"===typeof r||t.call(e,r)},s=function(e,t){r&&"__proto__"===t.name?r(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},l=function(e,n){if("__proto__"===n){if(!t.call(e,n))return;if(o)return o(e,n).value}return e[n]};e.exports=function e(){var t,n,r,o,c,u,d=arguments[0],f=1,p=arguments.length,h=!1;for("boolean"===typeof d&&(h=d,d=arguments[1]||{},f=2),(null==d||"object"!==typeof d&&"function"!==typeof d)&&(d={});f{"use strict";var r=n(9479),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?a:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=a;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(h){var o=p(n);o&&o!==h&&e(t,o,r)}var a=u(n);d&&(a=a.concat(d(n)));for(var s=l(t),m=l(n),g=0;g{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CASE_SENSITIVE_TAG_NAMES_MAP=t.CASE_SENSITIVE_TAG_NAMES=void 0,t.CASE_SENSITIVE_TAG_NAMES=["animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","linearGradient","radialGradient","textPath"],t.CASE_SENSITIVE_TAG_NAMES_MAP=t.CASE_SENSITIVE_TAG_NAMES.reduce((function(e,t){return e[t.toLowerCase()]=t,e}),{})},639:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="html",r="head",o="body",i=/<([a-zA-Z]+[0-9]?)/,a=//i,s=//i,l=function(e,t){throw new Error("This browser does not support `document.implementation.createHTMLDocument`")},c=function(e,t){throw new Error("This browser does not support `DOMParser.prototype.parseFromString`")},u="object"===typeof window&&window.DOMParser;if("function"===typeof u){var d=new u;l=c=function(e,t){return t&&(e="<".concat(t,">").concat(e,"")),d.parseFromString(e,"text/html")}}if("object"===typeof document&&document.implementation){var f=document.implementation.createHTMLDocument();l=function(e,t){if(t){var n=f.documentElement.querySelector(t);return n&&(n.innerHTML=e),f}return f.documentElement.innerHTML=e,f}}var p,h="object"===typeof document&&document.createElement("template");h&&h.content&&(p=function(e){return h.innerHTML=e,h.content.childNodes}),t.default=function(e){var t,u,d=e.match(i),f=d&&d[1]?d[1].toLowerCase():"";switch(f){case n:var h=c(e);if(!a.test(e))null===(t=null===(g=h.querySelector(r))||void 0===g?void 0:g.parentNode)||void 0===t||t.removeChild(g);if(!s.test(e))null===(u=null===(g=h.querySelector(o))||void 0===g?void 0:g.parentNode)||void 0===u||u.removeChild(g);return h.querySelectorAll(n);case r:case o:var m=l(e).querySelectorAll(f);return s.test(e)&&a.test(e)?m[0].parentNode.childNodes:m;default:return p?p(e):(g=l(e,o).querySelector(o)).childNodes;var g}}},3014:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(639)),i=n(3510),a=/<(![a-zA-Z\s]+)>/;t.default=function(e){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];var t=e.match(a),n=t?t[1]:void 0;return(0,i.formatDOM)((0,o.default)(e),null,n)}},3510:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatDOM=t.formatAttributes=void 0;var r=n(7422),o=n(7125);function i(e){for(var t={},n=0,r=e.length;n{var r=n(7422),o=n(3014).default,i=n(3037),a=n(5698);o="function"===typeof o.default?o.default:o;var s={lowerCaseAttributeNames:!1};function l(e,t){if("string"!==typeof e)throw new TypeError("First argument must be a string");return""===e?[]:a(o(e,(t=t||{}).htmlparser2||s),t)}l.domToReact=a,l.htmlToDOM=o,l.attributesToProps=i,l.Comment=r.Comment,l.Element=r.Element,l.ProcessingInstruction=r.ProcessingInstruction,l.Text=r.Text,e.exports=l,l.default=l},3037:(e,t,n)=>{var r=n(5595),o=n(5262),i=["checked","value"],a=["input","select","textarea"],s={reset:!0,submit:!0};function l(e){return r.possibleStandardNames[e]}e.exports=function(e,t){var n,c,u,d,f,p={},h=(e=e||{}).type&&s[e.type];for(n in e)if(u=e[n],r.isCustomAttribute(n))p[n]=u;else if(d=l(c=n.toLowerCase()))switch(f=r.getPropertyInfo(d),-1===i.indexOf(d)||-1===a.indexOf(t)||h||(d=l("default"+c)),p[d]=u,f&&f.type){case r.BOOLEAN:p[d]=!0;break;case r.OVERLOADED_BOOLEAN:""===u&&(p[d]=!0)}else o.PRESERVE_CUSTOM_ATTRIBUTES&&(p[n]=u);return o.setStyleProp(e.style,p),p}},5698:(e,t,n)=>{var r=n(969),o=n(3037),i=n(5262),a=i.setStyleProp,s=i.canTextBeChildOfNode;function l(e){return i.PRESERVE_CUSTOM_ATTRIBUTES&&"tag"===e.type&&i.isCustomComponent(e.name,e.attribs)}e.exports=function e(t,n){for(var c,u,d,f,p,h=(n=n||{}).library||r,m=h.cloneElement,g=h.createElement,v=h.isValidElement,y=[],b="function"===typeof n.replace,w=n.transform||i.returnFirstArg,x=n.trim,k=0,S=t.length;k1&&(d=m(d,{key:d.key||k})),y.push(w(d,c,k));else if("text"!==c.type){switch(f=c.attribs,l(c)?a(f.style,f):f&&(f=o(f,c.name)),p=null,c.type){case"script":case"style":c.children[0]&&(f.dangerouslySetInnerHTML={__html:c.children[0].data});break;case"tag":"textarea"===c.name&&c.children[0]?f.defaultValue=c.children[0].data:c.children&&c.children.length&&(p=e(c.children,n));break;default:continue}S>1&&(f.key=k),y.push(w(g(c.name,f,p),c,k))}else{if((u=!c.data.trim().length)&&c.parent&&!s(c.parent))continue;if(x&&u)continue;y.push(w(c.data,c,k))}return 1===y.length?y[0]:y}},5262:(e,t,n)=>{var r=n(969),o=n(271).default,i=new Set(["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"]);var a={reactCompat:!0};var s=r.version.split(".")[0]>=16,l=new Set(["tr","tbody","thead","tfoot","colgroup","table","head","html","frameset"]);e.exports={PRESERVE_CUSTOM_ATTRIBUTES:s,ELEMENTS_WITH_NO_TEXT_CHILDREN:l,isCustomComponent:function(e,t){return-1===e.indexOf("-")?t&&"string"===typeof t.is:!i.has(e)},setStyleProp:function(e,t){if(null!==e&&void 0!==e)try{t.style=o(e,a)}catch(n){t.style={}}},canTextBeChildOfNode:function(e){return!l.has(e.name)},returnFirstArg:function(e){return e}}},6559:e=>{var t=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,r=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,a=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,s=/^[;\s]*/,l=/^\s+|\s+$/g,c="";function u(e){return e?e.replace(l,c):c}e.exports=function(e,l){if("string"!==typeof e)throw new TypeError("First argument must be a string");if(!e)return[];l=l||{};var d=1,f=1;function p(e){var t=e.match(n);t&&(d+=t.length);var r=e.lastIndexOf("\n");f=~r?e.length-r:f+e.length}function h(){var e={line:d,column:f};return function(t){return t.position=new m(e),b(),t}}function m(e){this.start=e,this.end={line:d,column:f},this.source=l.source}m.prototype.content=e;var g=[];function v(t){var n=new Error(l.source+":"+d+":"+f+": "+t);if(n.reason=t,n.filename=l.source,n.line=d,n.column=f,n.source=e,!l.silent)throw n;g.push(n)}function y(t){var n=t.exec(e);if(n){var r=n[0];return p(r),e=e.slice(r.length),n}}function b(){y(r)}function w(e){var t;for(e=e||[];t=x();)!1!==t&&e.push(t);return e}function x(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;c!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,c===e.charAt(n-1))return v("End of comment missing");var r=e.slice(2,n-2);return f+=2,p(r),e=e.slice(n),f+=2,t({type:"comment",comment:r})}}function k(){var e=h(),n=y(o);if(n){if(x(),!y(i))return v("property missing ':'");var r=y(a),l=e({type:"declaration",property:u(n[0].replace(t,c)),value:r?u(r[0].replace(t,c)):c});return y(s),l}}return b(),function(){var e,t=[];for(w(t);e=k();)!1!==e&&(t.push(e),w(t));return t}()}},6609:(e,t,n)=>{e=n.nmd(e);var r="__lodash_hash_undefined__",o=9007199254740991,i="[object Arguments]",a="[object AsyncFunction]",s="[object Function]",l="[object GeneratorFunction]",c="[object Null]",u="[object Object]",d="[object Proxy]",f="[object Undefined]",p=/^\[object .+?Constructor\]$/,h=/^(?:0|[1-9]\d*)$/,m={};m["[object Float32Array]"]=m["[object Float64Array]"]=m["[object Int8Array]"]=m["[object Int16Array]"]=m["[object Int32Array]"]=m["[object Uint8Array]"]=m["[object Uint8ClampedArray]"]=m["[object Uint16Array]"]=m["[object Uint32Array]"]=!0,m[i]=m["[object Array]"]=m["[object ArrayBuffer]"]=m["[object Boolean]"]=m["[object DataView]"]=m["[object Date]"]=m["[object Error]"]=m[s]=m["[object Map]"]=m["[object Number]"]=m[u]=m["[object RegExp]"]=m["[object Set]"]=m["[object String]"]=m["[object WeakMap]"]=!1;var g="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,v="object"==typeof self&&self&&self.Object===Object&&self,y=g||v||Function("return this")(),b=t&&!t.nodeType&&t,w=b&&e&&!e.nodeType&&e,x=w&&w.exports===b,k=x&&g.process,S=function(){try{var e=w&&w.require&&w.require("util").types;return e||k&&k.binding&&k.binding("util")}catch(t){}}(),E=S&&S.isTypedArray;var T,_,C=Array.prototype,I=Function.prototype,N=Object.prototype,O=y["__core-js_shared__"],A=I.toString,P=N.hasOwnProperty,j=function(){var e=/[^.]+$/.exec(O&&O.keys&&O.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),R=N.toString,D=A.call(Object),L=RegExp("^"+A.call(P).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),F=x?y.Buffer:void 0,M=y.Symbol,B=y.Uint8Array,z=F?F.allocUnsafe:void 0,U=(T=Object.getPrototypeOf,_=Object,function(e){return T(_(e))}),V=Object.create,q=N.propertyIsEnumerable,H=C.splice,W=M?M.toStringTag:void 0,J=function(){try{var e=ye(Object,"defineProperty");return e({},"",{}),e}catch(t){}}(),G=F?F.isBuffer:void 0,Y=Math.max,K=Date.now,$=ye(y,"Map"),X=ye(Object,"create"),Z=function(){function e(){}return function(t){if(!Oe(t))return{};if(V)return V(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function Q(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1},ee.prototype.set=function(e,t){var n=this.__data__,r=ae(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},te.prototype.clear=function(){this.size=0,this.__data__={hash:new Q,map:new($||ee),string:new Q}},te.prototype.delete=function(e){var t=ve(this,e).delete(e);return this.size-=t?1:0,t},te.prototype.get=function(e){return ve(this,e).get(e)},te.prototype.has=function(e){return ve(this,e).has(e)},te.prototype.set=function(e,t){var n=ve(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},ne.prototype.clear=function(){this.__data__=new ee,this.size=0},ne.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},ne.prototype.get=function(e){return this.__data__.get(e)},ne.prototype.has=function(e){return this.__data__.has(e)},ne.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ee){var r=n.__data__;if(!$||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new te(r)}return n.set(e,t),this.size=n.size,this};var le,ce=function(e,t,n){for(var r=-1,o=Object(e),i=n(e),a=i.length;a--;){var s=i[le?a:++r];if(!1===t(o[s],s,o))break}return e};function ue(e){return null==e?void 0===e?f:c:W&&W in Object(e)?function(e){var t=P.call(e,W),n=e[W];try{e[W]=void 0;var r=!0}catch(i){}var o=R.call(e);r&&(t?e[W]=n:delete e[W]);return o}(e):function(e){return R.call(e)}(e)}function de(e){return Ae(e)&&ue(e)==i}function fe(e){return!(!Oe(e)||function(e){return!!j&&j in e}(e))&&(Ie(e)?L:p).test(function(e){if(null!=e){try{return A.call(e)}catch(t){}try{return e+""}catch(t){}}return""}(e))}function pe(e){if(!Oe(e))return function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}(e);var t=we(e),n=[];for(var r in e)("constructor"!=r||!t&&P.call(e,r))&&n.push(r);return n}function he(e,t,n,r,o){e!==t&&ce(t,(function(i,a){if(o||(o=new ne),Oe(i))!function(e,t,n,r,o,i,a){var s=xe(e,n),l=xe(t,n),c=a.get(l);if(c)return void oe(e,n,c);var d=i?i(s,l,n+"",e,t,a):void 0,f=void 0===d;if(f){var p=Te(l),h=!p&&Ce(l),m=!p&&!h&&Pe(l);d=l,p||h||m?Te(s)?d=s:Ae(g=s)&&_e(g)?d=function(e,t){var n=-1,r=e.length;t||(t=Array(r));for(;++n-1&&e%1==0&&e0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(ge);function Se(e,t){return e===t||e!==e&&t!==t}var Ee=de(function(){return arguments}())?de:function(e){return Ae(e)&&P.call(e,"callee")&&!q.call(e,"callee")},Te=Array.isArray;function _e(e){return null!=e&&Ne(e.length)&&!Ie(e)}var Ce=G||function(){return!1};function Ie(e){if(!Oe(e))return!1;var t=ue(e);return t==s||t==l||t==a||t==d}function Ne(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=o}function Oe(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Ae(e){return null!=e&&"object"==typeof e}var Pe=E?function(e){return function(t){return e(t)}}(E):function(e){return Ae(e)&&Ne(e.length)&&!!m[ue(e)]};function je(e){return _e(e)?re(e,!0):pe(e)}var Re,De=(Re=function(e,t,n,r){he(e,t,n,r)},me((function(e,t){var n=-1,r=t.length,o=r>1?t[r-1]:void 0,i=r>2?t[2]:void 0;for(o=Re.length>3&&"function"==typeof o?(r--,o):void 0,i&&function(e,t,n){if(!Oe(n))return!1;var r=typeof t;return!!("number"==r?_e(n)&&be(t,n.length):"string"==r&&t in n)&&Se(n[t],e)}(t[0],t[1],i)&&(o=r<3?void 0:o,r=1),e=Object(e);++n"']/g,$=RegExp(Y.source),X=RegExp(K.source),Z=/<%-([\s\S]+?)%>/g,Q=/<%([\s\S]+?)%>/g,ee=/<%=([\s\S]+?)%>/g,te=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ne=/^\w*$/,re=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,oe=/[\\^$.*+?()[\]{}|]/g,ie=RegExp(oe.source),ae=/^\s+/,se=/\s/,le=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ce=/\{\n\/\* \[wrapped with (.+)\] \*/,ue=/,? & /,de=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,fe=/[()=,{}\[\]\/\s]/,pe=/\\(\\)?/g,he=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,me=/\w*$/,ge=/^[-+]0x[0-9a-f]+$/i,ve=/^0b[01]+$/i,ye=/^\[object .+?Constructor\]$/,be=/^0o[0-7]+$/i,we=/^(?:0|[1-9]\d*)$/,xe=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ke=/($^)/,Se=/['\n\r\u2028\u2029\\]/g,Ee="\\ud800-\\udfff",Te="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",_e="\\u2700-\\u27bf",Ce="a-z\\xdf-\\xf6\\xf8-\\xff",Ie="A-Z\\xc0-\\xd6\\xd8-\\xde",Ne="\\ufe0e\\ufe0f",Oe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ae="['\u2019]",Pe="["+Ee+"]",je="["+Oe+"]",Re="["+Te+"]",De="\\d+",Le="["+_e+"]",Fe="["+Ce+"]",Me="[^"+Ee+Oe+De+_e+Ce+Ie+"]",Be="\\ud83c[\\udffb-\\udfff]",ze="[^"+Ee+"]",Ue="(?:\\ud83c[\\udde6-\\uddff]){2}",Ve="[\\ud800-\\udbff][\\udc00-\\udfff]",qe="["+Ie+"]",He="\\u200d",We="(?:"+Fe+"|"+Me+")",Je="(?:"+qe+"|"+Me+")",Ge="(?:['\u2019](?:d|ll|m|re|s|t|ve))?",Ye="(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",Ke="(?:"+Re+"|"+Be+")"+"?",$e="["+Ne+"]?",Xe=$e+Ke+("(?:"+He+"(?:"+[ze,Ue,Ve].join("|")+")"+$e+Ke+")*"),Ze="(?:"+[Le,Ue,Ve].join("|")+")"+Xe,Qe="(?:"+[ze+Re+"?",Re,Ue,Ve,Pe].join("|")+")",et=RegExp(Ae,"g"),tt=RegExp(Re,"g"),nt=RegExp(Be+"(?="+Be+")|"+Qe+Xe,"g"),rt=RegExp([qe+"?"+Fe+"+"+Ge+"(?="+[je,qe,"$"].join("|")+")",Je+"+"+Ye+"(?="+[je,qe+We,"$"].join("|")+")",qe+"?"+We+"+"+Ge,qe+"+"+Ye,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",De,Ze].join("|"),"g"),ot=RegExp("["+He+Ee+Te+Ne+"]"),it=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,at=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],st=-1,lt={};lt[L]=lt[F]=lt[M]=lt[B]=lt[z]=lt[U]=lt[V]=lt[q]=lt[H]=!0,lt[y]=lt[b]=lt[R]=lt[w]=lt[D]=lt[x]=lt[k]=lt[S]=lt[T]=lt[_]=lt[C]=lt[N]=lt[O]=lt[A]=lt[j]=!1;var ct={};ct[y]=ct[b]=ct[R]=ct[D]=ct[w]=ct[x]=ct[L]=ct[F]=ct[M]=ct[B]=ct[z]=ct[T]=ct[_]=ct[C]=ct[N]=ct[O]=ct[A]=ct[P]=ct[U]=ct[V]=ct[q]=ct[H]=!0,ct[k]=ct[S]=ct[j]=!1;var ut={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},dt=parseFloat,ft=parseInt,pt="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,ht="object"==typeof self&&self&&self.Object===Object&&self,mt=pt||ht||Function("return this")(),gt=t&&!t.nodeType&&t,vt=gt&&e&&!e.nodeType&&e,yt=vt&&vt.exports===gt,bt=yt&&pt.process,wt=function(){try{var e=vt&&vt.require&&vt.require("util").types;return e||bt&&bt.binding&&bt.binding("util")}catch(t){}}(),xt=wt&&wt.isArrayBuffer,kt=wt&&wt.isDate,St=wt&&wt.isMap,Et=wt&&wt.isRegExp,Tt=wt&&wt.isSet,_t=wt&&wt.isTypedArray;function Ct(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function It(e,t,n,r){for(var o=-1,i=null==e?0:e.length;++o-1}function Rt(e,t,n){for(var r=-1,o=null==e?0:e.length;++r-1;);return n}function rn(e,t){for(var n=e.length;n--&&qt(t,e[n],0)>-1;);return n}var on=Yt({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),an=Yt({"&":"&","<":"<",">":">",'"':""","'":"'"});function sn(e){return"\\"+ut[e]}function ln(e){return ot.test(e)}function cn(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}function un(e,t){return function(n){return e(t(n))}}function dn(e,t){for(var n=-1,r=e.length,o=0,i=[];++n",""":'"',"'":"'"});var yn=function e(t){var n=(t=null==t?mt:yn.defaults(mt.Object(),t,yn.pick(mt,at))).Array,r=t.Date,se=t.Error,Ee=t.Function,Te=t.Math,_e=t.Object,Ce=t.RegExp,Ie=t.String,Ne=t.TypeError,Oe=n.prototype,Ae=Ee.prototype,Pe=_e.prototype,je=t["__core-js_shared__"],Re=Ae.toString,De=Pe.hasOwnProperty,Le=0,Fe=function(){var e=/[^.]+$/.exec(je&&je.keys&&je.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),Me=Pe.toString,Be=Re.call(_e),ze=mt._,Ue=Ce("^"+Re.call(De).replace(oe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ve=yt?t.Buffer:o,qe=t.Symbol,He=t.Uint8Array,We=Ve?Ve.allocUnsafe:o,Je=un(_e.getPrototypeOf,_e),Ge=_e.create,Ye=Pe.propertyIsEnumerable,Ke=Oe.splice,$e=qe?qe.isConcatSpreadable:o,Xe=qe?qe.iterator:o,Ze=qe?qe.toStringTag:o,Qe=function(){try{var e=fi(_e,"defineProperty");return e({},"",{}),e}catch(t){}}(),nt=t.clearTimeout!==mt.clearTimeout&&t.clearTimeout,ot=r&&r.now!==mt.Date.now&&r.now,ut=t.setTimeout!==mt.setTimeout&&t.setTimeout,pt=Te.ceil,ht=Te.floor,gt=_e.getOwnPropertySymbols,vt=Ve?Ve.isBuffer:o,bt=t.isFinite,wt=Oe.join,zt=un(_e.keys,_e),Yt=Te.max,bn=Te.min,wn=r.now,xn=t.parseInt,kn=Te.random,Sn=Oe.reverse,En=fi(t,"DataView"),Tn=fi(t,"Map"),_n=fi(t,"Promise"),Cn=fi(t,"Set"),In=fi(t,"WeakMap"),Nn=fi(_e,"create"),On=In&&new In,An={},Pn=Mi(En),jn=Mi(Tn),Rn=Mi(_n),Dn=Mi(Cn),Ln=Mi(In),Fn=qe?qe.prototype:o,Mn=Fn?Fn.valueOf:o,Bn=Fn?Fn.toString:o;function zn(e){if(ts(e)&&!Ha(e)&&!(e instanceof Hn)){if(e instanceof qn)return e;if(De.call(e,"__wrapped__"))return Bi(e)}return new qn(e)}var Un=function(){function e(){}return function(t){if(!es(t))return{};if(Ge)return Ge(t);e.prototype=t;var n=new e;return e.prototype=o,n}}();function Vn(){}function qn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function Hn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=g,this.__views__=[]}function Wn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function lr(e,t,n,r,i,a){var s,l=1&t,c=2&t,u=4&t;if(n&&(s=i?n(e,r,i,a):n(e)),s!==o)return s;if(!es(e))return e;var d=Ha(e);if(d){if(s=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&De.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!l)return Oo(e,s)}else{var f=mi(e),p=f==S||f==E;if(Ya(e))return Eo(e,l);if(f==C||f==y||p&&!i){if(s=c||p?{}:vi(e),!l)return c?function(e,t){return Ao(e,hi(e),t)}(e,function(e,t){return e&&Ao(t,Ps(t),e)}(s,e)):function(e,t){return Ao(e,pi(e),t)}(e,or(s,e))}else{if(!ct[f])return i?e:{};s=function(e,t,n){var r=e.constructor;switch(t){case R:return To(e);case w:case x:return new r(+e);case D:return function(e,t){var n=t?To(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case L:case F:case M:case B:case z:case U:case V:case q:case H:return _o(e,n);case T:return new r;case _:case A:return new r(e);case N:return function(e){var t=new e.constructor(e.source,me.exec(e));return t.lastIndex=e.lastIndex,t}(e);case O:return new r;case P:return o=e,Mn?_e(Mn.call(o)):{}}var o}(e,f,l)}}a||(a=new Kn);var h=a.get(e);if(h)return h;a.set(e,s),as(e)?e.forEach((function(r){s.add(lr(r,t,n,r,e,a))})):ns(e)&&e.forEach((function(r,o){s.set(o,lr(r,t,n,o,e,a))}));var m=d?o:(u?c?ii:oi:c?Ps:As)(e);return Nt(m||e,(function(r,o){m&&(r=e[o=r]),tr(s,o,lr(r,t,n,o,e,a))})),s}function cr(e,t,n){var r=n.length;if(null==e)return!r;for(e=_e(e);r--;){var i=n[r],a=t[i],s=e[i];if(s===o&&!(i in e)||!a(s))return!1}return!0}function ur(e,t,n){if("function"!=typeof e)throw new Ne(i);return Ai((function(){e.apply(o,n)}),t)}function dr(e,t,n,r){var o=-1,i=jt,a=!0,s=e.length,l=[],c=t.length;if(!s)return l;n&&(t=Dt(t,Qt(n))),r?(i=Rt,a=!1):t.length>=200&&(i=tn,a=!1,t=new Yn(t));e:for(;++o-1},Jn.prototype.set=function(e,t){var n=this.__data__,r=nr(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Gn.prototype.clear=function(){this.size=0,this.__data__={hash:new Wn,map:new(Tn||Jn),string:new Wn}},Gn.prototype.delete=function(e){var t=ui(this,e).delete(e);return this.size-=t?1:0,t},Gn.prototype.get=function(e){return ui(this,e).get(e)},Gn.prototype.has=function(e){return ui(this,e).has(e)},Gn.prototype.set=function(e,t){var n=ui(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Yn.prototype.add=Yn.prototype.push=function(e){return this.__data__.set(e,a),this},Yn.prototype.has=function(e){return this.__data__.has(e)},Kn.prototype.clear=function(){this.__data__=new Jn,this.size=0},Kn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Kn.prototype.get=function(e){return this.__data__.get(e)},Kn.prototype.has=function(e){return this.__data__.has(e)},Kn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Jn){var r=n.__data__;if(!Tn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Gn(r)}return n.set(e,t),this.size=n.size,this};var fr=Ro(wr),pr=Ro(xr,!0);function hr(e,t){var n=!0;return fr(e,(function(e,r,o){return n=!!t(e,r,o)})),n}function mr(e,t,n){for(var r=-1,i=e.length;++r0&&n(s)?t>1?vr(s,t-1,n,r,o):Lt(o,s):r||(o[o.length]=s)}return o}var yr=Do(),br=Do(!0);function wr(e,t){return e&&yr(e,t,As)}function xr(e,t){return e&&br(e,t,As)}function kr(e,t){return Pt(t,(function(t){return Xa(e[t])}))}function Sr(e,t){for(var n=0,r=(t=wo(t,e)).length;null!=e&&nt}function Cr(e,t){return null!=e&&De.call(e,t)}function Ir(e,t){return null!=e&&t in _e(e)}function Nr(e,t,r){for(var i=r?Rt:jt,a=e[0].length,s=e.length,l=s,c=n(s),u=1/0,d=[];l--;){var f=e[l];l&&t&&(f=Dt(f,Qt(t))),u=bn(f.length,u),c[l]=!r&&(t||a>=120&&f.length>=120)?new Yn(l&&f):o}f=e[0];var p=-1,h=c[0];e:for(;++p=s?l:l*("desc"==n[r]?-1:1)}return e.index-t.index}(e,t,n)}))}function Wr(e,t,n){for(var r=-1,o=t.length,i={};++r-1;)s!==e&&Ke.call(s,l,1),Ke.call(e,l,1);return e}function Gr(e,t){for(var n=e?t.length:0,r=n-1;n--;){var o=t[n];if(n==r||o!==i){var i=o;bi(o)?Ke.call(e,o,1):fo(e,o)}}return e}function Yr(e,t){return e+ht(kn()*(t-e+1))}function Kr(e,t){var n="";if(!e||t<1||t>h)return n;do{t%2&&(n+=e),(t=ht(t/2))&&(e+=e)}while(t);return n}function $r(e,t){return Pi(Ci(e,t,rl),e+"")}function Xr(e){return Xn(zs(e))}function Zr(e,t){var n=zs(e);return Di(n,sr(t,0,n.length))}function Qr(e,t,n,r){if(!es(e))return e;for(var i=-1,a=(t=wo(t,e)).length,s=a-1,l=e;null!=l&&++ii?0:i+t),(r=r>i?i:r)<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var a=n(i);++o>>1,a=e[i];null!==a&&!ls(a)&&(n?a<=t:a=200){var c=t?null:$o(e);if(c)return fn(c);a=!1,o=tn,l=new Yn}else l=t?[]:s;e:for(;++r=r?e:ro(e,t,n)}var So=nt||function(e){return mt.clearTimeout(e)};function Eo(e,t){if(t)return e.slice();var n=e.length,r=We?We(n):new e.constructor(n);return e.copy(r),r}function To(e){var t=new e.constructor(e.byteLength);return new He(t).set(new He(e)),t}function _o(e,t){var n=t?To(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Co(e,t){if(e!==t){var n=e!==o,r=null===e,i=e===e,a=ls(e),s=t!==o,l=null===t,c=t===t,u=ls(t);if(!l&&!u&&!a&&e>t||a&&s&&c&&!l&&!u||r&&s&&c||!n&&c||!i)return 1;if(!r&&!a&&!u&&e1?n[i-1]:o,s=i>2?n[2]:o;for(a=e.length>3&&"function"==typeof a?(i--,a):o,s&&wi(n[0],n[1],s)&&(a=i<3?o:a,i=1),t=_e(t);++r-1?i[a?t[s]:s]:o}}function zo(e){return ri((function(t){var n=t.length,r=n,a=qn.prototype.thru;for(e&&t.reverse();r--;){var s=t[r];if("function"!=typeof s)throw new Ne(i);if(a&&!l&&"wrapper"==si(s))var l=new qn([],!0)}for(r=l?r:n;++r1&&w.reverse(),p&&ul))return!1;var u=a.get(e),d=a.get(t);if(u&&d)return u==t&&d==e;var f=-1,p=!0,h=2&n?new Yn:o;for(a.set(e,t),a.set(t,e);++f-1&&e%1==0&&e1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(le,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return Nt(v,(function(n){var r="_."+n[0];t&n[1]&&!jt(e,r)&&e.push(r)})),e.sort()}(function(e){var t=e.match(ce);return t?t[1].split(ue):[]}(r),n)))}function Ri(e){var t=0,n=0;return function(){var r=wn(),i=16-(r-n);if(n=r,i>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(o,arguments)}}function Di(e,t){var n=-1,r=e.length,i=r-1;for(t=t===o?r:t;++n1?e[t-1]:o;return n="function"==typeof n?(e.pop(),n):o,ia(e,n)}));function fa(e){var t=zn(e);return t.__chain__=!0,t}function pa(e,t){return t(e)}var ha=ri((function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return ar(t,e)};return!(t>1||this.__actions__.length)&&r instanceof Hn&&bi(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:pa,args:[i],thisArg:o}),new qn(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(o),e}))):this.thru(i)}));var ma=Po((function(e,t,n){De.call(e,n)?++e[n]:ir(e,n,1)}));var ga=Bo(qi),va=Bo(Hi);function ya(e,t){return(Ha(e)?Nt:fr)(e,ci(t,3))}function ba(e,t){return(Ha(e)?Ot:pr)(e,ci(t,3))}var wa=Po((function(e,t,n){De.call(e,n)?e[n].push(t):ir(e,n,[t])}));var xa=$r((function(e,t,r){var o=-1,i="function"==typeof t,a=Ja(e)?n(e.length):[];return fr(e,(function(e){a[++o]=i?Ct(t,e,r):Or(e,t,r)})),a})),ka=Po((function(e,t,n){ir(e,n,t)}));function Sa(e,t){return(Ha(e)?Dt:Br)(e,ci(t,3))}var Ea=Po((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var Ta=$r((function(e,t){if(null==e)return[];var n=t.length;return n>1&&wi(e,t[0],t[1])?t=[]:n>2&&wi(t[0],t[1],t[2])&&(t=[t[0]]),Hr(e,vr(t,1),[])})),_a=ot||function(){return mt.Date.now()};function Ca(e,t,n){return t=n?o:t,t=e&&null==t?e.length:t,Zo(e,d,o,o,o,o,t)}function Ia(e,t){var n;if("function"!=typeof t)throw new Ne(i);return e=hs(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=o),n}}var Na=$r((function(e,t,n){var r=1;if(n.length){var o=dn(n,li(Na));r|=c}return Zo(e,r,t,n,o)})),Oa=$r((function(e,t,n){var r=3;if(n.length){var o=dn(n,li(Oa));r|=c}return Zo(t,r,e,n,o)}));function Aa(e,t,n){var r,a,s,l,c,u,d=0,f=!1,p=!1,h=!0;if("function"!=typeof e)throw new Ne(i);function m(t){var n=r,i=a;return r=a=o,d=t,l=e.apply(i,n)}function g(e){var n=e-u;return u===o||n>=t||n<0||p&&e-d>=s}function v(){var e=_a();if(g(e))return y(e);c=Ai(v,function(e){var n=t-(e-u);return p?bn(n,s-(e-d)):n}(e))}function y(e){return c=o,h&&r?m(e):(r=a=o,l)}function b(){var e=_a(),n=g(e);if(r=arguments,a=this,u=e,n){if(c===o)return function(e){return d=e,c=Ai(v,t),f?m(e):l}(u);if(p)return So(c),c=Ai(v,t),m(u)}return c===o&&(c=Ai(v,t)),l}return t=gs(t)||0,es(n)&&(f=!!n.leading,s=(p="maxWait"in n)?Yt(gs(n.maxWait)||0,t):s,h="trailing"in n?!!n.trailing:h),b.cancel=function(){c!==o&&So(c),d=0,r=u=a=c=o},b.flush=function(){return c===o?l:y(_a())},b}var Pa=$r((function(e,t){return ur(e,1,t)})),ja=$r((function(e,t,n){return ur(e,gs(t)||0,n)}));function Ra(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new Ne(i);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(Ra.Cache||Gn),n}function Da(e){if("function"!=typeof e)throw new Ne(i);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Ra.Cache=Gn;var La=xo((function(e,t){var n=(t=1==t.length&&Ha(t[0])?Dt(t[0],Qt(ci())):Dt(vr(t,1),Qt(ci()))).length;return $r((function(r){for(var o=-1,i=bn(r.length,n);++o=t})),qa=Ar(function(){return arguments}())?Ar:function(e){return ts(e)&&De.call(e,"callee")&&!Ye.call(e,"callee")},Ha=n.isArray,Wa=xt?Qt(xt):function(e){return ts(e)&&Tr(e)==R};function Ja(e){return null!=e&&Qa(e.length)&&!Xa(e)}function Ga(e){return ts(e)&&Ja(e)}var Ya=vt||gl,Ka=kt?Qt(kt):function(e){return ts(e)&&Tr(e)==x};function $a(e){if(!ts(e))return!1;var t=Tr(e);return t==k||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!os(e)}function Xa(e){if(!es(e))return!1;var t=Tr(e);return t==S||t==E||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Za(e){return"number"==typeof e&&e==hs(e)}function Qa(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=h}function es(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function ts(e){return null!=e&&"object"==typeof e}var ns=St?Qt(St):function(e){return ts(e)&&mi(e)==T};function rs(e){return"number"==typeof e||ts(e)&&Tr(e)==_}function os(e){if(!ts(e)||Tr(e)!=C)return!1;var t=Je(e);if(null===t)return!0;var n=De.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Re.call(n)==Be}var is=Et?Qt(Et):function(e){return ts(e)&&Tr(e)==N};var as=Tt?Qt(Tt):function(e){return ts(e)&&mi(e)==O};function ss(e){return"string"==typeof e||!Ha(e)&&ts(e)&&Tr(e)==A}function ls(e){return"symbol"==typeof e||ts(e)&&Tr(e)==P}var cs=_t?Qt(_t):function(e){return ts(e)&&Qa(e.length)&&!!lt[Tr(e)]};var us=Go(Mr),ds=Go((function(e,t){return e<=t}));function fs(e){if(!e)return[];if(Ja(e))return ss(e)?mn(e):Oo(e);if(Xe&&e[Xe])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Xe]());var t=mi(e);return(t==T?cn:t==O?fn:zs)(e)}function ps(e){return e?(e=gs(e))===p||e===-1/0?17976931348623157e292*(e<0?-1:1):e===e?e:0:0===e?e:0}function hs(e){var t=ps(e),n=t%1;return t===t?n?t-n:t:0}function ms(e){return e?sr(hs(e),0,g):0}function gs(e){if("number"==typeof e)return e;if(ls(e))return m;if(es(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=es(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Zt(e);var n=ve.test(e);return n||be.test(e)?ft(e.slice(2),n?2:8):ge.test(e)?m:+e}function vs(e){return Ao(e,Ps(e))}function ys(e){return null==e?"":co(e)}var bs=jo((function(e,t){if(Ei(t)||Ja(t))Ao(t,As(t),e);else for(var n in t)De.call(t,n)&&tr(e,n,t[n])})),ws=jo((function(e,t){Ao(t,Ps(t),e)})),xs=jo((function(e,t,n,r){Ao(t,Ps(t),e,r)})),ks=jo((function(e,t,n,r){Ao(t,As(t),e,r)})),Ss=ri(ar);var Es=$r((function(e,t){e=_e(e);var n=-1,r=t.length,i=r>2?t[2]:o;for(i&&wi(t[0],t[1],i)&&(r=1);++n1),t})),Ao(e,ii(e),n),r&&(n=lr(n,7,ti));for(var o=t.length;o--;)fo(n,t[o]);return n}));var Ls=ri((function(e,t){return null==e?{}:function(e,t){return Wr(e,t,(function(t,n){return Cs(e,n)}))}(e,t)}));function Fs(e,t){if(null==e)return{};var n=Dt(ii(e),(function(e){return[e]}));return t=ci(t),Wr(e,n,(function(e,n){return t(e,n[0])}))}var Ms=Xo(As),Bs=Xo(Ps);function zs(e){return null==e?[]:en(e,As(e))}var Us=Fo((function(e,t,n){return t=t.toLowerCase(),e+(n?Vs(t):t)}));function Vs(e){return $s(ys(e).toLowerCase())}function qs(e){return(e=ys(e))&&e.replace(xe,on).replace(tt,"")}var Hs=Fo((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),Ws=Fo((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Js=Lo("toLowerCase");var Gs=Fo((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var Ys=Fo((function(e,t,n){return e+(n?" ":"")+$s(t)}));var Ks=Fo((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),$s=Lo("toUpperCase");function Xs(e,t,n){return e=ys(e),(t=n?o:t)===o?function(e){return it.test(e)}(e)?function(e){return e.match(rt)||[]}(e):function(e){return e.match(de)||[]}(e):e.match(t)||[]}var Zs=$r((function(e,t){try{return Ct(e,o,t)}catch(n){return $a(n)?n:new se(n)}})),Qs=ri((function(e,t){return Nt(t,(function(t){t=Fi(t),ir(e,t,Na(e[t],e))})),e}));function el(e){return function(){return e}}var tl=zo(),nl=zo(!0);function rl(e){return e}function ol(e){return Dr("function"==typeof e?e:lr(e,1))}var il=$r((function(e,t){return function(n){return Or(n,e,t)}})),al=$r((function(e,t){return function(n){return Or(e,n,t)}}));function sl(e,t,n){var r=As(t),o=kr(t,r);null!=n||es(t)&&(o.length||!r.length)||(n=t,t=e,e=this,o=kr(t,As(t)));var i=!(es(n)&&"chain"in n)||!!n.chain,a=Xa(e);return Nt(o,(function(n){var r=t[n];e[n]=r,a&&(e.prototype[n]=function(){var t=this.__chain__;if(i||t){var n=e(this.__wrapped__);return(n.__actions__=Oo(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Lt([this.value()],arguments))})})),e}function ll(){}var cl=Ho(Dt),ul=Ho(At),dl=Ho(Bt);function fl(e){return xi(e)?Gt(Fi(e)):function(e){return function(t){return Sr(t,e)}}(e)}var pl=Jo(),hl=Jo(!0);function ml(){return[]}function gl(){return!1}var vl=qo((function(e,t){return e+t}),0),yl=Ko("ceil"),bl=qo((function(e,t){return e/t}),1),wl=Ko("floor");var xl=qo((function(e,t){return e*t}),1),kl=Ko("round"),Sl=qo((function(e,t){return e-t}),0);return zn.after=function(e,t){if("function"!=typeof t)throw new Ne(i);return e=hs(e),function(){if(--e<1)return t.apply(this,arguments)}},zn.ary=Ca,zn.assign=bs,zn.assignIn=ws,zn.assignInWith=xs,zn.assignWith=ks,zn.at=Ss,zn.before=Ia,zn.bind=Na,zn.bindAll=Qs,zn.bindKey=Oa,zn.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Ha(e)?e:[e]},zn.chain=fa,zn.chunk=function(e,t,r){t=(r?wi(e,t,r):t===o)?1:Yt(hs(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var a=0,s=0,l=n(pt(i/t));ai?0:i+n),(r=r===o||r>i?i:hs(r))<0&&(r+=i),r=n>r?0:ms(r);n>>0)?(e=ys(e))&&("string"==typeof t||null!=t&&!is(t))&&!(t=co(t))&&ln(e)?ko(mn(e),0,n):e.split(t,n):[]},zn.spread=function(e,t){if("function"!=typeof e)throw new Ne(i);return t=null==t?0:Yt(hs(t),0),$r((function(n){var r=n[t],o=ko(n,0,t);return r&&Lt(o,r),Ct(e,this,o)}))},zn.tail=function(e){var t=null==e?0:e.length;return t?ro(e,1,t):[]},zn.take=function(e,t,n){return e&&e.length?ro(e,0,(t=n||t===o?1:hs(t))<0?0:t):[]},zn.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?ro(e,(t=r-(t=n||t===o?1:hs(t)))<0?0:t,r):[]},zn.takeRightWhile=function(e,t){return e&&e.length?ho(e,ci(t,3),!1,!0):[]},zn.takeWhile=function(e,t){return e&&e.length?ho(e,ci(t,3)):[]},zn.tap=function(e,t){return t(e),e},zn.throttle=function(e,t,n){var r=!0,o=!0;if("function"!=typeof e)throw new Ne(i);return es(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),Aa(e,t,{leading:r,maxWait:t,trailing:o})},zn.thru=pa,zn.toArray=fs,zn.toPairs=Ms,zn.toPairsIn=Bs,zn.toPath=function(e){return Ha(e)?Dt(e,Fi):ls(e)?[e]:Oo(Li(ys(e)))},zn.toPlainObject=vs,zn.transform=function(e,t,n){var r=Ha(e),o=r||Ya(e)||cs(e);if(t=ci(t,4),null==n){var i=e&&e.constructor;n=o?r?new i:[]:es(e)&&Xa(i)?Un(Je(e)):{}}return(o?Nt:wr)(e,(function(e,r,o){return t(n,e,r,o)})),n},zn.unary=function(e){return Ca(e,1)},zn.union=ta,zn.unionBy=na,zn.unionWith=ra,zn.uniq=function(e){return e&&e.length?uo(e):[]},zn.uniqBy=function(e,t){return e&&e.length?uo(e,ci(t,2)):[]},zn.uniqWith=function(e,t){return t="function"==typeof t?t:o,e&&e.length?uo(e,o,t):[]},zn.unset=function(e,t){return null==e||fo(e,t)},zn.unzip=oa,zn.unzipWith=ia,zn.update=function(e,t,n){return null==e?e:po(e,t,bo(n))},zn.updateWith=function(e,t,n,r){return r="function"==typeof r?r:o,null==e?e:po(e,t,bo(n),r)},zn.values=zs,zn.valuesIn=function(e){return null==e?[]:en(e,Ps(e))},zn.without=aa,zn.words=Xs,zn.wrap=function(e,t){return Fa(bo(t),e)},zn.xor=sa,zn.xorBy=la,zn.xorWith=ca,zn.zip=ua,zn.zipObject=function(e,t){return vo(e||[],t||[],tr)},zn.zipObjectDeep=function(e,t){return vo(e||[],t||[],Qr)},zn.zipWith=da,zn.entries=Ms,zn.entriesIn=Bs,zn.extend=ws,zn.extendWith=xs,sl(zn,zn),zn.add=vl,zn.attempt=Zs,zn.camelCase=Us,zn.capitalize=Vs,zn.ceil=yl,zn.clamp=function(e,t,n){return n===o&&(n=t,t=o),n!==o&&(n=(n=gs(n))===n?n:0),t!==o&&(t=(t=gs(t))===t?t:0),sr(gs(e),t,n)},zn.clone=function(e){return lr(e,4)},zn.cloneDeep=function(e){return lr(e,5)},zn.cloneDeepWith=function(e,t){return lr(e,5,t="function"==typeof t?t:o)},zn.cloneWith=function(e,t){return lr(e,4,t="function"==typeof t?t:o)},zn.conformsTo=function(e,t){return null==t||cr(e,t,As(t))},zn.deburr=qs,zn.defaultTo=function(e,t){return null==e||e!==e?t:e},zn.divide=bl,zn.endsWith=function(e,t,n){e=ys(e),t=co(t);var r=e.length,i=n=n===o?r:sr(hs(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},zn.eq=za,zn.escape=function(e){return(e=ys(e))&&X.test(e)?e.replace(K,an):e},zn.escapeRegExp=function(e){return(e=ys(e))&&ie.test(e)?e.replace(oe,"\\$&"):e},zn.every=function(e,t,n){var r=Ha(e)?At:hr;return n&&wi(e,t,n)&&(t=o),r(e,ci(t,3))},zn.find=ga,zn.findIndex=qi,zn.findKey=function(e,t){return Ut(e,ci(t,3),wr)},zn.findLast=va,zn.findLastIndex=Hi,zn.findLastKey=function(e,t){return Ut(e,ci(t,3),xr)},zn.floor=wl,zn.forEach=ya,zn.forEachRight=ba,zn.forIn=function(e,t){return null==e?e:yr(e,ci(t,3),Ps)},zn.forInRight=function(e,t){return null==e?e:br(e,ci(t,3),Ps)},zn.forOwn=function(e,t){return e&&wr(e,ci(t,3))},zn.forOwnRight=function(e,t){return e&&xr(e,ci(t,3))},zn.get=_s,zn.gt=Ua,zn.gte=Va,zn.has=function(e,t){return null!=e&&gi(e,t,Cr)},zn.hasIn=Cs,zn.head=Ji,zn.identity=rl,zn.includes=function(e,t,n,r){e=Ja(e)?e:zs(e),n=n&&!r?hs(n):0;var o=e.length;return n<0&&(n=Yt(o+n,0)),ss(e)?n<=o&&e.indexOf(t,n)>-1:!!o&&qt(e,t,n)>-1},zn.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var o=null==n?0:hs(n);return o<0&&(o=Yt(r+o,0)),qt(e,t,o)},zn.inRange=function(e,t,n){return t=ps(t),n===o?(n=t,t=0):n=ps(n),function(e,t,n){return e>=bn(t,n)&&e=-9007199254740991&&e<=h},zn.isSet=as,zn.isString=ss,zn.isSymbol=ls,zn.isTypedArray=cs,zn.isUndefined=function(e){return e===o},zn.isWeakMap=function(e){return ts(e)&&mi(e)==j},zn.isWeakSet=function(e){return ts(e)&&"[object WeakSet]"==Tr(e)},zn.join=function(e,t){return null==e?"":wt.call(e,t)},zn.kebabCase=Hs,zn.last=$i,zn.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return n!==o&&(i=(i=hs(n))<0?Yt(r+i,0):bn(i,r-1)),t===t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):Vt(e,Wt,i,!0)},zn.lowerCase=Ws,zn.lowerFirst=Js,zn.lt=us,zn.lte=ds,zn.max=function(e){return e&&e.length?mr(e,rl,_r):o},zn.maxBy=function(e,t){return e&&e.length?mr(e,ci(t,2),_r):o},zn.mean=function(e){return Jt(e,rl)},zn.meanBy=function(e,t){return Jt(e,ci(t,2))},zn.min=function(e){return e&&e.length?mr(e,rl,Mr):o},zn.minBy=function(e,t){return e&&e.length?mr(e,ci(t,2),Mr):o},zn.stubArray=ml,zn.stubFalse=gl,zn.stubObject=function(){return{}},zn.stubString=function(){return""},zn.stubTrue=function(){return!0},zn.multiply=xl,zn.nth=function(e,t){return e&&e.length?qr(e,hs(t)):o},zn.noConflict=function(){return mt._===this&&(mt._=ze),this},zn.noop=ll,zn.now=_a,zn.pad=function(e,t,n){e=ys(e);var r=(t=hs(t))?hn(e):0;if(!t||r>=t)return e;var o=(t-r)/2;return Wo(ht(o),n)+e+Wo(pt(o),n)},zn.padEnd=function(e,t,n){e=ys(e);var r=(t=hs(t))?hn(e):0;return t&&rt){var r=e;e=t,t=r}if(n||e%1||t%1){var i=kn();return bn(e+i*(t-e+dt("1e-"+((i+"").length-1))),t)}return Yr(e,t)},zn.reduce=function(e,t,n){var r=Ha(e)?Ft:Kt,o=arguments.length<3;return r(e,ci(t,4),n,o,fr)},zn.reduceRight=function(e,t,n){var r=Ha(e)?Mt:Kt,o=arguments.length<3;return r(e,ci(t,4),n,o,pr)},zn.repeat=function(e,t,n){return t=(n?wi(e,t,n):t===o)?1:hs(t),Kr(ys(e),t)},zn.replace=function(){var e=arguments,t=ys(e[0]);return e.length<3?t:t.replace(e[1],e[2])},zn.result=function(e,t,n){var r=-1,i=(t=wo(t,e)).length;for(i||(i=1,e=o);++rh)return[];var n=g,r=bn(e,g);t=ci(t),e-=g;for(var o=Xt(r,t);++n=a)return e;var l=n-hn(r);if(l<1)return r;var c=s?ko(s,0,l).join(""):e.slice(0,l);if(i===o)return c+r;if(s&&(l+=c.length-l),is(i)){if(e.slice(l).search(i)){var u,d=c;for(i.global||(i=Ce(i.source,ys(me.exec(i))+"g")),i.lastIndex=0;u=i.exec(d);)var f=u.index;c=c.slice(0,f===o?l:f)}}else if(e.indexOf(co(i),l)!=l){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+r},zn.unescape=function(e){return(e=ys(e))&&$.test(e)?e.replace(Y,vn):e},zn.uniqueId=function(e){var t=++Le;return ys(e)+t},zn.upperCase=Ks,zn.upperFirst=$s,zn.each=ya,zn.eachRight=ba,zn.first=Ji,sl(zn,function(){var e={};return wr(zn,(function(t,n){De.call(zn.prototype,n)||(e[n]=t)})),e}(),{chain:!1}),zn.VERSION="4.17.21",Nt(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){zn[e].placeholder=zn})),Nt(["drop","take"],(function(e,t){Hn.prototype[e]=function(n){n=n===o?1:Yt(hs(n),0);var r=this.__filtered__&&!t?new Hn(this):this.clone();return r.__filtered__?r.__takeCount__=bn(n,r.__takeCount__):r.__views__.push({size:bn(n,g),type:e+(r.__dir__<0?"Right":"")}),r},Hn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),Nt(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;Hn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:ci(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),Nt(["head","last"],(function(e,t){var n="take"+(t?"Right":"");Hn.prototype[e]=function(){return this[n](1).value()[0]}})),Nt(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");Hn.prototype[e]=function(){return this.__filtered__?new Hn(this):this[n](1)}})),Hn.prototype.compact=function(){return this.filter(rl)},Hn.prototype.find=function(e){return this.filter(e).head()},Hn.prototype.findLast=function(e){return this.reverse().find(e)},Hn.prototype.invokeMap=$r((function(e,t){return"function"==typeof e?new Hn(this):this.map((function(n){return Or(n,e,t)}))})),Hn.prototype.reject=function(e){return this.filter(Da(ci(e)))},Hn.prototype.slice=function(e,t){e=hs(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Hn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==o&&(n=(t=hs(t))<0?n.dropRight(-t):n.take(t-e)),n)},Hn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Hn.prototype.toArray=function(){return this.take(g)},wr(Hn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=zn[r?"take"+("last"==t?"Right":""):t],a=r||/^find/.test(t);i&&(zn.prototype[t]=function(){var t=this.__wrapped__,s=r?[1]:arguments,l=t instanceof Hn,c=s[0],u=l||Ha(t),d=function(e){var t=i.apply(zn,Lt([e],s));return r&&f?t[0]:t};u&&n&&"function"==typeof c&&1!=c.length&&(l=u=!1);var f=this.__chain__,p=!!this.__actions__.length,h=a&&!f,m=l&&!p;if(!a&&u){t=m?t:new Hn(this);var g=e.apply(t,s);return g.__actions__.push({func:pa,args:[d],thisArg:o}),new qn(g,f)}return h&&m?e.apply(this,s):(g=this.thru(d),h?r?g.value()[0]:g.value():g)})})),Nt(["pop","push","shift","sort","splice","unshift"],(function(e){var t=Oe[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);zn.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var o=this.value();return t.apply(Ha(o)?o:[],e)}return this[n]((function(n){return t.apply(Ha(n)?n:[],e)}))}})),wr(Hn.prototype,(function(e,t){var n=zn[t];if(n){var r=n.name+"";De.call(An,r)||(An[r]=[]),An[r].push({name:t,func:n})}})),An[Uo(o,2).name]=[{name:"wrapper",func:o}],Hn.prototype.clone=function(){var e=new Hn(this.__wrapped__);return e.__actions__=Oo(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Oo(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Oo(this.__views__),e},Hn.prototype.reverse=function(){if(this.__filtered__){var e=new Hn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Hn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Ha(e),r=t<0,o=n?e.length:0,i=function(e,t,n){var r=-1,o=n.length;for(;++r=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},zn.prototype.plant=function(e){for(var t,n=this;n instanceof Vn;){var r=Bi(n);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},zn.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Hn){var t=e;return this.__actions__.length&&(t=new Hn(this)),(t=t.reverse()).__actions__.push({func:pa,args:[ea],thisArg:o}),new qn(t,this.__chain__)}return this.thru(ea)},zn.prototype.toJSON=zn.prototype.valueOf=zn.prototype.value=function(){return mo(this.__wrapped__,this.__actions__)},zn.prototype.first=zn.prototype.head,Xe&&(zn.prototype[Xe]=function(){return this}),zn}();mt._=yn,(r=function(){return yn}.call(t,n,t,e))===o||(e.exports=r)}.call(this)},2610:(e,t,n)=>{"use strict";var r=n(969),o=n(8019);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n